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

Материал из Викиконспекты
Перейти к: навигация, поиск
Строка 3: Строка 3:
 
(или проще для "обращения внимания" на определенные части входных данных в зависимости от текущего контекста. (как лучше?))  
 
(или проще для "обращения внимания" на определенные части входных данных в зависимости от текущего контекста. (как лучше?))  
  
Изначально механизм внимания был представлен в контексте [[:Рекуррентные_нейронные_сети|рекуррентных]] ''Seq2seq''<ref>[https://en.wikipedia.org/wiki/Seq2seq Wiki -- Seq2seq]</ref> сетей <ref>https://arxiv.org/abs/1409.0473</ref> для "обращения внимания" блоков декодеров на скрытые состояния [[:Рекуррентные_нейронные_сети|RNN]] энкодера для любой итерации, а не только последней.
+
Изначально механизм внимания был представлен в контексте [[:Рекуррентные_нейронные_сети|рекуррентных]] ''Seq2seq''<ref>[https://en.wikipedia.org/wiki/Seq2seq Wiki -- Seq2seq]</ref> сетей <ref>https://arxiv.org/abs/1409.0473</ref> для "обращения внимания" блоков декодеров на скрытые состояния [[:Рекуррентные_нейронные_сети|RNN]] для любой итерации энкодера, а не только последней.
 
   
 
   
 
После успеха этой методики в машинном переводе последовали ее внедрения в других задачах [[:Обработка_естественного_языка|обработки естественного языка]] и применения к [[:Сверточные_нейронные_сети|CNN]] для генерации описания изображения<ref>https://arxiv.org/abs/1502.03044</ref> и GAN <ref>https://arxiv.org/abs/1805.08318</ref>.
 
После успеха этой методики в машинном переводе последовали ее внедрения в других задачах [[:Обработка_естественного_языка|обработки естественного языка]] и применения к [[:Сверточные_нейронные_сети|CNN]] для генерации описания изображения<ref>https://arxiv.org/abs/1502.03044</ref> и GAN <ref>https://arxiv.org/abs/1805.08318</ref>.
  
 
==Обобщенный механизм внимания==
 
==Обобщенный механизм внимания==
'''Обобщенный механизм внимания''' (англ. general attention) {{---}} один из видов внимания, при котором выясняются закономерности между входными и выходными данными.
+
'''Обобщенный механизм внимания''' (англ. general attention) {{---}} один из видов внимания, при котором выясняются закономерности между входными и выходными данными. Изначально механизм внимания представленный в оригинальной подразумевал именно этот тип внимания.  
Изначально механизм внимания представленный в оригинальной подразумевал именно этот тип внимания.  
 
  
 
===Пример использования обобщенного механизма внимания для задачи машинного перевода===
 
===Пример использования обобщенного механизма внимания для задачи машинного перевода===
Строка 23: Строка 22:
  
 
''Декодер'' {{---}} выдает слово на языке ''B'', принимает последнее скрытое состояние энкодера и предыдущее предыдущее предсказанное слово.
 
''Декодер'' {{---}} выдает слово на языке ''B'', принимает последнее скрытое состояние энкодера и предыдущее предыдущее предсказанное слово.
 
  
 
Рассмотрим пример работы ''Seq2seq'' сети:
 
Рассмотрим пример работы ''Seq2seq'' сети:
Строка 44: Строка 42:
 
Несмотря на то, что нейронные сети рассматриваются как "черный ящик" и интерпретировать их внутренности в понятных человеку терминах часто невозможно, все же механизм внимания интуитивно понятный людям смог улучшить качество машинного перевода базового ''Seq2seq'' алгоритма.
 
Несмотря на то, что нейронные сети рассматриваются как "черный ящик" и интерпретировать их внутренности в понятных человеку терминах часто невозможно, все же механизм внимания интуитивно понятный людям смог улучшить качество машинного перевода базового ''Seq2seq'' алгоритма.
  
Успех этого использования этого подхода в задаче машинного перевода обусловлен лучшим выводом закономерностей между словами находящимися на большом расстоянии друг от друга. Несмотря на то, что ''LSTM'' и ''GRU'' блоки используются именно для улучшения передачи информации с предыдущих итераций ''RNN'' их основная проблема заключается в том, что влияние предыдущих состояний на текущее уменьшается экспоненциально от расстояния между словами, в то же время механизм внимания улучшает этот показатель до линейного<ref>https://towardsdatascience.com/transformers-141e32e69591</ref>.
+
Успех использования этого подхода в задаче машинного перевода обусловлен лучшим выводом закономерностей между словами находящимися на большом расстоянии друг от друга. Несмотря на то, что [[:Долгая_краткосрочная_память|LSTM и GRU]] блоки используются именно для улучшения передачи информации с предыдущих итераций [[:Рекуррентные_нейронные_сети|RNN]] их основная проблема заключается в том, что влияние предыдущих состояний на текущее уменьшается экспоненциально от расстояния между словами, в то же время механизм внимания улучшает этот показатель до линейного<ref>https://towardsdatascience.com/transformers-141e32e69591</ref>.
 
   
 
   
 
[[:Рекуррентные_нейронные_сети|RNN]] используются при обработке данных, для которых важна их последовательность. В классическом случае применения [[:Рекуррентные_нейронные_сети|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>.
 
=====Устройство слоя механизма внимания=====
 
=====Устройство слоя механизма внимания=====
 
[[File:AttentionGeneral.png|450px|thumb|Обобщенный механизм внимания в [[:Рекуррентные_нейронные_сети|RNN]]]]
 
[[File:AttentionGeneral.png|450px|thumb|Обобщенный механизм внимания в [[:Рекуррентные_нейронные_сети|RNN]]]]
Обычно слой использующийся для механизма внимания представляет собой обычную, чаще всего однослойную, нейронную сеть на вход которой подаются <math>h_t, t = 1 \  \ldots m</math>, а также вектор <math>d</math> в котором содержится некий контекст зависящий от конкретной задачи.
+
Слой механизма внимания представляет собой обычную, чаще всего однослойную, нейронную сеть на вход которой подаются <math>h_t, t = 1 \  \ldots m</math>, а также вектор <math>d</math> в котором содержится некий контекст зависящий от конкретной задачи.
  
 
В случае ''Seq2seq'' сетей вектором <math>d</math> будет являться скрытое состояние <math>d_{i-1}</math> предыдущей итерации декодера.
 
В случае ''Seq2seq'' сетей вектором <math>d</math> будет являться скрытое состояние <math>d_{i-1}</math> предыдущей итерации декодера.
Строка 70: Строка 68:
 
=====Применение механизма внимания к базовой ''Seq2seq'' архитектуре=====
 
=====Применение механизма внимания к базовой ''Seq2seq'' архитектуре=====
 
[[File:Seq2SeqAttention.png|450px|thumb|Пример работы ''Seq2seq'' сети с механизмом внимания]]
 
[[File:Seq2SeqAttention.png|450px|thumb|Пример работы ''Seq2seq'' сети с механизмом внимания]]
При добавлении механизма в данную архитектуру между [[:Рекуррентные_нейронные_сети|RNN]] ''Энкодер'' и ''Декодер'' слоя механизма внимания получится следующая схема:
+
При добавлении механизма в данную архитектуру между [[:Рекуррентные_нейронные_сети|RNN]] ''Энкодером'' и ''Декодером'' слоя механизма внимания получится следующая схема:
  
 
Здесь <math>x_i, h_i, d_i, y_i</math> имеют те же назначения, что и в варианте без механизма внимания.
 
Здесь <math>x_i, h_i, d_i, y_i</math> имеют те же назначения, что и в варианте без механизма внимания.
Строка 78: Строка 76:
 
<math>c_i</math> {{---}} вектор контекста на итерации <math>i</math>.
 
<math>c_i</math> {{---}} вектор контекста на итерации <math>i</math>.
  
''Блоки механизма внимания (красный)'' {{---}} механизм внимания. Принимает <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''. То есть на какие слова из исходного текста обратить внимание при переводе конкретного слова на язык назначения.
  
 
==Self-Attention==
 
==Self-Attention==

Версия 14:06, 22 марта 2020

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

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

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

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

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

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

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

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

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

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

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

RNN используются при обработке данных, для которых важна их последовательность. В классическом случае применения RNN результатом является только последнее скрытое состояние [math]h_m[/math], где [math]m[/math] — длина последовательности входных данных. Использование механизма внимания позволяет использовать информацию полученную не только из последнего скрытого состояния, но и любого скрытого состояния [math]h_t[/math] для любого [math]t[/math].

Устройство слоя механизма внимания
Обобщенный механизм внимания в RNN

Слой механизма внимания представляет собой обычную, чаще всего однослойную, нейронную сеть на вход которой подаются [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][6]. Тогда [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 сети с механизмом внимания

При добавлении механизма в данную архитектуру между 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

См. также

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

Примечания