Участник:Gpevnev — различия между версиями
Gpevnev (обсуждение | вклад) |
|||
(не показано 8 промежуточных версий этого же участника) | |||
Строка 1: | Строка 1: | ||
'''Механизм внимания в рекуррентных нейронных сетях''' (англ. ''attention mechanism'', ''attention model'') {{---}} дополнительный слой используемый в [[:Рекуррентные_нейронные_сети|рекуррентных нейронных сетях]] для "обращения внимания" последующих слоев сети на скрытое состояние нейронной сети <math>h_t</math> в момент времени <math>t</math>. | '''Механизм внимания в рекуррентных нейронных сетях''' (англ. ''attention mechanism'', ''attention model'') {{---}} дополнительный слой используемый в [[:Рекуррентные_нейронные_сети|рекуррентных нейронных сетях]] для "обращения внимания" последующих слоев сети на скрытое состояние нейронной сети <math>h_t</math> в момент времени <math>t</math>. | ||
+ | |||
+ | Изначально механизм внимания был представлен в статье [https://arxiv.org/abs/1409.0473|Neural Machine Translation by Jointly Learning to Align and Translate] и предполагал применение именно в ''Seq2Seq'' сетях, и лишь позже был использован применительно к изображениям [https://arxiv.org/abs/1502.03044|Show, Attend and Tell: Neural Image Caption Generation with Visual Attention]. | ||
== Обобщенное описание == | == Обобщенное описание == | ||
− | [[:Рекуррентные_нейронные_сети|Рекуррентные нейронные сети]] используются при обработке данных, для которых важна их последовательность. В классическом случае применения [[:Рекуррентные_нейронные_сети|РНН]] | + | [[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'' арихитектуру | + | Обычно слой использующийся для механизма внимания представляет собой обычную, чаще всего однослойную, нейронную сеть на вход которой подаются <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>s</math> используется <math>softmax</math>. Тогда <math>e = softmax(s)</math> | ||
− | Далее считается <math>СV</math> (англ. ''context vector'') <math>СV = \ | + | <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> | ||
− | + | Результатом работы слоя внимания является <math>CV</math> который, содержит в себе информацию обо всех скрытых состоянях <math>h_i</math> пропорционально оценке <math>e_i</math>. | |
− | == Пример использования для архитектуры Seq2Seq == | + | == Пример использования для архитектуры ''Seq2Seq'' == |
+ | Из-за интуитивной понятности механизма внимания для проблемы машинного перевода, а также поскольку в оригинальной статье рассматривается механизм внимания применительно именно к ''Seq2Seq'' сетям. Пример добавления механизма внимания в ''Seq2Seq'' сеть поможет лучше понять его предназначение. | ||
+ | |||
+ | Несмотря на то, что нейронные сети рассматриваются как "черный ящик" и интерпретировать их внутренности в понятных человеку терминах часто невозможно, все же механизм внимания интуитивно понятный людям смог улучшить результаты машинного перевода для алгоритма используемого в статье. | ||
+ | |||
+ | === Базовая архитектура ''Seq2Seq'' === | ||
+ | [[File:Seq2SeqBasic.png|450px|thumb|Пример работы базовой ''Seq2Seq'' сети]] | ||
Данный пример рассматривает применение механизма внимания в задаче машинного перевода в применении к архитектуре ''Seq2Seq''. | Данный пример рассматривает применение механизма внимания в задаче машинного перевода в применении к архитектуре ''Seq2Seq''. | ||
− | ''Seq2Seq'' состоит из двух [[:Рекуррентные_нейронные_сети|РНН]] - ''Encoder'' и ''Decoder''. | + | ''Seq2Seq'' состоит из двух [[:Рекуррентные_нейронные_сети|РНН]] - ''Encoder'' и ''Decoder''. |
''Encoder'' {{---}} принимает предложение на языке ''A'' и сжимает его в вектор скрытого состояния. | ''Encoder'' {{---}} принимает предложение на языке ''A'' и сжимает его в вектор скрытого состояния. | ||
− | |||
− | '' | + | ''Decoder'' {{---}} выдает слово на языке ''B'', принимает последнее скрытое состояние энкодера и предыдущее предыдущее предсказаное слово. |
− | При добавлении механизма в данную архитектуру между [[:Рекуррентные_нейронные_сети|РНН]] ''Encoder'' и ''Decoder'' слоя механизма внимания | + | Рассмотрим пример работы ''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|Пример работы ''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''. | ||
==См. также== | ==См. также== | ||
Строка 31: | Строка 77: | ||
*[[:Нейронные_сети,_перцептрон|Нейронные сети, перцептрон]] | *[[:Нейронные_сети,_перцептрон|Нейронные сети, перцептрон]] | ||
*[[:Рекуррентные_нейронные_сети|Рекуррентные нейронные сети]] | *[[:Рекуррентные_нейронные_сети|Рекуррентные нейронные сети]] | ||
+ | |||
+ | ==Источники== | ||
+ | *[https://arxiv.org/abs/1409.0473 Neural Machine Translation by Jointly Learning to Align and Translate. Dzmitry Bahdanau, Kyunghyun Cho, Yoshua Bengio] | ||
+ | *[https://arxiv.org/abs/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 Лекция Andrew Ng о механизме внимания в NLP] | ||
+ | *[https://towardsdatascience.com/intuitive-understanding-of-attention-mechanism-in-deep-learning-6c9482aecf4f Статья с подробно разборанными примерами и кодом на ''Python'' и ''TensorFlow''] | ||
==Примечания== | ==Примечания== |
Текущая версия на 18:21, 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 арихитектуру).Выходом данного слоя будет являтся вектор
(англ. score) - оценки на основании которых на скрытое состояние будет "обращено внимание".Далее для нормализации значений
используется . Тогдаздесь используется благодоря своим свойствам:
Далее считается
(англ. 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.
См. также
Источники
- Neural Machine Translation by Jointly Learning to Align and Translate. Dzmitry Bahdanau, Kyunghyun Cho, Yoshua Bengio
- 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
- Лекция Andrew Ng о механизме внимания в NLP
- Статья с подробно разборанными примерами и кодом на Python и TensorFlow