Изменения

Перейти к: навигация, поиск

Механизм внимания

118 байт убрано, 01:29, 22 марта 2020
Нет описания правки
'''Механизм внимания в рекуррентных нейронных сетях''' (англ. ''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''.
162
правки

Навигация