162
правки
Изменения
Нет описания правки
[[:Рекуррентные_нейронные_сети|Рекуррентные нейронные сети]] используются при обработке данных, для которых важна их последовательность. В классическом случае применения [[:Рекуррентные_нейронные_сети|РНН]] результатом является только последнее скрытое состояние <math>h_m</math>, где <math>m</math> - длина последовательности входных данных. Использование механизма внимания позволяет использовать информацию полученную не только из последнего скрытого состояниния, но и любого скрытого состояния <math>h_t</math> для любого <math>t</math>.
Обычно слой использующийся для механизма внимания представляет собой обычную, чаще всего однослойную, нейронную сеть на вход которой подаются <math>h_t, t = 1 \ \ldots m</math>, а также вектор <math>d</math> в котором содержится некий контекст зависящий от конкретно задачи (пример <math>d</math> для задачи машинного перевода использующего ''Seq2Seq'' арихитектуру есть ниже).
Выходом данного слоя будет являтся вектор <math>s</math> (англ. ''score'') - оценки на основании которых на скрытое состояние <math>h_i</math> будет "обращено внимание".
Далее для нормализации значений <math>s</math> используется <math>softmax</math>. Тогда <math>e = softmax(s)</math>
<math>softmax</math> сдесь здесь используется благадоря благодоря своим свойствам:
*<math>\forall s:\ \sum_{i=1}^n softmax(s)_i = 1, </math>
*<math>\forall s,\ i: \ softmax(s)_i >= 0 </math>
Далее считается <math>СV</math> (англ. ''context vector'') <math>СV = \sum_{i=1}^m e_i h_i</math>
== Пример использования для архитектуры Seq2Seq ==
Из-за интуитивной понятности механизма внимания для проблемы машинного перевода, а также поскольку в оригинальной статье рассматривается механизм внимания применительно именно к Seq2Seq сетям. Пример добавления механизма внимания в Seq2Seq сеть поможет лучше понять его предназначение.
Несмотряна то, что нейронные сети рассматриваются как "черный ящик" и интерпретировать их внутренности в понятных человеку терминаз терминах часто невозможно, все же механизм внимания интуитивно понятный людям смог улучшить результаты машинного перевода для алгоритма используемого в статье.
=== Базовая архитектура Seq2Seq ===
''Encoder'' {{---}} принимает предложение на языке ''A'' и сжимает его в вектор скрытого состояния.
''Decoder'' {{---}} выдает слово на языке ''B'', принимает последнее скрытое состояние из энкодера и предыдущее предыдущее предсказаное слово.
Рассмотрим пример работы Seq2Seq сети:
[[File:Seq2SeqBasic.png|450px|thumb|left|Пример работы базовой Seq2Seq сети]]
<math>x_i</math> {{---}} слова в предложении на языке ''A''.
<math>h_i</math> {{---}} скрытое состояние энкодера.
''Зеленые блоки'' {{---}} блоки энкодера получающие на вход <math>x_i</math> и передающие скрытое состояние <math>h_i</math> на следущую следующую итерацию.
<math>d_i</math> {{---}} скрытое состояние декодера.
<math>y_i</math> {{---}} слова в предложении на языке ''B''.
''Фиолетовые блоки'' {{---}} блоки декодера получающие на вход <math>y_{i-1}</math> или специальный токен '''start''' в случае первой итерации и возвращаюшие <math>y_i</math> {{---}} слова в предложении на языке ''B'' и передающие . Передают <math>d_i</math> {{---}} скрытое состояние декодера на следующую итерацию. Перевод считается завершенным при <math>y_i</math> , равном специальному токену '''end'''.
=== Применение механизма внимания для Seq2Seq ===
При добавлении механизма в данную архитектуру между [[:Рекуррентные_нейронные_сети|РНН]] ''Encoder'' и ''Decoder'' слоя механизма внимания получтится получится следуюшая схема:
[[File:Seq2SeqAttention.png|450px|thumb|left|Пример работы Seq2Seq сети с механизмом внимания]]
Здесь <math>x_i, h_i, d_i, y_i</math> имееют те же назначения, что и в варианте без механизма внимания.
''Фиолетовые блоки'' - по сравнению с обычной ''Seq2Seq'' сетью меняются входные данные. Теперь на итерации <math>i</math> на вход подается не <math>y_{i-1}</math>, а конкатенация <math>y_{i-1}</math> и <math>CV_i</math>.
Таким образоми образом при помощи механизма внимания достигается "фокусирование" декодера на определенных скрытых состояниях. В случаях машинного перевода эта возможность помогает декодеру предсказывать на какие скрытые сосояния при исходных определенных словах на языке ''A'' необходимо обратить больше внимания при переводе данного слова на язык ''B''.