Механизм внимания — различия между версиями
Gpevnev (обсуждение | вклад) |
Gpevnev (обсуждение | вклад) |
||
Строка 8: | Строка 8: | ||
==Обобщенный механизм внимания== | ==Обобщенный механизм внимания== | ||
− | [[File:AttentionGeneral.png|350px|thumb| | + | [[File:AttentionGeneral.png|350px|thumb|Обобщенный механизм внимания в [[:Рекуррентные_нейронные_сети|RNN]]]] |
− | '''Обобщенный механизм внимания''' (англ. general attention) {{---}} | + | '''Обобщенный механизм внимания''' (англ. general attention) {{---}} один из видов внимания, при котором выясняются закономерности между входными и выходными данными. |
+ | Изначально механизм внимания представленный в оригинальной подразумевал именно этот тип внимания. | ||
+ | |||
+ | ===Пример использования обобщенного механизма внимания для задачи машинного перевода=== | ||
+ | Для лучшего понимания работы обобщенного механизма внимания будет рассмотрен пример его применения в задаче машинного перевода при помощи 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>. | [[:Рекуррентные_нейронные_сети|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>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> (англ. ''score'') {{---}} оценки на основании которых на скрытое состояние <math>h_i</math> будет "обращено внимание". | ||
Строка 18: | Строка 30: | ||
Далее для нормализации значений <math>s</math> используется <math>softmax</math><ref>[https://ru.wikipedia.org/wiki/Softmax Wiki -- Функция 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\colon\ \sum_{i=1}^n softmax(s)_i = 1, </math> | *<math>\forall s\colon\ \sum_{i=1}^n softmax(s)_i = 1, </math> | ||
Строка 28: | Строка 40: | ||
Результатом работы слоя внимания является <math>c</math> который, содержит в себе информацию обо всех скрытых состоянях <math>h_i</math> пропорционально оценке <math>e_i</math>. | Результатом работы слоя внимания является <math>c</math> который, содержит в себе информацию обо всех скрытых состоянях <math>h_i</math> пропорционально оценке <math>e_i</math>. | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
====Базовая архитектура ''Seq2seq''==== | ====Базовая архитектура ''Seq2seq''==== |
Версия 13:24, 22 марта 2020
Механизм внимания (англ. attention mechanism, attention model) — техника используемая в рекуррентных нейронных сетях (сокр. RNN) и сверточных нейронных сетях (сокр. CNN) для поиска взаимосвязей между различными частями входных и выходных данных.
(или проще для "обращения внимания" на определенные части входных данных в зависимости от текущего контекста. (как лучше?))
Изначально механизм внимания был представлен в контексте рекуррентных Seq2seq сетей [1] для "обращения внимания" блоков декодеров на скрытые состояния RNN энкодера для любой итерации, а не только последней.
После успеха этой методики в машинном переводе последовали ее внедрения в других задачах обработки естественного языка и применения к CNN для генерации описания изображения[2] и GAN [3].
Содержание
Обобщенный механизм внимания
Обобщенный механизм внимания (англ. general attention) — один из видов внимания, при котором выясняются закономерности между входными и выходными данными. Изначально механизм внимания представленный в оригинальной подразумевал именно этот тип внимания.
Пример использования обобщенного механизма внимания для задачи машинного перевода
Для лучшего понимания работы обобщенного механизма внимания будет рассмотрен пример его применения в задаче машинного перевода при помощи Seq2seq сетей для решения которой он изначально был представлен[4].
Несмотря на то, что нейронные сети рассматриваются как "черный ящик" и интерпретировать их внутренности в понятных человеку терминах часто невозможно, все же механизм внимания интуитивно понятный людям смог улучшить результаты машинного перевода для алгоритма используемого в статье.
Успех этого использования этого подхода в задаче машинного перевода обусловлен лучшим выводом закономерностей между словами находящимися на большом расстоянии друг от друга. Несмотря на то, что LSTM и GRU блоки используются именно для улучшения передачи информации с предыдущих итераций RNN их основная проблема заключается в том, что влияние предыдущих состояний на текущее уменьшается экспоненциально от расстояния между словами, в то же время механизм внимания улучшает этот показатель до линейного.
RNN используются при обработке данных, для которых важна их последовательность. В классическом случае применения RNN результатом является только последнее скрытое состояние , где — длина последовательности входных данных. Использование механизма внимания позволяет использовать информацию полученную не только из последнего скрытого состояния, но и любого скрытого состояния для любого .
Обычно слой использующийся для механизма внимания представляет собой обычную, чаще всего однослойную, нейронную сеть на вход которой подаются
, а также вектор в котором содержится некий контекст зависящий от конкретно задачи.В случае Seq2seq сетей вектором
будет являться скрытое состояниеВыходом данного слоя будет является вектор
(англ. score) — оценки на основании которых на скрытое состояние будет "обращено внимание".Далее для нормализации значений [5]. Тогда
используетсяздесь используется благодоря своим свойствам:
Далее считается
(англ. context vector)
Результатом работы слоя внимания является
который, содержит в себе информацию обо всех скрытых состоянях пропорционально оценке .Базовая архитектура Seq2seq
Данный пример рассматривает применение механизма внимания в задаче машинного перевода в применении к архитектуре Seq2seq.
Seq2seq состоит из двух RNN — Энкодера и Декодера.
Энкодер — принимает предложение на языке A и сжимает его в вектор скрытого состояния.
Декодер — выдает слово на языке B, принимает последнее скрытое состояние энкодера и предыдущее предыдущее предсказаное слово.
Рассмотрим пример работы Seq2seq сети:
— слова в предложении на языке A.
— скрытое состояние энкодера.
Блоки энкодера (зеленый) — блоки энкодера получающие на вход
и передающие скрытое состояние на следующую итерацию.— скрытое состояние декодера.
— слова в предложении на языке B.
Блоки декодера (фиолетовый) — блоки декодера получающие на вход
или специальный токен start в случае первой итерации и возвращаюшие — слова в предложении на языке B. Передают — скрытое состояние декодера на следующую итерацию. Перевод считается завершенным при , равном специальному токену end.Применение механизма внимания для Seq2seq
При добавлении механизма в данную архитектуру между RNN Энкодер и Декодер слоя механизма внимания получится следуюшая схема:
Здесь
имеют те же назначения, что и в варианте без механизма внимания.Агрегатор скрытых состояний энкодера (желтый) — агрегирует в себе все вектора
и возвращает всю последовательность векторов .— вектор контекста на итерации .
Блоки механизма внимания (красный) — механизм внимания. Принимает
и , возвращает .Блоки декодера (фиолетовый) — по сравнению с обычной Seq2seq сетью меняются входные данные. Теперь на итерации
на вход подается не , а конкатенация и .Таким образом при помощи механизма внимания достигается "фокусирование" декодера на определенных скрытых состояниях. В случаях машинного перевода эта возможность помогает декодеру предсказывать на какие скрытые состояния при исходных определенных словах на языке A необходимо обратить больше внимания при переводе данного слова на язык B.
Self-Attention
TODO
См. также
Источники информации
- Статья о механизме внимания, его типах и разновидностях
- Лекция Andrew Ng о механизме внимания в NLP
- Статья с подробно разборанными примерами и кодом на Python и TensorFlow
- Статья c примерами работы Self-attention