162
правки
Изменения
Нет описания правки
'''Механизм внимания в рекуррентных нейронных сетях''' (англ. ''attention mechanism'', ''attention model'') {{---}} дополнительный слой используемый в [[:Рекуррентные_нейронные_сети|рекуррентных нейронных сетях ]] (сокращенно ''RNN'')]] для "обращения внимания" последующих слоев сети на скрытое состояние нейронной сети <math>h_t</math> в момент времени <math>t</math>.
Изначально механизм внимания был представлен в [https://arxiv.org/abs/1409.0473| статье ] описывыющей данную технику] и ее [[:Механизм_внимания#Пример использования для архитектуры Seq2SeqSeq2seq|применение ]] именно в ''Seq2SeqSeq2seq'' <ref>[https://en.wikipedia.org/wiki/Seq2seq Wiki -- Seq2seq]</ref> сетях]], и лишь позже был использован в [https://arxiv.org/abs/1502.03044| статье ] применительно к генерации описания изображений].
== Обобщенное описание ==
[[File:AttentionGeneral.png|350px|thumb|Обобщенное описание механизма внимания]]
[[:Рекуррентные_нейронные_сети|Рекуррентные нейронные сетиRNN]] используются при обработке данных, для которых важна их последовательность. В классическом случае применения [[:Рекуррентные_нейронные_сети|RNN]] результатом является только последнее скрытое состояние <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><ref>[https://ru.wikipedia.org/wiki/Softmax Wiki -- Функция softmax]</ref>. Тогда <math>e = softmax(s)</math>
<math>softmax</math> здесь используется благодоря своим свойствам:
*<math>\forall s:\colon\ \sum_{i=1}^n softmax(s)_i = 1, </math>*<math>\forall s,\ i: \colon \ softmax(s)_i >= 0 </math>
Далее считается <math>c</math> (англ. ''context vector'')
Результатом работы слоя внимания является <math>c</math> который, содержит в себе информацию обо всех скрытых состоянях <math>h_i</math> пропорционально оценке <math>e_i</math>.
== Пример использования для архитектуры ''Seq2SeqSeq2seq'' ==Пример добавления механизма внимания в ''Seq2SeqSeq2seq'' сеть поможет лучше понять его предназначение. Изначально в оригинальной статье<ref>[https://arxiv.org/abs/1409.0473 Neural Machine Translation by Jointly Learning to Align and Translate]</ref> применяется механизм внимания в контексте именно Seq2Seq Seq2seq сети.
Несмотря на то, что нейронные сети рассматриваются как "черный ящик" и интерпретировать их внутренности в понятных человеку терминах часто невозможно, все же механизм внимания интуитивно понятный людям смог улучшить результаты машинного перевода для алгоритма используемого в статье.
=== Базовая архитектура ''Seq2SeqSeq2seq'' ===[[File:Seq2SeqBasic.png|450px|thumb|Пример работы базовой ''Seq2SeqSeq2seq'' сети]]Данный пример рассматривает применение механизма внимания в задаче машинного перевода в применении к архитектуре ''Seq2SeqSeq2seq''.
''Seq2SeqSeq2seq'' состоит из двух [[:Рекуррентные_нейронные_сети|RNN]] {{---}} ''Энкодера'' и ''Декодера''.
''Энкодер'' {{---}} принимает предложение на языке ''A'' и сжимает его в вектор скрытого состояния.
Рассмотрим пример работы ''Seq2SeqSeq2seq'' сети:
<math>x_i</math> {{---}} слова в предложении на языке ''A''.
Перевод считается завершенным при <math>y_i</math>, равном специальному токену '''end'''.
=== Применение механизма внимания для ''Seq2SeqSeq2seq'' ===
При добавлении механизма в данную архитектуру между [[:Рекуррентные_нейронные_сети|RNN]] ''Энкодер'' и ''Декодер'' слоя механизма внимания получится следуюшая схема:
[[File:Seq2SeqAttentionSeq2seqAttention.png|450px|thumb|Пример работы ''Seq2SeqSeq2seq'' сети с механизмом внимания]]
Здесь <math>x_i, h_i, d_i, y_i</math> имееют те же назначения, что и в варианте без механизма внимания.
''Блоки механизма внимания (красный)'' {{---}} механизм внимания. Принимает <math>h</math> и <math>d_{i - 1}</math>, возвращает <math>c_i</math>.
''Блоки декодера (фиолетовый)'' {{---}} по сравнению с обычной ''Seq2SeqSeq2seq'' сетью меняются входные данные. Теперь на итерации <math>i</math> на вход подается не <math>y_{i-1}</math>, а конкатенация <math>y_{i-1}</math> и <math>c_i</math>.
Таким образом при помощи механизма внимания достигается "фокусирование" декодера на определенных скрытых состояниях. В случаях машинного перевода эта возможность помогает декодеру предсказывать на какие скрытые сосояния при исходных определенных словах на языке ''A'' необходимо обратить больше внимания при переводе данного слова на язык ''B''.