Участник:Gpevnev — различия между версиями
Gpevnev (обсуждение | вклад) |
Gpevnev (обсуждение | вклад) |
||
| Строка 5: | Строка 5: | ||
== Обобщенное описание == | == Обобщенное описание == | ||
[[File:AttentionGeneral.png|350px|thumb|Обобщенное описание механизма внимания]] | [[File:AttentionGeneral.png|350px|thumb|Обобщенное описание механизма внимания]] | ||
| − | [[:Рекуррентные_нейронные_сети|Рекуррентные нейронные сети]] используются при обработке данных, для которых важна их последовательность. В классическом случае применения [[:Рекуррентные_нейронные_сети|РНН]] как результат используется только последнее скрытое состояние <math>h_m</math>, где <math>m</math> - длинна последовательности входных данных. Использование механизма внимания позволяет использовать информацию полученную не только из последнего скрытого состояниния, но и из скрытого | + | [[:Рекуррентные_нейронные_сети|Рекуррентные нейронные сети]] используются при обработке данных, для которых важна их последовательность. В классическом случае применения [[:Рекуррентные_нейронные_сети|РНН]] как результат используется только последнее скрытое состояние <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>h_t, t = 1 \ldots m</math>, а также вектор <math>d</math> в котором содержится некий контекст зависящий от конкретно задачи (пример <math>d</math> для задачи машинного перевода использующего ''Seq2Seq'' арихитектуру есть ниже). | ||
| Строка 30: | Строка 30: | ||
| − | |||
Рассмотрим пример работы Seq2Seq сети: | Рассмотрим пример работы Seq2Seq сети: | ||
| − | + | [[File:Seq2SeqBasic.png|450px|thumb|left|Пример работы базовой Seq2Seq сети]] | |
| − | + | <math>x_i</math> {{---}} слова в предложении на языке ''A''. | |
| − | <math> | + | <math>h_i</math> {{---}} скрытое состояние энкодера. |
| − | <math> | + | ''Зеленые блоки'' {{---}} блоки энкодера получающие на вход <math>x_i</math> и передаюшие скрытое состояние <math>h_i</math> на следущую итерацию. |
| − | <math>d_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'''. | ||
| − | |||
| − | |||
| − | |||
| Строка 53: | Строка 53: | ||
=== Применение механизма внимания для Seq2Seq === | === Применение механизма внимания для Seq2Seq === | ||
При добавлении механизма в данную архитектуру между [[:Рекуррентные_нейронные_сети|РНН]] ''Encoder'' и ''Decoder'' слоя механизма внимания получтится следуюшая схема: | При добавлении механизма в данную архитектуру между [[:Рекуррентные_нейронные_сети|РНН]] ''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''. | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
==См. также== | ==См. также== | ||
| Строка 58: | Строка 83: | ||
*[[:Нейронные_сети,_перцептрон|Нейронные сети, перцептрон]] | *[[:Нейронные_сети,_перцептрон|Нейронные сети, перцептрон]] | ||
*[[:Рекуррентные_нейронные_сети|Рекуррентные нейронные сети]] | *[[:Рекуррентные_нейронные_сети|Рекуррентные нейронные сети]] | ||
| + | *[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'' | ||
| + | |||
==Примечания== | ==Примечания== | ||
Версия 17:34, 21 марта 2020
Механизм внимания в рекуррентных нейронных сетях (англ. attention mechanism, attention model) — дополнительный слой используемый в рекуррентных нейронных сетях для "обращения внимания" последующих слоев сети на скрытое состояние нейронной сети в момент времени .
Изначально механизм внимания был представлен в статье Machine Translation by Jointly Learning to Align and Translate и предполагал применение именно в Seq2Seq сетях, и лишь позже был использован применительно к изображениям Attend and Tell: Neural Image Caption Generation with Visual Attention.
Содержание
Обобщенное описание
Рекуррентные нейронные сети используются при обработке данных, для которых важна их последовательность. В классическом случае применения РНН как результат используется только последнее скрытое состояние , где - длинна последовательности входных данных. Использование механизма внимания позволяет использовать информацию полученную не только из последнего скрытого состояниния, но и из скрытого состояния для любого .
Обычно слой использующийся для механизма внимания представляет собой обычную, чаще всего однослойную нейронную сеть на вход которой подаются , а также вектор в котором содержится некий контекст зависящий от конкретно задачи (пример для задачи машинного перевода использующего Seq2Seq арихитектуру есть ниже).
Выходом данного слоя будет являтся вектор - оценки на основании которых на скрытое состояние будет "обращено внимание".
Далее для нормализации значений используется . Тогда
Далее считается (англ. context vector)
Резултатом работы слоя внимания является который содержит в себе информацию обо всех скрытых состоянях пропорционально оценке .
Пример использования для архитектуры Seq2Seq
Из-за интуитивной понятности механизма внимания для проблемы машинного перевода, а также поскольку в оригинальной статье рассматривается механизм внимания применительно именно к Seq2Seq сетям. Пример добавления механизма внимания в Seq2Seq сеть поможет лучше понять его предназначение.
Базовая архитектура Seq2Seq
Данный пример рассматривает применение механизма внимания в задаче машинного перевода в применении к архитектуре Seq2Seq.
Seq2Seq состоит из двух РНН - Encoder и Decoder.
Encoder — принимает предложение на языке A и сжимает его в вектор скрытого состояния.
Decoder — выдает слово на языке B, принимает последнее скрытое состояние из энкодера и предыдущее предыдущее предсказаное слово.
Рассмотрим пример работы Seq2Seq сети:
— слова в предложении на языке A.
— скрытое состояние энкодера.
Зеленые блоки — блоки энкодера получающие на вход и передаюшие скрытое состояние на следущую итерацию.
— скрытое состояние декодера.
— слова в предложении на языке B.
Фиолетовые блоки — блоки декодера получающие на вход или специальный токен start в случае первой итерации и возвращаюшие — слова в предложении на языке B и передающие — скрытое состояние декодера на следующую итерацию. Перевод считается завершенным при равном специальному токену end.
Применение механизма внимания для Seq2Seq
При добавлении механизма в данную архитектуру между РНН Encoder и Decoder слоя механизма внимания получтится следуюшая схема:
Здесь имееют те же назначения, что и в варианте без механизма внимания.
Желтый блок — аггрегирует в себе все вектора и возвращает всю последовательность векторов .
— вектор контекста на итерации .
Красные блоки - механизм внимания. Принимает и , возвращает .
Фиолетовые блоки - по сравнению с обычной Seq2Seq сетью меняются входные данные. Теперь на итерации на вход подается не , а конкатенация и .
Таким образоми при помощи механизма внимания достигается "фокусирование" декодера на определенных скрытых состояниях. В случаях машинного перевода эта возможность помогает декодеру предсказывать на какие скрытые сосояния при исходных определенных словах на языке A необходимо обратить больше внимания при переводе данного слова на язык B.
См. также
- Сверточные нейронные сети
- Нейронные сети, перцептрон
- Рекуррентные нейронные сети
- arXiv:1409.0473 — Neural Machine Translation by Jointly Learning to Align and Translate. Dzmitry Bahdanau, Kyunghyun Cho, Yoshua Bengio
- 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
- deeplearning.ai on Coursera — лекция Andrew Ng о механизме внимания в NLP
- Статья на TowardsDataScience — статья с подробно разборанными примерами и кодом на Python и TensorFlow