162
правки
Изменения
Нет описания правки
== Обобщенное описание ==
[[File:AttentionGeneral.png|350px|thumb|Обобщенное описание механизма внимания]]
[[:Рекуррентные_нейронные_сети|Рекуррентные нейронные сети]] используются при обработке данных, для которых важна их последовательность. В классическом случае применения [[:Рекуррентные_нейронные_сети|РНН]] как результат используется только последнее скрытое состояние <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'' арихитектуру есть ниже).
Рассмотрим пример работы Seq2Seq сети:
<math>x_ih_i</math> {{---}} слова в предложении на языке ''A'' скрытое состояние энкодера.
''Зеленые блоки'' {{---}} блоки энкодера получающие на вход <math>h_ix_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> имееют те же назначения, что и в варианте без механизма внимания.
''Желтый блок'' {{---}} аггрегирует в себе все вектора <math>h_i</math> и возвращает всю последовательность векторов <math>h = [h_1, h_2, h_3, h_4]</math>.
<math>СV_i</math> {{---}} вектор контекста на итерации <math>i</math>.
''Красные блоки'' - механизм внимания. Принимает <math>h</math> и <math>d_{i - 1}</math>, возвращает <math>СV_i</math>.
''Фиолетовые блоки'' - по сравнению с обычной ''Seq2Seq'' сетью меняются входные данные. Теперь на итерации <math>i</math> на вход подается не <math>y_{i-1}</math>, а конкатенация <math>y_{i-1}</math> и <math>CV_i</math>.
Таким образоми при помощи механизма внимания достигается "фокусирование" декодера на определенных скрытых состояниях. В случаях машинного перевода эта возможность помогает декодеру предсказывать на какие скрытые сосояния при исходных определенных словах на языке ''A'' необходимо обратить больше внимания при переводе данного слова на язык ''B''.
==См. также==
*[[:Нейронные_сети,_перцептрон|Нейронные сети, перцептрон]]
*[[:Рекуррентные_нейронные_сети|Рекуррентные нейронные сети]]
*[https://arxiv.org/abs/1409.0473 arXiv:1409.0473] {{---}} Neural Machine Translation by Jointly Learning to Align and Translate. Dzmitry Bahdanau, Kyunghyun Cho, Yoshua Bengio
*[https://arxiv.org/abs/1502.03044 arXiv:1502.03044] {{---}} Show, Attend and Tell: Neural Image Caption Generation with Visual Attention. Kelvin Xu, Jimmy Ba, Ryan Kiros, Kyunghyun Cho, Aaron Courville, Ruslan Salakhutdinov, Richard Zemel, Yoshua Bengio
*[https://www.coursera.org/lecture/nlp-sequence-models/attention-model-lSwVa deeplearning.ai on Coursera] {{---}} лекция Andrew Ng о механизме внимания в NLP
*[https://towardsdatascience.com/intuitive-understanding-of-attention-mechanism-in-deep-learning-6c9482aecf4f Статья на TowardsDataScience] {{---}} статья с подробно разборанными примерами и кодом на ''Python'' и ''TensorFlow''
==Примечания==