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

Материал из Викиконспекты
Перейти к: навигация, поиск
Строка 7: Строка 7:
 
[[:Рекуррентные_нейронные_сети|Рекуррентные нейронные сети]] используются при обработке данных, для которых важна их последовательность. В классическом случае применения [[:Рекуррентные_нейронные_сети|РНН]] результатом является только последнее скрытое состояние <math>h_m</math>, где <math>m</math> - длина последовательности входных данных. Использование механизма внимания позволяет использовать информацию полученную не только из последнего скрытого состояниния, но и любого скрытого состояния <math>h_t</math> для любого <math>t</math>.
 
[[:Рекуррентные_нейронные_сети|Рекуррентные нейронные сети]] используются при обработке данных, для которых важна их последовательность. В классическом случае применения [[:Рекуррентные_нейронные_сети|РНН]] результатом является только последнее скрытое состояние <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>d</math> для задачи машинного перевода использующего ''Seq2Seq'' арихитектуру).  
  
 
Выходом данного слоя будет являтся вектор <math>s</math> (англ. ''score'') - оценки на основании которых на скрытое состояние <math>h_i</math> будет "обращено внимание".
 
Выходом данного слоя будет являтся вектор <math>s</math> (англ. ''score'') - оценки на основании которых на скрытое состояние <math>h_i</math> будет "обращено внимание".
Строка 13: Строка 13:
 
Далее для нормализации значений <math>s</math> используется <math>softmax</math>. Тогда <math>e = softmax(s)</math>
 
Далее для нормализации значений <math>s</math> используется <math>softmax</math>. Тогда <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:\  \sum_{i=1}^n softmax(s)_i = 1, </math>
 
*<math>\forall s,\ i: \ softmax(s)_i >= 0 </math>
 
*<math>\forall s,\ i: \ softmax(s)_i >= 0 </math>
  
Далее считается <math>СV</math> (англ. ''context vector'') <math>СV = \sum_{i=1}^m e_i h_i</math>
+
Далее считается <math>СV</math> (англ. ''context vector'')  
  
Резултатом работы слоя внимания является <math>CV</math> который содержит в себе информацию обо всех скрытых состоянях <math>h_i</math> пропорционально оценке <math>e_i</math>.
+
<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 ===
 
=== Базовая архитектура Seq2Seq ===
Строка 34: Строка 36:
 
''Encoder'' {{---}} принимает предложение на языке ''A'' и сжимает его в вектор скрытого состояния.
 
''Encoder'' {{---}} принимает предложение на языке ''A'' и сжимает его в вектор скрытого состояния.
  
''Decoder'' {{---}} выдает слово на языке ''B'', принимает последнее скрытое состояние из энкодера и предыдущее предыдущее предсказаное слово.
+
''Decoder'' {{---}} выдает слово на языке ''B'', принимает последнее скрытое состояние энкодера и предыдущее предыдущее предсказаное слово.
  
  
 
Рассмотрим пример работы Seq2Seq сети:
 
Рассмотрим пример работы Seq2Seq сети:
  
[[File:Seq2SeqBasic.png|450px|thumb|left|Пример работы базовой Seq2Seq сети]]
+
[[File:Seq2SeqBasic.png|450px|thumb|Пример работы базовой Seq2Seq сети]]
  
 
<math>x_i</math> {{---}} слова в предложении на языке ''A''.
 
<math>x_i</math> {{---}} слова в предложении на языке ''A''.
Строка 45: Строка 47:
 
<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> {{---}} скрытое состояние декодера.
Строка 51: Строка 53:
 
<math>y_i</math> {{---}} слова в предложении на языке ''B''.
 
<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'''.
+
''Фиолетовые блоки'' {{---}} блоки декодера получающие на вход <math>y_{i-1}</math> или специальный токен '''start''' в случае первой итерации и возвращаюшие <math>y_i</math> {{---}} слова в предложении на языке ''B''.
 +
Передают <math>d_i</math> {{---}} скрытое состояние декодера на следующую итерацию.  
 +
Перевод считается завершенным при <math>y_i</math>, равном специальному токену '''end'''.
  
  
Строка 59: Строка 63:
  
 
=== Применение механизма внимания для Seq2Seq ===
 
=== Применение механизма внимания для Seq2Seq ===
При добавлении механизма в данную архитектуру между [[:Рекуррентные_нейронные_сети|РНН]] ''Encoder'' и ''Decoder'' слоя механизма внимания получтится следуюшая схема:
+
При добавлении механизма в данную архитектуру между [[:Рекуррентные_нейронные_сети|РНН]] ''Encoder'' и ''Decoder'' слоя механизма внимания получится следуюшая схема:
  
[[File:Seq2SeqAttention.png|450px|thumb|left|Пример работы 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> имееют те же назначения, что и в варианте без механизма внимания.
Строка 73: Строка 77:
 
''Фиолетовые блоки'' - по сравнению с обычной ''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''.
  
 
   
 
   

Версия 18:00, 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 состоит из двух РНН - Encoder и Decoder.

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

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


Рассмотрим пример работы Seq2Seq сети:

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







См. также


Примечания