Участник:Gpevnev — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
 
(не показана 1 промежуточная версия этого же участника)
Строка 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].
+
Изначально механизм внимания был представлен в статье [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].
  
 
== Обобщенное описание ==
 
== Обобщенное описание ==
Строка 24: Строка 24:
 
Результатом работы слоя внимания является <math>CV</math> который, содержит в себе информацию обо всех скрытых состоянях <math>h_i</math> пропорционально оценке <math>e_i</math>.
 
Результатом работы слоя внимания является <math>CV</math> который, содержит в себе информацию обо всех скрытых состоянях <math>h_i</math> пропорционально оценке <math>e_i</math>.
  
== Пример использования для архитектуры Seq2Seq ==
+
== Пример использования для архитектуры ''Seq2Seq'' ==
Из-за интуитивной понятности механизма внимания для проблемы машинного перевода, а также поскольку в оригинальной статье рассматривается механизм внимания применительно именно к Seq2Seq сетям. Пример добавления механизма внимания в Seq2Seq сеть поможет лучше понять его предназначение.
+
Из-за интуитивной понятности механизма внимания для проблемы машинного перевода, а также поскольку в оригинальной статье рассматривается механизм внимания применительно именно к ''Seq2Seq'' сетям. Пример добавления механизма внимания в ''Seq2Seq'' сеть поможет лучше понять его предназначение.
  
 
Несмотря на то, что нейронные сети рассматриваются как "черный ящик" и интерпретировать их внутренности в понятных человеку терминах часто невозможно, все же механизм внимания интуитивно понятный людям смог улучшить результаты машинного перевода для алгоритма используемого в статье.
 
Несмотря на то, что нейронные сети рассматриваются как "черный ящик" и интерпретировать их внутренности в понятных человеку терминах часто невозможно, все же механизм внимания интуитивно понятный людям смог улучшить результаты машинного перевода для алгоритма используемого в статье.
  
=== Базовая архитектура Seq2Seq ===
+
=== Базовая архитектура ''Seq2Seq'' ===
 +
[[File:Seq2SeqBasic.png|450px|thumb|Пример работы базовой ''Seq2Seq'' сети]]
 
Данный пример рассматривает применение механизма внимания в задаче машинного перевода в применении к архитектуре ''Seq2Seq''.
 
Данный пример рассматривает применение механизма внимания в задаче машинного перевода в применении к архитектуре ''Seq2Seq''.
  
Строка 39: Строка 40:
  
  
Рассмотрим пример работы Seq2Seq сети:
+
Рассмотрим пример работы ''Seq2Seq'' сети:
 
 
[[File:Seq2SeqBasic.png|450px|thumb|Пример работы базовой Seq2Seq сети]]
 
  
 
<math>x_i</math> {{---}} слова в предложении на языке ''A''.
 
<math>x_i</math> {{---}} слова в предложении на языке ''A''.
Строка 47: Строка 46:
 
<math>h_i</math> {{---}} скрытое состояние энкодера.
 
<math>h_i</math> {{---}} скрытое состояние энкодера.
  
''Зеленые блоки'' {{---}} блоки энкодера получающие на вход <math>x_i</math> и передающие скрытое состояние <math>h_i</math> на следующую итерацию.
+
''Блоки энкодера (зеленый)'' {{---}} блоки энкодера получающие на вход <math>x_i</math> и передающие скрытое состояние <math>h_i</math> на следующую итерацию.
  
 
<math>d_i</math> {{---}} скрытое состояние декодера.
 
<math>d_i</math> {{---}} скрытое состояние декодера.
Строка 53: Строка 52:
 
<math>y_i</math> {{---}} слова в предложении на языке ''B''.
 
<math>y_i</math> {{---}} слова в предложении на языке ''B''.
  
''Фиолетовые блоки'' {{---}} блоки декодера получающие на вход <math>y_{i-1}</math> или специальный токен '''start''' в случае первой итерации и возвращаюшие <math>y_i</math> {{---}} слова в предложении на языке ''B''.  
+
''Блоки декодера (фиолетовый)'' {{---}} блоки декодера получающие на вход <math>y_{i-1}</math> или специальный токен '''start''' в случае первой итерации и возвращаюшие <math>y_i</math> {{---}} слова в предложении на языке ''B''.  
 
Передают <math>d_i</math> {{---}} скрытое состояние декодера на следующую итерацию.  
 
Передают <math>d_i</math> {{---}} скрытое состояние декодера на следующую итерацию.  
 
Перевод считается завершенным при <math>y_i</math>, равном специальному токену '''end'''.
 
