Механизм внимания — различия между версиями
Gpevnev (обсуждение | вклад) |
Gpevnev (обсуждение | вклад) |
||
Строка 14: | Строка 14: | ||
====Базовая архитектура ''Seq2seq''==== | ====Базовая архитектура ''Seq2seq''==== | ||
− | [[File:Seq2SeqBasic.png| | + | [[File:Seq2SeqBasic.png|350px|thumb|Пример работы базовой ''Seq2seq'' сети]] |
Для понимания механизма внимания в ''Seq2seq'' сетях необходимо базовое понимание ''Seq2seq'' архитектуры до введения механизма внимания. | Для понимания механизма внимания в ''Seq2seq'' сетях необходимо базовое понимание ''Seq2seq'' архитектуры до введения механизма внимания. | ||
Строка 46: | Строка 46: | ||
[[:Рекуррентные_нейронные_сети|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| | + | [[File:AttentionGeneral.png|350px|thumb|Обобщенный механизм внимания в [[:Рекуррентные_нейронные_сети|RNN]]]] |
Слой механизма внимания представляет собой обычную, чаще всего однослойную, нейронную сеть на вход которой подаются <math>h_t, t = 1 \ \ldots m</math>, а также вектор <math>d</math> в котором содержится некий контекст зависящий от конкретной задачи. | Слой механизма внимания представляет собой обычную, чаще всего однослойную, нейронную сеть на вход которой подаются <math>h_t, t = 1 \ \ldots m</math>, а также вектор <math>d</math> в котором содержится некий контекст зависящий от конкретной задачи. | ||
Строка 67: | Строка 67: | ||
=====Применение механизма внимания к базовой ''Seq2seq'' архитектуре===== | =====Применение механизма внимания к базовой ''Seq2seq'' архитектуре===== | ||
− | [[File:Seq2SeqAttention.png| | + | [[File:Seq2SeqAttention.png|350px|thumb|Пример работы ''Seq2seq'' сети с механизмом внимания]] |
При добавлении механизма в данную архитектуру между [[:Рекуррентные_нейронные_сети|RNN]] ''Энкодером'' и ''Декодером'' слоя механизма внимания получится следующая схема: | При добавлении механизма в данную архитектуру между [[:Рекуррентные_нейронные_сети|RNN]] ''Энкодером'' и ''Декодером'' слоя механизма внимания получится следующая схема: | ||
Строка 83: | Строка 83: | ||
==Self-Attention== | ==Self-Attention== | ||
− | [[File:TransformerSelfAttentionVisualization.png| | + | [[File:TransformerSelfAttentionVisualization.png|250px|thumb|Пример работы ''Self-Attention'']] |
'''Self-Attention''' {{---}} разновидность внимания, задачей которой является выявление закономерности только между входными данными. Был представлен как один из способов повышения производительности в задачах [[:Обработка_естественного_языка|обработки естественного языка]], где ранее использовались [[:Рекуррентные_нейронные_сети|RNN]] в виде архитектуры трансформеров<ref>https://papers.nips.cc/paper/7181-attention-is-all-you-need.pdf</ref>. | '''Self-Attention''' {{---}} разновидность внимания, задачей которой является выявление закономерности только между входными данными. Был представлен как один из способов повышения производительности в задачах [[:Обработка_естественного_языка|обработки естественного языка]], где ранее использовались [[:Рекуррентные_нейронные_сети|RNN]] в виде архитектуры трансформеров<ref>https://papers.nips.cc/paper/7181-attention-is-all-you-need.pdf</ref>. | ||
Также ''Self-Attention'' успешно применяется применяется в [[:Generative_Adversarial_Nets_(GAN)|GAN]] сетях в алгоритме SAGAN<ref>https://arxiv.org/abs/1805.08318</ref>. | Также ''Self-Attention'' успешно применяется применяется в [[:Generative_Adversarial_Nets_(GAN)|GAN]] сетях в алгоритме SAGAN<ref>https://arxiv.org/abs/1805.08318</ref>. | ||
− | Основным отличием ''Self-Attention'' от [[:Механизм_внимания#Обобщенный механизм внимания|обобщенного механизма внимания]] является, что делает заключения о зависимостях исключительно между входными данными. | + | Основным отличием ''Self-Attention'' от [[:Механизм_внимания#Обобщенный механизм внимания|обобщенного механизма внимания]] является, что он делает заключения о зависимостях исключительно между входными данными. |
− | Рассмотрим предложение '''The animal didn't cross the street because it was too tired''' и результат работы алгоритма ''Self-attention'' для слова '''it'''. Полученный вектор соответствует взаимосвязи слова '''it''' со всеми остальными словам в предложении. Из визуализации вектора можно заметить, что механизм ''Self-attention'' обнаружил взаимосвязь между словами '''it''' и '''animal'''. Этот результат можно интуитивно объяснить с человеческой точки зрения, что и | + | Рассмотрим предложение '''The animal didn't cross the street because it was too tired''' и результат работы алгоритма ''Self-attention'' для слова '''it'''. Полученный вектор соответствует взаимосвязи слова '''it''' со всеми остальными словам в предложении. |
+ | Из визуализации вектора можно заметить, что механизм ''Self-attention'' обнаружил взаимосвязь между словами '''it''' и '''animal'''. Этот результат можно интуитивно объяснить с человеческой точки зрения, что и позволяет алгоритмам машинного обучения, использующих данный подход, лучше решать задачу принимая во внимание контекстные взаимосвязи. | ||
==См. также== | ==См. также== |
Версия 15:24, 22 марта 2020
Механизм внимания (англ. attention mechanism, attention model) — техника используемая в рекуррентных нейронных сетях (сокр. RNN) и сверточных нейронных сетях (сокр. CNN) для поиска взаимосвязей между различными частями входных и выходных данных.
(или проще для "обращения внимания" на определенные части входных данных в зависимости от текущего контекста. (как лучше?))
Изначально механизм внимания был представлен в контексте рекуррентных Seq2seq[1] сетей [2] для "обращения внимания" блоков декодеров на скрытые состояния RNN для любой итерации энкодера, а не только последней.
После успеха этой методики в машинном переводе последовали ее внедрения в других задачах обработки естественного языка и применения к CNN для генерации описания изображения[3] и GAN [4].
Содержание
Обобщенный механизм внимания
Обобщенный механизм внимания (англ. general attention) — разновидность внимания, задачей которой является выявление закономерности между входными и выходными данными. Изначально механизм внимания представленный в оригинальной подразумевал именно этот тип внимания.
Пример использования обобщенного механизма внимания для задачи машинного перевода
Для лучшего понимания работы обобщенного механизма внимания будет рассмотрен пример его применения в задаче машинного перевода при помощи Seq2seq сетей для решения которой он изначально был представлен.
Базовая архитектура Seq2seq
Для понимания механизма внимания в Seq2seq сетях необходимо базовое понимание Seq2seq архитектуры до введения механизма внимания.
Seq2seq состоит из двух RNN — Энкодера и Декодера.
Энкодер — принимает предложение на языке A и сжимает его в вектор скрытого состояния.
Декодер — выдает слово на языке B, принимает последнее скрытое состояние энкодера и предыдущее предыдущее предсказанное слово.
Рассмотрим пример работы Seq2seq сети:
— слова в предложении на языке A.
— скрытое состояние энкодера.
Блоки энкодера (зеленый) — блоки энкодера получающие на вход
и передающие скрытое состояние на следующую итерацию.— скрытое состояние декодера.
— слова в предложении на языке B.
Блоки декодера (фиолетовый) — блоки декодера получающие на вход
или специальный токен start в случае первой итерации и возвращаюшие — слова в предложении на языке B. Передают — скрытое состояние декодера на следующую итерацию. Перевод считается завершенным при , равном специальному токену end.Применение механизма внимания для Seq2seq
Несмотря на то, что нейронные сети рассматриваются как "черный ящик" и интерпретировать их внутренности в понятных человеку терминах часто невозможно, все же механизм внимания интуитивно понятный людям смог улучшить качество машинного перевода базового Seq2seq алгоритма.
Успех использования этого подхода в задаче машинного перевода обусловлен лучшим выводом закономерностей между словами находящимися на большом расстоянии друг от друга. Несмотря на то, что LSTM и GRU блоки используются именно для улучшения передачи информации с предыдущих итераций RNN их основная проблема заключается в том, что влияние предыдущих состояний на текущее уменьшается экспоненциально от расстояния между словами, в то же время механизм внимания улучшает этот показатель до линейного[5].
RNN используются при обработке данных, для которых важна их последовательность. В классическом случае применения RNN результатом является только последнее скрытое состояние , где — длина последовательности входных данных. Использование механизма внимания позволяет использовать информацию полученную не только из последнего скрытого состояния, но и любого скрытого состояния для любого .
Устройство слоя механизма внимания
Слой механизма внимания представляет собой обычную, чаще всего однослойную, нейронную сеть на вход которой подаются
, а также вектор в котором содержится некий контекст зависящий от конкретной задачи.В случае Seq2seq сетей вектором
будет являться скрытое состояние предыдущей итерации декодера.Выходом данного слоя будет является вектор
(англ. score) — оценки на основании которых на скрытое состояние будет "обращено внимание".Далее для нормализации значений [6]. Тогда
используетсяздесь используется благодаря своим свойствам:
Далее считается
(англ. context vector)
Результатом работы слоя внимания является
который, содержит в себе информацию обо всех скрытых состояниях пропорционально оценке .Применение механизма внимания к базовой Seq2seq архитектуре
При добавлении механизма в данную архитектуру между RNN Энкодером и Декодером слоя механизма внимания получится следующая схема:
Здесь
имеют те же назначения, что и в варианте без механизма внимания.Агрегатор скрытых состояний энкодера (желтый) — агрегирует в себе все вектора
и возвращает всю последовательность векторов .— вектор контекста на итерации .
Блоки механизма внимания (красный) — принимает
и , возвращает .Блоки декодера (фиолетовый) — по сравнению с обычной Seq2seq сетью меняются входные данные. Теперь на итерации
на вход подается не , а конкатенация и .Таким образом при помощи механизма внимания достигается "фокусирование" декодера на определенных скрытых состояниях. В случаях машинного перевода эта возможность помогает декодеру предсказывать на какие скрытые состояния при исходных определенных словах на языке A необходимо обратить больше внимания при переводе данного слова на язык B. То есть на какие слова из исходного текста обратить внимание при переводе конкретного слова на язык назначения.
Self-Attention
Self-Attention — разновидность внимания, задачей которой является выявление закономерности только между входными данными. Был представлен как один из способов повышения производительности в задачах обработки естественного языка, где ранее использовались RNN в виде архитектуры трансформеров[7].
Также Self-Attention успешно применяется применяется в GAN сетях в алгоритме SAGAN[8].
Основным отличием Self-Attention от обобщенного механизма внимания является, что он делает заключения о зависимостях исключительно между входными данными.
Рассмотрим предложение The animal didn't cross the street because it was too tired и результат работы алгоритма Self-attention для слова it. Полученный вектор соответствует взаимосвязи слова it со всеми остальными словам в предложении. Из визуализации вектора можно заметить, что механизм Self-attention обнаружил взаимосвязь между словами it и animal. Этот результат можно интуитивно объяснить с человеческой точки зрения, что и позволяет алгоритмам машинного обучения, использующих данный подход, лучше решать задачу принимая во внимание контекстные взаимосвязи.
См. также
Источники информации
- Статья о механизме внимания, его типах и разновидностях
- Лекция Andrew Ng о механизме внимания в NLP
- Статья с подробно разборанными примерами и кодом на Python и TensorFlow
- Статья c примерами работы Self-attention
Примечания
- ↑ Wiki -- Seq2seq
- ↑ https://arxiv.org/abs/1409.0473
- ↑ https://arxiv.org/abs/1502.03044
- ↑ https://arxiv.org/abs/1805.08318
- ↑ https://towardsdatascience.com/transformers-141e32e69591
- ↑ Wiki -- Функция softmax
- ↑ https://papers.nips.cc/paper/7181-attention-is-all-you-need.pdf
- ↑ https://arxiv.org/abs/1805.08318