Механизм внимания — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
Строка 1: Строка 1:
'''Механизм внимания в рекуррентных нейронных сетях''' (англ. ''attention mechanism'', ''attention model'') {{---}} дополнительный слой используемый в [[:Рекуррентные_нейронные_сети|рекуррентных нейронных сетях (сокращенно ''RNN'')]] для "обращения внимания" последующих слоев сети на скрытое состояние нейронной сети <math>h_t</math> в момент времени <math>t</math>.
+
'''Механизм внимания в рекуррентных нейронных сетях''' (англ. ''attention mechanism'', ''attention model'') {{---}} дополнительный слой используемый в [[:Рекуррентные_нейронные_сети|рекуррентных нейронных сетях]] (сокращенно ''RNN'') для "обращения внимания" последующих слоев сети на скрытое состояние нейронной сети <math>h_t</math> в момент времени <math>t</math>.
  
Изначально механизм внимания был представлен в [https://arxiv.org/abs/1409.0473| статье описывыющей данную технику] и ее [[:Механизм_внимания#Пример использования для архитектуры Seq2Seq|применение именно в ''Seq2Seq'' сетях]], и лишь позже был использован в [https://arxiv.org/abs/1502.03044| статье применительно к генерации описания изображений].
+
Изначально механизм внимания был представлен в [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]] результатом является только последнее скрытое состояние <math>h_m</math>, где <math>m</math> {{---}} длина последовательности входных данных. Использование механизма внимания позволяет использовать информацию полученную не только из последнего скрытого состояниния, но и любого скрытого состояния <math>h_t</math> для любого <math>t</math>.
+
[[:Рекуррентные_нейронные_сети|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>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:\  \sum_{i=1}^n softmax(s)_i = 1, </math>
+
*<math>\forall s\colon\  \sum_{i=1}^n softmax(s)_i = 1, </math>
*<math>\forall s,\ i: \ softmax(s)_i >= 0 </math>
+
*<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'' ==
Пример добавления механизма внимания в ''Seq2Seq'' сеть поможет лучше понять его предназначение.  
+
Пример добавления механизма внимания в ''Seq2seq'' сеть поможет лучше понять его предназначение.  
Изначально в оригинальной статье<ref>[https://arxiv.org/abs/1409.0473 Neural Machine Translation by Jointly Learning to Align and Translate]</ref> применяется механизм внимания в контексте именно Seq2Seq сети.
+
Изначально в оригинальной статье<ref>[https://arxiv.org/abs/1409.0473 Neural Machine Translation by Jointly Learning to Align and Translate]</ref> применяется механизм внимания в контексте именно Seq2seq сети.
  
 
Несмотря на то, что нейронные сети рассматриваются как "черный ящик" и интерпретировать их внутренности в понятных человеку терминах часто невозможно, все же механизм внимания интуитивно понятный людям смог улучшить результаты машинного перевода для алгоритма используемого в статье.
 
Несмотря на то, что нейронные сети рассматриваются как "черный ящик" и интерпретировать их внутренности в понятных человеку терминах часто невозможно, все же механизм внимания интуитивно понятный людям смог улучшить результаты машинного перевода для алгоритма используемого в статье.
  
=== Базовая архитектура ''Seq2Seq'' ===
+
=== Базовая архитектура ''Seq2seq'' ===
[[File:Seq2SeqBasic.png|450px|thumb|Пример работы базовой ''Seq2Seq'' сети]]
+
[[File:Seq2SeqBasic.png|450px|thumb|Пример работы базовой ''Seq2seq'' сети]]
Данный пример рассматривает применение механизма внимания в задаче машинного перевода в применении к архитектуре ''Seq2Seq''.
+
Данный пример рассматривает применение механизма внимания в задаче машинного перевода в применении к архитектуре ''Seq2seq''.
  
''Seq2Seq'' состоит из двух [[:Рекуррентные_нейронные_сети|RNN]] {{---}} ''Энкодера'' и ''Декодера''.
+
''Seq2seq'' состоит из двух [[:Рекуррентные_нейронные_сети|RNN]] {{---}} ''Энкодера'' и ''Декодера''.
  
 
''Энкодер'' {{---}} принимает предложение на языке ''A'' и сжимает его в вектор скрытого состояния.
 
''Энкодер'' {{---}} принимает предложение на языке ''A'' и сжимает его в вектор скрытого состояния.
Строка 41: Строка 41:
  
  
Рассмотрим пример работы ''Seq2Seq'' сети:
+
Рассмотрим пример работы ''Seq2seq'' сети:
  
 
<math>x_i</math> {{---}} слова в предложении на языке ''A''.
 
<math>x_i</math> {{---}} слова в предложении на языке ''A''.
Строка 57: Строка 57:
 
Перевод считается завершенным при <math>y_i</math>, равном специальному токену '''end'''.
 
Перевод считается завершенным при <math>y_i</math>, равном специальному токену '''end'''.
  
=== Применение механизма внимания для ''Seq2Seq'' ===
+
=== Применение механизма внимания для ''Seq2seq'' ===
 
При добавлении механизма в данную архитектуру между [[:Рекуррентные_нейронные_сети|RNN]] ''Энкодер'' и ''Декодер'' слоя механизма внимания получится следуюшая схема:
 
При добавлении механизма в данную архитектуру между [[:Рекуррентные_нейронные_сети|RNN]] ''Энкодер'' и ''Декодер'' слоя механизма внимания получится следуюшая схема:
  
[[File:Seq2SeqAttention.png|450px|thumb|Пример работы ''Seq2Seq'' сети с механизмом внимания]]
+
[[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>.
+
''Блоки декодера (фиолетовый)'' {{---}} по сравнению с обычной ''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) для "обращения внимания" последующих слоев сети на скрытое состояние нейронной сети [math]h_t[/math] в момент времени [math]t[/math].

Изначально механизм внимания был представлен в статье описывыющей данную технику и ее применение именно в Seq2seq[1] сетях и лишь позже был использован в статье применительно к генерации описания изображений.

Обобщенное описание

Обобщенное описание механизма внимания

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]s[/math] (англ. score) — оценки на основании которых на скрытое состояние [math]h_i[/math] будет "обращено внимание".

Далее для нормализации значений [math]s[/math] используется [math]softmax[/math][2]. Тогда [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 \gt = 0 [/math]

Далее считается [math]c[/math] (англ. context vector)

[math]с = \sum_{i=1}^m e_i h_i[/math]

Результатом работы слоя внимания является [math]c[/math] который, содержит в себе информацию обо всех скрытых состоянях [math]h_i[/math] пропорционально оценке [math]e_i[/math].

Пример использования для архитектуры Seq2seq

Пример добавления механизма внимания в Seq2seq сеть поможет лучше понять его предназначение. Изначально в оригинальной статье[3] применяется механизм внимания в контексте именно Seq2seq сети.

Несмотря на то, что нейронные сети рассматриваются как "черный ящик" и интерпретировать их внутренности в понятных человеку терминах часто невозможно, все же механизм внимания интуитивно понятный людям смог улучшить результаты машинного перевода для алгоритма используемого в статье.

Базовая архитектура Seq2seq

Пример работы базовой Seq2seq сети

Данный пример рассматривает применение механизма внимания в задаче машинного перевода в применении к архитектуре Seq2seq.

Seq2seq состоит из двух RNNЭнкодера и Декодера.

Энкодер — принимает предложение на языке A и сжимает его в вектор скрытого состояния.

Декодер — выдает слово на языке B, принимает последнее скрытое состояние энкодера и предыдущее предыдущее предсказаное слово.


Рассмотрим пример работы 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

При добавлении механизма в данную архитектуру между RNN Энкодер и Декодер слоя механизма внимания получится следуюшая схема:

Файл:Seq2seqAttention.png
Пример работы 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]c_i[/math] — вектор контекста на итерации [math]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.

См. также

Источники информации

Примечания