Перевод считается завершенным при <math>y_i</math>, равном специальному токену '''end'''.
  
 
+
=== Применение механизма внимания для ''Seq2Seq'' ===
 
 
 
 
 
 
 
 
=== Применение механизма внимания для Seq2Seq ===
 
 
При добавлении механизма в данную архитектуру между [[:Рекуррентные_нейронные_сети|РНН]] ''Encoder'' и ''Decoder'' слоя механизма внимания получится следуюшая схема:
 
При добавлении механизма в данную архитектуру между [[:Рекуррентные_нейронные_сети|РНН]] ''Encoder'' и ''Decoder'' слоя механизма внимания получится следуюшая схема:
  
[[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> имееют те же назначения, что и в варианте без механизма внимания.
  
''Желтый блок'' {{---}} аггрегирует в себе все вектора <math>h_i</math> и возвращает всю последовательность векторов <math>h = [h_1, h_2, h_3, h_4]</math>.
+
''Аггрегатор скрытых состояний энкодера (желтый)'' {{---}} аггрегирует в себе все вектора <math>h_i</math> и возвращает всю последовательность векторов <math>h = [h_1, h_2, h_3, h_4]</math>.
  
 
<math>СV_i</math> {{---}} вектор контекста на итерации <math>i</math>.
 
<math>СV_i</math> {{---}} вектор контекста на итерации <math>i</math>.
  
''Красные блоки'' - механизм внимания. Принимает <math>h</math> и <math>d_{i - 1}</math>, возвращает <math>СV_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>.
+
''Блоки декодера (фиолетовый)'' {{---}} по сравнению с обычной ''Seq2Seq'' сетью меняются входные данные. Теперь на итерации <math>i</math> на вход подается не <math>y_{i-1}</math>, а конкатенация <math>y_{i-1}</math> и <math>CV_i</math>.
  
 
Таким образом при помощи механизма внимания достигается "фокусирование" декодера на определенных скрытых состояниях. В случаях машинного перевода эта возможность помогает декодеру предсказывать на какие скрытые сосояния при исходных определенных словах на языке ''A'' необходимо обратить больше внимания при переводе данного слова на язык ''B''.
 
Таким образом при помощи механизма внимания достигается "фокусирование" декодера на определенных скрытых состояниях. В случаях машинного перевода эта возможность помогает декодеру предсказывать на какие скрытые сосояния при исходных определенных словах на языке ''A'' необходимо обратить больше внимания при переводе данного слова на язык ''B''.
 
 
 
 
 
 
 
 
 
 
 
  
 
==См. также==
 
==См. также==
Строка 94: Строка 77:
 
*[[:Нейронные_сети,_перцептрон|Нейронные сети, перцептрон]]
 
*[[:Нейронные_сети,_перцептрон|Нейронные сети, перцептрон]]
 
*[[:Рекуррентные_нейронные_сети|Рекуррентные нейронные сети]]
 
*[[:Рекуррентные_нейронные_сети|Рекуррентные нейронные сети]]
*[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''
 
  
 +
==Источники==
 +
*[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) — дополнительный слой используемый в рекуррентных нейронных сетях для "обращения внимания" последующих слоев сети на скрытое состояние нейронной сети [math]h_t[/math] в момент времени [math]t[/math].

Изначально механизм внимания был представлен в статье Machine Translation by Jointly Learning to Align and Translate и предполагал применение именно в Seq2Seq сетях, и лишь позже был использован применительно к изображениям Attend and Tell: Neural Image Caption Generation with Visual Attention.

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

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

Рекуррентные нейронные сети используются при обработке данных, для которых важна их последовательность. В классическом случае применения РНН результатом является только последнее скрытое состояние [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]s[/math] (англ. score) - оценки на основании которых на скрытое состояние [math]h_i[/math] будет "обращено внимание".

Далее для нормализации значений [math]s[/math] используется [math]softmax[/math]. Тогда [math]e = softmax(s)[/math]

[math]softmax[/math] здесь используется благодоря своим свойствам:

  • [math]\forall s:\ \sum_{i=1}^n softmax(s)_i = 1, [/math]
  • [math]\forall s,\ i: \ softmax(s)_i \gt = 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 сети

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

Seq2Seq состоит из двух РНН - Encoder и Decoder.

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

Decoder — выдает слово на языке 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

При добавлении механизма в данную архитектуру между РНН Encoder и Decoder слоя механизма внимания получится следуюшая схема:

Пример работы 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.

См. также

Источники

Примечания