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