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

Материал из Викиконспекты
Перейти к: навигация, поиск
Строка 8: Строка 8:
  
 
==Обобщенный механизм внимания==
 
==Обобщенный механизм внимания==
[[File:AttentionGeneral.png|350px|thumb|Обобщенный механизм внимания в [[:Рекуррентные_нейронные_сети|RNN]]]]
 
 
'''Обобщенный механизм внимания''' (англ. general attention) {{---}} один из видов внимания, при котором выясняются закономерности между входными и выходными данными.
 
'''Обобщенный механизм внимания''' (англ. general attention) {{---}} один из видов внимания, при котором выясняются закономерности между входными и выходными данными.
 
Изначально механизм внимания представленный в оригинальной подразумевал именно этот тип внимания.  
 
Изначально механизм внимания представленный в оригинальной подразумевал именно этот тип внимания.  
Строка 14: Строка 13:
 
===Пример использования обобщенного механизма внимания для задачи машинного перевода===
 
===Пример использования обобщенного механизма внимания для задачи машинного перевода===
 
Для лучшего понимания работы обобщенного механизма внимания будет рассмотрен пример его применения в задаче машинного перевода при помощи 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>.
 
 
Несмотря на то, что нейронные сети рассматриваются как "черный ящик" и интерпретировать их внутренности в понятных человеку терминах часто невозможно, все же механизм внимания интуитивно понятный людям смог улучшить результаты машинного перевода для алгоритма используемого в статье.
 
 
Успех этого использования этого подхода в задаче машинного перевода обусловлен лучшим выводом закономерностей между словами находящимися на большом расстоянии друг от друга. Несмотря на то, что ''LSTM'' и ''GRU'' блоки используются именно для улучшения передачи информации с предыдущих итераций ''RNN'' их основная проблема заключается в том, что влияние предыдущих состояний на текущее уменьшается экспоненциально от расстояния между словами, в то же время механизм внимания улучшает этот показатель до линейного.
 
 
[[:Рекуррентные_нейронные_сети|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> в котором содержится некий контекст зависящий от конкретно задачи.
 
 
В случае ''Seq2seq'' сетей вектором <math>d</math> будет являться скрытое состояние
 
 
Выходом данного слоя будет является вектор <math>s</math> (англ. ''score'') {{---}} оценки на основании которых на скрытое состояние <math>h_i</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>\forall s\colon\  \sum_{i=1}^n softmax(s)_i = 1, </math>
 
*<math>\forall s,\ i\colon \ softmax(s)_i >= 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''====
 
[[File:Seq2SeqBasic.png|450px|thumb|Пример работы базовой ''Seq2seq'' сети]]
 
[[File:Seq2SeqBasic.png|450px|thumb|Пример работы базовой ''Seq2seq'' сети]]
Данный пример рассматривает применение механизма внимания в задаче машинного перевода в применении к архитектуре ''Seq2seq''.
+
Для понимания механизма внимания в ''Seq2seq'' сетях необходимо базовое понимание ''Seq2seq'' архитектуры до введения механизма внимания.
  
 
''Seq2seq'' состоит из двух [[:Рекуррентные_нейронные_сети|RNN]] {{---}} ''Энкодера'' и ''Декодера''.
 
''Seq2seq'' состоит из двух [[:Рекуррентные_нейронные_сети|RNN]] {{---}} ''Энкодера'' и ''Декодера''.
Строка 69: Строка 42:
  
 
====Применение механизма внимания для ''Seq2seq''====
 
====Применение механизма внимания для ''Seq2seq''====
 +
[[File:AttentionGeneral.png|450px|thumb|Обобщенный механизм внимания в [[:Рекуррентные_нейронные_сети|RNN]]]]
 +
Несмотря на то, что нейронные сети рассматриваются как "черный ящик" и интерпретировать их внутренности в понятных человеку терминах часто невозможно, все же механизм внимания интуитивно понятный людям смог улучшить результаты машинного перевода для алгоритма используемого в статье.
 +
 +
Успех этого использования этого подхода в задаче машинного перевода обусловлен лучшим выводом закономерностей между словами находящимися на большом расстоянии друг от друга. Несмотря на то, что ''LSTM'' и ''GRU'' блоки используются именно для улучшения передачи информации с предыдущих итераций ''RNN'' их основная проблема заключается в том, что влияние предыдущих состояний на текущее уменьшается экспоненциально от расстояния между словами, в то же время механизм внимания улучшает этот показатель до линейного.
 +
 +
[[:Рекуррентные_нейронные_сети|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> в котором содержится некий контекст зависящий от конкретной задачи.
 +
 +
В случае ''Seq2seq'' сетей вектором <math>d</math> будет являться скрытое состояние <math>d_{i-1}</math> предыдущей итерации декодера.
 +
 +
Выходом данного слоя будет является вектор <math>s</math> (англ. ''score'') {{---}} оценки на основании которых на скрытое состояние <math>h_i</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>\forall s\colon\  \sum_{i=1}^n softmax(s)_i = 1, </math>
 +
*<math>\forall s,\ i\colon \ softmax(s)_i >= 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>.
 +
 +
 
[[File:Seq2SeqAttention.png|450px|thumb|Пример работы ''Seq2seq'' сети с механизмом внимания]]
 
[[File:Seq2SeqAttention.png|450px|thumb|Пример работы ''Seq2seq'' сети с механизмом внимания]]
 
При добавлении механизма в данную архитектуру между [[:Рекуррентные_нейронные_сети|RNN]] ''Энкодер'' и ''Декодер'' слоя механизма внимания получится следуюшая схема:
 
При добавлении механизма в данную архитектуру между [[:Рекуррентные_нейронные_сети|RNN]] ''Энкодер'' и ''Декодер'' слоя механизма внимания получится следуюшая схема:

Версия 13:31, 22 марта 2020

Механизм внимания (англ. attention mechanism, attention model) — техника используемая в рекуррентных нейронных сетях (сокр. RNN) и сверточных нейронных сетях (сокр. CNN) для поиска взаимосвязей между различными частями входных и выходных данных.

(или проще для "обращения внимания" на определенные части входных данных в зависимости от текущего контекста. (как лучше?))

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

После успеха этой методики в машинном переводе последовали ее внедрения в других задачах обработки естественного языка и применения к CNN для генерации описания изображения[2] и GAN [3].

Обобщенный механизм внимания

Обобщенный механизм внимания (англ. general attention) — один из видов внимания, при котором выясняются закономерности между входными и выходными данными. Изначально механизм внимания представленный в оригинальной подразумевал именно этот тип внимания.

Пример использования обобщенного механизма внимания для задачи машинного перевода

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

Базовая архитектура 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

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

Успех этого использования этого подхода в задаче машинного перевода обусловлен лучшим выводом закономерностей между словами находящимися на большом расстоянии друг от друга. Несмотря на то, что LSTM и GRU блоки используются именно для улучшения передачи информации с предыдущих итераций RNN их основная проблема заключается в том, что влияние предыдущих состояний на текущее уменьшается экспоненциально от расстояния между словами, в то же время механизм внимания улучшает этот показатель до линейного.

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] в котором содержится некий контекст зависящий от конкретной задачи.

В случае Seq2seq сетей вектором [math]d[/math] будет являться скрытое состояние [math]d_{i-1}[/math] предыдущей итерации декодера.

Выходом данного слоя будет является вектор [math]s[/math] (англ. score) — оценки на основании которых на скрытое состояние [math]h_i[/math] будет "обращено внимание".

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

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

Здесь [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.

Self-Attention

TODO

См. также

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

Примечания