<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Gpevnev</id>
		<title>Викиконспекты - Вклад участника [ru]</title>
		<link rel="self" type="application/atom+xml" href="http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Gpevnev"/>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/Gpevnev"/>
		<updated>2026-08-06T09:36:10Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=73142</id>
		<title>Механизм внимания</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=73142"/>
				<updated>2020-03-22T20:40:56Z</updated>
		
		<summary type="html">&lt;p&gt;Gpevnev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Механизм внимания''' (англ. ''attention mechanism'', ''attention model'') {{---}} техника используемая в [[:Рекуррентные_нейронные_сети|рекуррентных нейронных сетях]] (сокр. ''RNN'') и [[:Сверточные_нейронные_сети|сверточных нейронных сетях]] (сокр. ''CNN'') для поиска взаимосвязей между различными частями входных и выходных данных.&lt;br /&gt;
&lt;br /&gt;
Изначально механизм внимания был представлен в контексте [[:Рекуррентные_нейронные_сети|рекуррентных]] ''Seq2seq''&amp;lt;ref&amp;gt;[https://en.wikipedia.org/wiki/Seq2seq Wiki -- Seq2seq]&amp;lt;/ref&amp;gt; сетей &amp;lt;ref&amp;gt;https://arxiv.org/abs/1409.0473&amp;lt;/ref&amp;gt; для &amp;quot;обращения внимания&amp;quot; блоков декодеров на скрытые состояния [[:Рекуррентные_нейронные_сети|RNN]] для любой итерации энкодера, а не только последней.&lt;br /&gt;
 &lt;br /&gt;
После успеха этой методики в машинном переводе последовали ее внедрения в других задачах [[:Обработка_естественного_языка|обработки естественного языка]] и применения к [[:Сверточные_нейронные_сети|CNN]] для генерации описания изображения&amp;lt;ref&amp;gt;https://arxiv.org/abs/1502.03044&amp;lt;/ref&amp;gt; и [[:Generative_Adversarial_Nets_(GAN)|порождающих состязательных сетях]]&amp;lt;ref&amp;gt;https://arxiv.org/abs/1805.08318&amp;lt;/ref&amp;gt; (сокр. ''GAN'').&lt;br /&gt;
&lt;br /&gt;
==Обобщенный механизм внимания==&lt;br /&gt;
'''Обобщенный механизм внимания''' (англ. general attention) {{---}} разновидность механизма внимания, задачей которой является выявление закономерности между входными и выходными данными. Изначально механизм внимания представленный в оригинальной статье&amp;lt;ref&amp;gt;https://arxiv.org/abs/1409.0473&amp;lt;/ref&amp;gt; подразумевал именно этот тип внимания. &lt;br /&gt;
&lt;br /&gt;
===Пример использования обобщенного механизма внимания для задачи машинного перевода===&lt;br /&gt;
Для лучшего понимания работы обобщенного механизма внимания будет рассмотрен пример его применения в задаче машинного перевода при помощи Seq2seq сетей для решения которой он изначально был представлен.&lt;br /&gt;
&lt;br /&gt;
====Базовая архитектура ''Seq2seq''====&lt;br /&gt;
[[File:Seq2SeqBasic.png|350px|thumb|Пример работы базовой ''Seq2seq'' сети]]&lt;br /&gt;
Для понимания механизма внимания в ''Seq2seq'' сетях необходимо базовое понимание ''Seq2seq'' архитектуры до введения механизма внимания.&lt;br /&gt;
&lt;br /&gt;
''Seq2seq'' состоит из двух [[:Рекуррентные_нейронные_сети|RNN]] {{---}} ''Энкодера'' и ''Декодера''.&lt;br /&gt;
&lt;br /&gt;
''Энкодер'' {{---}} принимает предложение на языке ''A'' и сжимает его в вектор скрытого состояния.&lt;br /&gt;
&lt;br /&gt;
''Декодер'' {{---}} выдает слово на языке ''B'', принимает последнее скрытое состояние энкодера и предыдущее предыдущее предсказанное слово.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим пример работы ''Seq2seq'' сети:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''A''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние энкодера.&lt;br /&gt;
&lt;br /&gt;
''Блоки энкодера (зеленый)'' {{---}} блоки энкодера получающие на вход &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; и передающие скрытое состояние &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; на следующую итерацию.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние декодера.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''B''.&lt;br /&gt;
&lt;br /&gt;
''Блоки декодера (фиолетовый)'' {{---}} блоки декодера получающие на вход &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt; или специальный токен '''start''' в случае первой итерации и возвращаюшие &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''B''. &lt;br /&gt;
Передают &amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние декодера на следующую итерацию. &lt;br /&gt;
Перевод считается завершенным при &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt;, равном специальному токену '''end'''.&lt;br /&gt;
&lt;br /&gt;
====Применение механизма внимания для ''Seq2seq''====&lt;br /&gt;
Несмотря на то, что нейронные сети рассматриваются как &amp;quot;черный ящик&amp;quot; и интерпретировать их внутренности в понятных человеку терминах часто невозможно, все же механизм внимания интуитивно понятный людям смог улучшить качество машинного перевода базового ''Seq2seq'' алгоритма.&lt;br /&gt;
&lt;br /&gt;
Успех использования этого подхода в задаче машинного перевода обусловлен лучшим выводом закономерностей между словами находящимися на большом расстоянии друг от друга. Несмотря на то, что [[:Долгая_краткосрочная_память|LSTM и GRU]] блоки используются именно для улучшения передачи информации с предыдущих итераций [[:Рекуррентные_нейронные_сети|RNN]] их основная проблема заключается в том, что влияние предыдущих состояний на текущее уменьшается экспоненциально от расстояния между словами, в то же время механизм внимания улучшает этот показатель до линейного&amp;lt;ref&amp;gt;https://towardsdatascience.com/transformers-141e32e69591&amp;lt;/ref&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
[[:Рекуррентные_нейронные_сети|RNN]] используются при обработке данных, для которых важна их последовательность. В классическом случае применения [[:Рекуррентные_нейронные_сети|RNN]] результатом является только последнее скрытое состояние &amp;lt;math&amp;gt;h_m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; {{---}} длина последовательности входных данных. Использование механизма внимания позволяет использовать информацию полученную не только из последнего скрытого состояния, но и любого скрытого состояния &amp;lt;math&amp;gt;h_t&amp;lt;/math&amp;gt; для любого &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;.&lt;br /&gt;
=====Устройство слоя механизма внимания=====&lt;br /&gt;
[[File:AttentionGeneral.png|350px|thumb|Обобщенный механизм внимания в [[:Рекуррентные_нейронные_сети|RNN]]]]&lt;br /&gt;
Слой механизма внимания представляет собой обычную, чаще всего однослойную, нейронную сеть на вход которой подаются &amp;lt;math&amp;gt;h_t, t = 1 \  \ldots m&amp;lt;/math&amp;gt;, а также вектор &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; в котором содержится некий контекст зависящий от конкретной задачи.&lt;br /&gt;
&lt;br /&gt;
В случае ''Seq2seq'' сетей вектором &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; будет являться скрытое состояние &amp;lt;math&amp;gt;d_{i-1}&amp;lt;/math&amp;gt; предыдущей итерации декодера.&lt;br /&gt;
&lt;br /&gt;
Выходом данного слоя будет является вектор &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; (англ. ''score'') {{---}} оценки на основании которых на скрытое состояние &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; будет &amp;quot;обращено внимание&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Далее для нормализации значений &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; используется &amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt;[https://ru.wikipedia.org/wiki/Softmax Wiki -- Функция softmax]&amp;lt;/ref&amp;gt;. Тогда &amp;lt;math&amp;gt;e = softmax(s)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt; здесь используется благодаря своим свойствам:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;\forall s\colon\  \sum_{i=1}^n softmax(s)_i = 1, &amp;lt;/math&amp;gt;&lt;br /&gt;
*&amp;lt;math&amp;gt;\forall s,\ i\colon \ softmax(s)_i &amp;gt;= 0 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Далее считается &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; (англ. ''context vector'') &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;с = \sum_{i=1}^m e_i h_i&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результатом работы слоя внимания является &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; который, содержит в себе информацию обо всех скрытых состояниях &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; пропорционально оценке &amp;lt;math&amp;gt;e_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=====Применение механизма внимания к базовой ''Seq2seq'' архитектуре=====&lt;br /&gt;
[[File:Seq2SeqAttention.png|350px|thumb|Пример работы ''Seq2seq'' сети с механизмом внимания]]&lt;br /&gt;
При добавлении механизма в данную архитектуру между [[:Рекуррентные_нейронные_сети|RNN]] ''Энкодером'' и ''Декодером'' слоя механизма внимания получится следующая схема:&lt;br /&gt;
&lt;br /&gt;
Здесь &amp;lt;math&amp;gt;x_i, h_i, d_i, y_i&amp;lt;/math&amp;gt; имеют те же назначения, что и в варианте без механизма внимания.&lt;br /&gt;
&lt;br /&gt;
''Агрегатор скрытых состояний энкодера (желтый)'' {{---}} агрегирует в себе все вектора &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; и возвращает всю последовательность векторов &amp;lt;math&amp;gt;h = [h_1, h_2, h_3, h_4]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt; {{---}} вектор контекста на итерации &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Блоки механизма внимания (красный)'' {{---}} принимает &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;d_{i - 1}&amp;lt;/math&amp;gt;, возвращает &amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Блоки декодера (фиолетовый)'' {{---}} по сравнению с обычной ''Seq2seq'' сетью меняются входные данные. Теперь на итерации &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; на вход подается не &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt;, а конкатенация &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом при помощи механизма внимания достигается &amp;quot;фокусирование&amp;quot; декодера на определенных скрытых состояниях. В случаях машинного перевода эта возможность помогает декодеру предсказывать на какие скрытые состояния при исходных определенных словах на языке ''A'' необходимо обратить больше внимания при переводе данного слова на язык ''B''. То есть на какие слова из исходного текста обратить внимание при переводе конкретного слова на язык назначения.&lt;br /&gt;
&lt;br /&gt;
==Self-Attention==&lt;br /&gt;
[[File:TransformerSelfAttentionVisualization.png|250px|thumb|Пример работы ''Self-Attention'']]&lt;br /&gt;
'''Self-Attention''' {{---}} разновидность механизма внимания, задачей которой является выявление закономерности только между входными данными. &lt;br /&gt;
&lt;br /&gt;
Данная методика показала себя настолько эффективной в задаче машинного перевода, что позволила отказаться от использования [[:Рекуррентные_нейронные_сети|RNN]] и заменить их на обычные нейронные сети в комбинации с механизмом ''Self-attention'' в архитектуре трансформер&amp;lt;ref&amp;gt;https://papers.nips.cc/paper/7181-attention-is-all-you-need.pdf&amp;lt;/ref&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Это позволило ускорить работу алгоритма, поскольку ранее предложение обрабатывалось последовательно при помощи [[:Рекуррентные_нейронные_сети|RNN]]. При использовании трансформера каждое слово в предложении обрабатывается может обрабатываться параллельно.&lt;br /&gt;
&lt;br /&gt;
Основным отличием ''Self-Attention'' от [[:Механизм_внимания#Обобщенный механизм внимания|обобщенного механизма внимания]] является, что он делает заключения о зависимостях исключительно между входными данными.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим предложение '''The animal didn't cross the street because it was too tired''' и результат работы алгоритма ''Self-attention'' для слова '''it'''. Полученный вектор соответствует взаимосвязи слова '''it''' со всеми остальными словам в предложении. &lt;br /&gt;
&lt;br /&gt;
Из визуализации вектора можно заметить, что механизм ''Self-attention'' обнаружил взаимосвязь между словами '''it''' и '''animal'''. Этот результат можно интуитивно объяснить с человеческой точки зрения, что позволяет алгоритмам машинного обучения, использующим данный подход, лучше решать задачу принимая во внимание контекстные взаимосвязи.&lt;br /&gt;
&lt;br /&gt;
Также ''Self-Attention'' успешно применяется применяется в [[:Generative_Adversarial_Nets_(GAN)|GAN]] сетях, в частности в алгоритме SAGAN&amp;lt;ref&amp;gt;https://arxiv.org/abs/1805.08318&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
*[[:Сверточные_нейронные_сети|Сверточные нейронные сети]]&lt;br /&gt;
*[[:Нейронные_сети,_перцептрон|Нейронные сети, перцептрон]]&lt;br /&gt;
*[[:Рекуррентные_нейронные_сети|Рекуррентные нейронные сети]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
*[https://blog.floydhub.com/attention-mechanism/amp/ Статья о механизме внимания, его типах и разновидностях]&lt;br /&gt;
*[https://www.coursera.org/lecture/nlp-sequence-models/attention-model-lSwVa Лекция Andrew Ng о механизме внимания в NLP]&lt;br /&gt;
*[https://towardsdatascience.com/intuitive-understanding-of-attention-mechanism-in-deep-learning-6c9482aecf4f Статья с подробно разборанными примерами и кодом на ''Python'' и ''TensorFlow'']&lt;br /&gt;
*[http://jalammar.github.io/illustrated-transformer/ Статья c примерами работы Self-attention]&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Нейронные сети]]&lt;br /&gt;
[[Категория: Рекуррентные нейронные сети]]&lt;/div&gt;</summary>
		<author><name>Gpevnev</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=73141</id>
		<title>Механизм внимания</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=73141"/>
				<updated>2020-03-22T20:40:09Z</updated>
		
		<summary type="html">&lt;p&gt;Gpevnev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Механизм внимания''' (англ. ''attention mechanism'', ''attention model'') {{---}} техника используемая в [[:Рекуррентные_нейронные_сети|рекуррентных нейронных сетях]] (сокр. ''RNN'') и [[:Сверточные_нейронные_сети|сверточных нейронных сетях]] (сокр. ''CNN'') для поиска взаимосвязей между различными частями входных и выходных данных.&lt;br /&gt;
&lt;br /&gt;
Изначально механизм внимания был представлен в контексте [[:Рекуррентные_нейронные_сети|рекуррентных]] ''Seq2seq''&amp;lt;ref&amp;gt;[https://en.wikipedia.org/wiki/Seq2seq Wiki -- Seq2seq]&amp;lt;/ref&amp;gt; сетей &amp;lt;ref&amp;gt;https://arxiv.org/abs/1409.0473&amp;lt;/ref&amp;gt; для &amp;quot;обращения внимания&amp;quot; блоков декодеров на скрытые состояния [[:Рекуррентные_нейронные_сети|RNN]] для любой итерации энкодера, а не только последней.&lt;br /&gt;
 &lt;br /&gt;
После успеха этой методики в машинном переводе последовали ее внедрения в других задачах [[:Обработка_естественного_языка|обработки естественного языка]] и применения к [[:Сверточные_нейронные_сети|CNN]] для генерации описания изображения&amp;lt;ref&amp;gt;https://arxiv.org/abs/1502.03044&amp;lt;/ref&amp;gt; и [[:Generative_Adversarial_Nets_(GAN)|порождающих состязательных сетях]]&amp;lt;ref&amp;gt;https://arxiv.org/abs/1805.08318&amp;lt;/ref&amp;gt; (сокр. ''GAN'').&lt;br /&gt;
&lt;br /&gt;
==Обобщенный механизм внимания==&lt;br /&gt;
'''Обобщенный механизм внимания''' (англ. general attention) {{---}} разновидность механизма внимания, задачей которой является выявление закономерности между входными и выходными данными. Изначально механизм внимания представленный в оригинальной статье&amp;lt;ref&amp;gt;https://arxiv.org/abs/1409.0473&amp;lt;/ref&amp;gt; подразумевал именно этот тип внимания. &lt;br /&gt;
&lt;br /&gt;
===Пример использования обобщенного механизма внимания для задачи машинного перевода===&lt;br /&gt;
Для лучшего понимания работы обобщенного механизма внимания будет рассмотрен пример его применения в задаче машинного перевода при помощи Seq2seq сетей для решения которой он изначально был представлен.&lt;br /&gt;
&lt;br /&gt;
====Базовая архитектура ''Seq2seq''====&lt;br /&gt;
[[File:Seq2SeqBasic.png|350px|thumb|Пример работы базовой ''Seq2seq'' сети]]&lt;br /&gt;
Для понимания механизма внимания в ''Seq2seq'' сетях необходимо базовое понимание ''Seq2seq'' архитектуры до введения механизма внимания.&lt;br /&gt;
&lt;br /&gt;
''Seq2seq'' состоит из двух [[:Рекуррентные_нейронные_сети|RNN]] {{---}} ''Энкодера'' и ''Декодера''.&lt;br /&gt;
&lt;br /&gt;
''Энкодер'' {{---}} принимает предложение на языке ''A'' и сжимает его в вектор скрытого состояния.&lt;br /&gt;
&lt;br /&gt;
''Декодер'' {{---}} выдает слово на языке ''B'', принимает последнее скрытое состояние энкодера и предыдущее предыдущее предсказанное слово.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим пример работы ''Seq2seq'' сети:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''A''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние энкодера.&lt;br /&gt;
&lt;br /&gt;
''Блоки энкодера (зеленый)'' {{---}} блоки энкодера получающие на вход &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; и передающие скрытое состояние &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; на следующую итерацию.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние декодера.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''B''.&lt;br /&gt;
&lt;br /&gt;
''Блоки декодера (фиолетовый)'' {{---}} блоки декодера получающие на вход &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt; или специальный токен '''start''' в случае первой итерации и возвращаюшие &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''B''. &lt;br /&gt;
Передают &amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние декодера на следующую итерацию. &lt;br /&gt;
Перевод считается завершенным при &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt;, равном специальному токену '''end'''.&lt;br /&gt;
&lt;br /&gt;
====Применение механизма внимания для ''Seq2seq''====&lt;br /&gt;
Несмотря на то, что нейронные сети рассматриваются как &amp;quot;черный ящик&amp;quot; и интерпретировать их внутренности в понятных человеку терминах часто невозможно, все же механизм внимания интуитивно понятный людям смог улучшить качество машинного перевода базового ''Seq2seq'' алгоритма.&lt;br /&gt;
&lt;br /&gt;
Успех использования этого подхода в задаче машинного перевода обусловлен лучшим выводом закономерностей между словами находящимися на большом расстоянии друг от друга. Несмотря на то, что [[:Долгая_краткосрочная_память|LSTM и GRU]] блоки используются именно для улучшения передачи информации с предыдущих итераций [[:Рекуррентные_нейронные_сети|RNN]] их основная проблема заключается в том, что влияние предыдущих состояний на текущее уменьшается экспоненциально от расстояния между словами, в то же время механизм внимания улучшает этот показатель до линейного&amp;lt;ref&amp;gt;https://towardsdatascience.com/transformers-141e32e69591&amp;lt;/ref&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
[[:Рекуррентные_нейронные_сети|RNN]] используются при обработке данных, для которых важна их последовательность. В классическом случае применения [[:Рекуррентные_нейронные_сети|RNN]] результатом является только последнее скрытое состояние &amp;lt;math&amp;gt;h_m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; {{---}} длина последовательности входных данных. Использование механизма внимания позволяет использовать информацию полученную не только из последнего скрытого состояния, но и любого скрытого состояния &amp;lt;math&amp;gt;h_t&amp;lt;/math&amp;gt; для любого &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;.&lt;br /&gt;
=====Устройство слоя механизма внимания=====&lt;br /&gt;
[[File:AttentionGeneral.png|350px|thumb|Обобщенный механизм внимания в [[:Рекуррентные_нейронные_сети|RNN]]]]&lt;br /&gt;
Слой механизма внимания представляет собой обычную, чаще всего однослойную, нейронную сеть на вход которой подаются &amp;lt;math&amp;gt;h_t, t = 1 \  \ldots m&amp;lt;/math&amp;gt;, а также вектор &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; в котором содержится некий контекст зависящий от конкретной задачи.&lt;br /&gt;
&lt;br /&gt;
В случае ''Seq2seq'' сетей вектором &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; будет являться скрытое состояние &amp;lt;math&amp;gt;d_{i-1}&amp;lt;/math&amp;gt; предыдущей итерации декодера.&lt;br /&gt;
&lt;br /&gt;
Выходом данного слоя будет является вектор &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; (англ. ''score'') {{---}} оценки на основании которых на скрытое состояние &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; будет &amp;quot;обращено внимание&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Далее для нормализации значений &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; используется &amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt;[https://ru.wikipedia.org/wiki/Softmax Wiki -- Функция softmax]&amp;lt;/ref&amp;gt;. Тогда &amp;lt;math&amp;gt;e = softmax(s)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt; здесь используется благодаря своим свойствам:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;\forall s\colon\  \sum_{i=1}^n softmax(s)_i = 1, &amp;lt;/math&amp;gt;&lt;br /&gt;
*&amp;lt;math&amp;gt;\forall s,\ i\colon \ softmax(s)_i &amp;gt;= 0 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Далее считается &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; (англ. ''context vector'') &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;с = \sum_{i=1}^m e_i h_i&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результатом работы слоя внимания является &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; который, содержит в себе информацию обо всех скрытых состояниях &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; пропорционально оценке &amp;lt;math&amp;gt;e_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=====Применение механизма внимания к базовой ''Seq2seq'' архитектуре=====&lt;br /&gt;
[[File:Seq2SeqAttention.png|350px|thumb|Пример работы ''Seq2seq'' сети с механизмом внимания]]&lt;br /&gt;
При добавлении механизма в данную архитектуру между [[:Рекуррентные_нейронные_сети|RNN]] ''Энкодером'' и ''Декодером'' слоя механизма внимания получится следующая схема:&lt;br /&gt;
&lt;br /&gt;
Здесь &amp;lt;math&amp;gt;x_i, h_i, d_i, y_i&amp;lt;/math&amp;gt; имеют те же назначения, что и в варианте без механизма внимания.&lt;br /&gt;
&lt;br /&gt;
''Агрегатор скрытых состояний энкодера (желтый)'' {{---}} агрегирует в себе все вектора &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; и возвращает всю последовательность векторов &amp;lt;math&amp;gt;h = [h_1, h_2, h_3, h_4]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt; {{---}} вектор контекста на итерации &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Блоки механизма внимания (красный)'' {{---}} принимает &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;d_{i - 1}&amp;lt;/math&amp;gt;, возвращает &amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Блоки декодера (фиолетовый)'' {{---}} по сравнению с обычной ''Seq2seq'' сетью меняются входные данные. Теперь на итерации &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; на вход подается не &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt;, а конкатенация &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом при помощи механизма внимания достигается &amp;quot;фокусирование&amp;quot; декодера на определенных скрытых состояниях. В случаях машинного перевода эта возможность помогает декодеру предсказывать на какие скрытые состояния при исходных определенных словах на языке ''A'' необходимо обратить больше внимания при переводе данного слова на язык ''B''. То есть на какие слова из исходного текста обратить внимание при переводе конкретного слова на язык назначения.&lt;br /&gt;
&lt;br /&gt;
==Self-Attention==&lt;br /&gt;
[[File:TransformerSelfAttentionVisualization.png|250px|thumb|Пример работы ''Self-Attention'']]&lt;br /&gt;
'''Self-Attention''' {{---}} разновидность механизма внимания, задачей которой является выявление закономерности только между входными данными. &lt;br /&gt;
&lt;br /&gt;
Данная методика показала себя настолько эффективной в задаче машинного перевода, что позволила отказаться от использования [[:Рекуррентные_нейронные_сети|RNN]] и заменить их на обычные нейронные сети в комбинации с механизмом ''Self-attention'' в архитектуре трансформер&amp;lt;ref&amp;gt;https://papers.nips.cc/paper/7181-attention-is-all-you-need.pdf&amp;lt;/ref&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Это позволило ускорить работу алгоритма, поскольку ранее предложение обрабатывалось последовательно при помощи [[:Рекуррентные_нейронные_сети|RNN]]. При использовании трансформера каждое слово в предложении обрабатывается может обрабатываться параллельно.&lt;br /&gt;
&lt;br /&gt;
Основным отличием ''Self-Attention'' от [[:Механизм_внимания#Обобщенный механизм внимания|обобщенного механизма внимания]] является, что он делает заключения о зависимостях исключительно между входными данными.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим предложение '''The animal didn't cross the street because it was too tired''' и результат работы алгоритма ''Self-attention'' для слова '''it'''. Полученный вектор соответствует взаимосвязи слова '''it''' со всеми остальными словам в предложении. &lt;br /&gt;
&lt;br /&gt;
Из визуализации вектора можно заметить, что механизм ''Self-attention'' обнаружил взаимосвязь между словами '''it''' и '''animal'''. Этот результат можно интуитивно объяснить с человеческой точки зрения, что позволяет алгоритмам машинного обучения, использующим данный подход, лучше решать задачу принимая во внимание контекстные взаимосвязи.&lt;br /&gt;
&lt;br /&gt;
Также ''Self-Attention'' успешно применяется применяется в [[:Generative_Adversarial_Nets_(GAN)|GAN]] сетях, частности в алгоритме SAGAN&amp;lt;ref&amp;gt;https://arxiv.org/abs/1805.08318&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
*[[:Сверточные_нейронные_сети|Сверточные нейронные сети]]&lt;br /&gt;
*[[:Нейронные_сети,_перцептрон|Нейронные сети, перцептрон]]&lt;br /&gt;
*[[:Рекуррентные_нейронные_сети|Рекуррентные нейронные сети]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
*[https://blog.floydhub.com/attention-mechanism/amp/ Статья о механизме внимания, его типах и разновидностях]&lt;br /&gt;
*[https://www.coursera.org/lecture/nlp-sequence-models/attention-model-lSwVa Лекция Andrew Ng о механизме внимания в NLP]&lt;br /&gt;
*[https://towardsdatascience.com/intuitive-understanding-of-attention-mechanism-in-deep-learning-6c9482aecf4f Статья с подробно разборанными примерами и кодом на ''Python'' и ''TensorFlow'']&lt;br /&gt;
*[http://jalammar.github.io/illustrated-transformer/ Статья c примерами работы Self-attention]&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Нейронные сети]]&lt;br /&gt;
[[Категория: Рекуррентные нейронные сети]]&lt;/div&gt;</summary>
		<author><name>Gpevnev</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=73140</id>
		<title>Механизм внимания</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=73140"/>
				<updated>2020-03-22T20:39:34Z</updated>
		
		<summary type="html">&lt;p&gt;Gpevnev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Механизм внимания''' (англ. ''attention mechanism'', ''attention model'') {{---}} техника используемая в [[:Рекуррентные_нейронные_сети|рекуррентных нейронных сетях]] (сокр. ''RNN'') и [[:Сверточные_нейронные_сети|сверточных нейронных сетях]] (сокр. ''CNN'') для поиска взаимосвязей между различными частями входных и выходных данных.&lt;br /&gt;
&lt;br /&gt;
Изначально механизм внимания был представлен в контексте [[:Рекуррентные_нейронные_сети|рекуррентных]] ''Seq2seq''&amp;lt;ref&amp;gt;[https://en.wikipedia.org/wiki/Seq2seq Wiki -- Seq2seq]&amp;lt;/ref&amp;gt; сетей &amp;lt;ref&amp;gt;https://arxiv.org/abs/1409.0473&amp;lt;/ref&amp;gt; для &amp;quot;обращения внимания&amp;quot; блоков декодеров на скрытые состояния [[:Рекуррентные_нейронные_сети|RNN]] для любой итерации энкодера, а не только последней.&lt;br /&gt;
 &lt;br /&gt;
После успеха этой методики в машинном переводе последовали ее внедрения в других задачах [[:Обработка_естественного_языка|обработки естественного языка]] и применения к [[:Сверточные_нейронные_сети|CNN]] для генерации описания изображения&amp;lt;ref&amp;gt;https://arxiv.org/abs/1502.03044&amp;lt;/ref&amp;gt; и [[:Generative_Adversarial_Nets_(GAN)|порождающих состязательных сетях]]&amp;lt;ref&amp;gt;https://arxiv.org/abs/1805.08318&amp;lt;/ref&amp;gt; (сокр. ''GAN'').&lt;br /&gt;
&lt;br /&gt;
==Обобщенный механизм внимания==&lt;br /&gt;
'''Обобщенный механизм внимания''' (англ. general attention) {{---}} разновидность внимания, задачей которой является выявление закономерности между входными и выходными данными. Изначально механизм внимания представленный в оригинальной статье&amp;lt;ref&amp;gt;https://arxiv.org/abs/1409.0473&amp;lt;/ref&amp;gt; подразумевал именно этот тип внимания. &lt;br /&gt;
&lt;br /&gt;
===Пример использования обобщенного механизма внимания для задачи машинного перевода===&lt;br /&gt;
Для лучшего понимания работы обобщенного механизма внимания будет рассмотрен пример его применения в задаче машинного перевода при помощи Seq2seq сетей для решения которой он изначально был представлен.&lt;br /&gt;
&lt;br /&gt;
====Базовая архитектура ''Seq2seq''====&lt;br /&gt;
[[File:Seq2SeqBasic.png|350px|thumb|Пример работы базовой ''Seq2seq'' сети]]&lt;br /&gt;
Для понимания механизма внимания в ''Seq2seq'' сетях необходимо базовое понимание ''Seq2seq'' архитектуры до введения механизма внимания.&lt;br /&gt;
&lt;br /&gt;
''Seq2seq'' состоит из двух [[:Рекуррентные_нейронные_сети|RNN]] {{---}} ''Энкодера'' и ''Декодера''.&lt;br /&gt;
&lt;br /&gt;
''Энкодер'' {{---}} принимает предложение на языке ''A'' и сжимает его в вектор скрытого состояния.&lt;br /&gt;
&lt;br /&gt;
''Декодер'' {{---}} выдает слово на языке ''B'', принимает последнее скрытое состояние энкодера и предыдущее предыдущее предсказанное слово.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим пример работы ''Seq2seq'' сети:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''A''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние энкодера.&lt;br /&gt;
&lt;br /&gt;
''Блоки энкодера (зеленый)'' {{---}} блоки энкодера получающие на вход &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; и передающие скрытое состояние &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; на следующую итерацию.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние декодера.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''B''.&lt;br /&gt;
&lt;br /&gt;
''Блоки декодера (фиолетовый)'' {{---}} блоки декодера получающие на вход &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt; или специальный токен '''start''' в случае первой итерации и возвращаюшие &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''B''. &lt;br /&gt;
Передают &amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние декодера на следующую итерацию. &lt;br /&gt;
Перевод считается завершенным при &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt;, равном специальному токену '''end'''.&lt;br /&gt;
&lt;br /&gt;
====Применение механизма внимания для ''Seq2seq''====&lt;br /&gt;
Несмотря на то, что нейронные сети рассматриваются как &amp;quot;черный ящик&amp;quot; и интерпретировать их внутренности в понятных человеку терминах часто невозможно, все же механизм внимания интуитивно понятный людям смог улучшить качество машинного перевода базового ''Seq2seq'' алгоритма.&lt;br /&gt;
&lt;br /&gt;
Успех использования этого подхода в задаче машинного перевода обусловлен лучшим выводом закономерностей между словами находящимися на большом расстоянии друг от друга. Несмотря на то, что [[:Долгая_краткосрочная_память|LSTM и GRU]] блоки используются именно для улучшения передачи информации с предыдущих итераций [[:Рекуррентные_нейронные_сети|RNN]] их основная проблема заключается в том, что влияние предыдущих состояний на текущее уменьшается экспоненциально от расстояния между словами, в то же время механизм внимания улучшает этот показатель до линейного&amp;lt;ref&amp;gt;https://towardsdatascience.com/transformers-141e32e69591&amp;lt;/ref&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
[[:Рекуррентные_нейронные_сети|RNN]] используются при обработке данных, для которых важна их последовательность. В классическом случае применения [[:Рекуррентные_нейронные_сети|RNN]] результатом является только последнее скрытое состояние &amp;lt;math&amp;gt;h_m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; {{---}} длина последовательности входных данных. Использование механизма внимания позволяет использовать информацию полученную не только из последнего скрытого состояния, но и любого скрытого состояния &amp;lt;math&amp;gt;h_t&amp;lt;/math&amp;gt; для любого &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;.&lt;br /&gt;
=====Устройство слоя механизма внимания=====&lt;br /&gt;
[[File:AttentionGeneral.png|350px|thumb|Обобщенный механизм внимания в [[:Рекуррентные_нейронные_сети|RNN]]]]&lt;br /&gt;
Слой механизма внимания представляет собой обычную, чаще всего однослойную, нейронную сеть на вход которой подаются &amp;lt;math&amp;gt;h_t, t = 1 \  \ldots m&amp;lt;/math&amp;gt;, а также вектор &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; в котором содержится некий контекст зависящий от конкретной задачи.&lt;br /&gt;
&lt;br /&gt;
В случае ''Seq2seq'' сетей вектором &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; будет являться скрытое состояние &amp;lt;math&amp;gt;d_{i-1}&amp;lt;/math&amp;gt; предыдущей итерации декодера.&lt;br /&gt;
&lt;br /&gt;
Выходом данного слоя будет является вектор &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; (англ. ''score'') {{---}} оценки на основании которых на скрытое состояние &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; будет &amp;quot;обращено внимание&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Далее для нормализации значений &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; используется &amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt;[https://ru.wikipedia.org/wiki/Softmax Wiki -- Функция softmax]&amp;lt;/ref&amp;gt;. Тогда &amp;lt;math&amp;gt;e = softmax(s)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt; здесь используется благодаря своим свойствам:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;\forall s\colon\  \sum_{i=1}^n softmax(s)_i = 1, &amp;lt;/math&amp;gt;&lt;br /&gt;
*&amp;lt;math&amp;gt;\forall s,\ i\colon \ softmax(s)_i &amp;gt;= 0 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Далее считается &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; (англ. ''context vector'') &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;с = \sum_{i=1}^m e_i h_i&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результатом работы слоя внимания является &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; который, содержит в себе информацию обо всех скрытых состояниях &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; пропорционально оценке &amp;lt;math&amp;gt;e_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=====Применение механизма внимания к базовой ''Seq2seq'' архитектуре=====&lt;br /&gt;
[[File:Seq2SeqAttention.png|350px|thumb|Пример работы ''Seq2seq'' сети с механизмом внимания]]&lt;br /&gt;
При добавлении механизма в данную архитектуру между [[:Рекуррентные_нейронные_сети|RNN]] ''Энкодером'' и ''Декодером'' слоя механизма внимания получится следующая схема:&lt;br /&gt;
&lt;br /&gt;
Здесь &amp;lt;math&amp;gt;x_i, h_i, d_i, y_i&amp;lt;/math&amp;gt; имеют те же назначения, что и в варианте без механизма внимания.&lt;br /&gt;
&lt;br /&gt;
''Агрегатор скрытых состояний энкодера (желтый)'' {{---}} агрегирует в себе все вектора &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; и возвращает всю последовательность векторов &amp;lt;math&amp;gt;h = [h_1, h_2, h_3, h_4]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt; {{---}} вектор контекста на итерации &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Блоки механизма внимания (красный)'' {{---}} принимает &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;d_{i - 1}&amp;lt;/math&amp;gt;, возвращает &amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Блоки декодера (фиолетовый)'' {{---}} по сравнению с обычной ''Seq2seq'' сетью меняются входные данные. Теперь на итерации &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; на вход подается не &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt;, а конкатенация &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом при помощи механизма внимания достигается &amp;quot;фокусирование&amp;quot; декодера на определенных скрытых состояниях. В случаях машинного перевода эта возможность помогает декодеру предсказывать на какие скрытые состояния при исходных определенных словах на языке ''A'' необходимо обратить больше внимания при переводе данного слова на язык ''B''. То есть на какие слова из исходного текста обратить внимание при переводе конкретного слова на язык назначения.&lt;br /&gt;
&lt;br /&gt;
==Self-Attention==&lt;br /&gt;
[[File:TransformerSelfAttentionVisualization.png|250px|thumb|Пример работы ''Self-Attention'']]&lt;br /&gt;
'''Self-Attention''' {{---}} разновидность внимания, задачей которой является выявление закономерности только между входными данными. &lt;br /&gt;
&lt;br /&gt;
Данная методика показала себя настолько эффективной в задаче машинного перевода, что позволила отказаться от использования [[:Рекуррентные_нейронные_сети|RNN]] и заменить их на обычные нейронные сети в комбинации с механизмом ''Self-attention'' в архитектуре трансформер&amp;lt;ref&amp;gt;https://papers.nips.cc/paper/7181-attention-is-all-you-need.pdf&amp;lt;/ref&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Это позволило ускорить работу алгоритма, поскольку ранее предложение обрабатывалось последовательно при помощи [[:Рекуррентные_нейронные_сети|RNN]]. При использовании трансформера каждое слово в предложении обрабатывается может обрабатываться параллельно.&lt;br /&gt;
&lt;br /&gt;
Основным отличием ''Self-Attention'' от [[:Механизм_внимания#Обобщенный механизм внимания|обобщенного механизма внимания]] является, что он делает заключения о зависимостях исключительно между входными данными.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим предложение '''The animal didn't cross the street because it was too tired''' и результат работы алгоритма ''Self-attention'' для слова '''it'''. Полученный вектор соответствует взаимосвязи слова '''it''' со всеми остальными словам в предложении. &lt;br /&gt;
&lt;br /&gt;
Из визуализации вектора можно заметить, что механизм ''Self-attention'' обнаружил взаимосвязь между словами '''it''' и '''animal'''. Этот результат можно интуитивно объяснить с человеческой точки зрения, что позволяет алгоритмам машинного обучения, использующим данный подход, лучше решать задачу принимая во внимание контекстные взаимосвязи.&lt;br /&gt;
&lt;br /&gt;
Также ''Self-Attention'' успешно применяется применяется в [[:Generative_Adversarial_Nets_(GAN)|GAN]] сетях, частности в алгоритме SAGAN&amp;lt;ref&amp;gt;https://arxiv.org/abs/1805.08318&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
*[[:Сверточные_нейронные_сети|Сверточные нейронные сети]]&lt;br /&gt;
*[[:Нейронные_сети,_перцептрон|Нейронные сети, перцептрон]]&lt;br /&gt;
*[[:Рекуррентные_нейронные_сети|Рекуррентные нейронные сети]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
*[https://blog.floydhub.com/attention-mechanism/amp/ Статья о механизме внимания, его типах и разновидностях]&lt;br /&gt;
*[https://www.coursera.org/lecture/nlp-sequence-models/attention-model-lSwVa Лекция Andrew Ng о механизме внимания в NLP]&lt;br /&gt;
*[https://towardsdatascience.com/intuitive-understanding-of-attention-mechanism-in-deep-learning-6c9482aecf4f Статья с подробно разборанными примерами и кодом на ''Python'' и ''TensorFlow'']&lt;br /&gt;
*[http://jalammar.github.io/illustrated-transformer/ Статья c примерами работы Self-attention]&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Нейронные сети]]&lt;br /&gt;
[[Категория: Рекуррентные нейронные сети]]&lt;/div&gt;</summary>
		<author><name>Gpevnev</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=73139</id>
		<title>Механизм внимания</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=73139"/>
				<updated>2020-03-22T20:38:17Z</updated>
		
		<summary type="html">&lt;p&gt;Gpevnev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Механизм внимания''' (англ. ''attention mechanism'', ''attention model'') {{---}} техника используемая в [[:Рекуррентные_нейронные_сети|рекуррентных нейронных сетях]] (сокр. ''RNN'') и [[:Сверточные_нейронные_сети|сверточных нейронных сетях]] (сокр. ''CNN'') для поиска взаимосвязей между различными частями входных и выходных данных.&lt;br /&gt;
&lt;br /&gt;
Изначально механизм внимания был представлен в контексте [[:Рекуррентные_нейронные_сети|рекуррентных]] ''Seq2seq''&amp;lt;ref&amp;gt;[https://en.wikipedia.org/wiki/Seq2seq Wiki -- Seq2seq]&amp;lt;/ref&amp;gt; сетей &amp;lt;ref&amp;gt;https://arxiv.org/abs/1409.0473&amp;lt;/ref&amp;gt; для &amp;quot;обращения внимания&amp;quot; блоков декодеров на скрытые состояния [[:Рекуррентные_нейронные_сети|RNN]] для любой итерации энкодера, а не только последней.&lt;br /&gt;
 &lt;br /&gt;
После успеха этой методики в машинном переводе последовали ее внедрения в других задачах [[:Обработка_естественного_языка|обработки естественного языка]] и применения к [[:Сверточные_нейронные_сети|CNN]] для генерации описания изображения&amp;lt;ref&amp;gt;https://arxiv.org/abs/1502.03044&amp;lt;/ref&amp;gt; и [[:Generative_Adversarial_Nets_(GAN)|порождающих состязательных сетях]]&amp;lt;ref&amp;gt;https://arxiv.org/abs/1805.08318&amp;lt;/ref&amp;gt; (сокр. ''GAN'').&lt;br /&gt;
&lt;br /&gt;
==Обобщенный механизм внимания==&lt;br /&gt;
'''Обобщенный механизм внимания''' (англ. general attention) {{---}} разновидность внимания, задачей которой является выявление закономерности между входными и выходными данными. Изначально механизм внимания представленный в оригинальной подразумевал именно этот тип внимания. &lt;br /&gt;
&lt;br /&gt;
===Пример использования обобщенного механизма внимания для задачи машинного перевода===&lt;br /&gt;
Для лучшего понимания работы обобщенного механизма внимания будет рассмотрен пример его применения в задаче машинного перевода при помощи Seq2seq сетей для решения которой он изначально был представлен.&lt;br /&gt;
&lt;br /&gt;
====Базовая архитектура ''Seq2seq''====&lt;br /&gt;
[[File:Seq2SeqBasic.png|350px|thumb|Пример работы базовой ''Seq2seq'' сети]]&lt;br /&gt;
Для понимания механизма внимания в ''Seq2seq'' сетях необходимо базовое понимание ''Seq2seq'' архитектуры до введения механизма внимания.&lt;br /&gt;
&lt;br /&gt;
''Seq2seq'' состоит из двух [[:Рекуррентные_нейронные_сети|RNN]] {{---}} ''Энкодера'' и ''Декодера''.&lt;br /&gt;
&lt;br /&gt;
''Энкодер'' {{---}} принимает предложение на языке ''A'' и сжимает его в вектор скрытого состояния.&lt;br /&gt;
&lt;br /&gt;
''Декодер'' {{---}} выдает слово на языке ''B'', принимает последнее скрытое состояние энкодера и предыдущее предыдущее предсказанное слово.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим пример работы ''Seq2seq'' сети:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''A''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние энкодера.&lt;br /&gt;
&lt;br /&gt;
''Блоки энкодера (зеленый)'' {{---}} блоки энкодера получающие на вход &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; и передающие скрытое состояние &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; на следующую итерацию.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние декодера.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''B''.&lt;br /&gt;
&lt;br /&gt;
''Блоки декодера (фиолетовый)'' {{---}} блоки декодера получающие на вход &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt; или специальный токен '''start''' в случае первой итерации и возвращаюшие &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''B''. &lt;br /&gt;
Передают &amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние декодера на следующую итерацию. &lt;br /&gt;
Перевод считается завершенным при &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt;, равном специальному токену '''end'''.&lt;br /&gt;
&lt;br /&gt;
====Применение механизма внимания для ''Seq2seq''====&lt;br /&gt;
Несмотря на то, что нейронные сети рассматриваются как &amp;quot;черный ящик&amp;quot; и интерпретировать их внутренности в понятных человеку терминах часто невозможно, все же механизм внимания интуитивно понятный людям смог улучшить качество машинного перевода базового ''Seq2seq'' алгоритма.&lt;br /&gt;
&lt;br /&gt;
Успех использования этого подхода в задаче машинного перевода обусловлен лучшим выводом закономерностей между словами находящимися на большом расстоянии друг от друга. Несмотря на то, что [[:Долгая_краткосрочная_память|LSTM и GRU]] блоки используются именно для улучшения передачи информации с предыдущих итераций [[:Рекуррентные_нейронные_сети|RNN]] их основная проблема заключается в том, что влияние предыдущих состояний на текущее уменьшается экспоненциально от расстояния между словами, в то же время механизм внимания улучшает этот показатель до линейного&amp;lt;ref&amp;gt;https://towardsdatascience.com/transformers-141e32e69591&amp;lt;/ref&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
[[:Рекуррентные_нейронные_сети|RNN]] используются при обработке данных, для которых важна их последовательность. В классическом случае применения [[:Рекуррентные_нейронные_сети|RNN]] результатом является только последнее скрытое состояние &amp;lt;math&amp;gt;h_m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; {{---}} длина последовательности входных данных. Использование механизма внимания позволяет использовать информацию полученную не только из последнего скрытого состояния, но и любого скрытого состояния &amp;lt;math&amp;gt;h_t&amp;lt;/math&amp;gt; для любого &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;.&lt;br /&gt;
=====Устройство слоя механизма внимания=====&lt;br /&gt;
[[File:AttentionGeneral.png|350px|thumb|Обобщенный механизм внимания в [[:Рекуррентные_нейронные_сети|RNN]]]]&lt;br /&gt;
Слой механизма внимания представляет собой обычную, чаще всего однослойную, нейронную сеть на вход которой подаются &amp;lt;math&amp;gt;h_t, t = 1 \  \ldots m&amp;lt;/math&amp;gt;, а также вектор &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; в котором содержится некий контекст зависящий от конкретной задачи.&lt;br /&gt;
&lt;br /&gt;
В случае ''Seq2seq'' сетей вектором &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; будет являться скрытое состояние &amp;lt;math&amp;gt;d_{i-1}&amp;lt;/math&amp;gt; предыдущей итерации декодера.&lt;br /&gt;
&lt;br /&gt;
Выходом данного слоя будет является вектор &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; (англ. ''score'') {{---}} оценки на основании которых на скрытое состояние &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; будет &amp;quot;обращено внимание&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Далее для нормализации значений &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; используется &amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt;[https://ru.wikipedia.org/wiki/Softmax Wiki -- Функция softmax]&amp;lt;/ref&amp;gt;. Тогда &amp;lt;math&amp;gt;e = softmax(s)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt; здесь используется благодаря своим свойствам:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;\forall s\colon\  \sum_{i=1}^n softmax(s)_i = 1, &amp;lt;/math&amp;gt;&lt;br /&gt;
*&amp;lt;math&amp;gt;\forall s,\ i\colon \ softmax(s)_i &amp;gt;= 0 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Далее считается &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; (англ. ''context vector'') &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;с = \sum_{i=1}^m e_i h_i&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результатом работы слоя внимания является &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; который, содержит в себе информацию обо всех скрытых состояниях &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; пропорционально оценке &amp;lt;math&amp;gt;e_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=====Применение механизма внимания к базовой ''Seq2seq'' архитектуре=====&lt;br /&gt;
[[File:Seq2SeqAttention.png|350px|thumb|Пример работы ''Seq2seq'' сети с механизмом внимания]]&lt;br /&gt;
При добавлении механизма в данную архитектуру между [[:Рекуррентные_нейронные_сети|RNN]] ''Энкодером'' и ''Декодером'' слоя механизма внимания получится следующая схема:&lt;br /&gt;
&lt;br /&gt;
Здесь &amp;lt;math&amp;gt;x_i, h_i, d_i, y_i&amp;lt;/math&amp;gt; имеют те же назначения, что и в варианте без механизма внимания.&lt;br /&gt;
&lt;br /&gt;
''Агрегатор скрытых состояний энкодера (желтый)'' {{---}} агрегирует в себе все вектора &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; и возвращает всю последовательность векторов &amp;lt;math&amp;gt;h = [h_1, h_2, h_3, h_4]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt; {{---}} вектор контекста на итерации &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Блоки механизма внимания (красный)'' {{---}} принимает &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;d_{i - 1}&amp;lt;/math&amp;gt;, возвращает &amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Блоки декодера (фиолетовый)'' {{---}} по сравнению с обычной ''Seq2seq'' сетью меняются входные данные. Теперь на итерации &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; на вход подается не &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt;, а конкатенация &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом при помощи механизма внимания достигается &amp;quot;фокусирование&amp;quot; декодера на определенных скрытых состояниях. В случаях машинного перевода эта возможность помогает декодеру предсказывать на какие скрытые состояния при исходных определенных словах на языке ''A'' необходимо обратить больше внимания при переводе данного слова на язык ''B''. То есть на какие слова из исходного текста обратить внимание при переводе конкретного слова на язык назначения.&lt;br /&gt;
&lt;br /&gt;
==Self-Attention==&lt;br /&gt;
[[File:TransformerSelfAttentionVisualization.png|250px|thumb|Пример работы ''Self-Attention'']]&lt;br /&gt;
'''Self-Attention''' {{---}} разновидность внимания, задачей которой является выявление закономерности только между входными данными. &lt;br /&gt;
&lt;br /&gt;
Данная методика показала себя настолько эффективной в задаче машинного перевода, что позволила отказаться от использования [[:Рекуррентные_нейронные_сети|RNN]] и заменить их на обычные нейронные сети в комбинации с механизмом ''Self-attention'' в архитектуре трансформер&amp;lt;ref&amp;gt;https://papers.nips.cc/paper/7181-attention-is-all-you-need.pdf&amp;lt;/ref&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Это позволило ускорить работу алгоритма, поскольку ранее предложение обрабатывалось последовательно при помощи [[:Рекуррентные_нейронные_сети|RNN]]. При использовании трансформера каждое слово в предложении обрабатывается может обрабатываться параллельно.&lt;br /&gt;
&lt;br /&gt;
Основным отличием ''Self-Attention'' от [[:Механизм_внимания#Обобщенный механизм внимания|обобщенного механизма внимания]] является, что он делает заключения о зависимостях исключительно между входными данными.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим предложение '''The animal didn't cross the street because it was too tired''' и результат работы алгоритма ''Self-attention'' для слова '''it'''. Полученный вектор соответствует взаимосвязи слова '''it''' со всеми остальными словам в предложении. &lt;br /&gt;
&lt;br /&gt;
Из визуализации вектора можно заметить, что механизм ''Self-attention'' обнаружил взаимосвязь между словами '''it''' и '''animal'''. Этот результат можно интуитивно объяснить с человеческой точки зрения, что позволяет алгоритмам машинного обучения, использующим данный подход, лучше решать задачу принимая во внимание контекстные взаимосвязи.&lt;br /&gt;
&lt;br /&gt;
Также ''Self-Attention'' успешно применяется применяется в [[:Generative_Adversarial_Nets_(GAN)|GAN]] сетях, частности в алгоритме SAGAN&amp;lt;ref&amp;gt;https://arxiv.org/abs/1805.08318&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
*[[:Сверточные_нейронные_сети|Сверточные нейронные сети]]&lt;br /&gt;
*[[:Нейронные_сети,_перцептрон|Нейронные сети, перцептрон]]&lt;br /&gt;
*[[:Рекуррентные_нейронные_сети|Рекуррентные нейронные сети]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
*[https://blog.floydhub.com/attention-mechanism/amp/ Статья о механизме внимания, его типах и разновидностях]&lt;br /&gt;
*[https://www.coursera.org/lecture/nlp-sequence-models/attention-model-lSwVa Лекция Andrew Ng о механизме внимания в NLP]&lt;br /&gt;
*[https://towardsdatascience.com/intuitive-understanding-of-attention-mechanism-in-deep-learning-6c9482aecf4f Статья с подробно разборанными примерами и кодом на ''Python'' и ''TensorFlow'']&lt;br /&gt;
*[http://jalammar.github.io/illustrated-transformer/ Статья c примерами работы Self-attention]&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Нейронные сети]]&lt;br /&gt;
[[Категория: Рекуррентные нейронные сети]]&lt;/div&gt;</summary>
		<author><name>Gpevnev</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=73107</id>
		<title>Механизм внимания</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=73107"/>
				<updated>2020-03-22T12:40:09Z</updated>
		
		<summary type="html">&lt;p&gt;Gpevnev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Механизм внимания''' (англ. ''attention mechanism'', ''attention model'') {{---}} техника используемая в [[:Рекуррентные_нейронные_сети|рекуррентных нейронных сетях]] (сокр. ''RNN'') и [[:Сверточные_нейронные_сети|сверточных нейронных сетях]] (сокр. ''CNN'') для поиска взаимосвязей между различными частями входных и выходных данных.&lt;br /&gt;
&lt;br /&gt;
Изначально механизм внимания был представлен в контексте [[:Рекуррентные_нейронные_сети|рекуррентных]] ''Seq2seq''&amp;lt;ref&amp;gt;[https://en.wikipedia.org/wiki/Seq2seq Wiki -- Seq2seq]&amp;lt;/ref&amp;gt; сетей &amp;lt;ref&amp;gt;https://arxiv.org/abs/1409.0473&amp;lt;/ref&amp;gt; для &amp;quot;обращения внимания&amp;quot; блоков декодеров на скрытые состояния [[:Рекуррентные_нейронные_сети|RNN]] для любой итерации энкодера, а не только последней.&lt;br /&gt;
 &lt;br /&gt;
После успеха этой методики в машинном переводе последовали ее внедрения в других задачах [[:Обработка_естественного_языка|обработки естественного языка]] и применения к [[:Сверточные_нейронные_сети|CNN]] для генерации описания изображения&amp;lt;ref&amp;gt;https://arxiv.org/abs/1502.03044&amp;lt;/ref&amp;gt; и GAN &amp;lt;ref&amp;gt;https://arxiv.org/abs/1805.08318&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Обобщенный механизм внимания==&lt;br /&gt;
'''Обобщенный механизм внимания''' (англ. general attention) {{---}} разновидность внимания, задачей которой является выявление закономерности между входными и выходными данными. Изначально механизм внимания представленный в оригинальной подразумевал именно этот тип внимания. &lt;br /&gt;
&lt;br /&gt;
===Пример использования обобщенного механизма внимания для задачи машинного перевода===&lt;br /&gt;
Для лучшего понимания работы обобщенного механизма внимания будет рассмотрен пример его применения в задаче машинного перевода при помощи Seq2seq сетей для решения которой он изначально был представлен.&lt;br /&gt;
&lt;br /&gt;
====Базовая архитектура ''Seq2seq''====&lt;br /&gt;
[[File:Seq2SeqBasic.png|350px|thumb|Пример работы базовой ''Seq2seq'' сети]]&lt;br /&gt;
Для понимания механизма внимания в ''Seq2seq'' сетях необходимо базовое понимание ''Seq2seq'' архитектуры до введения механизма внимания.&lt;br /&gt;
&lt;br /&gt;
''Seq2seq'' состоит из двух [[:Рекуррентные_нейронные_сети|RNN]] {{---}} ''Энкодера'' и ''Декодера''.&lt;br /&gt;
&lt;br /&gt;
''Энкодер'' {{---}} принимает предложение на языке ''A'' и сжимает его в вектор скрытого состояния.&lt;br /&gt;
&lt;br /&gt;
''Декодер'' {{---}} выдает слово на языке ''B'', принимает последнее скрытое состояние энкодера и предыдущее предыдущее предсказанное слово.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим пример работы ''Seq2seq'' сети:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''A''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние энкодера.&lt;br /&gt;
&lt;br /&gt;
''Блоки энкодера (зеленый)'' {{---}} блоки энкодера получающие на вход &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; и передающие скрытое состояние &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; на следующую итерацию.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние декодера.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''B''.&lt;br /&gt;
&lt;br /&gt;
''Блоки декодера (фиолетовый)'' {{---}} блоки декодера получающие на вход &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt; или специальный токен '''start''' в случае первой итерации и возвращаюшие &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''B''. &lt;br /&gt;
Передают &amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние декодера на следующую итерацию. &lt;br /&gt;
Перевод считается завершенным при &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt;, равном специальному токену '''end'''.&lt;br /&gt;
&lt;br /&gt;
====Применение механизма внимания для ''Seq2seq''====&lt;br /&gt;
Несмотря на то, что нейронные сети рассматриваются как &amp;quot;черный ящик&amp;quot; и интерпретировать их внутренности в понятных человеку терминах часто невозможно, все же механизм внимания интуитивно понятный людям смог улучшить качество машинного перевода базового ''Seq2seq'' алгоритма.&lt;br /&gt;
&lt;br /&gt;
Успех использования этого подхода в задаче машинного перевода обусловлен лучшим выводом закономерностей между словами находящимися на большом расстоянии друг от друга. Несмотря на то, что [[:Долгая_краткосрочная_память|LSTM и GRU]] блоки используются именно для улучшения передачи информации с предыдущих итераций [[:Рекуррентные_нейронные_сети|RNN]] их основная проблема заключается в том, что влияние предыдущих состояний на текущее уменьшается экспоненциально от расстояния между словами, в то же время механизм внимания улучшает этот показатель до линейного&amp;lt;ref&amp;gt;https://towardsdatascience.com/transformers-141e32e69591&amp;lt;/ref&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
[[:Рекуррентные_нейронные_сети|RNN]] используются при обработке данных, для которых важна их последовательность. В классическом случае применения [[:Рекуррентные_нейронные_сети|RNN]] результатом является только последнее скрытое состояние &amp;lt;math&amp;gt;h_m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; {{---}} длина последовательности входных данных. Использование механизма внимания позволяет использовать информацию полученную не только из последнего скрытого состояния, но и любого скрытого состояния &amp;lt;math&amp;gt;h_t&amp;lt;/math&amp;gt; для любого &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;.&lt;br /&gt;
=====Устройство слоя механизма внимания=====&lt;br /&gt;
[[File:AttentionGeneral.png|350px|thumb|Обобщенный механизм внимания в [[:Рекуррентные_нейронные_сети|RNN]]]]&lt;br /&gt;
Слой механизма внимания представляет собой обычную, чаще всего однослойную, нейронную сеть на вход которой подаются &amp;lt;math&amp;gt;h_t, t = 1 \  \ldots m&amp;lt;/math&amp;gt;, а также вектор &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; в котором содержится некий контекст зависящий от конкретной задачи.&lt;br /&gt;
&lt;br /&gt;
В случае ''Seq2seq'' сетей вектором &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; будет являться скрытое состояние &amp;lt;math&amp;gt;d_{i-1}&amp;lt;/math&amp;gt; предыдущей итерации декодера.&lt;br /&gt;
&lt;br /&gt;
Выходом данного слоя будет является вектор &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; (англ. ''score'') {{---}} оценки на основании которых на скрытое состояние &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; будет &amp;quot;обращено внимание&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Далее для нормализации значений &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; используется &amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt;[https://ru.wikipedia.org/wiki/Softmax Wiki -- Функция softmax]&amp;lt;/ref&amp;gt;. Тогда &amp;lt;math&amp;gt;e = softmax(s)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt; здесь используется благодаря своим свойствам:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;\forall s\colon\  \sum_{i=1}^n softmax(s)_i = 1, &amp;lt;/math&amp;gt;&lt;br /&gt;
*&amp;lt;math&amp;gt;\forall s,\ i\colon \ softmax(s)_i &amp;gt;= 0 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Далее считается &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; (англ. ''context vector'') &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;с = \sum_{i=1}^m e_i h_i&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результатом работы слоя внимания является &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; который, содержит в себе информацию обо всех скрытых состояниях &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; пропорционально оценке &amp;lt;math&amp;gt;e_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=====Применение механизма внимания к базовой ''Seq2seq'' архитектуре=====&lt;br /&gt;
[[File:Seq2SeqAttention.png|350px|thumb|Пример работы ''Seq2seq'' сети с механизмом внимания]]&lt;br /&gt;
При добавлении механизма в данную архитектуру между [[:Рекуррентные_нейронные_сети|RNN]] ''Энкодером'' и ''Декодером'' слоя механизма внимания получится следующая схема:&lt;br /&gt;
&lt;br /&gt;
Здесь &amp;lt;math&amp;gt;x_i, h_i, d_i, y_i&amp;lt;/math&amp;gt; имеют те же назначения, что и в варианте без механизма внимания.&lt;br /&gt;
&lt;br /&gt;
''Агрегатор скрытых состояний энкодера (желтый)'' {{---}} агрегирует в себе все вектора &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; и возвращает всю последовательность векторов &amp;lt;math&amp;gt;h = [h_1, h_2, h_3, h_4]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt; {{---}} вектор контекста на итерации &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Блоки механизма внимания (красный)'' {{---}} принимает &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;d_{i - 1}&amp;lt;/math&amp;gt;, возвращает &amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Блоки декодера (фиолетовый)'' {{---}} по сравнению с обычной ''Seq2seq'' сетью меняются входные данные. Теперь на итерации &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; на вход подается не &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt;, а конкатенация &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом при помощи механизма внимания достигается &amp;quot;фокусирование&amp;quot; декодера на определенных скрытых состояниях. В случаях машинного перевода эта возможность помогает декодеру предсказывать на какие скрытые состояния при исходных определенных словах на языке ''A'' необходимо обратить больше внимания при переводе данного слова на язык ''B''. То есть на какие слова из исходного текста обратить внимание при переводе конкретного слова на язык назначения.&lt;br /&gt;
&lt;br /&gt;
==Self-Attention==&lt;br /&gt;
[[File:TransformerSelfAttentionVisualization.png|250px|thumb|Пример работы ''Self-Attention'']]&lt;br /&gt;
'''Self-Attention''' {{---}} разновидность внимания, задачей которой является выявление закономерности только между входными данными. &lt;br /&gt;
&lt;br /&gt;
Данная методика показала себя настолько эффективной в задаче машинного перевода, что позволила отказаться от использования [[:Рекуррентные_нейронные_сети|RNN]] и заменить их на обычные нейронные сети в комбинации с механизмом ''Self-attention'' в архитектуре трансформер&amp;lt;ref&amp;gt;https://papers.nips.cc/paper/7181-attention-is-all-you-need.pdf&amp;lt;/ref&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Это позволило ускорить работу алгоритма, поскольку ранее предложение обрабатывалось последовательно при помощи [[:Рекуррентные_нейронные_сети|RNN]]. При использовании трансформера каждое слово в предложении обрабатывается может обрабатываться параллельно.&lt;br /&gt;
&lt;br /&gt;
Основным отличием ''Self-Attention'' от [[:Механизм_внимания#Обобщенный механизм внимания|обобщенного механизма внимания]] является, что он делает заключения о зависимостях исключительно между входными данными.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим предложение '''The animal didn't cross the street because it was too tired''' и результат работы алгоритма ''Self-attention'' для слова '''it'''. Полученный вектор соответствует взаимосвязи слова '''it''' со всеми остальными словам в предложении. &lt;br /&gt;
&lt;br /&gt;
Из визуализации вектора можно заметить, что механизм ''Self-attention'' обнаружил взаимосвязь между словами '''it''' и '''animal'''. Этот результат можно интуитивно объяснить с человеческой точки зрения, что позволяет алгоритмам машинного обучения, использующим данный подход, лучше решать задачу принимая во внимание контекстные взаимосвязи.&lt;br /&gt;
&lt;br /&gt;
Также ''Self-Attention'' успешно применяется применяется в [[:Generative_Adversarial_Nets_(GAN)|GAN]] сетях, частности в алгоритме SAGAN&amp;lt;ref&amp;gt;https://arxiv.org/abs/1805.08318&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
*[[:Сверточные_нейронные_сети|Сверточные нейронные сети]]&lt;br /&gt;
*[[:Нейронные_сети,_перцептрон|Нейронные сети, перцептрон]]&lt;br /&gt;
*[[:Рекуррентные_нейронные_сети|Рекуррентные нейронные сети]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
*[https://blog.floydhub.com/attention-mechanism/amp/ Статья о механизме внимания, его типах и разновидностях]&lt;br /&gt;
*[https://www.coursera.org/lecture/nlp-sequence-models/attention-model-lSwVa Лекция Andrew Ng о механизме внимания в NLP]&lt;br /&gt;
*[https://towardsdatascience.com/intuitive-understanding-of-attention-mechanism-in-deep-learning-6c9482aecf4f Статья с подробно разборанными примерами и кодом на ''Python'' и ''TensorFlow'']&lt;br /&gt;
*[http://jalammar.github.io/illustrated-transformer/ Статья c примерами работы Self-attention]&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Нейронные сети]]&lt;br /&gt;
[[Категория: Рекуррентные нейронные сети]]&lt;/div&gt;</summary>
		<author><name>Gpevnev</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=73106</id>
		<title>Механизм внимания</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=73106"/>
				<updated>2020-03-22T12:37:55Z</updated>
		
		<summary type="html">&lt;p&gt;Gpevnev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Механизм внимания''' (англ. ''attention mechanism'', ''attention model'') {{---}} техника используемая в [[:Рекуррентные_нейронные_сети|рекуррентных нейронных сетях]] (сокр. ''RNN'') и [[:Сверточные_нейронные_сети|сверточных нейронных сетях]] (сокр. ''CNN'') для поиска взаимосвязей между различными частями входных и выходных данных.&lt;br /&gt;
&lt;br /&gt;
(или проще для &amp;quot;обращения внимания&amp;quot; на определенные части входных данных в зависимости от текущего контекста. (как лучше?)) &lt;br /&gt;
&lt;br /&gt;
Изначально механизм внимания был представлен в контексте [[:Рекуррентные_нейронные_сети|рекуррентных]] ''Seq2seq''&amp;lt;ref&amp;gt;[https://en.wikipedia.org/wiki/Seq2seq Wiki -- Seq2seq]&amp;lt;/ref&amp;gt; сетей &amp;lt;ref&amp;gt;https://arxiv.org/abs/1409.0473&amp;lt;/ref&amp;gt; для &amp;quot;обращения внимания&amp;quot; блоков декодеров на скрытые состояния [[:Рекуррентные_нейронные_сети|RNN]] для любой итерации энкодера, а не только последней.&lt;br /&gt;
 &lt;br /&gt;
После успеха этой методики в машинном переводе последовали ее внедрения в других задачах [[:Обработка_естественного_языка|обработки естественного языка]] и применения к [[:Сверточные_нейронные_сети|CNN]] для генерации описания изображения&amp;lt;ref&amp;gt;https://arxiv.org/abs/1502.03044&amp;lt;/ref&amp;gt; и GAN &amp;lt;ref&amp;gt;https://arxiv.org/abs/1805.08318&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Обобщенный механизм внимания==&lt;br /&gt;
'''Обобщенный механизм внимания''' (англ. general attention) {{---}} разновидность внимания, задачей которой является выявление закономерности между входными и выходными данными. Изначально механизм внимания представленный в оригинальной подразумевал именно этот тип внимания. &lt;br /&gt;
&lt;br /&gt;
===Пример использования обобщенного механизма внимания для задачи машинного перевода===&lt;br /&gt;
Для лучшего понимания работы обобщенного механизма внимания будет рассмотрен пример его применения в задаче машинного перевода при помощи Seq2seq сетей для решения которой он изначально был представлен.&lt;br /&gt;
&lt;br /&gt;
====Базовая архитектура ''Seq2seq''====&lt;br /&gt;
[[File:Seq2SeqBasic.png|350px|thumb|Пример работы базовой ''Seq2seq'' сети]]&lt;br /&gt;
Для понимания механизма внимания в ''Seq2seq'' сетях необходимо базовое понимание ''Seq2seq'' архитектуры до введения механизма внимания.&lt;br /&gt;
&lt;br /&gt;
''Seq2seq'' состоит из двух [[:Рекуррентные_нейронные_сети|RNN]] {{---}} ''Энкодера'' и ''Декодера''.&lt;br /&gt;
&lt;br /&gt;
''Энкодер'' {{---}} принимает предложение на языке ''A'' и сжимает его в вектор скрытого состояния.&lt;br /&gt;
&lt;br /&gt;
''Декодер'' {{---}} выдает слово на языке ''B'', принимает последнее скрытое состояние энкодера и предыдущее предыдущее предсказанное слово.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим пример работы ''Seq2seq'' сети:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''A''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние энкодера.&lt;br /&gt;
&lt;br /&gt;
''Блоки энкодера (зеленый)'' {{---}} блоки энкодера получающие на вход &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; и передающие скрытое состояние &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; на следующую итерацию.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние декодера.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''B''.&lt;br /&gt;
&lt;br /&gt;
''Блоки декодера (фиолетовый)'' {{---}} блоки декодера получающие на вход &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt; или специальный токен '''start''' в случае первой итерации и возвращаюшие &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''B''. &lt;br /&gt;
Передают &amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние декодера на следующую итерацию. &lt;br /&gt;
Перевод считается завершенным при &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt;, равном специальному токену '''end'''.&lt;br /&gt;
&lt;br /&gt;
====Применение механизма внимания для ''Seq2seq''====&lt;br /&gt;
Несмотря на то, что нейронные сети рассматриваются как &amp;quot;черный ящик&amp;quot; и интерпретировать их внутренности в понятных человеку терминах часто невозможно, все же механизм внимания интуитивно понятный людям смог улучшить качество машинного перевода базового ''Seq2seq'' алгоритма.&lt;br /&gt;
&lt;br /&gt;
Успех использования этого подхода в задаче машинного перевода обусловлен лучшим выводом закономерностей между словами находящимися на большом расстоянии друг от друга. Несмотря на то, что [[:Долгая_краткосрочная_память|LSTM и GRU]] блоки используются именно для улучшения передачи информации с предыдущих итераций [[:Рекуррентные_нейронные_сети|RNN]] их основная проблема заключается в том, что влияние предыдущих состояний на текущее уменьшается экспоненциально от расстояния между словами, в то же время механизм внимания улучшает этот показатель до линейного&amp;lt;ref&amp;gt;https://towardsdatascience.com/transformers-141e32e69591&amp;lt;/ref&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
[[:Рекуррентные_нейронные_сети|RNN]] используются при обработке данных, для которых важна их последовательность. В классическом случае применения [[:Рекуррентные_нейронные_сети|RNN]] результатом является только последнее скрытое состояние &amp;lt;math&amp;gt;h_m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; {{---}} длина последовательности входных данных. Использование механизма внимания позволяет использовать информацию полученную не только из последнего скрытого состояния, но и любого скрытого состояния &amp;lt;math&amp;gt;h_t&amp;lt;/math&amp;gt; для любого &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;.&lt;br /&gt;
=====Устройство слоя механизма внимания=====&lt;br /&gt;
[[File:AttentionGeneral.png|350px|thumb|Обобщенный механизм внимания в [[:Рекуррентные_нейронные_сети|RNN]]]]&lt;br /&gt;
Слой механизма внимания представляет собой обычную, чаще всего однослойную, нейронную сеть на вход которой подаются &amp;lt;math&amp;gt;h_t, t = 1 \  \ldots m&amp;lt;/math&amp;gt;, а также вектор &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; в котором содержится некий контекст зависящий от конкретной задачи.&lt;br /&gt;
&lt;br /&gt;
В случае ''Seq2seq'' сетей вектором &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; будет являться скрытое состояние &amp;lt;math&amp;gt;d_{i-1}&amp;lt;/math&amp;gt; предыдущей итерации декодера.&lt;br /&gt;
&lt;br /&gt;
Выходом данного слоя будет является вектор &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; (англ. ''score'') {{---}} оценки на основании которых на скрытое состояние &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; будет &amp;quot;обращено внимание&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Далее для нормализации значений &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; используется &amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt;[https://ru.wikipedia.org/wiki/Softmax Wiki -- Функция softmax]&amp;lt;/ref&amp;gt;. Тогда &amp;lt;math&amp;gt;e = softmax(s)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt; здесь используется благодаря своим свойствам:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;\forall s\colon\  \sum_{i=1}^n softmax(s)_i = 1, &amp;lt;/math&amp;gt;&lt;br /&gt;
*&amp;lt;math&amp;gt;\forall s,\ i\colon \ softmax(s)_i &amp;gt;= 0 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Далее считается &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; (англ. ''context vector'') &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;с = \sum_{i=1}^m e_i h_i&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результатом работы слоя внимания является &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; который, содержит в себе информацию обо всех скрытых состояниях &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; пропорционально оценке &amp;lt;math&amp;gt;e_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=====Применение механизма внимания к базовой ''Seq2seq'' архитектуре=====&lt;br /&gt;
[[File:Seq2SeqAttention.png|350px|thumb|Пример работы ''Seq2seq'' сети с механизмом внимания]]&lt;br /&gt;
При добавлении механизма в данную архитектуру между [[:Рекуррентные_нейронные_сети|RNN]] ''Энкодером'' и ''Декодером'' слоя механизма внимания получится следующая схема:&lt;br /&gt;
&lt;br /&gt;
Здесь &amp;lt;math&amp;gt;x_i, h_i, d_i, y_i&amp;lt;/math&amp;gt; имеют те же назначения, что и в варианте без механизма внимания.&lt;br /&gt;
&lt;br /&gt;
''Агрегатор скрытых состояний энкодера (желтый)'' {{---}} агрегирует в себе все вектора &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; и возвращает всю последовательность векторов &amp;lt;math&amp;gt;h = [h_1, h_2, h_3, h_4]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt; {{---}} вектор контекста на итерации &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Блоки механизма внимания (красный)'' {{---}} принимает &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;d_{i - 1}&amp;lt;/math&amp;gt;, возвращает &amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Блоки декодера (фиолетовый)'' {{---}} по сравнению с обычной ''Seq2seq'' сетью меняются входные данные. Теперь на итерации &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; на вход подается не &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt;, а конкатенация &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом при помощи механизма внимания достигается &amp;quot;фокусирование&amp;quot; декодера на определенных скрытых состояниях. В случаях машинного перевода эта возможность помогает декодеру предсказывать на какие скрытые состояния при исходных определенных словах на языке ''A'' необходимо обратить больше внимания при переводе данного слова на язык ''B''. То есть на какие слова из исходного текста обратить внимание при переводе конкретного слова на язык назначения.&lt;br /&gt;
&lt;br /&gt;
==Self-Attention==&lt;br /&gt;
[[File:TransformerSelfAttentionVisualization.png|250px|thumb|Пример работы ''Self-Attention'']]&lt;br /&gt;
'''Self-Attention''' {{---}} разновидность внимания, задачей которой является выявление закономерности только между входными данными. &lt;br /&gt;
&lt;br /&gt;
Данная методика показала себя настолько эффективной в задаче машинного перевода, что позволила отказаться от использования [[:Рекуррентные_нейронные_сети|RNN]] и заменить их на обычные нейронные сети в комбинации с механизмом ''Self-attention'' в архитектуре трансформер&amp;lt;ref&amp;gt;https://papers.nips.cc/paper/7181-attention-is-all-you-need.pdf&amp;lt;/ref&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Это позволило ускорить работу алгоритма, поскольку ранее предложение обрабатывалось последовательно при помощи [[:Рекуррентные_нейронные_сети|RNN]]. При использовании трансформера каждое слово в предложении обрабатывается может обрабатываться параллельно.&lt;br /&gt;
&lt;br /&gt;
Основным отличием ''Self-Attention'' от [[:Механизм_внимания#Обобщенный механизм внимания|обобщенного механизма внимания]] является, что он делает заключения о зависимостях исключительно между входными данными.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим предложение '''The animal didn't cross the street because it was too tired''' и результат работы алгоритма ''Self-attention'' для слова '''it'''. Полученный вектор соответствует взаимосвязи слова '''it''' со всеми остальными словам в предложении. &lt;br /&gt;
&lt;br /&gt;
Из визуализации вектора можно заметить, что механизм ''Self-attention'' обнаружил взаимосвязь между словами '''it''' и '''animal'''. Этот результат можно интуитивно объяснить с человеческой точки зрения, что позволяет алгоритмам машинного обучения, использующим данный подход, лучше решать задачу принимая во внимание контекстные взаимосвязи.&lt;br /&gt;
&lt;br /&gt;
Также ''Self-Attention'' успешно применяется применяется в [[:Generative_Adversarial_Nets_(GAN)|GAN]] сетях, частности в алгоритме SAGAN&amp;lt;ref&amp;gt;https://arxiv.org/abs/1805.08318&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
*[[:Сверточные_нейронные_сети|Сверточные нейронные сети]]&lt;br /&gt;
*[[:Нейронные_сети,_перцептрон|Нейронные сети, перцептрон]]&lt;br /&gt;
*[[:Рекуррентные_нейронные_сети|Рекуррентные нейронные сети]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
*[https://blog.floydhub.com/attention-mechanism/amp/ Статья о механизме внимания, его типах и разновидностях]&lt;br /&gt;
*[https://www.coursera.org/lecture/nlp-sequence-models/attention-model-lSwVa Лекция Andrew Ng о механизме внимания в NLP]&lt;br /&gt;
*[https://towardsdatascience.com/intuitive-understanding-of-attention-mechanism-in-deep-learning-6c9482aecf4f Статья с подробно разборанными примерами и кодом на ''Python'' и ''TensorFlow'']&lt;br /&gt;
*[http://jalammar.github.io/illustrated-transformer/ Статья c примерами работы Self-attention]&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Нейронные сети]]&lt;br /&gt;
[[Категория: Рекуррентные нейронные сети]]&lt;/div&gt;</summary>
		<author><name>Gpevnev</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=73102</id>
		<title>Механизм внимания</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=73102"/>
				<updated>2020-03-22T12:24:31Z</updated>
		
		<summary type="html">&lt;p&gt;Gpevnev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Механизм внимания''' (англ. ''attention mechanism'', ''attention model'') {{---}} техника используемая в [[:Рекуррентные_нейронные_сети|рекуррентных нейронных сетях]] (сокр. ''RNN'') и [[:Сверточные_нейронные_сети|сверточных нейронных сетях]] (сокр. ''CNN'') для поиска взаимосвязей между различными частями входных и выходных данных.&lt;br /&gt;
&lt;br /&gt;
(или проще для &amp;quot;обращения внимания&amp;quot; на определенные части входных данных в зависимости от текущего контекста. (как лучше?)) &lt;br /&gt;
&lt;br /&gt;
Изначально механизм внимания был представлен в контексте [[:Рекуррентные_нейронные_сети|рекуррентных]] ''Seq2seq''&amp;lt;ref&amp;gt;[https://en.wikipedia.org/wiki/Seq2seq Wiki -- Seq2seq]&amp;lt;/ref&amp;gt; сетей &amp;lt;ref&amp;gt;https://arxiv.org/abs/1409.0473&amp;lt;/ref&amp;gt; для &amp;quot;обращения внимания&amp;quot; блоков декодеров на скрытые состояния [[:Рекуррентные_нейронные_сети|RNN]] для любой итерации энкодера, а не только последней.&lt;br /&gt;
 &lt;br /&gt;
После успеха этой методики в машинном переводе последовали ее внедрения в других задачах [[:Обработка_естественного_языка|обработки естественного языка]] и применения к [[:Сверточные_нейронные_сети|CNN]] для генерации описания изображения&amp;lt;ref&amp;gt;https://arxiv.org/abs/1502.03044&amp;lt;/ref&amp;gt; и GAN &amp;lt;ref&amp;gt;https://arxiv.org/abs/1805.08318&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Обобщенный механизм внимания==&lt;br /&gt;
'''Обобщенный механизм внимания''' (англ. general attention) {{---}} разновидность внимания, задачей которой является выявление закономерности между входными и выходными данными. Изначально механизм внимания представленный в оригинальной подразумевал именно этот тип внимания. &lt;br /&gt;
&lt;br /&gt;
===Пример использования обобщенного механизма внимания для задачи машинного перевода===&lt;br /&gt;
Для лучшего понимания работы обобщенного механизма внимания будет рассмотрен пример его применения в задаче машинного перевода при помощи Seq2seq сетей для решения которой он изначально был представлен.&lt;br /&gt;
&lt;br /&gt;
====Базовая архитектура ''Seq2seq''====&lt;br /&gt;
[[File:Seq2SeqBasic.png|350px|thumb|Пример работы базовой ''Seq2seq'' сети]]&lt;br /&gt;
Для понимания механизма внимания в ''Seq2seq'' сетях необходимо базовое понимание ''Seq2seq'' архитектуры до введения механизма внимания.&lt;br /&gt;
&lt;br /&gt;
''Seq2seq'' состоит из двух [[:Рекуррентные_нейронные_сети|RNN]] {{---}} ''Энкодера'' и ''Декодера''.&lt;br /&gt;
&lt;br /&gt;
''Энкодер'' {{---}} принимает предложение на языке ''A'' и сжимает его в вектор скрытого состояния.&lt;br /&gt;
&lt;br /&gt;
''Декодер'' {{---}} выдает слово на языке ''B'', принимает последнее скрытое состояние энкодера и предыдущее предыдущее предсказанное слово.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим пример работы ''Seq2seq'' сети:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''A''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние энкодера.&lt;br /&gt;
&lt;br /&gt;
''Блоки энкодера (зеленый)'' {{---}} блоки энкодера получающие на вход &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; и передающие скрытое состояние &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; на следующую итерацию.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние декодера.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''B''.&lt;br /&gt;
&lt;br /&gt;
''Блоки декодера (фиолетовый)'' {{---}} блоки декодера получающие на вход &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt; или специальный токен '''start''' в случае первой итерации и возвращаюшие &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''B''. &lt;br /&gt;
Передают &amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние декодера на следующую итерацию. &lt;br /&gt;
Перевод считается завершенным при &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt;, равном специальному токену '''end'''.&lt;br /&gt;
&lt;br /&gt;
====Применение механизма внимания для ''Seq2seq''====&lt;br /&gt;
Несмотря на то, что нейронные сети рассматриваются как &amp;quot;черный ящик&amp;quot; и интерпретировать их внутренности в понятных человеку терминах часто невозможно, все же механизм внимания интуитивно понятный людям смог улучшить качество машинного перевода базового ''Seq2seq'' алгоритма.&lt;br /&gt;
&lt;br /&gt;
Успех использования этого подхода в задаче машинного перевода обусловлен лучшим выводом закономерностей между словами находящимися на большом расстоянии друг от друга. Несмотря на то, что [[:Долгая_краткосрочная_память|LSTM и GRU]] блоки используются именно для улучшения передачи информации с предыдущих итераций [[:Рекуррентные_нейронные_сети|RNN]] их основная проблема заключается в том, что влияние предыдущих состояний на текущее уменьшается экспоненциально от расстояния между словами, в то же время механизм внимания улучшает этот показатель до линейного&amp;lt;ref&amp;gt;https://towardsdatascience.com/transformers-141e32e69591&amp;lt;/ref&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
[[:Рекуррентные_нейронные_сети|RNN]] используются при обработке данных, для которых важна их последовательность. В классическом случае применения [[:Рекуррентные_нейронные_сети|RNN]] результатом является только последнее скрытое состояние &amp;lt;math&amp;gt;h_m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; {{---}} длина последовательности входных данных. Использование механизма внимания позволяет использовать информацию полученную не только из последнего скрытого состояния, но и любого скрытого состояния &amp;lt;math&amp;gt;h_t&amp;lt;/math&amp;gt; для любого &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;.&lt;br /&gt;
=====Устройство слоя механизма внимания=====&lt;br /&gt;
[[File:AttentionGeneral.png|350px|thumb|Обобщенный механизм внимания в [[:Рекуррентные_нейронные_сети|RNN]]]]&lt;br /&gt;
Слой механизма внимания представляет собой обычную, чаще всего однослойную, нейронную сеть на вход которой подаются &amp;lt;math&amp;gt;h_t, t = 1 \  \ldots m&amp;lt;/math&amp;gt;, а также вектор &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; в котором содержится некий контекст зависящий от конкретной задачи.&lt;br /&gt;
&lt;br /&gt;
В случае ''Seq2seq'' сетей вектором &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; будет являться скрытое состояние &amp;lt;math&amp;gt;d_{i-1}&amp;lt;/math&amp;gt; предыдущей итерации декодера.&lt;br /&gt;
&lt;br /&gt;
Выходом данного слоя будет является вектор &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; (англ. ''score'') {{---}} оценки на основании которых на скрытое состояние &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; будет &amp;quot;обращено внимание&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Далее для нормализации значений &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; используется &amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt;[https://ru.wikipedia.org/wiki/Softmax Wiki -- Функция softmax]&amp;lt;/ref&amp;gt;. Тогда &amp;lt;math&amp;gt;e = softmax(s)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt; здесь используется благодаря своим свойствам:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;\forall s\colon\  \sum_{i=1}^n softmax(s)_i = 1, &amp;lt;/math&amp;gt;&lt;br /&gt;
*&amp;lt;math&amp;gt;\forall s,\ i\colon \ softmax(s)_i &amp;gt;= 0 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Далее считается &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; (англ. ''context vector'') &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;с = \sum_{i=1}^m e_i h_i&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результатом работы слоя внимания является &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; который, содержит в себе информацию обо всех скрытых состояниях &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; пропорционально оценке &amp;lt;math&amp;gt;e_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=====Применение механизма внимания к базовой ''Seq2seq'' архитектуре=====&lt;br /&gt;
[[File:Seq2SeqAttention.png|350px|thumb|Пример работы ''Seq2seq'' сети с механизмом внимания]]&lt;br /&gt;
При добавлении механизма в данную архитектуру между [[:Рекуррентные_нейронные_сети|RNN]] ''Энкодером'' и ''Декодером'' слоя механизма внимания получится следующая схема:&lt;br /&gt;
&lt;br /&gt;
Здесь &amp;lt;math&amp;gt;x_i, h_i, d_i, y_i&amp;lt;/math&amp;gt; имеют те же назначения, что и в варианте без механизма внимания.&lt;br /&gt;
&lt;br /&gt;
''Агрегатор скрытых состояний энкодера (желтый)'' {{---}} агрегирует в себе все вектора &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; и возвращает всю последовательность векторов &amp;lt;math&amp;gt;h = [h_1, h_2, h_3, h_4]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt; {{---}} вектор контекста на итерации &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Блоки механизма внимания (красный)'' {{---}} принимает &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;d_{i - 1}&amp;lt;/math&amp;gt;, возвращает &amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Блоки декодера (фиолетовый)'' {{---}} по сравнению с обычной ''Seq2seq'' сетью меняются входные данные. Теперь на итерации &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; на вход подается не &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt;, а конкатенация &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом при помощи механизма внимания достигается &amp;quot;фокусирование&amp;quot; декодера на определенных скрытых состояниях. В случаях машинного перевода эта возможность помогает декодеру предсказывать на какие скрытые состояния при исходных определенных словах на языке ''A'' необходимо обратить больше внимания при переводе данного слова на язык ''B''. То есть на какие слова из исходного текста обратить внимание при переводе конкретного слова на язык назначения.&lt;br /&gt;
&lt;br /&gt;
==Self-Attention==&lt;br /&gt;
[[File:TransformerSelfAttentionVisualization.png|250px|thumb|Пример работы ''Self-Attention'']]&lt;br /&gt;
'''Self-Attention''' {{---}} разновидность внимания, задачей которой является выявление закономерности только между входными данными. Был представлен как один из способов повышения производительности в задачах [[:Обработка_естественного_языка|обработки естественного языка]], где ранее использовались [[:Рекуррентные_нейронные_сети|RNN]] в виде архитектуры трансформеров&amp;lt;ref&amp;gt;https://papers.nips.cc/paper/7181-attention-is-all-you-need.pdf&amp;lt;/ref&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Также ''Self-Attention'' успешно применяется применяется в [[:Generative_Adversarial_Nets_(GAN)|GAN]] сетях в алгоритме SAGAN&amp;lt;ref&amp;gt;https://arxiv.org/abs/1805.08318&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Основным отличием ''Self-Attention'' от [[:Механизм_внимания#Обобщенный механизм внимания|обобщенного механизма внимания]] является, что он делает заключения о зависимостях исключительно между входными данными.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим предложение '''The animal didn't cross the street because it was too tired''' и результат работы алгоритма ''Self-attention'' для слова '''it'''. Полученный вектор соответствует взаимосвязи слова '''it''' со всеми остальными словам в предложении. &lt;br /&gt;
Из визуализации вектора можно заметить, что механизм ''Self-attention'' обнаружил взаимосвязь между словами '''it''' и '''animal'''. Этот результат можно интуитивно объяснить с человеческой точки зрения, что и позволяет алгоритмам машинного обучения, использующих данный подход, лучше решать задачу принимая во внимание контекстные взаимосвязи. &lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
*[[:Сверточные_нейронные_сети|Сверточные нейронные сети]]&lt;br /&gt;
*[[:Нейронные_сети,_перцептрон|Нейронные сети, перцептрон]]&lt;br /&gt;
*[[:Рекуррентные_нейронные_сети|Рекуррентные нейронные сети]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
*[https://blog.floydhub.com/attention-mechanism/amp/ Статья о механизме внимания, его типах и разновидностях]&lt;br /&gt;
*[https://www.coursera.org/lecture/nlp-sequence-models/attention-model-lSwVa Лекция Andrew Ng о механизме внимания в NLP]&lt;br /&gt;
*[https://towardsdatascience.com/intuitive-understanding-of-attention-mechanism-in-deep-learning-6c9482aecf4f Статья с подробно разборанными примерами и кодом на ''Python'' и ''TensorFlow'']&lt;br /&gt;
*[http://jalammar.github.io/illustrated-transformer/ Статья c примерами работы Self-attention]&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Нейронные сети]]&lt;br /&gt;
[[Категория: Рекуррентные нейронные сети]]&lt;/div&gt;</summary>
		<author><name>Gpevnev</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=73101</id>
		<title>Механизм внимания</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=73101"/>
				<updated>2020-03-22T12:14:49Z</updated>
		
		<summary type="html">&lt;p&gt;Gpevnev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Механизм внимания''' (англ. ''attention mechanism'', ''attention model'') {{---}} техника используемая в [[:Рекуррентные_нейронные_сети|рекуррентных нейронных сетях]] (сокр. ''RNN'') и [[:Сверточные_нейронные_сети|сверточных нейронных сетях]] (сокр. ''CNN'') для поиска взаимосвязей между различными частями входных и выходных данных.&lt;br /&gt;
&lt;br /&gt;
(или проще для &amp;quot;обращения внимания&amp;quot; на определенные части входных данных в зависимости от текущего контекста. (как лучше?)) &lt;br /&gt;
&lt;br /&gt;
Изначально механизм внимания был представлен в контексте [[:Рекуррентные_нейронные_сети|рекуррентных]] ''Seq2seq''&amp;lt;ref&amp;gt;[https://en.wikipedia.org/wiki/Seq2seq Wiki -- Seq2seq]&amp;lt;/ref&amp;gt; сетей &amp;lt;ref&amp;gt;https://arxiv.org/abs/1409.0473&amp;lt;/ref&amp;gt; для &amp;quot;обращения внимания&amp;quot; блоков декодеров на скрытые состояния [[:Рекуррентные_нейронные_сети|RNN]] для любой итерации энкодера, а не только последней.&lt;br /&gt;
 &lt;br /&gt;
После успеха этой методики в машинном переводе последовали ее внедрения в других задачах [[:Обработка_естественного_языка|обработки естественного языка]] и применения к [[:Сверточные_нейронные_сети|CNN]] для генерации описания изображения&amp;lt;ref&amp;gt;https://arxiv.org/abs/1502.03044&amp;lt;/ref&amp;gt; и GAN &amp;lt;ref&amp;gt;https://arxiv.org/abs/1805.08318&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Обобщенный механизм внимания==&lt;br /&gt;
'''Обобщенный механизм внимания''' (англ. general attention) {{---}} разновидность внимания, задачей которой является выявление закономерности между входными и выходными данными. Изначально механизм внимания представленный в оригинальной подразумевал именно этот тип внимания. &lt;br /&gt;
&lt;br /&gt;
===Пример использования обобщенного механизма внимания для задачи машинного перевода===&lt;br /&gt;
Для лучшего понимания работы обобщенного механизма внимания будет рассмотрен пример его применения в задаче машинного перевода при помощи Seq2seq сетей для решения которой он изначально был представлен.&lt;br /&gt;
&lt;br /&gt;
====Базовая архитектура ''Seq2seq''====&lt;br /&gt;
[[File:Seq2SeqBasic.png|450px|thumb|Пример работы базовой ''Seq2seq'' сети]]&lt;br /&gt;
Для понимания механизма внимания в ''Seq2seq'' сетях необходимо базовое понимание ''Seq2seq'' архитектуры до введения механизма внимания.&lt;br /&gt;
&lt;br /&gt;
''Seq2seq'' состоит из двух [[:Рекуррентные_нейронные_сети|RNN]] {{---}} ''Энкодера'' и ''Декодера''.&lt;br /&gt;
&lt;br /&gt;
''Энкодер'' {{---}} принимает предложение на языке ''A'' и сжимает его в вектор скрытого состояния.&lt;br /&gt;
&lt;br /&gt;
''Декодер'' {{---}} выдает слово на языке ''B'', принимает последнее скрытое состояние энкодера и предыдущее предыдущее предсказанное слово.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим пример работы ''Seq2seq'' сети:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''A''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние энкодера.&lt;br /&gt;
&lt;br /&gt;
''Блоки энкодера (зеленый)'' {{---}} блоки энкодера получающие на вход &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; и передающие скрытое состояние &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; на следующую итерацию.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние декодера.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''B''.&lt;br /&gt;
&lt;br /&gt;
''Блоки декодера (фиолетовый)'' {{---}} блоки декодера получающие на вход &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt; или специальный токен '''start''' в случае первой итерации и возвращаюшие &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''B''. &lt;br /&gt;
Передают &amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние декодера на следующую итерацию. &lt;br /&gt;
Перевод считается завершенным при &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt;, равном специальному токену '''end'''.&lt;br /&gt;
&lt;br /&gt;
====Применение механизма внимания для ''Seq2seq''====&lt;br /&gt;
Несмотря на то, что нейронные сети рассматриваются как &amp;quot;черный ящик&amp;quot; и интерпретировать их внутренности в понятных человеку терминах часто невозможно, все же механизм внимания интуитивно понятный людям смог улучшить качество машинного перевода базового ''Seq2seq'' алгоритма.&lt;br /&gt;
&lt;br /&gt;
Успех использования этого подхода в задаче машинного перевода обусловлен лучшим выводом закономерностей между словами находящимися на большом расстоянии друг от друга. Несмотря на то, что [[:Долгая_краткосрочная_память|LSTM и GRU]] блоки используются именно для улучшения передачи информации с предыдущих итераций [[:Рекуррентные_нейронные_сети|RNN]] их основная проблема заключается в том, что влияние предыдущих состояний на текущее уменьшается экспоненциально от расстояния между словами, в то же время механизм внимания улучшает этот показатель до линейного&amp;lt;ref&amp;gt;https://towardsdatascience.com/transformers-141e32e69591&amp;lt;/ref&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
[[:Рекуррентные_нейронные_сети|RNN]] используются при обработке данных, для которых важна их последовательность. В классическом случае применения [[:Рекуррентные_нейронные_сети|RNN]] результатом является только последнее скрытое состояние &amp;lt;math&amp;gt;h_m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; {{---}} длина последовательности входных данных. Использование механизма внимания позволяет использовать информацию полученную не только из последнего скрытого состояния, но и любого скрытого состояния &amp;lt;math&amp;gt;h_t&amp;lt;/math&amp;gt; для любого &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;.&lt;br /&gt;
=====Устройство слоя механизма внимания=====&lt;br /&gt;
[[File:AttentionGeneral.png|450px|thumb|Обобщенный механизм внимания в [[:Рекуррентные_нейронные_сети|RNN]]]]&lt;br /&gt;
Слой механизма внимания представляет собой обычную, чаще всего однослойную, нейронную сеть на вход которой подаются &amp;lt;math&amp;gt;h_t, t = 1 \  \ldots m&amp;lt;/math&amp;gt;, а также вектор &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; в котором содержится некий контекст зависящий от конкретной задачи.&lt;br /&gt;
&lt;br /&gt;
В случае ''Seq2seq'' сетей вектором &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; будет являться скрытое состояние &amp;lt;math&amp;gt;d_{i-1}&amp;lt;/math&amp;gt; предыдущей итерации декодера.&lt;br /&gt;
&lt;br /&gt;
Выходом данного слоя будет является вектор &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; (англ. ''score'') {{---}} оценки на основании которых на скрытое состояние &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; будет &amp;quot;обращено внимание&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Далее для нормализации значений &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; используется &amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt;[https://ru.wikipedia.org/wiki/Softmax Wiki -- Функция softmax]&amp;lt;/ref&amp;gt;. Тогда &amp;lt;math&amp;gt;e = softmax(s)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt; здесь используется благодаря своим свойствам:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;\forall s\colon\  \sum_{i=1}^n softmax(s)_i = 1, &amp;lt;/math&amp;gt;&lt;br /&gt;
*&amp;lt;math&amp;gt;\forall s,\ i\colon \ softmax(s)_i &amp;gt;= 0 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Далее считается &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; (англ. ''context vector'') &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;с = \sum_{i=1}^m e_i h_i&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результатом работы слоя внимания является &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; который, содержит в себе информацию обо всех скрытых состояниях &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; пропорционально оценке &amp;lt;math&amp;gt;e_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=====Применение механизма внимания к базовой ''Seq2seq'' архитектуре=====&lt;br /&gt;
[[File:Seq2SeqAttention.png|450px|thumb|Пример работы ''Seq2seq'' сети с механизмом внимания]]&lt;br /&gt;
При добавлении механизма в данную архитектуру между [[:Рекуррентные_нейронные_сети|RNN]] ''Энкодером'' и ''Декодером'' слоя механизма внимания получится следующая схема:&lt;br /&gt;
&lt;br /&gt;
Здесь &amp;lt;math&amp;gt;x_i, h_i, d_i, y_i&amp;lt;/math&amp;gt; имеют те же назначения, что и в варианте без механизма внимания.&lt;br /&gt;
&lt;br /&gt;
''Агрегатор скрытых состояний энкодера (желтый)'' {{---}} агрегирует в себе все вектора &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; и возвращает всю последовательность векторов &amp;lt;math&amp;gt;h = [h_1, h_2, h_3, h_4]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt; {{---}} вектор контекста на итерации &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Блоки механизма внимания (красный)'' {{---}} принимает &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;d_{i - 1}&amp;lt;/math&amp;gt;, возвращает &amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Блоки декодера (фиолетовый)'' {{---}} по сравнению с обычной ''Seq2seq'' сетью меняются входные данные. Теперь на итерации &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; на вход подается не &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt;, а конкатенация &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом при помощи механизма внимания достигается &amp;quot;фокусирование&amp;quot; декодера на определенных скрытых состояниях. В случаях машинного перевода эта возможность помогает декодеру предсказывать на какие скрытые состояния при исходных определенных словах на языке ''A'' необходимо обратить больше внимания при переводе данного слова на язык ''B''. То есть на какие слова из исходного текста обратить внимание при переводе конкретного слова на язык назначения.&lt;br /&gt;
&lt;br /&gt;
==Self-Attention==&lt;br /&gt;
[[File:TransformerSelfAttentionVisualization.png|450px|thumb|Пример работы ''Self-Attention'']]&lt;br /&gt;
'''Self-Attention''' {{---}} разновидность внимания, задачей которой является выявление закономерности только между входными данными. Был представлен как один из способов повышения производительности в задачах [[:Обработка_естественного_языка|обработки естественного языка]], где ранее использовались [[:Рекуррентные_нейронные_сети|RNN]] в виде архитектуры трансформеров&amp;lt;ref&amp;gt;https://papers.nips.cc/paper/7181-attention-is-all-you-need.pdf&amp;lt;/ref&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Также ''Self-Attention'' успешно применяется применяется в [[:Generative_Adversarial_Nets_(GAN)|GAN]] сетях в алгоритме SAGAN&amp;lt;ref&amp;gt;https://arxiv.org/abs/1805.08318&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Основным отличием ''Self-Attention'' от [[:Механизм_внимания#Обобщенный механизм внимания|обобщенного механизма внимания]] является, что делает заключения о зависимостях исключительно между входными данными.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим предложение '''The animal didn't cross the street because it was too tired''' и результат работы алгоритма ''Self-attention'' для слова '''it'''. Полученный вектор соответствует взаимосвязи слова '''it''' со всеми остальными словам в предложении. Из визуализации вектора можно заметить, что механизм ''Self-attention'' обнаружил взаимосвязь между словами '''it''' и '''animal'''. Этот результат можно интуитивно объяснить с человеческой точки зрения, что и раскрывает главное преимущество данного подхожа.&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
*[[:Сверточные_нейронные_сети|Сверточные нейронные сети]]&lt;br /&gt;
*[[:Нейронные_сети,_перцептрон|Нейронные сети, перцептрон]]&lt;br /&gt;
*[[:Рекуррентные_нейронные_сети|Рекуррентные нейронные сети]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
*[https://blog.floydhub.com/attention-mechanism/amp/ Статья о механизме внимания, его типах и разновидностях]&lt;br /&gt;
*[https://www.coursera.org/lecture/nlp-sequence-models/attention-model-lSwVa Лекция Andrew Ng о механизме внимания в NLP]&lt;br /&gt;
*[https://towardsdatascience.com/intuitive-understanding-of-attention-mechanism-in-deep-learning-6c9482aecf4f Статья с подробно разборанными примерами и кодом на ''Python'' и ''TensorFlow'']&lt;br /&gt;
*[http://jalammar.github.io/illustrated-transformer/ Статья c примерами работы Self-attention]&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Нейронные сети]]&lt;br /&gt;
[[Категория: Рекуррентные нейронные сети]]&lt;/div&gt;</summary>
		<author><name>Gpevnev</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:TransformerSelfAttentionVisualization.png&amp;diff=73099</id>
		<title>Файл:TransformerSelfAttentionVisualization.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:TransformerSelfAttentionVisualization.png&amp;diff=73099"/>
				<updated>2020-03-22T12:03:40Z</updated>
		
		<summary type="html">&lt;p&gt;Gpevnev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Gpevnev</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=73098</id>
		<title>Механизм внимания</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=73098"/>
				<updated>2020-03-22T11:06:10Z</updated>
		
		<summary type="html">&lt;p&gt;Gpevnev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Механизм внимания''' (англ. ''attention mechanism'', ''attention model'') {{---}} техника используемая в [[:Рекуррентные_нейронные_сети|рекуррентных нейронных сетях]] (сокр. ''RNN'') и [[:Сверточные_нейронные_сети|сверточных нейронных сетях]] (сокр. ''CNN'') для поиска взаимосвязей между различными частями входных и выходных данных.&lt;br /&gt;
&lt;br /&gt;
(или проще для &amp;quot;обращения внимания&amp;quot; на определенные части входных данных в зависимости от текущего контекста. (как лучше?)) &lt;br /&gt;
&lt;br /&gt;
Изначально механизм внимания был представлен в контексте [[:Рекуррентные_нейронные_сети|рекуррентных]] ''Seq2seq''&amp;lt;ref&amp;gt;[https://en.wikipedia.org/wiki/Seq2seq Wiki -- Seq2seq]&amp;lt;/ref&amp;gt; сетей &amp;lt;ref&amp;gt;https://arxiv.org/abs/1409.0473&amp;lt;/ref&amp;gt; для &amp;quot;обращения внимания&amp;quot; блоков декодеров на скрытые состояния [[:Рекуррентные_нейронные_сети|RNN]] для любой итерации энкодера, а не только последней.&lt;br /&gt;
 &lt;br /&gt;
После успеха этой методики в машинном переводе последовали ее внедрения в других задачах [[:Обработка_естественного_языка|обработки естественного языка]] и применения к [[:Сверточные_нейронные_сети|CNN]] для генерации описания изображения&amp;lt;ref&amp;gt;https://arxiv.org/abs/1502.03044&amp;lt;/ref&amp;gt; и GAN &amp;lt;ref&amp;gt;https://arxiv.org/abs/1805.08318&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Обобщенный механизм внимания==&lt;br /&gt;
'''Обобщенный механизм внимания''' (англ. general attention) {{---}} один из видов внимания, при котором выясняются закономерности между входными и выходными данными. Изначально механизм внимания представленный в оригинальной подразумевал именно этот тип внимания. &lt;br /&gt;
&lt;br /&gt;
===Пример использования обобщенного механизма внимания для задачи машинного перевода===&lt;br /&gt;
Для лучшего понимания работы обобщенного механизма внимания будет рассмотрен пример его применения в задаче машинного перевода при помощи Seq2seq сетей для решения которой он изначально был представлен.&lt;br /&gt;
&lt;br /&gt;
====Базовая архитектура ''Seq2seq''====&lt;br /&gt;
[[File:Seq2SeqBasic.png|450px|thumb|Пример работы базовой ''Seq2seq'' сети]]&lt;br /&gt;
Для понимания механизма внимания в ''Seq2seq'' сетях необходимо базовое понимание ''Seq2seq'' архитектуры до введения механизма внимания.&lt;br /&gt;
&lt;br /&gt;
''Seq2seq'' состоит из двух [[:Рекуррентные_нейронные_сети|RNN]] {{---}} ''Энкодера'' и ''Декодера''.&lt;br /&gt;
&lt;br /&gt;
''Энкодер'' {{---}} принимает предложение на языке ''A'' и сжимает его в вектор скрытого состояния.&lt;br /&gt;
&lt;br /&gt;
''Декодер'' {{---}} выдает слово на языке ''B'', принимает последнее скрытое состояние энкодера и предыдущее предыдущее предсказанное слово.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим пример работы ''Seq2seq'' сети:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''A''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние энкодера.&lt;br /&gt;
&lt;br /&gt;
''Блоки энкодера (зеленый)'' {{---}} блоки энкодера получающие на вход &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; и передающие скрытое состояние &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; на следующую итерацию.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние декодера.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''B''.&lt;br /&gt;
&lt;br /&gt;
''Блоки декодера (фиолетовый)'' {{---}} блоки декодера получающие на вход &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt; или специальный токен '''start''' в случае первой итерации и возвращаюшие &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''B''. &lt;br /&gt;
Передают &amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние декодера на следующую итерацию. &lt;br /&gt;
Перевод считается завершенным при &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt;, равном специальному токену '''end'''.&lt;br /&gt;
&lt;br /&gt;
====Применение механизма внимания для ''Seq2seq''====&lt;br /&gt;
Несмотря на то, что нейронные сети рассматриваются как &amp;quot;черный ящик&amp;quot; и интерпретировать их внутренности в понятных человеку терминах часто невозможно, все же механизм внимания интуитивно понятный людям смог улучшить качество машинного перевода базового ''Seq2seq'' алгоритма.&lt;br /&gt;
&lt;br /&gt;
Успех использования этого подхода в задаче машинного перевода обусловлен лучшим выводом закономерностей между словами находящимися на большом расстоянии друг от друга. Несмотря на то, что [[:Долгая_краткосрочная_память|LSTM и GRU]] блоки используются именно для улучшения передачи информации с предыдущих итераций [[:Рекуррентные_нейронные_сети|RNN]] их основная проблема заключается в том, что влияние предыдущих состояний на текущее уменьшается экспоненциально от расстояния между словами, в то же время механизм внимания улучшает этот показатель до линейного&amp;lt;ref&amp;gt;https://towardsdatascience.com/transformers-141e32e69591&amp;lt;/ref&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
[[:Рекуррентные_нейронные_сети|RNN]] используются при обработке данных, для которых важна их последовательность. В классическом случае применения [[:Рекуррентные_нейронные_сети|RNN]] результатом является только последнее скрытое состояние &amp;lt;math&amp;gt;h_m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; {{---}} длина последовательности входных данных. Использование механизма внимания позволяет использовать информацию полученную не только из последнего скрытого состояния, но и любого скрытого состояния &amp;lt;math&amp;gt;h_t&amp;lt;/math&amp;gt; для любого &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;.&lt;br /&gt;
=====Устройство слоя механизма внимания=====&lt;br /&gt;
[[File:AttentionGeneral.png|450px|thumb|Обобщенный механизм внимания в [[:Рекуррентные_нейронные_сети|RNN]]]]&lt;br /&gt;
Слой механизма внимания представляет собой обычную, чаще всего однослойную, нейронную сеть на вход которой подаются &amp;lt;math&amp;gt;h_t, t = 1 \  \ldots m&amp;lt;/math&amp;gt;, а также вектор &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; в котором содержится некий контекст зависящий от конкретной задачи.&lt;br /&gt;
&lt;br /&gt;
В случае ''Seq2seq'' сетей вектором &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; будет являться скрытое состояние &amp;lt;math&amp;gt;d_{i-1}&amp;lt;/math&amp;gt; предыдущей итерации декодера.&lt;br /&gt;
&lt;br /&gt;
Выходом данного слоя будет является вектор &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; (англ. ''score'') {{---}} оценки на основании которых на скрытое состояние &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; будет &amp;quot;обращено внимание&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Далее для нормализации значений &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; используется &amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt;[https://ru.wikipedia.org/wiki/Softmax Wiki -- Функция softmax]&amp;lt;/ref&amp;gt;. Тогда &amp;lt;math&amp;gt;e = softmax(s)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt; здесь используется благодаря своим свойствам:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;\forall s\colon\  \sum_{i=1}^n softmax(s)_i = 1, &amp;lt;/math&amp;gt;&lt;br /&gt;
*&amp;lt;math&amp;gt;\forall s,\ i\colon \ softmax(s)_i &amp;gt;= 0 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Далее считается &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; (англ. ''context vector'') &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;с = \sum_{i=1}^m e_i h_i&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результатом работы слоя внимания является &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; который, содержит в себе информацию обо всех скрытых состояниях &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; пропорционально оценке &amp;lt;math&amp;gt;e_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=====Применение механизма внимания к базовой ''Seq2seq'' архитектуре=====&lt;br /&gt;
[[File:Seq2SeqAttention.png|450px|thumb|Пример работы ''Seq2seq'' сети с механизмом внимания]]&lt;br /&gt;
При добавлении механизма в данную архитектуру между [[:Рекуррентные_нейронные_сети|RNN]] ''Энкодером'' и ''Декодером'' слоя механизма внимания получится следующая схема:&lt;br /&gt;
&lt;br /&gt;
Здесь &amp;lt;math&amp;gt;x_i, h_i, d_i, y_i&amp;lt;/math&amp;gt; имеют те же назначения, что и в варианте без механизма внимания.&lt;br /&gt;
&lt;br /&gt;
''Агрегатор скрытых состояний энкодера (желтый)'' {{---}} агрегирует в себе все вектора &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; и возвращает всю последовательность векторов &amp;lt;math&amp;gt;h = [h_1, h_2, h_3, h_4]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt; {{---}} вектор контекста на итерации &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Блоки механизма внимания (красный)'' {{---}} принимает &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;d_{i - 1}&amp;lt;/math&amp;gt;, возвращает &amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Блоки декодера (фиолетовый)'' {{---}} по сравнению с обычной ''Seq2seq'' сетью меняются входные данные. Теперь на итерации &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; на вход подается не &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt;, а конкатенация &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом при помощи механизма внимания достигается &amp;quot;фокусирование&amp;quot; декодера на определенных скрытых состояниях. В случаях машинного перевода эта возможность помогает декодеру предсказывать на какие скрытые состояния при исходных определенных словах на языке ''A'' необходимо обратить больше внимания при переводе данного слова на язык ''B''. То есть на какие слова из исходного текста обратить внимание при переводе конкретного слова на язык назначения.&lt;br /&gt;
&lt;br /&gt;
==Self-Attention==&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
*[[:Сверточные_нейронные_сети|Сверточные нейронные сети]]&lt;br /&gt;
*[[:Нейронные_сети,_перцептрон|Нейронные сети, перцептрон]]&lt;br /&gt;
*[[:Рекуррентные_нейронные_сети|Рекуррентные нейронные сети]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
*[https://blog.floydhub.com/attention-mechanism/amp/ Статья о механизме внимания, его типах и разновидностях]&lt;br /&gt;
*[https://www.coursera.org/lecture/nlp-sequence-models/attention-model-lSwVa Лекция Andrew Ng о механизме внимания в NLP]&lt;br /&gt;
*[https://towardsdatascience.com/intuitive-understanding-of-attention-mechanism-in-deep-learning-6c9482aecf4f Статья с подробно разборанными примерами и кодом на ''Python'' и ''TensorFlow'']&lt;br /&gt;
*[http://jalammar.github.io/illustrated-transformer/ Статья c примерами работы Self-attention]&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Нейронные сети]]&lt;br /&gt;
[[Категория: Рекуррентные нейронные сети]]&lt;/div&gt;</summary>
		<author><name>Gpevnev</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=73097</id>
		<title>Механизм внимания</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=73097"/>
				<updated>2020-03-22T10:50:56Z</updated>
		
		<summary type="html">&lt;p&gt;Gpevnev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Механизм внимания''' (англ. ''attention mechanism'', ''attention model'') {{---}} техника используемая в [[:Рекуррентные_нейронные_сети|рекуррентных нейронных сетях]] (сокр. ''RNN'') и [[:Сверточные_нейронные_сети|сверточных нейронных сетях]] (сокр. ''CNN'') для поиска взаимосвязей между различными частями входных и выходных данных.&lt;br /&gt;
&lt;br /&gt;
(или проще для &amp;quot;обращения внимания&amp;quot; на определенные части входных данных в зависимости от текущего контекста. (как лучше?)) &lt;br /&gt;
&lt;br /&gt;
Изначально механизм внимания был представлен в контексте [[:Рекуррентные_нейронные_сети|рекуррентных]] ''Seq2seq''&amp;lt;ref&amp;gt;[https://en.wikipedia.org/wiki/Seq2seq Wiki -- Seq2seq]&amp;lt;/ref&amp;gt; сетей &amp;lt;ref&amp;gt;https://arxiv.org/abs/1409.0473&amp;lt;/ref&amp;gt; для &amp;quot;обращения внимания&amp;quot; блоков декодеров на скрытые состояния [[:Рекуррентные_нейронные_сети|RNN]] энкодера для любой итерации, а не только последней.&lt;br /&gt;
 &lt;br /&gt;
После успеха этой методики в машинном переводе последовали ее внедрения в других задачах [[:Обработка_естественного_языка|обработки естественного языка]] и применения к [[:Сверточные_нейронные_сети|CNN]] для генерации описания изображения&amp;lt;ref&amp;gt;https://arxiv.org/abs/1502.03044&amp;lt;/ref&amp;gt; и GAN &amp;lt;ref&amp;gt;https://arxiv.org/abs/1805.08318&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Обобщенный механизм внимания==&lt;br /&gt;
'''Обобщенный механизм внимания''' (англ. general attention) {{---}} один из видов внимания, при котором выясняются закономерности между входными и выходными данными.&lt;br /&gt;
Изначально механизм внимания представленный в оригинальной подразумевал именно этот тип внимания. &lt;br /&gt;
&lt;br /&gt;
===Пример использования обобщенного механизма внимания для задачи машинного перевода===&lt;br /&gt;
Для лучшего понимания работы обобщенного механизма внимания будет рассмотрен пример его применения в задаче машинного перевода при помощи Seq2seq сетей для решения которой он изначально был представлен.&lt;br /&gt;
&lt;br /&gt;
====Базовая архитектура ''Seq2seq''====&lt;br /&gt;
[[File:Seq2SeqBasic.png|450px|thumb|Пример работы базовой ''Seq2seq'' сети]]&lt;br /&gt;
Для понимания механизма внимания в ''Seq2seq'' сетях необходимо базовое понимание ''Seq2seq'' архитектуры до введения механизма внимания.&lt;br /&gt;
&lt;br /&gt;
''Seq2seq'' состоит из двух [[:Рекуррентные_нейронные_сети|RNN]] {{---}} ''Энкодера'' и ''Декодера''.&lt;br /&gt;
&lt;br /&gt;
''Энкодер'' {{---}} принимает предложение на языке ''A'' и сжимает его в вектор скрытого состояния.&lt;br /&gt;
&lt;br /&gt;
''Декодер'' {{---}} выдает слово на языке ''B'', принимает последнее скрытое состояние энкодера и предыдущее предыдущее предсказанное слово.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Рассмотрим пример работы ''Seq2seq'' сети:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''A''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние энкодера.&lt;br /&gt;
&lt;br /&gt;
''Блоки энкодера (зеленый)'' {{---}} блоки энкодера получающие на вход &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; и передающие скрытое состояние &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; на следующую итерацию.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние декодера.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''B''.&lt;br /&gt;
&lt;br /&gt;
''Блоки декодера (фиолетовый)'' {{---}} блоки декодера получающие на вход &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt; или специальный токен '''start''' в случае первой итерации и возвращаюшие &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''B''. &lt;br /&gt;
Передают &amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние декодера на следующую итерацию. &lt;br /&gt;
Перевод считается завершенным при &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt;, равном специальному токену '''end'''.&lt;br /&gt;
&lt;br /&gt;
====Применение механизма внимания для ''Seq2seq''====&lt;br /&gt;
Несмотря на то, что нейронные сети рассматриваются как &amp;quot;черный ящик&amp;quot; и интерпретировать их внутренности в понятных человеку терминах часто невозможно, все же механизм внимания интуитивно понятный людям смог улучшить качество машинного перевода базового ''Seq2seq'' алгоритма.&lt;br /&gt;
&lt;br /&gt;
Успех этого использования этого подхода в задаче машинного перевода обусловлен лучшим выводом закономерностей между словами находящимися на большом расстоянии друг от друга. Несмотря на то, что ''LSTM'' и ''GRU'' блоки используются именно для улучшения передачи информации с предыдущих итераций ''RNN'' их основная проблема заключается в том, что влияние предыдущих состояний на текущее уменьшается экспоненциально от расстояния между словами, в то же время механизм внимания улучшает этот показатель до линейного&amp;lt;ref&amp;gt;https://towardsdatascience.com/transformers-141e32e69591&amp;lt;/ref&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
[[:Рекуррентные_нейронные_сети|RNN]] используются при обработке данных, для которых важна их последовательность. В классическом случае применения [[:Рекуррентные_нейронные_сети|RNN]] результатом является только последнее скрытое состояние &amp;lt;math&amp;gt;h_m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; {{---}} длина последовательности входных данных. Использование механизма внимания позволяет использовать информацию полученную не только из последнего скрытого состояния, но и любого скрытого состояния &amp;lt;math&amp;gt;h_t&amp;lt;/math&amp;gt; для любого &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;.&lt;br /&gt;
=====Устройство слоя механизма внимания=====&lt;br /&gt;
[[File:AttentionGeneral.png|450px|thumb|Обобщенный механизм внимания в [[:Рекуррентные_нейронные_сети|RNN]]]]&lt;br /&gt;
Обычно слой использующийся для механизма внимания представляет собой обычную, чаще всего однослойную, нейронную сеть на вход которой подаются &amp;lt;math&amp;gt;h_t, t = 1 \  \ldots m&amp;lt;/math&amp;gt;, а также вектор &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; в котором содержится некий контекст зависящий от конкретной задачи.&lt;br /&gt;
&lt;br /&gt;
В случае ''Seq2seq'' сетей вектором &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; будет являться скрытое состояние &amp;lt;math&amp;gt;d_{i-1}&amp;lt;/math&amp;gt; предыдущей итерации декодера.&lt;br /&gt;
&lt;br /&gt;
Выходом данного слоя будет является вектор &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; (англ. ''score'') {{---}} оценки на основании которых на скрытое состояние &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; будет &amp;quot;обращено внимание&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Далее для нормализации значений &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; используется &amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt;[https://ru.wikipedia.org/wiki/Softmax Wiki -- Функция softmax]&amp;lt;/ref&amp;gt;. Тогда &amp;lt;math&amp;gt;e = softmax(s)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt; здесь используется благодаря своим свойствам:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;\forall s\colon\  \sum_{i=1}^n softmax(s)_i = 1, &amp;lt;/math&amp;gt;&lt;br /&gt;
*&amp;lt;math&amp;gt;\forall s,\ i\colon \ softmax(s)_i &amp;gt;= 0 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Далее считается &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; (англ. ''context vector'') &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;с = \sum_{i=1}^m e_i h_i&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результатом работы слоя внимания является &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; который, содержит в себе информацию обо всех скрытых состояниях &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; пропорционально оценке &amp;lt;math&amp;gt;e_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=====Применение механизма внимания к базовой ''Seq2seq'' архитектуре=====&lt;br /&gt;
[[File:Seq2SeqAttention.png|450px|thumb|Пример работы ''Seq2seq'' сети с механизмом внимания]]&lt;br /&gt;
При добавлении механизма в данную архитектуру между [[:Рекуррентные_нейронные_сети|RNN]] ''Энкодер'' и ''Декодер'' слоя механизма внимания получится следующая схема:&lt;br /&gt;
&lt;br /&gt;
Здесь &amp;lt;math&amp;gt;x_i, h_i, d_i, y_i&amp;lt;/math&amp;gt; имеют те же назначения, что и в варианте без механизма внимания.&lt;br /&gt;
&lt;br /&gt;
''Агрегатор скрытых состояний энкодера (желтый)'' {{---}} агрегирует в себе все вектора &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; и возвращает всю последовательность векторов &amp;lt;math&amp;gt;h = [h_1, h_2, h_3, h_4]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt; {{---}} вектор контекста на итерации &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Блоки механизма внимания (красный)'' {{---}} механизм внимания. Принимает &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;d_{i - 1}&amp;lt;/math&amp;gt;, возвращает &amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Блоки декодера (фиолетовый)'' {{---}} по сравнению с обычной ''Seq2seq'' сетью меняются входные данные. Теперь на итерации &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; на вход подается не &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt;, а конкатенация &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом при помощи механизма внимания достигается &amp;quot;фокусирование&amp;quot; декодера на определенных скрытых состояниях. В случаях машинного перевода эта возможность помогает декодеру предсказывать на какие скрытые состояния при исходных определенных словах на языке ''A'' необходимо обратить больше внимания при переводе данного слова на язык ''B''.&lt;br /&gt;
&lt;br /&gt;
==Self-Attention==&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
*[[:Сверточные_нейронные_сети|Сверточные нейронные сети]]&lt;br /&gt;
*[[:Нейронные_сети,_перцептрон|Нейронные сети, перцептрон]]&lt;br /&gt;
*[[:Рекуррентные_нейронные_сети|Рекуррентные нейронные сети]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
*[https://blog.floydhub.com/attention-mechanism/amp/ Статья о механизме внимания, его типах и разновидностях]&lt;br /&gt;
*[https://www.coursera.org/lecture/nlp-sequence-models/attention-model-lSwVa Лекция Andrew Ng о механизме внимания в NLP]&lt;br /&gt;
*[https://towardsdatascience.com/intuitive-understanding-of-attention-mechanism-in-deep-learning-6c9482aecf4f Статья с подробно разборанными примерами и кодом на ''Python'' и ''TensorFlow'']&lt;br /&gt;
*[http://jalammar.github.io/illustrated-transformer/ Статья c примерами работы Self-attention]&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Нейронные сети]]&lt;br /&gt;
[[Категория: Рекуррентные нейронные сети]]&lt;/div&gt;</summary>
		<author><name>Gpevnev</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=73096</id>
		<title>Механизм внимания</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=73096"/>
				<updated>2020-03-22T10:37:29Z</updated>
		
		<summary type="html">&lt;p&gt;Gpevnev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Механизм внимания''' (англ. ''attention mechanism'', ''attention model'') {{---}} техника используемая в [[:Рекуррентные_нейронные_сети|рекуррентных нейронных сетях]] (сокр. ''RNN'') и [[:Сверточные_нейронные_сети|сверточных нейронных сетях]] (сокр. ''CNN'') для поиска взаимосвязей между различными частями входных и выходных данных.&lt;br /&gt;
&lt;br /&gt;
(или проще для &amp;quot;обращения внимания&amp;quot; на определенные части входных данных в зависимости от текущего контекста. (как лучше?)) &lt;br /&gt;
&lt;br /&gt;
Изначально механизм внимания был представлен в контексте [[:Рекуррентные_нейронные_сети|рекуррентных]] ''Seq2seq'' сетей &amp;lt;ref&amp;gt;https://arxiv.org/abs/1409.0473 статье&amp;lt;/ref&amp;gt; для &amp;quot;обращения внимания&amp;quot; блоков декодеров на скрытые состояния [[:Рекуррентные_нейронные_сети|RNN]] энкодера для любой итерации, а не только последней.&lt;br /&gt;
 &lt;br /&gt;
После успеха этой методики в машинном переводе последовали ее внедрения в других задачах [[:Обработка_естественного_языка|обработки естественного языка]] и применения к [[:Сверточные_нейронные_сети|CNN]] для генерации описания изображения&amp;lt;ref&amp;gt;https://arxiv.org/abs/1502.03044&amp;lt;/ref&amp;gt; и GAN &amp;lt;ref&amp;gt;SAGAN&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Обобщенный механизм внимания==&lt;br /&gt;
'''Обобщенный механизм внимания''' (англ. general attention) {{---}} один из видов внимания, при котором выясняются закономерности между входными и выходными данными.&lt;br /&gt;
Изначально механизм внимания представленный в оригинальной подразумевал именно этот тип внимания. &lt;br /&gt;
&lt;br /&gt;
===Пример использования обобщенного механизма внимания для задачи машинного перевода===&lt;br /&gt;
Для лучшего понимания работы обобщенного механизма внимания будет рассмотрен пример его применения в задаче машинного перевода при помощи Seq2seq сетей для решения которой он изначально был представлен&amp;lt;ref&amp;gt;[https://arxiv.org/abs/1409.0473 Neural Machine Translation by Jointly Learning to Align and Translate]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
====Базовая архитектура ''Seq2seq''====&lt;br /&gt;
[[File:Seq2SeqBasic.png|450px|thumb|Пример работы базовой ''Seq2seq'' сети]]&lt;br /&gt;
Для понимания механизма внимания в ''Seq2seq'' сетях необходимо базовое понимание ''Seq2seq'' архитектуры до введения механизма внимания.&lt;br /&gt;
&lt;br /&gt;
''Seq2seq'' состоит из двух [[:Рекуррентные_нейронные_сети|RNN]] {{---}} ''Энкодера'' и ''Декодера''.&lt;br /&gt;
&lt;br /&gt;
''Энкодер'' {{---}} принимает предложение на языке ''A'' и сжимает его в вектор скрытого состояния.&lt;br /&gt;
&lt;br /&gt;
''Декодер'' {{---}} выдает слово на языке ''B'', принимает последнее скрытое состояние энкодера и предыдущее предыдущее предсказанное слово.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Рассмотрим пример работы ''Seq2seq'' сети:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''A''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние энкодера.&lt;br /&gt;
&lt;br /&gt;
''Блоки энкодера (зеленый)'' {{---}} блоки энкодера получающие на вход &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; и передающие скрытое состояние &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; на следующую итерацию.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние декодера.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''B''.&lt;br /&gt;
&lt;br /&gt;
''Блоки декодера (фиолетовый)'' {{---}} блоки декодера получающие на вход &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt; или специальный токен '''start''' в случае первой итерации и возвращаюшие &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''B''. &lt;br /&gt;
Передают &amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние декодера на следующую итерацию. &lt;br /&gt;
Перевод считается завершенным при &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt;, равном специальному токену '''end'''.&lt;br /&gt;
&lt;br /&gt;
====Применение механизма внимания для ''Seq2seq''====&lt;br /&gt;
[[File:AttentionGeneral.png|450px|thumb|Обобщенный механизм внимания в [[:Рекуррентные_нейронные_сети|RNN]]]]&lt;br /&gt;
Несмотря на то, что нейронные сети рассматриваются как &amp;quot;черный ящик&amp;quot; и интерпретировать их внутренности в понятных человеку терминах часто невозможно, все же механизм внимания интуитивно понятный людям смог улучшить качество машинного перевода базового ''Seq2seq'' алгоритма.&lt;br /&gt;
&lt;br /&gt;
Успех этого использования этого подхода в задаче машинного перевода обусловлен лучшим выводом закономерностей между словами находящимися на большом расстоянии друг от друга. Несмотря на то, что ''LSTM'' и ''GRU'' блоки используются именно для улучшения передачи информации с предыдущих итераций ''RNN'' их основная проблема заключается в том, что влияние предыдущих состояний на текущее уменьшается экспоненциально от расстояния между словами, в то же время механизм внимания улучшает этот показатель до линейного&amp;lt;ref&amp;gt;https://towardsdatascience.com/transformers-141e32e69591&amp;lt;/ref&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
[[:Рекуррентные_нейронные_сети|RNN]] используются при обработке данных, для которых важна их последовательность. В классическом случае применения [[:Рекуррентные_нейронные_сети|RNN]] результатом является только последнее скрытое состояние &amp;lt;math&amp;gt;h_m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; {{---}} длина последовательности входных данных. Использование механизма внимания позволяет использовать информацию полученную не только из последнего скрытого состояния, но и любого скрытого состояния &amp;lt;math&amp;gt;h_t&amp;lt;/math&amp;gt; для любого &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Обычно слой использующийся для механизма внимания представляет собой обычную, чаще всего однослойную, нейронную сеть на вход которой подаются &amp;lt;math&amp;gt;h_t, t = 1 \  \ldots m&amp;lt;/math&amp;gt;, а также вектор &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; в котором содержится некий контекст зависящий от конкретной задачи.&lt;br /&gt;
&lt;br /&gt;
В случае ''Seq2seq'' сетей вектором &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; будет являться скрытое состояние &amp;lt;math&amp;gt;d_{i-1}&amp;lt;/math&amp;gt; предыдущей итерации декодера.&lt;br /&gt;
&lt;br /&gt;
Выходом данного слоя будет является вектор &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; (англ. ''score'') {{---}} оценки на основании которых на скрытое состояние &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; будет &amp;quot;обращено внимание&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Далее для нормализации значений &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; используется &amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt;[https://ru.wikipedia.org/wiki/Softmax Wiki -- Функция softmax]&amp;lt;/ref&amp;gt;. Тогда &amp;lt;math&amp;gt;e = softmax(s)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt; здесь используется благодаря своим свойствам:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;\forall s\colon\  \sum_{i=1}^n softmax(s)_i = 1, &amp;lt;/math&amp;gt;&lt;br /&gt;
*&amp;lt;math&amp;gt;\forall s,\ i\colon \ softmax(s)_i &amp;gt;= 0 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Далее считается &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; (англ. ''context vector'') &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;с = \sum_{i=1}^m e_i h_i&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результатом работы слоя внимания является &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; который, содержит в себе информацию обо всех скрытых состояниях &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; пропорционально оценке &amp;lt;math&amp;gt;e_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:Seq2SeqAttention.png|450px|thumb|Пример работы ''Seq2seq'' сети с механизмом внимания]]&lt;br /&gt;
При добавлении механизма в данную архитектуру между [[:Рекуррентные_нейронные_сети|RNN]] ''Энкодер'' и ''Декодер'' слоя механизма внимания получится следующая схема:&lt;br /&gt;
&lt;br /&gt;
Здесь &amp;lt;math&amp;gt;x_i, h_i, d_i, y_i&amp;lt;/math&amp;gt; имеют те же назначения, что и в варианте без механизма внимания.&lt;br /&gt;
&lt;br /&gt;
''Агрегатор скрытых состояний энкодера (желтый)'' {{---}} агрегирует в себе все вектора &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; и возвращает всю последовательность векторов &amp;lt;math&amp;gt;h = [h_1, h_2, h_3, h_4]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt; {{---}} вектор контекста на итерации &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Блоки механизма внимания (красный)'' {{---}} механизм внимания. Принимает &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;d_{i - 1}&amp;lt;/math&amp;gt;, возвращает &amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Блоки декодера (фиолетовый)'' {{---}} по сравнению с обычной ''Seq2seq'' сетью меняются входные данные. Теперь на итерации &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; на вход подается не &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt;, а конкатенация &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом при помощи механизма внимания достигается &amp;quot;фокусирование&amp;quot; декодера на определенных скрытых состояниях. В случаях машинного перевода эта возможность помогает декодеру предсказывать на какие скрытые состояния при исходных определенных словах на языке ''A'' необходимо обратить больше внимания при переводе данного слова на язык ''B''.&lt;br /&gt;
&lt;br /&gt;
==Self-Attention==&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
*[[:Сверточные_нейронные_сети|Сверточные нейронные сети]]&lt;br /&gt;
*[[:Нейронные_сети,_перцептрон|Нейронные сети, перцептрон]]&lt;br /&gt;
*[[:Рекуррентные_нейронные_сети|Рекуррентные нейронные сети]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
*[https://blog.floydhub.com/attention-mechanism/amp/ Статья о механизме внимания, его типах и разновидностях]&lt;br /&gt;
*[https://www.coursera.org/lecture/nlp-sequence-models/attention-model-lSwVa Лекция Andrew Ng о механизме внимания в NLP]&lt;br /&gt;
*[https://towardsdatascience.com/intuitive-understanding-of-attention-mechanism-in-deep-learning-6c9482aecf4f Статья с подробно разборанными примерами и кодом на ''Python'' и ''TensorFlow'']&lt;br /&gt;
*[http://jalammar.github.io/illustrated-transformer/ Статья c примерами работы Self-attention]&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Нейронные сети]]&lt;br /&gt;
[[Категория: Рекуррентные нейронные сети]]&lt;/div&gt;</summary>
		<author><name>Gpevnev</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=73095</id>
		<title>Механизм внимания</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=73095"/>
				<updated>2020-03-22T10:36:53Z</updated>
		
		<summary type="html">&lt;p&gt;Gpevnev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Механизм внимания''' (англ. ''attention mechanism'', ''attention model'') {{---}} техника используемая в [[:Рекуррентные_нейронные_сети|рекуррентных нейронных сетях]] (сокр. ''RNN'') и [[:Сверточные_нейронные_сети|сверточных нейронных сетях]] (сокр. ''CNN'') для поиска взаимосвязей между различными частями входных и выходных данных.&lt;br /&gt;
&lt;br /&gt;
(или проще для &amp;quot;обращения внимания&amp;quot; на определенные части входных данных в зависимости от текущего контекста. (как лучше?)) &lt;br /&gt;
&lt;br /&gt;
Изначально механизм внимания был представлен в контексте [[:Рекуррентные_нейронные_сети|рекуррентных]] ''Seq2seq'' сетей &amp;lt;ref&amp;gt;https://arxiv.org/abs/1409.0473 статье&amp;lt;/ref&amp;gt; для &amp;quot;обращения внимания&amp;quot; блоков декодеров на скрытые состояния [[:Рекуррентные_нейронные_сети|RNN]] энкодера для любой итерации, а не только последней.&lt;br /&gt;
 &lt;br /&gt;
После успеха этой методики в машинном переводе последовали ее внедрения в других задачах [[:Обработка_естественного_языка|обработки естественного языка]] и применения к [[:Сверточные_нейронные_сети|CNN]] для генерации описания изображения&amp;lt;ref&amp;gt;https://arxiv.org/abs/1502.03044&amp;lt;/ref&amp;gt; и GAN &amp;lt;ref&amp;gt;SAGAN&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Обобщенный механизм внимания==&lt;br /&gt;
'''Обобщенный механизм внимания''' (англ. general attention) {{---}} один из видов внимания, при котором выясняются закономерности между входными и выходными данными.&lt;br /&gt;
Изначально механизм внимания представленный в оригинальной подразумевал именно этот тип внимания. &lt;br /&gt;
&lt;br /&gt;
===Пример использования обобщенного механизма внимания для задачи машинного перевода===&lt;br /&gt;
Для лучшего понимания работы обобщенного механизма внимания будет рассмотрен пример его применения в задаче машинного перевода при помощи Seq2seq сетей для решения которой он изначально был представлен&amp;lt;ref&amp;gt;[https://arxiv.org/abs/1409.0473 Neural Machine Translation by Jointly Learning to Align and Translate]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
====Базовая архитектура ''Seq2seq''====&lt;br /&gt;
[[File:Seq2SeqBasic.png|450px|thumb|Пример работы базовой ''Seq2seq'' сети]]&lt;br /&gt;
Для понимания механизма внимания в ''Seq2seq'' сетях необходимо базовое понимание ''Seq2seq'' архитектуры до введения механизма внимания.&lt;br /&gt;
&lt;br /&gt;
''Seq2seq'' состоит из двух [[:Рекуррентные_нейронные_сети|RNN]] {{---}} ''Энкодера'' и ''Декодера''.&lt;br /&gt;
&lt;br /&gt;
''Энкодер'' {{---}} принимает предложение на языке ''A'' и сжимает его в вектор скрытого состояния.&lt;br /&gt;
&lt;br /&gt;
''Декодер'' {{---}} выдает слово на языке ''B'', принимает последнее скрытое состояние энкодера и предыдущее предыдущее предсказанное слово.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Рассмотрим пример работы ''Seq2seq'' сети:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''A''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние энкодера.&lt;br /&gt;
&lt;br /&gt;
''Блоки энкодера (зеленый)'' {{---}} блоки энкодера получающие на вход &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; и передающие скрытое состояние &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; на следующую итерацию.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние декодера.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''B''.&lt;br /&gt;
&lt;br /&gt;
''Блоки декодера (фиолетовый)'' {{---}} блоки декодера получающие на вход &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt; или специальный токен '''start''' в случае первой итерации и возвращаюшие &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''B''. &lt;br /&gt;
Передают &amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние декодера на следующую итерацию. &lt;br /&gt;
Перевод считается завершенным при &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt;, равном специальному токену '''end'''.&lt;br /&gt;
&lt;br /&gt;
====Применение механизма внимания для ''Seq2seq''====&lt;br /&gt;
[[File:AttentionGeneral.png|450px|thumb|Обобщенный механизм внимания в [[:Рекуррентные_нейронные_сети|RNN]]]]&lt;br /&gt;
Несмотря на то, что нейронные сети рассматриваются как &amp;quot;черный ящик&amp;quot; и интерпретировать их внутренности в понятных человеку терминах часто невозможно, все же механизм внимания интуитивно понятный людям смог улучшить качество машинного перевода базового ''Seq2seq'' алгоритма.&lt;br /&gt;
&lt;br /&gt;
Успех этого использования этого подхода в задаче машинного перевода обусловлен лучшим выводом закономерностей между словами находящимися на большом расстоянии друг от друга. Несмотря на то, что ''LSTM'' и ''GRU'' блоки используются именно для улучшения передачи информации с предыдущих итераций ''RNN'' их основная проблема заключается в том, что влияние предыдущих состояний на текущее уменьшается экспоненциально от расстояния между словами, в то же время механизм внимания улучшает этот показатель до линейного&amp;lt;ref&amp;gt;https://towardsdatascience.com/transformers-141e32e69591&amp;lt;\ref&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
[[:Рекуррентные_нейронные_сети|RNN]] используются при обработке данных, для которых важна их последовательность. В классическом случае применения [[:Рекуррентные_нейронные_сети|RNN]] результатом является только последнее скрытое состояние &amp;lt;math&amp;gt;h_m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; {{---}} длина последовательности входных данных. Использование механизма внимания позволяет использовать информацию полученную не только из последнего скрытого состояния, но и любого скрытого состояния &amp;lt;math&amp;gt;h_t&amp;lt;/math&amp;gt; для любого &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Обычно слой использующийся для механизма внимания представляет собой обычную, чаще всего однослойную, нейронную сеть на вход которой подаются &amp;lt;math&amp;gt;h_t, t = 1 \  \ldots m&amp;lt;/math&amp;gt;, а также вектор &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; в котором содержится некий контекст зависящий от конкретной задачи.&lt;br /&gt;
&lt;br /&gt;
В случае ''Seq2seq'' сетей вектором &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; будет являться скрытое состояние &amp;lt;math&amp;gt;d_{i-1}&amp;lt;/math&amp;gt; предыдущей итерации декодера.&lt;br /&gt;
&lt;br /&gt;
Выходом данного слоя будет является вектор &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; (англ. ''score'') {{---}} оценки на основании которых на скрытое состояние &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; будет &amp;quot;обращено внимание&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Далее для нормализации значений &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; используется &amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt;[https://ru.wikipedia.org/wiki/Softmax Wiki -- Функция softmax]&amp;lt;/ref&amp;gt;. Тогда &amp;lt;math&amp;gt;e = softmax(s)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt; здесь используется благодаря своим свойствам:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;\forall s\colon\  \sum_{i=1}^n softmax(s)_i = 1, &amp;lt;/math&amp;gt;&lt;br /&gt;
*&amp;lt;math&amp;gt;\forall s,\ i\colon \ softmax(s)_i &amp;gt;= 0 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Далее считается &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; (англ. ''context vector'') &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;с = \sum_{i=1}^m e_i h_i&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результатом работы слоя внимания является &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; который, содержит в себе информацию обо всех скрытых состояниях &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; пропорционально оценке &amp;lt;math&amp;gt;e_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:Seq2SeqAttention.png|450px|thumb|Пример работы ''Seq2seq'' сети с механизмом внимания]]&lt;br /&gt;
При добавлении механизма в данную архитектуру между [[:Рекуррентные_нейронные_сети|RNN]] ''Энкодер'' и ''Декодер'' слоя механизма внимания получится следующая схема:&lt;br /&gt;
&lt;br /&gt;
Здесь &amp;lt;math&amp;gt;x_i, h_i, d_i, y_i&amp;lt;/math&amp;gt; имеют те же назначения, что и в варианте без механизма внимания.&lt;br /&gt;
&lt;br /&gt;
''Агрегатор скрытых состояний энкодера (желтый)'' {{---}} агрегирует в себе все вектора &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; и возвращает всю последовательность векторов &amp;lt;math&amp;gt;h = [h_1, h_2, h_3, h_4]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt; {{---}} вектор контекста на итерации &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Блоки механизма внимания (красный)'' {{---}} механизм внимания. Принимает &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;d_{i - 1}&amp;lt;/math&amp;gt;, возвращает &amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Блоки декодера (фиолетовый)'' {{---}} по сравнению с обычной ''Seq2seq'' сетью меняются входные данные. Теперь на итерации &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; на вход подается не &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt;, а конкатенация &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом при помощи механизма внимания достигается &amp;quot;фокусирование&amp;quot; декодера на определенных скрытых состояниях. В случаях машинного перевода эта возможность помогает декодеру предсказывать на какие скрытые состояния при исходных определенных словах на языке ''A'' необходимо обратить больше внимания при переводе данного слова на язык ''B''.&lt;br /&gt;
&lt;br /&gt;
==Self-Attention==&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
*[[:Сверточные_нейронные_сети|Сверточные нейронные сети]]&lt;br /&gt;
*[[:Нейронные_сети,_перцептрон|Нейронные сети, перцептрон]]&lt;br /&gt;
*[[:Рекуррентные_нейронные_сети|Рекуррентные нейронные сети]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
*[https://blog.floydhub.com/attention-mechanism/amp/ Статья о механизме внимания, его типах и разновидностях]&lt;br /&gt;
*[https://www.coursera.org/lecture/nlp-sequence-models/attention-model-lSwVa Лекция Andrew Ng о механизме внимания в NLP]&lt;br /&gt;
*[https://towardsdatascience.com/intuitive-understanding-of-attention-mechanism-in-deep-learning-6c9482aecf4f Статья с подробно разборанными примерами и кодом на ''Python'' и ''TensorFlow'']&lt;br /&gt;
*[http://jalammar.github.io/illustrated-transformer/ Статья c примерами работы Self-attention]&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Нейронные сети]]&lt;br /&gt;
[[Категория: Рекуррентные нейронные сети]]&lt;/div&gt;</summary>
		<author><name>Gpevnev</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=73094</id>
		<title>Механизм внимания</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=73094"/>
				<updated>2020-03-22T10:31:55Z</updated>
		
		<summary type="html">&lt;p&gt;Gpevnev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Механизм внимания''' (англ. ''attention mechanism'', ''attention model'') {{---}} техника используемая в [[:Рекуррентные_нейронные_сети|рекуррентных нейронных сетях]] (сокр. ''RNN'') и [[:Сверточные_нейронные_сети|сверточных нейронных сетях]] (сокр. ''CNN'') для поиска взаимосвязей между различными частями входных и выходных данных.&lt;br /&gt;
&lt;br /&gt;
(или проще для &amp;quot;обращения внимания&amp;quot; на определенные части входных данных в зависимости от текущего контекста. (как лучше?)) &lt;br /&gt;
&lt;br /&gt;
Изначально механизм внимания был представлен в контексте [[:Рекуррентные_нейронные_сети|рекуррентных]] ''Seq2seq'' сетей &amp;lt;ref&amp;gt;https://arxiv.org/abs/1409.0473 статье&amp;lt;/ref&amp;gt; для &amp;quot;обращения внимания&amp;quot; блоков декодеров на скрытые состояния [[:Рекуррентные_нейронные_сети|RNN]] энкодера для любой итерации, а не только последней.&lt;br /&gt;
 &lt;br /&gt;
После успеха этой методики в машинном переводе последовали ее внедрения в других задачах [[:Обработка_естественного_языка|обработки естественного языка]] и применения к [[:Сверточные_нейронные_сети|CNN]] для генерации описания изображения&amp;lt;ref&amp;gt;https://arxiv.org/abs/1502.03044&amp;lt;/ref&amp;gt; и GAN &amp;lt;ref&amp;gt;SAGAN&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Обобщенный механизм внимания==&lt;br /&gt;
'''Обобщенный механизм внимания''' (англ. general attention) {{---}} один из видов внимания, при котором выясняются закономерности между входными и выходными данными.&lt;br /&gt;
Изначально механизм внимания представленный в оригинальной подразумевал именно этот тип внимания. &lt;br /&gt;
&lt;br /&gt;
===Пример использования обобщенного механизма внимания для задачи машинного перевода===&lt;br /&gt;
Для лучшего понимания работы обобщенного механизма внимания будет рассмотрен пример его применения в задаче машинного перевода при помощи Seq2seq сетей для решения которой он изначально был представлен&amp;lt;ref&amp;gt;[https://arxiv.org/abs/1409.0473 Neural Machine Translation by Jointly Learning to Align and Translate]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
====Базовая архитектура ''Seq2seq''====&lt;br /&gt;
[[File:Seq2SeqBasic.png|450px|thumb|Пример работы базовой ''Seq2seq'' сети]]&lt;br /&gt;
Для понимания механизма внимания в ''Seq2seq'' сетях необходимо базовое понимание ''Seq2seq'' архитектуры до введения механизма внимания.&lt;br /&gt;
&lt;br /&gt;
''Seq2seq'' состоит из двух [[:Рекуррентные_нейронные_сети|RNN]] {{---}} ''Энкодера'' и ''Декодера''.&lt;br /&gt;
&lt;br /&gt;
''Энкодер'' {{---}} принимает предложение на языке ''A'' и сжимает его в вектор скрытого состояния.&lt;br /&gt;
&lt;br /&gt;
''Декодер'' {{---}} выдает слово на языке ''B'', принимает последнее скрытое состояние энкодера и предыдущее предыдущее предсказаное слово.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Рассмотрим пример работы ''Seq2seq'' сети:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''A''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние энкодера.&lt;br /&gt;
&lt;br /&gt;
''Блоки энкодера (зеленый)'' {{---}} блоки энкодера получающие на вход &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; и передающие скрытое состояние &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; на следующую итерацию.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние декодера.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''B''.&lt;br /&gt;
&lt;br /&gt;
''Блоки декодера (фиолетовый)'' {{---}} блоки декодера получающие на вход &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt; или специальный токен '''start''' в случае первой итерации и возвращаюшие &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''B''. &lt;br /&gt;
Передают &amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние декодера на следующую итерацию. &lt;br /&gt;
Перевод считается завершенным при &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt;, равном специальному токену '''end'''.&lt;br /&gt;
&lt;br /&gt;
====Применение механизма внимания для ''Seq2seq''====&lt;br /&gt;
[[File:AttentionGeneral.png|450px|thumb|Обобщенный механизм внимания в [[:Рекуррентные_нейронные_сети|RNN]]]]&lt;br /&gt;
Несмотря на то, что нейронные сети рассматриваются как &amp;quot;черный ящик&amp;quot; и интерпретировать их внутренности в понятных человеку терминах часто невозможно, все же механизм внимания интуитивно понятный людям смог улучшить результаты машинного перевода для алгоритма используемого в статье.&lt;br /&gt;
&lt;br /&gt;
Успех этого использования этого подхода в задаче машинного перевода обусловлен лучшим выводом закономерностей между словами находящимися на большом расстоянии друг от друга. Несмотря на то, что ''LSTM'' и ''GRU'' блоки используются именно для улучшения передачи информации с предыдущих итераций ''RNN'' их основная проблема заключается в том, что влияние предыдущих состояний на текущее уменьшается экспоненциально от расстояния между словами, в то же время механизм внимания улучшает этот показатель до линейного.&lt;br /&gt;
 &lt;br /&gt;
[[:Рекуррентные_нейронные_сети|RNN]] используются при обработке данных, для которых важна их последовательность. В классическом случае применения [[:Рекуррентные_нейронные_сети|RNN]] результатом является только последнее скрытое состояние &amp;lt;math&amp;gt;h_m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; {{---}} длина последовательности входных данных. Использование механизма внимания позволяет использовать информацию полученную не только из последнего скрытого состояния, но и любого скрытого состояния &amp;lt;math&amp;gt;h_t&amp;lt;/math&amp;gt; для любого &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Обычно слой использующийся для механизма внимания представляет собой обычную, чаще всего однослойную, нейронную сеть на вход которой подаются &amp;lt;math&amp;gt;h_t, t = 1 \  \ldots m&amp;lt;/math&amp;gt;, а также вектор &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; в котором содержится некий контекст зависящий от конкретной задачи.&lt;br /&gt;
&lt;br /&gt;
В случае ''Seq2seq'' сетей вектором &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; будет являться скрытое состояние &amp;lt;math&amp;gt;d_{i-1}&amp;lt;/math&amp;gt; предыдущей итерации декодера.&lt;br /&gt;
&lt;br /&gt;
Выходом данного слоя будет является вектор &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; (англ. ''score'') {{---}} оценки на основании которых на скрытое состояние &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; будет &amp;quot;обращено внимание&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Далее для нормализации значений &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; используется &amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt;[https://ru.wikipedia.org/wiki/Softmax Wiki -- Функция softmax]&amp;lt;/ref&amp;gt;. Тогда &amp;lt;math&amp;gt;e = softmax(s)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt; здесь используется благодоря своим свойствам:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;\forall s\colon\  \sum_{i=1}^n softmax(s)_i = 1, &amp;lt;/math&amp;gt;&lt;br /&gt;
*&amp;lt;math&amp;gt;\forall s,\ i\colon \ softmax(s)_i &amp;gt;= 0 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Далее считается &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; (англ. ''context vector'') &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;с = \sum_{i=1}^m e_i h_i&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результатом работы слоя внимания является &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; который, содержит в себе информацию обо всех скрытых состоянях &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; пропорционально оценке &amp;lt;math&amp;gt;e_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Seq2SeqAttention.png|450px|thumb|Пример работы ''Seq2seq'' сети с механизмом внимания]]&lt;br /&gt;
При добавлении механизма в данную архитектуру между [[:Рекуррентные_нейронные_сети|RNN]] ''Энкодер'' и ''Декодер'' слоя механизма внимания получится следуюшая схема:&lt;br /&gt;
&lt;br /&gt;
Здесь &amp;lt;math&amp;gt;x_i, h_i, d_i, y_i&amp;lt;/math&amp;gt; имеют те же назначения, что и в варианте без механизма внимания.&lt;br /&gt;
&lt;br /&gt;
''Агрегатор скрытых состояний энкодера (желтый)'' {{---}} агрегирует в себе все вектора &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; и возвращает всю последовательность векторов &amp;lt;math&amp;gt;h = [h_1, h_2, h_3, h_4]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt; {{---}} вектор контекста на итерации &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Блоки механизма внимания (красный)'' {{---}} механизм внимания. Принимает &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;d_{i - 1}&amp;lt;/math&amp;gt;, возвращает &amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Блоки декодера (фиолетовый)'' {{---}} по сравнению с обычной ''Seq2seq'' сетью меняются входные данные. Теперь на итерации &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; на вход подается не &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt;, а конкатенация &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом при помощи механизма внимания достигается &amp;quot;фокусирование&amp;quot; декодера на определенных скрытых состояниях. В случаях машинного перевода эта возможность помогает декодеру предсказывать на какие скрытые состояния при исходных определенных словах на языке ''A'' необходимо обратить больше внимания при переводе данного слова на язык ''B''.&lt;br /&gt;
&lt;br /&gt;
==Self-Attention==&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
*[[:Сверточные_нейронные_сети|Сверточные нейронные сети]]&lt;br /&gt;
*[[:Нейронные_сети,_перцептрон|Нейронные сети, перцептрон]]&lt;br /&gt;
*[[:Рекуррентные_нейронные_сети|Рекуррентные нейронные сети]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
*[https://blog.floydhub.com/attention-mechanism/amp/ Статья о механизме внимания, его типах и разновидностях]&lt;br /&gt;
*[https://www.coursera.org/lecture/nlp-sequence-models/attention-model-lSwVa Лекция Andrew Ng о механизме внимания в NLP]&lt;br /&gt;
*[https://towardsdatascience.com/intuitive-understanding-of-attention-mechanism-in-deep-learning-6c9482aecf4f Статья с подробно разборанными примерами и кодом на ''Python'' и ''TensorFlow'']&lt;br /&gt;
*[http://jalammar.github.io/illustrated-transformer/ Статья c примерами работы Self-attention]&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Нейронные сети]]&lt;br /&gt;
[[Категория: Рекуррентные нейронные сети]]&lt;/div&gt;</summary>
		<author><name>Gpevnev</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=73093</id>
		<title>Механизм внимания</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=73093"/>
				<updated>2020-03-22T10:24:54Z</updated>
		
		<summary type="html">&lt;p&gt;Gpevnev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Механизм внимания''' (англ. ''attention mechanism'', ''attention model'') {{---}} техника используемая в [[:Рекуррентные_нейронные_сети|рекуррентных нейронных сетях]] (сокр. ''RNN'') и [[:Сверточные_нейронные_сети|сверточных нейронных сетях]] (сокр. ''CNN'') для поиска взаимосвязей между различными частями входных и выходных данных.&lt;br /&gt;
&lt;br /&gt;
(или проще для &amp;quot;обращения внимания&amp;quot; на определенные части входных данных в зависимости от текущего контекста. (как лучше?)) &lt;br /&gt;
&lt;br /&gt;
Изначально механизм внимания был представлен в контексте [[:Рекуррентные_нейронные_сети|рекуррентных]] ''Seq2seq'' сетей &amp;lt;ref&amp;gt;https://arxiv.org/abs/1409.0473 статье&amp;lt;/ref&amp;gt; для &amp;quot;обращения внимания&amp;quot; блоков декодеров на скрытые состояния [[:Рекуррентные_нейронные_сети|RNN]] энкодера для любой итерации, а не только последней.&lt;br /&gt;
 &lt;br /&gt;
После успеха этой методики в машинном переводе последовали ее внедрения в других задачах [[:Обработка_естественного_языка|обработки естественного языка]] и применения к [[:Сверточные_нейронные_сети|CNN]] для генерации описания изображения&amp;lt;ref&amp;gt;https://arxiv.org/abs/1502.03044&amp;lt;/ref&amp;gt; и GAN &amp;lt;ref&amp;gt;SAGAN&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Обобщенный механизм внимания==&lt;br /&gt;
[[File:AttentionGeneral.png|350px|thumb|Обобщенный механизм внимания в [[:Рекуррентные_нейронные_сети|RNN]]]]&lt;br /&gt;
'''Обобщенный механизм внимания''' (англ. general attention) {{---}} один из видов внимания, при котором выясняются закономерности между входными и выходными данными.&lt;br /&gt;
Изначально механизм внимания представленный в оригинальной подразумевал именно этот тип внимания. &lt;br /&gt;
&lt;br /&gt;
===Пример использования обобщенного механизма внимания для задачи машинного перевода===&lt;br /&gt;
Для лучшего понимания работы обобщенного механизма внимания будет рассмотрен пример его применения в задаче машинного перевода при помощи Seq2seq сетей для решения которой он изначально был представлен&amp;lt;ref&amp;gt;[https://arxiv.org/abs/1409.0473 Neural Machine Translation by Jointly Learning to Align and Translate]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Несмотря на то, что нейронные сети рассматриваются как &amp;quot;черный ящик&amp;quot; и интерпретировать их внутренности в понятных человеку терминах часто невозможно, все же механизм внимания интуитивно понятный людям смог улучшить результаты машинного перевода для алгоритма используемого в статье.&lt;br /&gt;
&lt;br /&gt;
Успех этого использования этого подхода в задаче машинного перевода обусловлен лучшим выводом закономерностей между словами находящимися на большом расстоянии друг от друга. Несмотря на то, что ''LSTM'' и ''GRU'' блоки используются именно для улучшения передачи информации с предыдущих итераций ''RNN'' их основная проблема заключается в том, что влияние предыдущих состояний на текущее уменьшается экспоненциально от расстояния между словами, в то же время механизм внимания улучшает этот показатель до линейного.&lt;br /&gt;
 &lt;br /&gt;
[[:Рекуррентные_нейронные_сети|RNN]] используются при обработке данных, для которых важна их последовательность. В классическом случае применения [[:Рекуррентные_нейронные_сети|RNN]] результатом является только последнее скрытое состояние &amp;lt;math&amp;gt;h_m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; {{---}} длина последовательности входных данных. Использование механизма внимания позволяет использовать информацию полученную не только из последнего скрытого состояния, но и любого скрытого состояния &amp;lt;math&amp;gt;h_t&amp;lt;/math&amp;gt; для любого &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Обычно слой использующийся для механизма внимания представляет собой обычную, чаще всего однослойную, нейронную сеть на вход которой подаются &amp;lt;math&amp;gt;h_t, t = 1 \  \ldots m&amp;lt;/math&amp;gt;, а также вектор &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; в котором содержится некий контекст зависящий от конкретно задачи.&lt;br /&gt;
&lt;br /&gt;
В случае ''Seq2seq'' сетей вектором &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; будет являться скрытое состояние &lt;br /&gt;
&lt;br /&gt;
Выходом данного слоя будет является вектор &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; (англ. ''score'') {{---}} оценки на основании которых на скрытое состояние &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; будет &amp;quot;обращено внимание&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Далее для нормализации значений &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; используется &amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt;[https://ru.wikipedia.org/wiki/Softmax Wiki -- Функция softmax]&amp;lt;/ref&amp;gt;. Тогда &amp;lt;math&amp;gt;e = softmax(s)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt; здесь используется благодоря своим свойствам:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;\forall s\colon\  \sum_{i=1}^n softmax(s)_i = 1, &amp;lt;/math&amp;gt;&lt;br /&gt;
*&amp;lt;math&amp;gt;\forall s,\ i\colon \ softmax(s)_i &amp;gt;= 0 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Далее считается &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; (англ. ''context vector'') &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;с = \sum_{i=1}^m e_i h_i&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результатом работы слоя внимания является &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; который, содержит в себе информацию обо всех скрытых состоянях &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; пропорционально оценке &amp;lt;math&amp;gt;e_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
====Базовая архитектура ''Seq2seq''====&lt;br /&gt;
[[File:Seq2SeqBasic.png|450px|thumb|Пример работы базовой ''Seq2seq'' сети]]&lt;br /&gt;
Данный пример рассматривает применение механизма внимания в задаче машинного перевода в применении к архитектуре ''Seq2seq''.&lt;br /&gt;
&lt;br /&gt;
''Seq2seq'' состоит из двух [[:Рекуррентные_нейронные_сети|RNN]] {{---}} ''Энкодера'' и ''Декодера''.&lt;br /&gt;
&lt;br /&gt;
''Энкодер'' {{---}} принимает предложение на языке ''A'' и сжимает его в вектор скрытого состояния.&lt;br /&gt;
&lt;br /&gt;
''Декодер'' {{---}} выдает слово на языке ''B'', принимает последнее скрытое состояние энкодера и предыдущее предыдущее предсказаное слово.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Рассмотрим пример работы ''Seq2seq'' сети:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''A''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние энкодера.&lt;br /&gt;
&lt;br /&gt;
''Блоки энкодера (зеленый)'' {{---}} блоки энкодера получающие на вход &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; и передающие скрытое состояние &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; на следующую итерацию.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние декодера.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''B''.&lt;br /&gt;
&lt;br /&gt;
''Блоки декодера (фиолетовый)'' {{---}} блоки декодера получающие на вход &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt; или специальный токен '''start''' в случае первой итерации и возвращаюшие &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''B''. &lt;br /&gt;
Передают &amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние декодера на следующую итерацию. &lt;br /&gt;
Перевод считается завершенным при &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt;, равном специальному токену '''end'''.&lt;br /&gt;
&lt;br /&gt;
====Применение механизма внимания для ''Seq2seq''====&lt;br /&gt;
[[File:Seq2SeqAttention.png|450px|thumb|Пример работы ''Seq2seq'' сети с механизмом внимания]]&lt;br /&gt;
При добавлении механизма в данную архитектуру между [[:Рекуррентные_нейронные_сети|RNN]] ''Энкодер'' и ''Декодер'' слоя механизма внимания получится следуюшая схема:&lt;br /&gt;
&lt;br /&gt;
Здесь &amp;lt;math&amp;gt;x_i, h_i, d_i, y_i&amp;lt;/math&amp;gt; имеют те же назначения, что и в варианте без механизма внимания.&lt;br /&gt;
&lt;br /&gt;
''Агрегатор скрытых состояний энкодера (желтый)'' {{---}} агрегирует в себе все вектора &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; и возвращает всю последовательность векторов &amp;lt;math&amp;gt;h = [h_1, h_2, h_3, h_4]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt; {{---}} вектор контекста на итерации &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Блоки механизма внимания (красный)'' {{---}} механизм внимания. Принимает &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;d_{i - 1}&amp;lt;/math&amp;gt;, возвращает &amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Блоки декодера (фиолетовый)'' {{---}} по сравнению с обычной ''Seq2seq'' сетью меняются входные данные. Теперь на итерации &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; на вход подается не &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt;, а конкатенация &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом при помощи механизма внимания достигается &amp;quot;фокусирование&amp;quot; декодера на определенных скрытых состояниях. В случаях машинного перевода эта возможность помогает декодеру предсказывать на какие скрытые состояния при исходных определенных словах на языке ''A'' необходимо обратить больше внимания при переводе данного слова на язык ''B''.&lt;br /&gt;
&lt;br /&gt;
==Self-Attention==&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
*[[:Сверточные_нейронные_сети|Сверточные нейронные сети]]&lt;br /&gt;
*[[:Нейронные_сети,_перцептрон|Нейронные сети, перцептрон]]&lt;br /&gt;
*[[:Рекуррентные_нейронные_сети|Рекуррентные нейронные сети]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
*[https://blog.floydhub.com/attention-mechanism/amp/ Статья о механизме внимания, его типах и разновидностях]&lt;br /&gt;
*[https://www.coursera.org/lecture/nlp-sequence-models/attention-model-lSwVa Лекция Andrew Ng о механизме внимания в NLP]&lt;br /&gt;
*[https://towardsdatascience.com/intuitive-understanding-of-attention-mechanism-in-deep-learning-6c9482aecf4f Статья с подробно разборанными примерами и кодом на ''Python'' и ''TensorFlow'']&lt;br /&gt;
*[http://jalammar.github.io/illustrated-transformer/ Статья c примерами работы Self-attention]&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Нейронные сети]]&lt;br /&gt;
[[Категория: Рекуррентные нейронные сети]]&lt;/div&gt;</summary>
		<author><name>Gpevnev</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=73092</id>
		<title>Механизм внимания</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=73092"/>
				<updated>2020-03-22T10:12:31Z</updated>
		
		<summary type="html">&lt;p&gt;Gpevnev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Механизм внимания''' (англ. ''attention mechanism'', ''attention model'') {{---}} техника используемая в [[:Рекуррентные_нейронные_сети|рекуррентных нейронных сетях]] (сокр. ''RNN'') и [[:Сверточные_нейронные_сети|сверточных нейронных сетях]] (сокр. ''CNN'') для поиска взаимосвязей между различными частями входных и выходных данных.&lt;br /&gt;
&lt;br /&gt;
(или проще для &amp;quot;обращения внимания&amp;quot; на определенные части входных данных в зависимости от текущего контекста. (как лучше?)) &lt;br /&gt;
&lt;br /&gt;
Изначально механизм внимания был представлен в контексте [[:Рекуррентные_нейронные_сети|рекуррентных]] ''Seq2seq'' сетей &amp;lt;ref&amp;gt;https://arxiv.org/abs/1409.0473 статье&amp;lt;/ref&amp;gt; для &amp;quot;обращения внимания&amp;quot; блоков декодеров на скрытые состояния [[:Рекуррентные_нейронные_сети|RNN]] энкодера для любой итерации, а не только последней.&lt;br /&gt;
 &lt;br /&gt;
После успеха этой методики в машинном переводе последовали ее внедрения в других задачах [[:Обработка_естественного_языка|обработки естественного языка]] и применения к [[:Сверточные_нейронные_сети|CNN]] для генерации описания изображения&amp;lt;ref&amp;gt;https://arxiv.org/abs/1502.03044&amp;lt;/ref&amp;gt; и GAN &amp;lt;ref&amp;gt;SAGAN&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Обобщенный механизм внимания==&lt;br /&gt;
[[File:AttentionGeneral.png|350px|thumb|Обобщенное описание механизма внимания]]&lt;br /&gt;
'''Обобщенный механизм внимания''' (англ. general attention) {{---}} &lt;br /&gt;
[[:Рекуррентные_нейронные_сети|RNN]] используются при обработке данных, для которых важна их последовательность. В классическом случае применения [[:Рекуррентные_нейронные_сети|RNN]] результатом является только последнее скрытое состояние &amp;lt;math&amp;gt;h_m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; {{---}} длина последовательности входных данных. Использование механизма внимания позволяет использовать информацию полученную не только из последнего скрытого состояния, но и любого скрытого состояния &amp;lt;math&amp;gt;h_t&amp;lt;/math&amp;gt; для любого &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Обычно слой использующийся для механизма внимания представляет собой обычную, чаще всего однослойную, нейронную сеть на вход которой подаются &amp;lt;math&amp;gt;h_t, t = 1 \  \ldots m&amp;lt;/math&amp;gt;, а также вектор &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; в котором содержится некий контекст зависящий от конкретно задачи.&lt;br /&gt;
&lt;br /&gt;
Выходом данного слоя будет является вектор &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; (англ. ''score'') {{---}} оценки на основании которых на скрытое состояние &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; будет &amp;quot;обращено внимание&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Далее для нормализации значений &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; используется &amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt;[https://ru.wikipedia.org/wiki/Softmax Wiki -- Функция softmax]&amp;lt;/ref&amp;gt;. Тогда &amp;lt;math&amp;gt;e = softmax(s)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt; здесь используется благодоря своим свойствам: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;\forall s\colon\  \sum_{i=1}^n softmax(s)_i = 1, &amp;lt;/math&amp;gt;&lt;br /&gt;
*&amp;lt;math&amp;gt;\forall s,\ i\colon \ softmax(s)_i &amp;gt;= 0 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Далее считается &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; (англ. ''context vector'') &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;с = \sum_{i=1}^m e_i h_i&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результатом работы слоя внимания является &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; который, содержит в себе информацию обо всех скрытых состоянях &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; пропорционально оценке &amp;lt;math&amp;gt;e_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Пример использования для задачи машинного перевода в ''Seq2seq'' сетях===&lt;br /&gt;
Пример добавления механизма внимания в ''Seq2seq'' сеть поможет лучше понять его предназначение. &lt;br /&gt;
Изначально в оригинальной статье&amp;lt;ref&amp;gt;[https://arxiv.org/abs/1409.0473 Neural Machine Translation by Jointly Learning to Align and Translate]&amp;lt;/ref&amp;gt;, представляющей механизм внимания, он применяется в контексте именно Seq2seq сети в задаче машинного перевода.&lt;br /&gt;
&lt;br /&gt;
Несмотря на то, что нейронные сети рассматриваются как &amp;quot;черный ящик&amp;quot; и интерпретировать их внутренности в понятных человеку терминах часто невозможно, все же механизм внимания интуитивно понятный людям смог улучшить результаты машинного перевода для алгоритма используемого в статье.&lt;br /&gt;
&lt;br /&gt;
Успех этого использования этого подхода в задаче машинного перевода обусловлен лучшим выводом закономерностей между словами находящимися на большом расстоянии друг от друга. Несмотря на то, что ''LSTM'' и ''GRU'' блоки используются именно для улучшения передачи информации с предыдущих итераций ''RNN'' их основная проблема заключается в том, что влияние предыдущих состояний на текущее уменьшается экспоненциально от расстояния между словами, в то же время механизм внимания улучшает этот показатель до линейного.&lt;br /&gt;
&lt;br /&gt;
====Базовая архитектура ''Seq2seq''====&lt;br /&gt;
[[File:Seq2SeqBasic.png|450px|thumb|Пример работы базовой ''Seq2seq'' сети]]&lt;br /&gt;
Данный пример рассматривает применение механизма внимания в задаче машинного перевода в применении к архитектуре ''Seq2seq''.&lt;br /&gt;
&lt;br /&gt;
''Seq2seq'' состоит из двух [[:Рекуррентные_нейронные_сети|RNN]] {{---}} ''Энкодера'' и ''Декодера''.&lt;br /&gt;
&lt;br /&gt;
''Энкодер'' {{---}} принимает предложение на языке ''A'' и сжимает его в вектор скрытого состояния.&lt;br /&gt;
&lt;br /&gt;
''Декодер'' {{---}} выдает слово на языке ''B'', принимает последнее скрытое состояние энкодера и предыдущее предыдущее предсказаное слово.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Рассмотрим пример работы ''Seq2seq'' сети:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''A''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние энкодера.&lt;br /&gt;
&lt;br /&gt;
''Блоки энкодера (зеленый)'' {{---}} блоки энкодера получающие на вход &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; и передающие скрытое состояние &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; на следующую итерацию.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние декодера.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''B''.&lt;br /&gt;
&lt;br /&gt;
''Блоки декодера (фиолетовый)'' {{---}} блоки декодера получающие на вход &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt; или специальный токен '''start''' в случае первой итерации и возвращаюшие &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''B''. &lt;br /&gt;
Передают &amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние декодера на следующую итерацию. &lt;br /&gt;
Перевод считается завершенным при &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt;, равном специальному токену '''end'''.&lt;br /&gt;
&lt;br /&gt;
====Применение механизма внимания для ''Seq2seq''====&lt;br /&gt;
[[File:Seq2SeqAttention.png|450px|thumb|Пример работы ''Seq2seq'' сети с механизмом внимания]]&lt;br /&gt;
При добавлении механизма в данную архитектуру между [[:Рекуррентные_нейронные_сети|RNN]] ''Энкодер'' и ''Декодер'' слоя механизма внимания получится следуюшая схема:&lt;br /&gt;
&lt;br /&gt;
Здесь &amp;lt;math&amp;gt;x_i, h_i, d_i, y_i&amp;lt;/math&amp;gt; имеют те же назначения, что и в варианте без механизма внимания.&lt;br /&gt;
&lt;br /&gt;
''Агрегатор скрытых состояний энкодера (желтый)'' {{---}} агрегирует в себе все вектора &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; и возвращает всю последовательность векторов &amp;lt;math&amp;gt;h = [h_1, h_2, h_3, h_4]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt; {{---}} вектор контекста на итерации &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Блоки механизма внимания (красный)'' {{---}} механизм внимания. Принимает &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;d_{i - 1}&amp;lt;/math&amp;gt;, возвращает &amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Блоки декодера (фиолетовый)'' {{---}} по сравнению с обычной ''Seq2seq'' сетью меняются входные данные. Теперь на итерации &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; на вход подается не &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt;, а конкатенация &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом при помощи механизма внимания достигается &amp;quot;фокусирование&amp;quot; декодера на определенных скрытых состояниях. В случаях машинного перевода эта возможность помогает декодеру предсказывать на какие скрытые состояния при исходных определенных словах на языке ''A'' необходимо обратить больше внимания при переводе данного слова на язык ''B''.&lt;br /&gt;
&lt;br /&gt;
==Self-Attention==&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
*[[:Сверточные_нейронные_сети|Сверточные нейронные сети]]&lt;br /&gt;
*[[:Нейронные_сети,_перцептрон|Нейронные сети, перцептрон]]&lt;br /&gt;
*[[:Рекуррентные_нейронные_сети|Рекуррентные нейронные сети]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
*[https://blog.floydhub.com/attention-mechanism/amp/ Статья о механизме внимания, его типах и разновидностях]&lt;br /&gt;
*[https://www.coursera.org/lecture/nlp-sequence-models/attention-model-lSwVa Лекция Andrew Ng о механизме внимания в NLP]&lt;br /&gt;
*[https://towardsdatascience.com/intuitive-understanding-of-attention-mechanism-in-deep-learning-6c9482aecf4f Статья с подробно разборанными примерами и кодом на ''Python'' и ''TensorFlow'']&lt;br /&gt;
*[http://jalammar.github.io/illustrated-transformer/ Статья c примерами работы Self-attention]&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Нейронные сети]]&lt;br /&gt;
[[Категория: Рекуррентные нейронные сети]]&lt;/div&gt;</summary>
		<author><name>Gpevnev</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=73091</id>
		<title>Механизм внимания</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=73091"/>
				<updated>2020-03-22T10:04:13Z</updated>
		
		<summary type="html">&lt;p&gt;Gpevnev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Механизм внимания''' (англ. ''attention mechanism'', ''attention model'') {{---}} техника используемая в [[:Рекуррентные_нейронные_сети|рекуррентных нейронных сетях]] (сокр. ''RNN'') и [[:Сверточные_нейронные_сети|сверточных нейронных сетях]] (сокр. ''CNN'') для &amp;quot;обращения внимания&amp;quot; на определенные части входных данных в зависимости от текущего контекста.&lt;br /&gt;
&lt;br /&gt;
Изначально механизм внимания был представлен в контексте [[:Рекуррентные_нейронные_сети|рекуррентных]] ''Seq2seq'' сетей &amp;lt;ref&amp;gt;https://arxiv.org/abs/1409.0473 статье&amp;lt;/ref&amp;gt; для &amp;quot;обращения внимания&amp;quot; блоков декодеров на скрытые состояния [[:Рекуррентные_нейронные_сети|RNN]] энкодера для любой итерации, а не только последней.&lt;br /&gt;
 &lt;br /&gt;
После успеха этой методики в машинном переводе последовали ее внедрения в других задачах [[:Обработка_естественного_языка|обработки естественного языка]] и применения к [[:Сверточные_нейронные_сети|CNN]] для генерации описания изображения&amp;lt;ref&amp;gt;https://arxiv.org/abs/1502.03044&amp;lt;/ref&amp;gt; и GAN &amp;lt;ref&amp;gt;SAGAN&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Обобщенный механизм внимания==&lt;br /&gt;
[[File:AttentionGeneral.png|350px|thumb|Обобщенное описание механизма внимания]]&lt;br /&gt;
[[:Рекуррентные_нейронные_сети|RNN]] используются при обработке данных, для которых важна их последовательность. В классическом случае применения [[:Рекуррентные_нейронные_сети|RNN]] результатом является только последнее скрытое состояние &amp;lt;math&amp;gt;h_m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; {{---}} длина последовательности входных данных. Использование механизма внимания позволяет использовать информацию полученную не только из последнего скрытого состояния, но и любого скрытого состояния &amp;lt;math&amp;gt;h_t&amp;lt;/math&amp;gt; для любого &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Обычно слой использующийся для механизма внимания представляет собой обычную, чаще всего однослойную, нейронную сеть на вход которой подаются &amp;lt;math&amp;gt;h_t, t = 1 \  \ldots m&amp;lt;/math&amp;gt;, а также вектор &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; в котором содержится некий контекст зависящий от конкретно задачи.&lt;br /&gt;
&lt;br /&gt;
Выходом данного слоя будет является вектор &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; (англ. ''score'') {{---}} оценки на основании которых на скрытое состояние &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; будет &amp;quot;обращено внимание&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Далее для нормализации значений &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; используется &amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt;[https://ru.wikipedia.org/wiki/Softmax Wiki -- Функция softmax]&amp;lt;/ref&amp;gt;. Тогда &amp;lt;math&amp;gt;e = softmax(s)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt; здесь используется благодоря своим свойствам: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;\forall s\colon\  \sum_{i=1}^n softmax(s)_i = 1, &amp;lt;/math&amp;gt;&lt;br /&gt;
*&amp;lt;math&amp;gt;\forall s,\ i\colon \ softmax(s)_i &amp;gt;= 0 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Далее считается &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; (англ. ''context vector'') &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;с = \sum_{i=1}^m e_i h_i&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результатом работы слоя внимания является &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; который, содержит в себе информацию обо всех скрытых состоянях &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; пропорционально оценке &amp;lt;math&amp;gt;e_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Пример использования для задачи машинного перевода в ''Seq2seq'' сетях===&lt;br /&gt;
Пример добавления механизма внимания в ''Seq2seq'' сеть поможет лучше понять его предназначение. &lt;br /&gt;
Изначально в оригинальной статье&amp;lt;ref&amp;gt;[https://arxiv.org/abs/1409.0473 Neural Machine Translation by Jointly Learning to Align and Translate]&amp;lt;/ref&amp;gt;, представляющей механизм внимания, он применяется в контексте именно Seq2seq сети в задаче машинного перевода.&lt;br /&gt;
&lt;br /&gt;
Несмотря на то, что нейронные сети рассматриваются как &amp;quot;черный ящик&amp;quot; и интерпретировать их внутренности в понятных человеку терминах часто невозможно, все же механизм внимания интуитивно понятный людям смог улучшить результаты машинного перевода для алгоритма используемого в статье.&lt;br /&gt;
&lt;br /&gt;
Успех этого использования этого подхода в задаче машинного перевода обусловлен лучшим выводом закономерностей между словами находящимися на большом расстоянии друг от друга. Несмотря на то, что ''LSTM'' и ''GRU'' блоки используются именно для улучшения передачи информации с предыдущих итераций ''RNN'' их основная проблема заключается в том, что влияние предыдущих состояний на текущее уменьшается экспоненциально от расстояния между словами, в то же время механизм внимания улучшает этот показатель до линейного.&lt;br /&gt;
&lt;br /&gt;
====Базовая архитектура ''Seq2seq''====&lt;br /&gt;
[[File:Seq2SeqBasic.png|450px|thumb|Пример работы базовой ''Seq2seq'' сети]]&lt;br /&gt;
Данный пример рассматривает применение механизма внимания в задаче машинного перевода в применении к архитектуре ''Seq2seq''.&lt;br /&gt;
&lt;br /&gt;
''Seq2seq'' состоит из двух [[:Рекуррентные_нейронные_сети|RNN]] {{---}} ''Энкодера'' и ''Декодера''.&lt;br /&gt;
&lt;br /&gt;
''Энкодер'' {{---}} принимает предложение на языке ''A'' и сжимает его в вектор скрытого состояния.&lt;br /&gt;
&lt;br /&gt;
''Декодер'' {{---}} выдает слово на языке ''B'', принимает последнее скрытое состояние энкодера и предыдущее предыдущее предсказаное слово.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Рассмотрим пример работы ''Seq2seq'' сети:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''A''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние энкодера.&lt;br /&gt;
&lt;br /&gt;
''Блоки энкодера (зеленый)'' {{---}} блоки энкодера получающие на вход &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; и передающие скрытое состояние &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; на следующую итерацию.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние декодера.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''B''.&lt;br /&gt;
&lt;br /&gt;
''Блоки декодера (фиолетовый)'' {{---}} блоки декодера получающие на вход &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt; или специальный токен '''start''' в случае первой итерации и возвращаюшие &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''B''. &lt;br /&gt;
Передают &amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние декодера на следующую итерацию. &lt;br /&gt;
Перевод считается завершенным при &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt;, равном специальному токену '''end'''.&lt;br /&gt;
&lt;br /&gt;
====Применение механизма внимания для ''Seq2seq''====&lt;br /&gt;
[[File:Seq2SeqAttention.png|450px|thumb|Пример работы ''Seq2seq'' сети с механизмом внимания]]&lt;br /&gt;
При добавлении механизма в данную архитектуру между [[:Рекуррентные_нейронные_сети|RNN]] ''Энкодер'' и ''Декодер'' слоя механизма внимания получится следуюшая схема:&lt;br /&gt;
&lt;br /&gt;
Здесь &amp;lt;math&amp;gt;x_i, h_i, d_i, y_i&amp;lt;/math&amp;gt; имеют те же назначения, что и в варианте без механизма внимания.&lt;br /&gt;
&lt;br /&gt;
''Агрегатор скрытых состояний энкодера (желтый)'' {{---}} агрегирует в себе все вектора &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; и возвращает всю последовательность векторов &amp;lt;math&amp;gt;h = [h_1, h_2, h_3, h_4]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt; {{---}} вектор контекста на итерации &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Блоки механизма внимания (красный)'' {{---}} механизм внимания. Принимает &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;d_{i - 1}&amp;lt;/math&amp;gt;, возвращает &amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Блоки декодера (фиолетовый)'' {{---}} по сравнению с обычной ''Seq2seq'' сетью меняются входные данные. Теперь на итерации &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; на вход подается не &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt;, а конкатенация &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом при помощи механизма внимания достигается &amp;quot;фокусирование&amp;quot; декодера на определенных скрытых состояниях. В случаях машинного перевода эта возможность помогает декодеру предсказывать на какие скрытые состояния при исходных определенных словах на языке ''A'' необходимо обратить больше внимания при переводе данного слова на язык ''B''.&lt;br /&gt;
&lt;br /&gt;
==Self-Attention==&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
*[[:Сверточные_нейронные_сети|Сверточные нейронные сети]]&lt;br /&gt;
*[[:Нейронные_сети,_перцептрон|Нейронные сети, перцептрон]]&lt;br /&gt;
*[[:Рекуррентные_нейронные_сети|Рекуррентные нейронные сети]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
*[https://blog.floydhub.com/attention-mechanism/amp/ Статья о механизме внимания, его типах и разновидностях]&lt;br /&gt;
*[https://www.coursera.org/lecture/nlp-sequence-models/attention-model-lSwVa Лекция Andrew Ng о механизме внимания в NLP]&lt;br /&gt;
*[https://towardsdatascience.com/intuitive-understanding-of-attention-mechanism-in-deep-learning-6c9482aecf4f Статья с подробно разборанными примерами и кодом на ''Python'' и ''TensorFlow'']&lt;br /&gt;
*[http://jalammar.github.io/illustrated-transformer/ Статья c примерами работы Self-attention]&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Нейронные сети]]&lt;br /&gt;
[[Категория: Рекуррентные нейронные сети]]&lt;/div&gt;</summary>
		<author><name>Gpevnev</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=73090</id>
		<title>Механизм внимания</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=73090"/>
				<updated>2020-03-22T09:57:42Z</updated>
		
		<summary type="html">&lt;p&gt;Gpevnev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Механизм внимания''' (англ. ''attention mechanism'', ''attention model'') {{---}} техника используемая в [[:Рекуррентные_нейронные_сети|рекуррентных нейронных сетях]] (сокр. ''RNN'') и [[:Сверточные_нейронные_сети|сверточных нейронных сетях]] (сокр. ''CNN'') для &amp;quot;обращения внимания&amp;quot; на определенные части входных данных в зависимости от текущего контекста.&lt;br /&gt;
&lt;br /&gt;
Изначально механизм внимания был представлен в контексте [[:Рекуррентные_нейронные_сети|рекуррентных]] ''Seq2seq'' сетей &amp;lt;ref&amp;gt;https://arxiv.org/abs/1409.0473 статье&amp;lt;/ref&amp;gt; для &amp;quot;обращения внимания&amp;quot; блоков декодеров на скрытые состояния [[:Рекуррентные_нейронные_сети|RNN]] энкодера для любой итерации, а не только последней.&lt;br /&gt;
 &lt;br /&gt;
После успеха этой методики в машинном переводе последовали ее внедрения в других задачах [[:Обработка_естественного_языка|обработки естественного языка]] и применения к [[:Сверточные_нейронные_сети|CNN]] для генерации описания изображения&amp;lt;ref&amp;gt;https://arxiv.org/abs/1502.03044&amp;lt;/ref&amp;gt; и GAN &amp;lt;ref&amp;gt;SAGAN&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Обобщенный механизм внимания==&lt;br /&gt;
[[File:AttentionGeneral.png|350px|thumb|Обобщенное описание механизма внимания]]&lt;br /&gt;
[[:Рекуррентные_нейронные_сети|RNN]] используются при обработке данных, для которых важна их последовательность. В классическом случае применения [[:Рекуррентные_нейронные_сети|RNN]] результатом является только последнее скрытое состояние &amp;lt;math&amp;gt;h_m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; {{---}} длина последовательности входных данных. Использование механизма внимания позволяет использовать информацию полученную не только из последнего скрытого состояниния, но и любого скрытого состояния &amp;lt;math&amp;gt;h_t&amp;lt;/math&amp;gt; для любого &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Обычно слой использующийся для механизма внимания представляет собой обычную, чаще всего однослойную, нейронную сеть на вход которой подаются &amp;lt;math&amp;gt;h_t, t = 1 \  \ldots m&amp;lt;/math&amp;gt;, а также вектор &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; в котором содержится некий контекст зависящий от конкретно задачи.&lt;br /&gt;
&lt;br /&gt;
Выходом данного слоя будет являтся вектор &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; (англ. ''score'') {{---}} оценки на основании которых на скрытое состояние &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; будет &amp;quot;обращено внимание&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Далее для нормализации значений &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; используется &amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt;[https://ru.wikipedia.org/wiki/Softmax Wiki -- Функция softmax]&amp;lt;/ref&amp;gt;. Тогда &amp;lt;math&amp;gt;e = softmax(s)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt; здесь используется благодоря своим свойствам: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;\forall s\colon\  \sum_{i=1}^n softmax(s)_i = 1, &amp;lt;/math&amp;gt;&lt;br /&gt;
*&amp;lt;math&amp;gt;\forall s,\ i\colon \ softmax(s)_i &amp;gt;= 0 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Далее считается &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; (англ. ''context vector'') &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;с = \sum_{i=1}^m e_i h_i&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результатом работы слоя внимания является &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; который, содержит в себе информацию обо всех скрытых состоянях &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; пропорционально оценке &amp;lt;math&amp;gt;e_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Пример использования для задачи машинного перевода в ''Seq2seq'' сетях===&lt;br /&gt;
Пример добавления механизма внимания в ''Seq2seq'' сеть поможет лучше понять его предназначение. &lt;br /&gt;
Изначально в оригинальной статье&amp;lt;ref&amp;gt;[https://arxiv.org/abs/1409.0473 Neural Machine Translation by Jointly Learning to Align and Translate]&amp;lt;/ref&amp;gt;, представляющей механизм внимания, он применяется в контексте именно Seq2seq сети в задаче машинного перевода.&lt;br /&gt;
&lt;br /&gt;
Несмотря на то, что нейронные сети рассматриваются как &amp;quot;черный ящик&amp;quot; и интерпретировать их внутренности в понятных человеку терминах часто невозможно, все же механизм внимания интуитивно понятный людям смог улучшить результаты машинного перевода для алгоритма используемого в статье.&lt;br /&gt;
&lt;br /&gt;
Успех этого использования этого подхода в задаче машинного перевода обусловлен лучшим выводом закономерностей между словами находящимися на большом расстоянии друг от друга. Несмотря на то, что ''LSTM'' и ''GRU'' блоки используются именно для улучшения передачи информации с предыдущих итераций ''RNN'' их основная проблема заключается в том, что влияние предыдущих состояний на текущее уменьшается экспоненциально от расстояния между словами, в то же время механизм внимания улучшает этот показатель до линейного.&lt;br /&gt;
&lt;br /&gt;
====Базовая архитектура ''Seq2seq''====&lt;br /&gt;
[[File:Seq2SeqBasic.png|450px|thumb|Пример работы базовой ''Seq2seq'' сети]]&lt;br /&gt;
Данный пример рассматривает применение механизма внимания в задаче машинного перевода в применении к архитектуре ''Seq2seq''.&lt;br /&gt;
&lt;br /&gt;
''Seq2seq'' состоит из двух [[:Рекуррентные_нейронные_сети|RNN]] {{---}} ''Энкодера'' и ''Декодера''.&lt;br /&gt;
&lt;br /&gt;
''Энкодер'' {{---}} принимает предложение на языке ''A'' и сжимает его в вектор скрытого состояния.&lt;br /&gt;
&lt;br /&gt;
''Декодер'' {{---}} выдает слово на языке ''B'', принимает последнее скрытое состояние энкодера и предыдущее предыдущее предсказаное слово.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Рассмотрим пример работы ''Seq2seq'' сети:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''A''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние энкодера.&lt;br /&gt;
&lt;br /&gt;
''Блоки энкодера (зеленый)'' {{---}} блоки энкодера получающие на вход &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; и передающие скрытое состояние &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; на следующую итерацию.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние декодера.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''B''.&lt;br /&gt;
&lt;br /&gt;
''Блоки декодера (фиолетовый)'' {{---}} блоки декодера получающие на вход &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt; или специальный токен '''start''' в случае первой итерации и возвращаюшие &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''B''. &lt;br /&gt;
Передают &amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние декодера на следующую итерацию. &lt;br /&gt;
Перевод считается завершенным при &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt;, равном специальному токену '''end'''.&lt;br /&gt;
&lt;br /&gt;
====Применение механизма внимания для ''Seq2seq''====&lt;br /&gt;
[[File:Seq2SeqAttention.png|450px|thumb|Пример работы ''Seq2seq'' сети с механизмом внимания]]&lt;br /&gt;
При добавлении механизма в данную архитектуру между [[:Рекуррентные_нейронные_сети|RNN]] ''Энкодер'' и ''Декодер'' слоя механизма внимания получится следуюшая схема:&lt;br /&gt;
&lt;br /&gt;
Здесь &amp;lt;math&amp;gt;x_i, h_i, d_i, y_i&amp;lt;/math&amp;gt; имееют те же назначения, что и в варианте без механизма внимания.&lt;br /&gt;
&lt;br /&gt;
''Аггрегатор скрытых состояний энкодера (желтый)'' {{---}} аггрегирует в себе все вектора &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; и возвращает всю последовательность векторов &amp;lt;math&amp;gt;h = [h_1, h_2, h_3, h_4]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt; {{---}} вектор контекста на итерации &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Блоки механизма внимания (красный)'' {{---}} механизм внимания. Принимает &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;d_{i - 1}&amp;lt;/math&amp;gt;, возвращает &amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Блоки декодера (фиолетовый)'' {{---}} по сравнению с обычной ''Seq2seq'' сетью меняются входные данные. Теперь на итерации &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; на вход подается не &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt;, а конкатенация &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом при помощи механизма внимания достигается &amp;quot;фокусирование&amp;quot; декодера на определенных скрытых состояниях. В случаях машинного перевода эта возможность помогает декодеру предсказывать на какие скрытые сосояния при исходных определенных словах на языке ''A'' необходимо обратить больше внимания при переводе данного слова на язык ''B''.&lt;br /&gt;
&lt;br /&gt;
==Self-Attention==&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
*[[:Сверточные_нейронные_сети|Сверточные нейронные сети]]&lt;br /&gt;
*[[:Нейронные_сети,_перцептрон|Нейронные сети, перцептрон]]&lt;br /&gt;
*[[:Рекуррентные_нейронные_сети|Рекуррентные нейронные сети]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
*[https://www.coursera.org/lecture/nlp-sequence-models/attention-model-lSwVa Лекция Andrew Ng о механизме внимания в NLP]&lt;br /&gt;
*[https://towardsdatascience.com/intuitive-understanding-of-attention-mechanism-in-deep-learning-6c9482aecf4f Статья с подробно разборанными примерами и кодом на ''Python'' и ''TensorFlow'']&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Нейронные сети]]&lt;br /&gt;
[[Категория: Рекуррентные нейронные сети]]&lt;/div&gt;</summary>
		<author><name>Gpevnev</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=73089</id>
		<title>Механизм внимания</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=73089"/>
				<updated>2020-03-22T09:38:43Z</updated>
		
		<summary type="html">&lt;p&gt;Gpevnev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Механизм внимания''' (англ. ''attention mechanism'', ''attention model'') {{---}} техника используемая в [[:Рекуррентные_нейронные_сети|рекуррентных нейронных сетях]] (сокр. ''RNN'') и [[:Сверточные_нейронные_сети|сверточных нейронных сетях]] (сокр. ''CNN'') для &amp;quot;обращения внимания&amp;quot; на определенные части входных данных в зависимости от текущего контекста.&lt;br /&gt;
&lt;br /&gt;
Изначально механизм внимания был представлен в контексте [[:Рекуррентные_нейронные_сети|рекуррентных]] ''Seq2seq'' сетей &amp;lt;ref&amp;gt;https://arxiv.org/abs/1409.0473 статье&amp;lt;/ref&amp;gt; для &amp;quot;обращения внимания&amp;quot; блоков декодеров на скрытые состояния [[:Рекуррентные_нейронные_сети|RNN]] энкодера для любой итерации, а не только последней.&lt;br /&gt;
 &lt;br /&gt;
После успеха этой методики в машинном переводе последовали ее внедрения в других задачах [[:Обработка_естественного_языка|обработки естественного языка]] и применения к [[:Сверточные_нейронные_сети|CNN]] для генерации описания изображения&amp;lt;ref&amp;gt;https://arxiv.org/abs/1502.03044&amp;lt;/ref&amp;gt; и GAN &amp;lt;ref&amp;gt;SAGAN&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Обобщенное описание ==&lt;br /&gt;
[[File:AttentionGeneral.png|350px|thumb|Обобщенное описание механизма внимания]]&lt;br /&gt;
[[:Рекуррентные_нейронные_сети|RNN]] используются при обработке данных, для которых важна их последовательность. В классическом случае применения [[:Рекуррентные_нейронные_сети|RNN]] результатом является только последнее скрытое состояние &amp;lt;math&amp;gt;h_m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; {{---}} длина последовательности входных данных. Использование механизма внимания позволяет использовать информацию полученную не только из последнего скрытого состояниния, но и любого скрытого состояния &amp;lt;math&amp;gt;h_t&amp;lt;/math&amp;gt; для любого &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Обычно слой использующийся для механизма внимания представляет собой обычную, чаще всего однослойную, нейронную сеть на вход которой подаются &amp;lt;math&amp;gt;h_t, t = 1 \  \ldots m&amp;lt;/math&amp;gt;, а также вектор &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; в котором содержится некий контекст зависящий от конкретно задачи.&lt;br /&gt;
&lt;br /&gt;
Выходом данного слоя будет являтся вектор &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; (англ. ''score'') {{---}} оценки на основании которых на скрытое состояние &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; будет &amp;quot;обращено внимание&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Далее для нормализации значений &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; используется &amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt;[https://ru.wikipedia.org/wiki/Softmax Wiki -- Функция softmax]&amp;lt;/ref&amp;gt;. Тогда &amp;lt;math&amp;gt;e = softmax(s)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt; здесь используется благодоря своим свойствам: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;\forall s\colon\  \sum_{i=1}^n softmax(s)_i = 1, &amp;lt;/math&amp;gt;&lt;br /&gt;
*&amp;lt;math&amp;gt;\forall s,\ i\colon \ softmax(s)_i &amp;gt;= 0 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Далее считается &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; (англ. ''context vector'') &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;с = \sum_{i=1}^m e_i h_i&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результатом работы слоя внимания является &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; который, содержит в себе информацию обо всех скрытых состоянях &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; пропорционально оценке &amp;lt;math&amp;gt;e_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Пример использования для задачи машинного перевода в ''Seq2seq'' сетях==&lt;br /&gt;
Пример добавления механизма внимания в ''Seq2seq'' сеть поможет лучше понять его предназначение. &lt;br /&gt;
Изначально в оригинальной статье&amp;lt;ref&amp;gt;[https://arxiv.org/abs/1409.0473 Neural Machine Translation by Jointly Learning to Align and Translate]&amp;lt;/ref&amp;gt;, представляющей механизм внимания, он применяется в контексте именно Seq2seq сети в задаче машинного перевода.&lt;br /&gt;
&lt;br /&gt;
Несмотря на то, что нейронные сети рассматриваются как &amp;quot;черный ящик&amp;quot; и интерпретировать их внутренности в понятных человеку терминах часто невозможно, все же механизм внимания интуитивно понятный людям смог улучшить результаты машинного перевода для алгоритма используемого в статье.&lt;br /&gt;
&lt;br /&gt;
Успех этого использования этого подхода в задаче машинного перевода обусловлен лучшим выводом закономерностей между словами находящимися на большом расстоянии друг от друга. Несмотря на то, что ''LSTM'' и ''GRU'' блоки используются именно для улучшения передачи информации с предыдущих итераций ''RNN'' их основная проблема заключается в том, что влияние предыдущих состояний на текущее уменьшается экспоненциально от расстояния между словами, в то же время механизм внимания улучшает этот показатель до линейного.&lt;br /&gt;
&lt;br /&gt;
=== Базовая архитектура ''Seq2seq'' ===&lt;br /&gt;
[[File:Seq2SeqBasic.png|450px|thumb|Пример работы базовой ''Seq2seq'' сети]]&lt;br /&gt;
Данный пример рассматривает применение механизма внимания в задаче машинного перевода в применении к архитектуре ''Seq2seq''.&lt;br /&gt;
&lt;br /&gt;
''Seq2seq'' состоит из двух [[:Рекуррентные_нейронные_сети|RNN]] {{---}} ''Энкодера'' и ''Декодера''.&lt;br /&gt;
&lt;br /&gt;
''Энкодер'' {{---}} принимает предложение на языке ''A'' и сжимает его в вектор скрытого состояния.&lt;br /&gt;
&lt;br /&gt;
''Декодер'' {{---}} выдает слово на языке ''B'', принимает последнее скрытое состояние энкодера и предыдущее предыдущее предсказаное слово.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Рассмотрим пример работы ''Seq2seq'' сети:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''A''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние энкодера.&lt;br /&gt;
&lt;br /&gt;
''Блоки энкодера (зеленый)'' {{---}} блоки энкодера получающие на вход &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; и передающие скрытое состояние &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; на следующую итерацию.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние декодера.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''B''.&lt;br /&gt;
&lt;br /&gt;
''Блоки декодера (фиолетовый)'' {{---}} блоки декодера получающие на вход &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt; или специальный токен '''start''' в случае первой итерации и возвращаюшие &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''B''. &lt;br /&gt;
Передают &amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние декодера на следующую итерацию. &lt;br /&gt;
Перевод считается завершенным при &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt;, равном специальному токену '''end'''.&lt;br /&gt;
&lt;br /&gt;
=== Применение механизма внимания для ''Seq2seq'' ===&lt;br /&gt;
При добавлении механизма в данную архитектуру между [[:Рекуррентные_нейронные_сети|RNN]] ''Энкодер'' и ''Декодер'' слоя механизма внимания получится следуюшая схема:&lt;br /&gt;
&lt;br /&gt;
[[File:Seq2SeqAttention.png|450px|thumb|Пример работы ''Seq2seq'' сети с механизмом внимания]]&lt;br /&gt;
&lt;br /&gt;
Здесь &amp;lt;math&amp;gt;x_i, h_i, d_i, y_i&amp;lt;/math&amp;gt; имееют те же назначения, что и в варианте без механизма внимания.&lt;br /&gt;
&lt;br /&gt;
''Аггрегатор скрытых состояний энкодера (желтый)'' {{---}} аггрегирует в себе все вектора &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; и возвращает всю последовательность векторов &amp;lt;math&amp;gt;h = [h_1, h_2, h_3, h_4]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt; {{---}} вектор контекста на итерации &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Блоки механизма внимания (красный)'' {{---}} механизм внимания. Принимает &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;d_{i - 1}&amp;lt;/math&amp;gt;, возвращает &amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Блоки декодера (фиолетовый)'' {{---}} по сравнению с обычной ''Seq2seq'' сетью меняются входные данные. Теперь на итерации &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; на вход подается не &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt;, а конкатенация &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом при помощи механизма внимания достигается &amp;quot;фокусирование&amp;quot; декодера на определенных скрытых состояниях. В случаях машинного перевода эта возможность помогает декодеру предсказывать на какие скрытые сосояния при исходных определенных словах на языке ''A'' необходимо обратить больше внимания при переводе данного слова на язык ''B''.&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
*[[:Сверточные_нейронные_сети|Сверточные нейронные сети]]&lt;br /&gt;
*[[:Нейронные_сети,_перцептрон|Нейронные сети, перцептрон]]&lt;br /&gt;
*[[:Рекуррентные_нейронные_сети|Рекуррентные нейронные сети]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
*[https://www.coursera.org/lecture/nlp-sequence-models/attention-model-lSwVa Лекция Andrew Ng о механизме внимания в NLP]&lt;br /&gt;
*[https://towardsdatascience.com/intuitive-understanding-of-attention-mechanism-in-deep-learning-6c9482aecf4f Статья с подробно разборанными примерами и кодом на ''Python'' и ''TensorFlow'']&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Нейронные сети]]&lt;br /&gt;
[[Категория: Рекуррентные нейронные сети]]&lt;/div&gt;</summary>
		<author><name>Gpevnev</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=73088</id>
		<title>Механизм внимания</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=73088"/>
				<updated>2020-03-22T09:36:52Z</updated>
		
		<summary type="html">&lt;p&gt;Gpevnev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Механизм внимания''' (англ. ''attention mechanism'', ''attention model'') {{---}} техника используемая в [[:Рекуррентные_нейронные_сети|рекуррентных нейронных сетях]] (сокр. ''RNN'') и [[:Сверточные_нейронные_сети|сверточных нейронных сетях]] (сокр. ''CNN'') для &amp;quot;обращения внимания&amp;quot; на определенные части входных данных в зависимости от текущего контекста.&lt;br /&gt;
&lt;br /&gt;
Изначально механизм внимания был представлен в контексте [[:Рекуррентные_нейронные_сети|рекуррентных]] ''Seq2seq'' сетей &amp;lt;ref&amp;gt;https://arxiv.org/abs/1409.0473 статье&amp;lt;/ref&amp;gt; для обращения внимания блоков декодеров на скрытые состояния [[:Рекуррентные_нейронные_сети|RNN]] энкодера для любой итерации, а не только последней.&lt;br /&gt;
 &lt;br /&gt;
После успеха этой методики в машинном переводе последовали ее внедрения в других задачах [[:Обработка_естественного_языка|обработки естественного языка]] и применения к [[:Сверточные_нейронные_сети|CNN]] для генерации описания изображения&amp;lt;ref&amp;gt;https://arxiv.org/abs/1502.03044&amp;lt;/ref&amp;gt; и GAN &amp;lt;ref&amp;gt;SAGAN&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Обобщенное описание ==&lt;br /&gt;
[[File:AttentionGeneral.png|350px|thumb|Обобщенное описание механизма внимания]]&lt;br /&gt;
[[:Рекуррентные_нейронные_сети|RNN]] используются при обработке данных, для которых важна их последовательность. В классическом случае применения [[:Рекуррентные_нейронные_сети|RNN]] результатом является только последнее скрытое состояние &amp;lt;math&amp;gt;h_m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; {{---}} длина последовательности входных данных. Использование механизма внимания позволяет использовать информацию полученную не только из последнего скрытого состояниния, но и любого скрытого состояния &amp;lt;math&amp;gt;h_t&amp;lt;/math&amp;gt; для любого &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Обычно слой использующийся для механизма внимания представляет собой обычную, чаще всего однослойную, нейронную сеть на вход которой подаются &amp;lt;math&amp;gt;h_t, t = 1 \  \ldots m&amp;lt;/math&amp;gt;, а также вектор &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; в котором содержится некий контекст зависящий от конкретно задачи.&lt;br /&gt;
&lt;br /&gt;
Выходом данного слоя будет являтся вектор &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; (англ. ''score'') {{---}} оценки на основании которых на скрытое состояние &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; будет &amp;quot;обращено внимание&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Далее для нормализации значений &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; используется &amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt;[https://ru.wikipedia.org/wiki/Softmax Wiki -- Функция softmax]&amp;lt;/ref&amp;gt;. Тогда &amp;lt;math&amp;gt;e = softmax(s)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt; здесь используется благодоря своим свойствам: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;\forall s\colon\  \sum_{i=1}^n softmax(s)_i = 1, &amp;lt;/math&amp;gt;&lt;br /&gt;
*&amp;lt;math&amp;gt;\forall s,\ i\colon \ softmax(s)_i &amp;gt;= 0 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Далее считается &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; (англ. ''context vector'') &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;с = \sum_{i=1}^m e_i h_i&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результатом работы слоя внимания является &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; который, содержит в себе информацию обо всех скрытых состоянях &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; пропорционально оценке &amp;lt;math&amp;gt;e_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Пример использования для задачи машинного перевода в ''Seq2seq'' сетях==&lt;br /&gt;
Пример добавления механизма внимания в ''Seq2seq'' сеть поможет лучше понять его предназначение. &lt;br /&gt;
Изначально в оригинальной статье&amp;lt;ref&amp;gt;[https://arxiv.org/abs/1409.0473 Neural Machine Translation by Jointly Learning to Align and Translate]&amp;lt;/ref&amp;gt;, представляющей механизм внимания, он применяется в контексте именно Seq2seq сети в задаче машинного перевода.&lt;br /&gt;
&lt;br /&gt;
Несмотря на то, что нейронные сети рассматриваются как &amp;quot;черный ящик&amp;quot; и интерпретировать их внутренности в понятных человеку терминах часто невозможно, все же механизм внимания интуитивно понятный людям смог улучшить результаты машинного перевода для алгоритма используемого в статье.&lt;br /&gt;
&lt;br /&gt;
Успех этого использования этого подхода в задаче машинного перевода обусловлен лучшим выводом закономерностей между словами находящимися на большом расстоянии друг от друга. Несмотря на то, что ''LSTM'' и ''GRU'' блоки используются именно для улучшения передачи информации с предыдущих итераций ''RNN'' их основная проблема заключается в том, что влияние предыдущих состояний на текущее уменьшается экспоненциально от расстояния между словами, в то же время механизм внимания улучшает этот показатель до линейного.&lt;br /&gt;
&lt;br /&gt;
=== Базовая архитектура ''Seq2seq'' ===&lt;br /&gt;
[[File:Seq2SeqBasic.png|450px|thumb|Пример работы базовой ''Seq2seq'' сети]]&lt;br /&gt;
Данный пример рассматривает применение механизма внимания в задаче машинного перевода в применении к архитектуре ''Seq2seq''.&lt;br /&gt;
&lt;br /&gt;
''Seq2seq'' состоит из двух [[:Рекуррентные_нейронные_сети|RNN]] {{---}} ''Энкодера'' и ''Декодера''.&lt;br /&gt;
&lt;br /&gt;
''Энкодер'' {{---}} принимает предложение на языке ''A'' и сжимает его в вектор скрытого состояния.&lt;br /&gt;
&lt;br /&gt;
''Декодер'' {{---}} выдает слово на языке ''B'', принимает последнее скрытое состояние энкодера и предыдущее предыдущее предсказаное слово.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Рассмотрим пример работы ''Seq2seq'' сети:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''A''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние энкодера.&lt;br /&gt;
&lt;br /&gt;
''Блоки энкодера (зеленый)'' {{---}} блоки энкодера получающие на вход &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; и передающие скрытое состояние &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; на следующую итерацию.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние декодера.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''B''.&lt;br /&gt;
&lt;br /&gt;
''Блоки декодера (фиолетовый)'' {{---}} блоки декодера получающие на вход &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt; или специальный токен '''start''' в случае первой итерации и возвращаюшие &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''B''. &lt;br /&gt;
Передают &amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние декодера на следующую итерацию. &lt;br /&gt;
Перевод считается завершенным при &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt;, равном специальному токену '''end'''.&lt;br /&gt;
&lt;br /&gt;
=== Применение механизма внимания для ''Seq2seq'' ===&lt;br /&gt;
При добавлении механизма в данную архитектуру между [[:Рекуррентные_нейронные_сети|RNN]] ''Энкодер'' и ''Декодер'' слоя механизма внимания получится следуюшая схема:&lt;br /&gt;
&lt;br /&gt;
[[File:Seq2SeqAttention.png|450px|thumb|Пример работы ''Seq2seq'' сети с механизмом внимания]]&lt;br /&gt;
&lt;br /&gt;
Здесь &amp;lt;math&amp;gt;x_i, h_i, d_i, y_i&amp;lt;/math&amp;gt; имееют те же назначения, что и в варианте без механизма внимания.&lt;br /&gt;
&lt;br /&gt;
''Аггрегатор скрытых состояний энкодера (желтый)'' {{---}} аггрегирует в себе все вектора &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; и возвращает всю последовательность векторов &amp;lt;math&amp;gt;h = [h_1, h_2, h_3, h_4]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt; {{---}} вектор контекста на итерации &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Блоки механизма внимания (красный)'' {{---}} механизм внимания. Принимает &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;d_{i - 1}&amp;lt;/math&amp;gt;, возвращает &amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Блоки декодера (фиолетовый)'' {{---}} по сравнению с обычной ''Seq2seq'' сетью меняются входные данные. Теперь на итерации &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; на вход подается не &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt;, а конкатенация &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом при помощи механизма внимания достигается &amp;quot;фокусирование&amp;quot; декодера на определенных скрытых состояниях. В случаях машинного перевода эта возможность помогает декодеру предсказывать на какие скрытые сосояния при исходных определенных словах на языке ''A'' необходимо обратить больше внимания при переводе данного слова на язык ''B''.&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
*[[:Сверточные_нейронные_сети|Сверточные нейронные сети]]&lt;br /&gt;
*[[:Нейронные_сети,_перцептрон|Нейронные сети, перцептрон]]&lt;br /&gt;
*[[:Рекуррентные_нейронные_сети|Рекуррентные нейронные сети]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
*[https://www.coursera.org/lecture/nlp-sequence-models/attention-model-lSwVa Лекция Andrew Ng о механизме внимания в NLP]&lt;br /&gt;
*[https://towardsdatascience.com/intuitive-understanding-of-attention-mechanism-in-deep-learning-6c9482aecf4f Статья с подробно разборанными примерами и кодом на ''Python'' и ''TensorFlow'']&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Нейронные сети]]&lt;br /&gt;
[[Категория: Рекуррентные нейронные сети]]&lt;/div&gt;</summary>
		<author><name>Gpevnev</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=73087</id>
		<title>Механизм внимания</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=73087"/>
				<updated>2020-03-22T09:25:34Z</updated>
		
		<summary type="html">&lt;p&gt;Gpevnev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Механизм внимания''' (англ. ''attention mechanism'', ''attention model'') {{---}} техника используемая в [[:Рекуррентные_нейронные_сети|рекуррентных нейронных сетях]] (сокр. ''RNN'') и [[:Сверточные_нейронные_сети|сверточных нейронных сетях]] (сокр. ''CNN'') для &amp;quot;обращения внимания&amp;quot; на определенные части входных данных в зависимости от текущего контекста.&lt;br /&gt;
&lt;br /&gt;
Изначально механизм внимания был представлен в контексте [[:Рекуррентные_нейронные_сети|рекуррентных]] ''Seq2seq'' сетей &amp;lt;ref&amp;gt;https://arxiv.org/abs/1409.0473 статье&amp;lt;/ref&amp;gt; для обращения внимания блоков декодеров на скрытые состояния [[:Рекуррентные_нейронные_сети|RNN]] энкодера для любой итерации, а не только последней.&lt;br /&gt;
 &lt;br /&gt;
После успеха этой методики в машинном переводе последовали ее внедрения в других задачах [[:Обработка_естественного_языка|обработки естественного языка]] и применения к [[:Сверточные_нейронные_сети|CNN]] для генерации описания изображения&amp;lt;ref&amp;gt;https://arxiv.org/abs/1502.03044&amp;lt;/ref&amp;gt; и GAN &amp;lt;ref&amp;gt;SAGAN&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Обобщенное описание ==&lt;br /&gt;
[[File:AttentionGeneral.png|350px|thumb|Обобщенное описание механизма внимания]]&lt;br /&gt;
[[:Рекуррентные_нейронные_сети|RNN]] используются при обработке данных, для которых важна их последовательность. В классическом случае применения [[:Рекуррентные_нейронные_сети|RNN]] результатом является только последнее скрытое состояние &amp;lt;math&amp;gt;h_m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; {{---}} длина последовательности входных данных. Использование механизма внимания позволяет использовать информацию полученную не только из последнего скрытого состояниния, но и любого скрытого состояния &amp;lt;math&amp;gt;h_t&amp;lt;/math&amp;gt; для любого &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Обычно слой использующийся для механизма внимания представляет собой обычную, чаще всего однослойную, нейронную сеть на вход которой подаются &amp;lt;math&amp;gt;h_t, t = 1 \  \ldots m&amp;lt;/math&amp;gt;, а также вектор &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; в котором содержится некий контекст зависящий от конкретно задачи.&lt;br /&gt;
&lt;br /&gt;
Выходом данного слоя будет являтся вектор &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; (англ. ''score'') {{---}} оценки на основании которых на скрытое состояние &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; будет &amp;quot;обращено внимание&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Далее для нормализации значений &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; используется &amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt;[https://ru.wikipedia.org/wiki/Softmax Wiki -- Функция softmax]&amp;lt;/ref&amp;gt;. Тогда &amp;lt;math&amp;gt;e = softmax(s)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt; здесь используется благодоря своим свойствам: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;\forall s\colon\  \sum_{i=1}^n softmax(s)_i = 1, &amp;lt;/math&amp;gt;&lt;br /&gt;
*&amp;lt;math&amp;gt;\forall s,\ i\colon \ softmax(s)_i &amp;gt;= 0 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Далее считается &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; (англ. ''context vector'') &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;с = \sum_{i=1}^m e_i h_i&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результатом работы слоя внимания является &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; который, содержит в себе информацию обо всех скрытых состоянях &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; пропорционально оценке &amp;lt;math&amp;gt;e_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Пример использования для задачи машинного перевода в ''Seq2seq'' сетях==&lt;br /&gt;
Пример добавления механизма внимания в ''Seq2seq'' сеть поможет лучше понять его предназначение. &lt;br /&gt;
Изначально в оригинальной статье&amp;lt;ref&amp;gt;[https://arxiv.org/abs/1409.0473 Neural Machine Translation by Jointly Learning to Align and Translate]&amp;lt;/ref&amp;gt;, представляющей механизм внимания, он применяется &lt;br /&gt;
 в контексте именно Seq2seq сети в задаче машинного перевода.&lt;br /&gt;
&lt;br /&gt;
Несмотря на то, что нейронные сети рассматриваются как &amp;quot;черный ящик&amp;quot; и интерпретировать их внутренности в понятных человеку терминах часто невозможно, все же механизм внимания интуитивно понятный людям смог улучшить результаты машинного перевода для алгоритма используемого в статье.&lt;br /&gt;
&lt;br /&gt;
Успех этого использования этого подхода в задаче машинного перевода обусловлен лучшим выводом закономерностей между словами находящимися на большом расстоянии друг от друга. Несмотря на то, что ''LSTM'' и ''GRU'' блоки используются именно для улучшения передачи информации с предыдущих итераций ''RNN'' их основная проблема заключается в том, что влияние предыдущих состояний на текущее уменьшается экспоненциально от расстояния между словами, в то же время механизм внимания улучшает этот показатель до линейного.&lt;br /&gt;
&lt;br /&gt;
=== Базовая архитектура ''Seq2seq'' ===&lt;br /&gt;
[[File:Seq2SeqBasic.png|450px|thumb|Пример работы базовой ''Seq2seq'' сети]]&lt;br /&gt;
Данный пример рассматривает применение механизма внимания в задаче машинного перевода в применении к архитектуре ''Seq2seq''.&lt;br /&gt;
&lt;br /&gt;
''Seq2seq'' состоит из двух [[:Рекуррентные_нейронные_сети|RNN]] {{---}} ''Энкодера'' и ''Декодера''.&lt;br /&gt;
&lt;br /&gt;
''Энкодер'' {{---}} принимает предложение на языке ''A'' и сжимает его в вектор скрытого состояния.&lt;br /&gt;
&lt;br /&gt;
''Декодер'' {{---}} выдает слово на языке ''B'', принимает последнее скрытое состояние энкодера и предыдущее предыдущее предсказаное слово.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Рассмотрим пример работы ''Seq2seq'' сети:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''A''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние энкодера.&lt;br /&gt;
&lt;br /&gt;
''Блоки энкодера (зеленый)'' {{---}} блоки энкодера получающие на вход &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; и передающие скрытое состояние &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; на следующую итерацию.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние декодера.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''B''.&lt;br /&gt;
&lt;br /&gt;
''Блоки декодера (фиолетовый)'' {{---}} блоки декодера получающие на вход &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt; или специальный токен '''start''' в случае первой итерации и возвращаюшие &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''B''. &lt;br /&gt;
Передают &amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние декодера на следующую итерацию. &lt;br /&gt;
Перевод считается завершенным при &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt;, равном специальному токену '''end'''.&lt;br /&gt;
&lt;br /&gt;
=== Применение механизма внимания для ''Seq2seq'' ===&lt;br /&gt;
При добавлении механизма в данную архитектуру между [[:Рекуррентные_нейронные_сети|RNN]] ''Энкодер'' и ''Декодер'' слоя механизма внимания получится следуюшая схема:&lt;br /&gt;
&lt;br /&gt;
[[File:Seq2SeqAttention.png|450px|thumb|Пример работы ''Seq2seq'' сети с механизмом внимания]]&lt;br /&gt;
&lt;br /&gt;
Здесь &amp;lt;math&amp;gt;x_i, h_i, d_i, y_i&amp;lt;/math&amp;gt; имееют те же назначения, что и в варианте без механизма внимания.&lt;br /&gt;
&lt;br /&gt;
''Аггрегатор скрытых состояний энкодера (желтый)'' {{---}} аггрегирует в себе все вектора &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; и возвращает всю последовательность векторов &amp;lt;math&amp;gt;h = [h_1, h_2, h_3, h_4]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt; {{---}} вектор контекста на итерации &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Блоки механизма внимания (красный)'' {{---}} механизм внимания. Принимает &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;d_{i - 1}&amp;lt;/math&amp;gt;, возвращает &amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Блоки декодера (фиолетовый)'' {{---}} по сравнению с обычной ''Seq2seq'' сетью меняются входные данные. Теперь на итерации &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; на вход подается не &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt;, а конкатенация &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом при помощи механизма внимания достигается &amp;quot;фокусирование&amp;quot; декодера на определенных скрытых состояниях. В случаях машинного перевода эта возможность помогает декодеру предсказывать на какие скрытые сосояния при исходных определенных словах на языке ''A'' необходимо обратить больше внимания при переводе данного слова на язык ''B''.&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
*[[:Сверточные_нейронные_сети|Сверточные нейронные сети]]&lt;br /&gt;
*[[:Нейронные_сети,_перцептрон|Нейронные сети, перцептрон]]&lt;br /&gt;
*[[:Рекуррентные_нейронные_сети|Рекуррентные нейронные сети]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
*[https://www.coursera.org/lecture/nlp-sequence-models/attention-model-lSwVa Лекция Andrew Ng о механизме внимания в NLP]&lt;br /&gt;
*[https://towardsdatascience.com/intuitive-understanding-of-attention-mechanism-in-deep-learning-6c9482aecf4f Статья с подробно разборанными примерами и кодом на ''Python'' и ''TensorFlow'']&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Нейронные сети]]&lt;br /&gt;
[[Категория: Рекуррентные нейронные сети]]&lt;/div&gt;</summary>
		<author><name>Gpevnev</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=73086</id>
		<title>Механизм внимания</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=73086"/>
				<updated>2020-03-22T09:17:08Z</updated>
		
		<summary type="html">&lt;p&gt;Gpevnev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Механизм внимания''' (англ. ''attention mechanism'', ''attention model'') {{---}} техника используемая в [[:Рекуррентные_нейронные_сети|рекуррентных нейронных сетях]] (сокр. ''RNN'') и [[:Сверточные_нейронные_сети|сверточных нейронных сетях]] (сокр. ''CNN'') для &amp;quot;обращения внимания&amp;quot; на определенные части входных данных в зависимости от текущего контекста.&lt;br /&gt;
&lt;br /&gt;
Изначально механизм внимания был представлен в контексте [[:Рекуррентные_нейронные_сети|рекуррентных]] ''Seq2seq'' сетей &amp;lt;ref&amp;gt;https://arxiv.org/abs/1409.0473 статье&amp;lt;/ref&amp;gt; для обращения внимания блоков декодеров на скрытые состояния [[:Рекуррентные_нейронные_сети|RNN]] энкодера для любой итерации, а не только последней. Успех этого подхода обусловлен лучшим был обусловлен лучшим выводом закономерностей между словами находящимися на большом расстоянии друг от друга в задаче машинного перевода. Несмотря на то, что ''LSTM'' и ''GRU'' блоки используются именно для улучшения передачи информации с предыдущих итераций ''RNN'' их основная проблема заключается в том, что влияние предыдущих состояний на текущее уменьшается экспоненциально, в то же время механизм внимания улучшает этот показатель до линейного.&lt;br /&gt;
 &lt;br /&gt;
После успеха этой методики в машинном переводе последовали ее внедрения в других задачах [[:Обработка_естественного_языка|обработки естественного языка]] и применения к [[:Сверточные_нейронные_сети|CNN]] для генерации описания изображения&amp;lt;ref&amp;gt;https://arxiv.org/abs/1502.03044&amp;lt;/ref&amp;gt; и GAN &amp;lt;ref&amp;gt;SAGAN&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Обобщенное описание ==&lt;br /&gt;
[[File:AttentionGeneral.png|350px|thumb|Обобщенное описание механизма внимания]]&lt;br /&gt;
[[:Рекуррентные_нейронные_сети|RNN]] используются при обработке данных, для которых важна их последовательность. В классическом случае применения [[:Рекуррентные_нейронные_сети|RNN]] результатом является только последнее скрытое состояние &amp;lt;math&amp;gt;h_m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; {{---}} длина последовательности входных данных. Использование механизма внимания позволяет использовать информацию полученную не только из последнего скрытого состояниния, но и любого скрытого состояния &amp;lt;math&amp;gt;h_t&amp;lt;/math&amp;gt; для любого &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Обычно слой использующийся для механизма внимания представляет собой обычную, чаще всего однослойную, нейронную сеть на вход которой подаются &amp;lt;math&amp;gt;h_t, t = 1 \  \ldots m&amp;lt;/math&amp;gt;, а также вектор &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; в котором содержится некий контекст зависящий от конкретно задачи.&lt;br /&gt;
&lt;br /&gt;
Выходом данного слоя будет являтся вектор &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; (англ. ''score'') {{---}} оценки на основании которых на скрытое состояние &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; будет &amp;quot;обращено внимание&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Далее для нормализации значений &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; используется &amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt;[https://ru.wikipedia.org/wiki/Softmax Wiki -- Функция softmax]&amp;lt;/ref&amp;gt;. Тогда &amp;lt;math&amp;gt;e = softmax(s)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt; здесь используется благодоря своим свойствам: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;\forall s\colon\  \sum_{i=1}^n softmax(s)_i = 1, &amp;lt;/math&amp;gt;&lt;br /&gt;
*&amp;lt;math&amp;gt;\forall s,\ i\colon \ softmax(s)_i &amp;gt;= 0 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Далее считается &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; (англ. ''context vector'') &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;с = \sum_{i=1}^m e_i h_i&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результатом работы слоя внимания является &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; который, содержит в себе информацию обо всех скрытых состоянях &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; пропорционально оценке &amp;lt;math&amp;gt;e_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Пример использования для архитектуры ''Seq2seq'' ==&lt;br /&gt;
Пример добавления механизма внимания в ''Seq2seq'' сеть поможет лучше понять его предназначение. &lt;br /&gt;
Изначально в оригинальной статье&amp;lt;ref&amp;gt;[https://arxiv.org/abs/1409.0473 Neural Machine Translation by Jointly Learning to Align and Translate]&amp;lt;/ref&amp;gt; применяется механизм внимания в контексте именно Seq2seq сети.&lt;br /&gt;
&lt;br /&gt;
Несмотря на то, что нейронные сети рассматриваются как &amp;quot;черный ящик&amp;quot; и интерпретировать их внутренности в понятных человеку терминах часто невозможно, все же механизм внимания интуитивно понятный людям смог улучшить результаты машинного перевода для алгоритма используемого в статье.&lt;br /&gt;
&lt;br /&gt;
=== Базовая архитектура ''Seq2seq'' ===&lt;br /&gt;
[[File:Seq2SeqBasic.png|450px|thumb|Пример работы базовой ''Seq2seq'' сети]]&lt;br /&gt;
Данный пример рассматривает применение механизма внимания в задаче машинного перевода в применении к архитектуре ''Seq2seq''.&lt;br /&gt;
&lt;br /&gt;
''Seq2seq'' состоит из двух [[:Рекуррентные_нейронные_сети|RNN]] {{---}} ''Энкодера'' и ''Декодера''.&lt;br /&gt;
&lt;br /&gt;
''Энкодер'' {{---}} принимает предложение на языке ''A'' и сжимает его в вектор скрытого состояния.&lt;br /&gt;
&lt;br /&gt;
''Декодер'' {{---}} выдает слово на языке ''B'', принимает последнее скрытое состояние энкодера и предыдущее предыдущее предсказаное слово.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Рассмотрим пример работы ''Seq2seq'' сети:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''A''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние энкодера.&lt;br /&gt;
&lt;br /&gt;
''Блоки энкодера (зеленый)'' {{---}} блоки энкодера получающие на вход &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; и передающие скрытое состояние &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; на следующую итерацию.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние декодера.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''B''.&lt;br /&gt;
&lt;br /&gt;
''Блоки декодера (фиолетовый)'' {{---}} блоки декодера получающие на вход &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt; или специальный токен '''start''' в случае первой итерации и возвращаюшие &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''B''. &lt;br /&gt;
Передают &amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние декодера на следующую итерацию. &lt;br /&gt;
Перевод считается завершенным при &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt;, равном специальному токену '''end'''.&lt;br /&gt;
&lt;br /&gt;
=== Применение механизма внимания для ''Seq2seq'' ===&lt;br /&gt;
При добавлении механизма в данную архитектуру между [[:Рекуррентные_нейронные_сети|RNN]] ''Энкодер'' и ''Декодер'' слоя механизма внимания получится следуюшая схема:&lt;br /&gt;
&lt;br /&gt;
[[File:Seq2SeqAttention.png|450px|thumb|Пример работы ''Seq2seq'' сети с механизмом внимания]]&lt;br /&gt;
&lt;br /&gt;
Здесь &amp;lt;math&amp;gt;x_i, h_i, d_i, y_i&amp;lt;/math&amp;gt; имееют те же назначения, что и в варианте без механизма внимания.&lt;br /&gt;
&lt;br /&gt;
''Аггрегатор скрытых состояний энкодера (желтый)'' {{---}} аггрегирует в себе все вектора &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; и возвращает всю последовательность векторов &amp;lt;math&amp;gt;h = [h_1, h_2, h_3, h_4]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt; {{---}} вектор контекста на итерации &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Блоки механизма внимания (красный)'' {{---}} механизм внимания. Принимает &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;d_{i - 1}&amp;lt;/math&amp;gt;, возвращает &amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Блоки декодера (фиолетовый)'' {{---}} по сравнению с обычной ''Seq2seq'' сетью меняются входные данные. Теперь на итерации &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; на вход подается не &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt;, а конкатенация &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом при помощи механизма внимания достигается &amp;quot;фокусирование&amp;quot; декодера на определенных скрытых состояниях. В случаях машинного перевода эта возможность помогает декодеру предсказывать на какие скрытые сосояния при исходных определенных словах на языке ''A'' необходимо обратить больше внимания при переводе данного слова на язык ''B''.&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
*[[:Сверточные_нейронные_сети|Сверточные нейронные сети]]&lt;br /&gt;
*[[:Нейронные_сети,_перцептрон|Нейронные сети, перцептрон]]&lt;br /&gt;
*[[:Рекуррентные_нейронные_сети|Рекуррентные нейронные сети]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
*[https://www.coursera.org/lecture/nlp-sequence-models/attention-model-lSwVa Лекция Andrew Ng о механизме внимания в NLP]&lt;br /&gt;
*[https://towardsdatascience.com/intuitive-understanding-of-attention-mechanism-in-deep-learning-6c9482aecf4f Статья с подробно разборанными примерами и кодом на ''Python'' и ''TensorFlow'']&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Нейронные сети]]&lt;br /&gt;
[[Категория: Рекуррентные нейронные сети]]&lt;/div&gt;</summary>
		<author><name>Gpevnev</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=73085</id>
		<title>Механизм внимания</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=73085"/>
				<updated>2020-03-22T09:05:47Z</updated>
		
		<summary type="html">&lt;p&gt;Gpevnev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Механизм внимания''' (англ. ''attention mechanism'', ''attention model'') {{---}} техника используемая в [[:Рекуррентные_нейронные_сети|рекуррентных нейронных сетях]] (сокр. ''RNN'') и [[:Сверточные_нейронные_сети|сверточных нейронных сетях]] (сокр. ''CNN'') для &amp;quot;обращения внимания&amp;quot; на определенные части входных данных в зависимости от текущего контекста.&lt;br /&gt;
&lt;br /&gt;
слоев сети на скрытое состояние нейронной сети &amp;lt;math&amp;gt;h_t&amp;lt;/math&amp;gt; в момент времени &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Изначально механизм внимания был представлен в [https://arxiv.org/abs/1409.0473 статье] описывыющей данную технику и ее [[:Механизм_внимания#Пример использования для архитектуры Seq2seq|применение]] именно в ''Seq2seq''&amp;lt;ref&amp;gt;[https://en.wikipedia.org/wiki/Seq2seq Wiki -- ''Seq2seq'']&amp;lt;/ref&amp;gt; сетях и лишь позже был использован в [https://arxiv.org/abs/1502.03044 статье] применительно к генерации описания изображений.&lt;br /&gt;
&lt;br /&gt;
Изначально механизм внимания был представлен в контексте [[:Рекуррентные_нейронные_сети|рекуррентных]] ''Seq2seq'' сетей &amp;lt;ref&amp;gt;https://arxiv.org/abs/1409.0473 статье&amp;lt;/ref&amp;gt; и был использован для лучшего вывода закономерностей между словами находящимися на большом расстоянии друг от друга в задаче машинного перевода. После успеха этой методики в машинном переводе последовали ее внедрения в других задачах [[:Обработка_естественного_языка|обработки естественного языка]] и применения к [[:Сверточные_нейронные_сети|CNN]] для генерации описания изображения&amp;lt;ref&amp;gt;https://arxiv.org/abs/1502.03044&amp;lt;/ref&amp;gt; и GAN &amp;lt;ref&amp;gt;SAGAN&amp;lt;/ref&amp;gt;.&lt;br /&gt;
== Обобщенное описание ==&lt;br /&gt;
[[File:AttentionGeneral.png|350px|thumb|Обобщенное описание механизма внимания]]&lt;br /&gt;
[[:Рекуррентные_нейронные_сети|RNN]] используются при обработке данных, для которых важна их последовательность. В классическом случае применения [[:Рекуррентные_нейронные_сети|RNN]] результатом является только последнее скрытое состояние &amp;lt;math&amp;gt;h_m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; {{---}} длина последовательности входных данных. Использование механизма внимания позволяет использовать информацию полученную не только из последнего скрытого состояниния, но и любого скрытого состояния &amp;lt;math&amp;gt;h_t&amp;lt;/math&amp;gt; для любого &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Обычно слой использующийся для механизма внимания представляет собой обычную, чаще всего однослойную, нейронную сеть на вход которой подаются &amp;lt;math&amp;gt;h_t, t = 1 \  \ldots m&amp;lt;/math&amp;gt;, а также вектор &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; в котором содержится некий контекст зависящий от конкретно задачи.&lt;br /&gt;
&lt;br /&gt;
Выходом данного слоя будет являтся вектор &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; (англ. ''score'') {{---}} оценки на основании которых на скрытое состояние &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; будет &amp;quot;обращено внимание&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Далее для нормализации значений &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; используется &amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt;[https://ru.wikipedia.org/wiki/Softmax Wiki -- Функция softmax]&amp;lt;/ref&amp;gt;. Тогда &amp;lt;math&amp;gt;e = softmax(s)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt; здесь используется благодоря своим свойствам: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;\forall s\colon\  \sum_{i=1}^n softmax(s)_i = 1, &amp;lt;/math&amp;gt;&lt;br /&gt;
*&amp;lt;math&amp;gt;\forall s,\ i\colon \ softmax(s)_i &amp;gt;= 0 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Далее считается &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; (англ. ''context vector'') &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;с = \sum_{i=1}^m e_i h_i&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результатом работы слоя внимания является &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; который, содержит в себе информацию обо всех скрытых состоянях &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; пропорционально оценке &amp;lt;math&amp;gt;e_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Пример использования для архитектуры ''Seq2seq'' ==&lt;br /&gt;
Пример добавления механизма внимания в ''Seq2seq'' сеть поможет лучше понять его предназначение. &lt;br /&gt;
Изначально в оригинальной статье&amp;lt;ref&amp;gt;[https://arxiv.org/abs/1409.0473 Neural Machine Translation by Jointly Learning to Align and Translate]&amp;lt;/ref&amp;gt; применяется механизм внимания в контексте именно Seq2seq сети.&lt;br /&gt;
&lt;br /&gt;
Несмотря на то, что нейронные сети рассматриваются как &amp;quot;черный ящик&amp;quot; и интерпретировать их внутренности в понятных человеку терминах часто невозможно, все же механизм внимания интуитивно понятный людям смог улучшить результаты машинного перевода для алгоритма используемого в статье.&lt;br /&gt;
&lt;br /&gt;
=== Базовая архитектура ''Seq2seq'' ===&lt;br /&gt;
[[File:Seq2SeqBasic.png|450px|thumb|Пример работы базовой ''Seq2seq'' сети]]&lt;br /&gt;
Данный пример рассматривает применение механизма внимания в задаче машинного перевода в применении к архитектуре ''Seq2seq''.&lt;br /&gt;
&lt;br /&gt;
''Seq2seq'' состоит из двух [[:Рекуррентные_нейронные_сети|RNN]] {{---}} ''Энкодера'' и ''Декодера''.&lt;br /&gt;
&lt;br /&gt;
''Энкодер'' {{---}} принимает предложение на языке ''A'' и сжимает его в вектор скрытого состояния.&lt;br /&gt;
&lt;br /&gt;
''Декодер'' {{---}} выдает слово на языке ''B'', принимает последнее скрытое состояние энкодера и предыдущее предыдущее предсказаное слово.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Рассмотрим пример работы ''Seq2seq'' сети:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''A''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние энкодера.&lt;br /&gt;
&lt;br /&gt;
''Блоки энкодера (зеленый)'' {{---}} блоки энкодера получающие на вход &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; и передающие скрытое состояние &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; на следующую итерацию.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние декодера.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''B''.&lt;br /&gt;
&lt;br /&gt;
''Блоки декодера (фиолетовый)'' {{---}} блоки декодера получающие на вход &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt; или специальный токен '''start''' в случае первой итерации и возвращаюшие &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''B''. &lt;br /&gt;
Передают &amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние декодера на следующую итерацию. &lt;br /&gt;
Перевод считается завершенным при &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt;, равном специальному токену '''end'''.&lt;br /&gt;
&lt;br /&gt;
=== Применение механизма внимания для ''Seq2seq'' ===&lt;br /&gt;
При добавлении механизма в данную архитектуру между [[:Рекуррентные_нейронные_сети|RNN]] ''Энкодер'' и ''Декодер'' слоя механизма внимания получится следуюшая схема:&lt;br /&gt;
&lt;br /&gt;
[[File:Seq2SeqAttention.png|450px|thumb|Пример работы ''Seq2seq'' сети с механизмом внимания]]&lt;br /&gt;
&lt;br /&gt;
Здесь &amp;lt;math&amp;gt;x_i, h_i, d_i, y_i&amp;lt;/math&amp;gt; имееют те же назначения, что и в варианте без механизма внимания.&lt;br /&gt;
&lt;br /&gt;
''Аггрегатор скрытых состояний энкодера (желтый)'' {{---}} аггрегирует в себе все вектора &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; и возвращает всю последовательность векторов &amp;lt;math&amp;gt;h = [h_1, h_2, h_3, h_4]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt; {{---}} вектор контекста на итерации &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Блоки механизма внимания (красный)'' {{---}} механизм внимания. Принимает &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;d_{i - 1}&amp;lt;/math&amp;gt;, возвращает &amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Блоки декодера (фиолетовый)'' {{---}} по сравнению с обычной ''Seq2seq'' сетью меняются входные данные. Теперь на итерации &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; на вход подается не &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt;, а конкатенация &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом при помощи механизма внимания достигается &amp;quot;фокусирование&amp;quot; декодера на определенных скрытых состояниях. В случаях машинного перевода эта возможность помогает декодеру предсказывать на какие скрытые сосояния при исходных определенных словах на языке ''A'' необходимо обратить больше внимания при переводе данного слова на язык ''B''.&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
*[[:Сверточные_нейронные_сети|Сверточные нейронные сети]]&lt;br /&gt;
*[[:Нейронные_сети,_перцептрон|Нейронные сети, перцептрон]]&lt;br /&gt;
*[[:Рекуррентные_нейронные_сети|Рекуррентные нейронные сети]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
*[https://www.coursera.org/lecture/nlp-sequence-models/attention-model-lSwVa Лекция Andrew Ng о механизме внимания в NLP]&lt;br /&gt;
*[https://towardsdatascience.com/intuitive-understanding-of-attention-mechanism-in-deep-learning-6c9482aecf4f Статья с подробно разборанными примерами и кодом на ''Python'' и ''TensorFlow'']&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Нейронные сети]]&lt;br /&gt;
[[Категория: Рекуррентные нейронные сети]]&lt;/div&gt;</summary>
		<author><name>Gpevnev</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=73084</id>
		<title>Механизм внимания</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=73084"/>
				<updated>2020-03-22T09:05:04Z</updated>
		
		<summary type="html">&lt;p&gt;Gpevnev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Механизм внимания''' (англ. ''attention mechanism'', ''attention model'') {{---}} техника используемая в [[:Рекуррентные_нейронные_сети|рекуррентных нейронных сетях]] (сокращенно ''RNN'') и [[:Сверточные_нейронные_сети|сверточных нейронных сетях]] (сокр. ''CNN'') для &amp;quot;обращения внимания&amp;quot; на определенные части входных данных в зависимости от текущего контекста.&lt;br /&gt;
&lt;br /&gt;
слоев сети на скрытое состояние нейронной сети &amp;lt;math&amp;gt;h_t&amp;lt;/math&amp;gt; в момент времени &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Изначально механизм внимания был представлен в [https://arxiv.org/abs/1409.0473 статье] описывыющей данную технику и ее [[:Механизм_внимания#Пример использования для архитектуры Seq2seq|применение]] именно в ''Seq2seq''&amp;lt;ref&amp;gt;[https://en.wikipedia.org/wiki/Seq2seq Wiki -- ''Seq2seq'']&amp;lt;/ref&amp;gt; сетях и лишь позже был использован в [https://arxiv.org/abs/1502.03044 статье] применительно к генерации описания изображений.&lt;br /&gt;
&lt;br /&gt;
Изначально механизм внимания был представлен в контексте [[:Рекуррентные_нейронные_сети|рекуррентных]] ''Seq2seq'' сетей &amp;lt;ref&amp;gt;https://arxiv.org/abs/1409.0473 статье&amp;lt;/ref&amp;gt; и был использован для лучшего вывода закономерностей между словами находящимися на большом расстоянии друг от друга в задаче машинного перевода. После успеха этой методики в машинном переводе последовали ее внедрения в других задачах [[:Обработка_естественного_языка|обработки естественного языка]] и применения к [[:Сверточные_нейронные_сети|CNN]] для генерации описания изображения&amp;lt;ref&amp;gt;https://arxiv.org/abs/1502.03044&amp;lt;/ref&amp;gt; и GAN &amp;lt;ref&amp;gt;SAGAN&amp;lt;/ref&amp;gt;.&lt;br /&gt;
== Обобщенное описание ==&lt;br /&gt;
[[File:AttentionGeneral.png|350px|thumb|Обобщенное описание механизма внимания]]&lt;br /&gt;
[[:Рекуррентные_нейронные_сети|RNN]] используются при обработке данных, для которых важна их последовательность. В классическом случае применения [[:Рекуррентные_нейронные_сети|RNN]] результатом является только последнее скрытое состояние &amp;lt;math&amp;gt;h_m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; {{---}} длина последовательности входных данных. Использование механизма внимания позволяет использовать информацию полученную не только из последнего скрытого состояниния, но и любого скрытого состояния &amp;lt;math&amp;gt;h_t&amp;lt;/math&amp;gt; для любого &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Обычно слой использующийся для механизма внимания представляет собой обычную, чаще всего однослойную, нейронную сеть на вход которой подаются &amp;lt;math&amp;gt;h_t, t = 1 \  \ldots m&amp;lt;/math&amp;gt;, а также вектор &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; в котором содержится некий контекст зависящий от конкретно задачи.&lt;br /&gt;
&lt;br /&gt;
Выходом данного слоя будет являтся вектор &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; (англ. ''score'') {{---}} оценки на основании которых на скрытое состояние &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; будет &amp;quot;обращено внимание&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Далее для нормализации значений &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; используется &amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt;[https://ru.wikipedia.org/wiki/Softmax Wiki -- Функция softmax]&amp;lt;/ref&amp;gt;. Тогда &amp;lt;math&amp;gt;e = softmax(s)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt; здесь используется благодоря своим свойствам: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;\forall s\colon\  \sum_{i=1}^n softmax(s)_i = 1, &amp;lt;/math&amp;gt;&lt;br /&gt;
*&amp;lt;math&amp;gt;\forall s,\ i\colon \ softmax(s)_i &amp;gt;= 0 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Далее считается &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; (англ. ''context vector'') &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;с = \sum_{i=1}^m e_i h_i&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результатом работы слоя внимания является &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; который, содержит в себе информацию обо всех скрытых состоянях &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; пропорционально оценке &amp;lt;math&amp;gt;e_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Пример использования для архитектуры ''Seq2seq'' ==&lt;br /&gt;
Пример добавления механизма внимания в ''Seq2seq'' сеть поможет лучше понять его предназначение. &lt;br /&gt;
Изначально в оригинальной статье&amp;lt;ref&amp;gt;[https://arxiv.org/abs/1409.0473 Neural Machine Translation by Jointly Learning to Align and Translate]&amp;lt;/ref&amp;gt; применяется механизм внимания в контексте именно Seq2seq сети.&lt;br /&gt;
&lt;br /&gt;
Несмотря на то, что нейронные сети рассматриваются как &amp;quot;черный ящик&amp;quot; и интерпретировать их внутренности в понятных человеку терминах часто невозможно, все же механизм внимания интуитивно понятный людям смог улучшить результаты машинного перевода для алгоритма используемого в статье.&lt;br /&gt;
&lt;br /&gt;
=== Базовая архитектура ''Seq2seq'' ===&lt;br /&gt;
[[File:Seq2SeqBasic.png|450px|thumb|Пример работы базовой ''Seq2seq'' сети]]&lt;br /&gt;
Данный пример рассматривает применение механизма внимания в задаче машинного перевода в применении к архитектуре ''Seq2seq''.&lt;br /&gt;
&lt;br /&gt;
''Seq2seq'' состоит из двух [[:Рекуррентные_нейронные_сети|RNN]] {{---}} ''Энкодера'' и ''Декодера''.&lt;br /&gt;
&lt;br /&gt;
''Энкодер'' {{---}} принимает предложение на языке ''A'' и сжимает его в вектор скрытого состояния.&lt;br /&gt;
&lt;br /&gt;
''Декодер'' {{---}} выдает слово на языке ''B'', принимает последнее скрытое состояние энкодера и предыдущее предыдущее предсказаное слово.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Рассмотрим пример работы ''Seq2seq'' сети:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''A''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние энкодера.&lt;br /&gt;
&lt;br /&gt;
''Блоки энкодера (зеленый)'' {{---}} блоки энкодера получающие на вход &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; и передающие скрытое состояние &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; на следующую итерацию.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние декодера.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''B''.&lt;br /&gt;
&lt;br /&gt;
''Блоки декодера (фиолетовый)'' {{---}} блоки декодера получающие на вход &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt; или специальный токен '''start''' в случае первой итерации и возвращаюшие &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''B''. &lt;br /&gt;
Передают &amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние декодера на следующую итерацию. &lt;br /&gt;
Перевод считается завершенным при &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt;, равном специальному токену '''end'''.&lt;br /&gt;
&lt;br /&gt;
=== Применение механизма внимания для ''Seq2seq'' ===&lt;br /&gt;
При добавлении механизма в данную архитектуру между [[:Рекуррентные_нейронные_сети|RNN]] ''Энкодер'' и ''Декодер'' слоя механизма внимания получится следуюшая схема:&lt;br /&gt;
&lt;br /&gt;
[[File:Seq2SeqAttention.png|450px|thumb|Пример работы ''Seq2seq'' сети с механизмом внимания]]&lt;br /&gt;
&lt;br /&gt;
Здесь &amp;lt;math&amp;gt;x_i, h_i, d_i, y_i&amp;lt;/math&amp;gt; имееют те же назначения, что и в варианте без механизма внимания.&lt;br /&gt;
&lt;br /&gt;
''Аггрегатор скрытых состояний энкодера (желтый)'' {{---}} аггрегирует в себе все вектора &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; и возвращает всю последовательность векторов &amp;lt;math&amp;gt;h = [h_1, h_2, h_3, h_4]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt; {{---}} вектор контекста на итерации &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Блоки механизма внимания (красный)'' {{---}} механизм внимания. Принимает &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;d_{i - 1}&amp;lt;/math&amp;gt;, возвращает &amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Блоки декодера (фиолетовый)'' {{---}} по сравнению с обычной ''Seq2seq'' сетью меняются входные данные. Теперь на итерации &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; на вход подается не &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt;, а конкатенация &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом при помощи механизма внимания достигается &amp;quot;фокусирование&amp;quot; декодера на определенных скрытых состояниях. В случаях машинного перевода эта возможность помогает декодеру предсказывать на какие скрытые сосояния при исходных определенных словах на языке ''A'' необходимо обратить больше внимания при переводе данного слова на язык ''B''.&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
*[[:Сверточные_нейронные_сети|Сверточные нейронные сети]]&lt;br /&gt;
*[[:Нейронные_сети,_перцептрон|Нейронные сети, перцептрон]]&lt;br /&gt;
*[[:Рекуррентные_нейронные_сети|Рекуррентные нейронные сети]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
*[https://www.coursera.org/lecture/nlp-sequence-models/attention-model-lSwVa Лекция Andrew Ng о механизме внимания в NLP]&lt;br /&gt;
*[https://towardsdatascience.com/intuitive-understanding-of-attention-mechanism-in-deep-learning-6c9482aecf4f Статья с подробно разборанными примерами и кодом на ''Python'' и ''TensorFlow'']&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Нейронные сети]]&lt;br /&gt;
[[Категория: Рекуррентные нейронные сети]]&lt;/div&gt;</summary>
		<author><name>Gpevnev</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=73083</id>
		<title>Механизм внимания</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=73083"/>
				<updated>2020-03-22T07:48:28Z</updated>
		
		<summary type="html">&lt;p&gt;Gpevnev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Механизм внимания в рекуррентных нейронных сетях''' (англ. ''attention mechanism'', ''attention model'') {{---}} дополнительный слой используемый в [[:Рекуррентные_нейронные_сети|рекуррентных нейронных сетях]] (сокращенно ''RNN'') для &amp;quot;обращения внимания&amp;quot; последующих слоев сети на скрытое состояние нейронной сети &amp;lt;math&amp;gt;h_t&amp;lt;/math&amp;gt; в момент времени &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Изначально механизм внимания был представлен в [https://arxiv.org/abs/1409.0473 статье] описывыющей данную технику и ее [[:Механизм_внимания#Пример использования для архитектуры Seq2seq|применение]] именно в ''Seq2seq''&amp;lt;ref&amp;gt;[https://en.wikipedia.org/wiki/Seq2seq Wiki -- Seq2seq]&amp;lt;/ref&amp;gt; сетях и лишь позже был использован в [https://arxiv.org/abs/1502.03044 статье] применительно к генерации описания изображений.&lt;br /&gt;
&lt;br /&gt;
== Обобщенное описание ==&lt;br /&gt;
[[File:AttentionGeneral.png|350px|thumb|Обобщенное описание механизма внимания]]&lt;br /&gt;
[[:Рекуррентные_нейронные_сети|RNN]] используются при обработке данных, для которых важна их последовательность. В классическом случае применения [[:Рекуррентные_нейронные_сети|RNN]] результатом является только последнее скрытое состояние &amp;lt;math&amp;gt;h_m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; {{---}} длина последовательности входных данных. Использование механизма внимания позволяет использовать информацию полученную не только из последнего скрытого состояниния, но и любого скрытого состояния &amp;lt;math&amp;gt;h_t&amp;lt;/math&amp;gt; для любого &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Обычно слой использующийся для механизма внимания представляет собой обычную, чаще всего однослойную, нейронную сеть на вход которой подаются &amp;lt;math&amp;gt;h_t, t = 1 \  \ldots m&amp;lt;/math&amp;gt;, а также вектор &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; в котором содержится некий контекст зависящий от конкретно задачи. &lt;br /&gt;
&lt;br /&gt;
Выходом данного слоя будет являтся вектор &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; (англ. ''score'') {{---}} оценки на основании которых на скрытое состояние &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; будет &amp;quot;обращено внимание&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Далее для нормализации значений &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; используется &amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt;[https://ru.wikipedia.org/wiki/Softmax Wiki -- Функция softmax]&amp;lt;/ref&amp;gt;. Тогда &amp;lt;math&amp;gt;e = softmax(s)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt; здесь используется благодоря своим свойствам: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;\forall s\colon\  \sum_{i=1}^n softmax(s)_i = 1, &amp;lt;/math&amp;gt;&lt;br /&gt;
*&amp;lt;math&amp;gt;\forall s,\ i\colon \ softmax(s)_i &amp;gt;= 0 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Далее считается &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; (англ. ''context vector'') &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;с = \sum_{i=1}^m e_i h_i&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результатом работы слоя внимания является &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; который, содержит в себе информацию обо всех скрытых состоянях &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; пропорционально оценке &amp;lt;math&amp;gt;e_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Пример использования для архитектуры ''Seq2seq'' ==&lt;br /&gt;
Пример добавления механизма внимания в ''Seq2seq'' сеть поможет лучше понять его предназначение. &lt;br /&gt;
Изначально в оригинальной статье&amp;lt;ref&amp;gt;[https://arxiv.org/abs/1409.0473 Neural Machine Translation by Jointly Learning to Align and Translate]&amp;lt;/ref&amp;gt; применяется механизм внимания в контексте именно Seq2seq сети.&lt;br /&gt;
&lt;br /&gt;
Несмотря на то, что нейронные сети рассматриваются как &amp;quot;черный ящик&amp;quot; и интерпретировать их внутренности в понятных человеку терминах часто невозможно, все же механизм внимания интуитивно понятный людям смог улучшить результаты машинного перевода для алгоритма используемого в статье.&lt;br /&gt;
&lt;br /&gt;
=== Базовая архитектура ''Seq2seq'' ===&lt;br /&gt;
[[File:Seq2SeqBasic.png|450px|thumb|Пример работы базовой ''Seq2seq'' сети]]&lt;br /&gt;
Данный пример рассматривает применение механизма внимания в задаче машинного перевода в применении к архитектуре ''Seq2seq''.&lt;br /&gt;
&lt;br /&gt;
''Seq2seq'' состоит из двух [[:Рекуррентные_нейронные_сети|RNN]] {{---}} ''Энкодера'' и ''Декодера''.&lt;br /&gt;
&lt;br /&gt;
''Энкодер'' {{---}} принимает предложение на языке ''A'' и сжимает его в вектор скрытого состояния.&lt;br /&gt;
&lt;br /&gt;
''Декодер'' {{---}} выдает слово на языке ''B'', принимает последнее скрытое состояние энкодера и предыдущее предыдущее предсказаное слово.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Рассмотрим пример работы ''Seq2seq'' сети:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''A''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние энкодера.&lt;br /&gt;
&lt;br /&gt;
''Блоки энкодера (зеленый)'' {{---}} блоки энкодера получающие на вход &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; и передающие скрытое состояние &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; на следующую итерацию.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние декодера.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''B''.&lt;br /&gt;
&lt;br /&gt;
''Блоки декодера (фиолетовый)'' {{---}} блоки декодера получающие на вход &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt; или специальный токен '''start''' в случае первой итерации и возвращаюшие &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''B''. &lt;br /&gt;
Передают &amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние декодера на следующую итерацию. &lt;br /&gt;
Перевод считается завершенным при &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt;, равном специальному токену '''end'''.&lt;br /&gt;
&lt;br /&gt;
=== Применение механизма внимания для ''Seq2seq'' ===&lt;br /&gt;
При добавлении механизма в данную архитектуру между [[:Рекуррентные_нейронные_сети|RNN]] ''Энкодер'' и ''Декодер'' слоя механизма внимания получится следуюшая схема:&lt;br /&gt;
&lt;br /&gt;
[[File:Seq2SeqAttention.png|450px|thumb|Пример работы ''Seq2seq'' сети с механизмом внимания]]&lt;br /&gt;
&lt;br /&gt;
Здесь &amp;lt;math&amp;gt;x_i, h_i, d_i, y_i&amp;lt;/math&amp;gt; имееют те же назначения, что и в варианте без механизма внимания.&lt;br /&gt;
&lt;br /&gt;
''Аггрегатор скрытых состояний энкодера (желтый)'' {{---}} аггрегирует в себе все вектора &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; и возвращает всю последовательность векторов &amp;lt;math&amp;gt;h = [h_1, h_2, h_3, h_4]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt; {{---}} вектор контекста на итерации &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Блоки механизма внимания (красный)'' {{---}} механизм внимания. Принимает &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;d_{i - 1}&amp;lt;/math&amp;gt;, возвращает &amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Блоки декодера (фиолетовый)'' {{---}} по сравнению с обычной ''Seq2seq'' сетью меняются входные данные. Теперь на итерации &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; на вход подается не &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt;, а конкатенация &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом при помощи механизма внимания достигается &amp;quot;фокусирование&amp;quot; декодера на определенных скрытых состояниях. В случаях машинного перевода эта возможность помогает декодеру предсказывать на какие скрытые сосояния при исходных определенных словах на языке ''A'' необходимо обратить больше внимания при переводе данного слова на язык ''B''.&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
*[[:Сверточные_нейронные_сети|Сверточные нейронные сети]]&lt;br /&gt;
*[[:Нейронные_сети,_перцептрон|Нейронные сети, перцептрон]]&lt;br /&gt;
*[[:Рекуррентные_нейронные_сети|Рекуррентные нейронные сети]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
*[https://www.coursera.org/lecture/nlp-sequence-models/attention-model-lSwVa Лекция Andrew Ng о механизме внимания в NLP]&lt;br /&gt;
*[https://towardsdatascience.com/intuitive-understanding-of-attention-mechanism-in-deep-learning-6c9482aecf4f Статья с подробно разборанными примерами и кодом на ''Python'' и ''TensorFlow'']&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Нейронные сети]]&lt;br /&gt;
[[Категория: Рекуррентные нейронные сети]]&lt;/div&gt;</summary>
		<author><name>Gpevnev</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=73079</id>
		<title>Механизм внимания</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=73079"/>
				<updated>2020-03-21T22:29:41Z</updated>
		
		<summary type="html">&lt;p&gt;Gpevnev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Механизм внимания в рекуррентных нейронных сетях''' (англ. ''attention mechanism'', ''attention model'') {{---}} дополнительный слой используемый в [[:Рекуррентные_нейронные_сети|рекуррентных нейронных сетях]] (сокращенно ''RNN'') для &amp;quot;обращения внимания&amp;quot; последующих слоев сети на скрытое состояние нейронной сети &amp;lt;math&amp;gt;h_t&amp;lt;/math&amp;gt; в момент времени &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Изначально механизм внимания был представлен в [https://arxiv.org/abs/1409.0473 статье] описывыющей данную технику и ее [[:Механизм_внимания#Пример использования для архитектуры Seq2seq|применение]] именно в ''Seq2seq''&amp;lt;ref&amp;gt;[https://en.wikipedia.org/wiki/Seq2seq Wiki -- Seq2seq]&amp;lt;/ref&amp;gt; сетях и лишь позже был использован в [https://arxiv.org/abs/1502.03044 статье] применительно к генерации описания изображений.&lt;br /&gt;
&lt;br /&gt;
== Обобщенное описание ==&lt;br /&gt;
[[File:AttentionGeneral.png|350px|thumb|Обобщенное описание механизма внимания]]&lt;br /&gt;
[[:Рекуррентные_нейронные_сети|RNN]] используются при обработке данных, для которых важна их последовательность. В классическом случае применения [[:Рекуррентные_нейронные_сети|RNN]] результатом является только последнее скрытое состояние &amp;lt;math&amp;gt;h_m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; {{---}} длина последовательности входных данных. Использование механизма внимания позволяет использовать информацию полученную не только из последнего скрытого состояниния, но и любого скрытого состояния &amp;lt;math&amp;gt;h_t&amp;lt;/math&amp;gt; для любого &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Обычно слой использующийся для механизма внимания представляет собой обычную, чаще всего однослойную, нейронную сеть на вход которой подаются &amp;lt;math&amp;gt;h_t, t = 1 \  \ldots m&amp;lt;/math&amp;gt;, а также вектор &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; в котором содержится некий контекст зависящий от конкретно задачи. &lt;br /&gt;
&lt;br /&gt;
Выходом данного слоя будет являтся вектор &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; (англ. ''score'') {{---}} оценки на основании которых на скрытое состояние &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; будет &amp;quot;обращено внимание&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Далее для нормализации значений &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; используется &amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt;[https://ru.wikipedia.org/wiki/Softmax Wiki -- Функция softmax]&amp;lt;/ref&amp;gt;. Тогда &amp;lt;math&amp;gt;e = softmax(s)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt; здесь используется благодоря своим свойствам: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;\forall s\colon\  \sum_{i=1}^n softmax(s)_i = 1, &amp;lt;/math&amp;gt;&lt;br /&gt;
*&amp;lt;math&amp;gt;\forall s,\ i\colon \ softmax(s)_i &amp;gt;= 0 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Далее считается &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; (англ. ''context vector'') &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;с = \sum_{i=1}^m e_i h_i&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результатом работы слоя внимания является &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; который, содержит в себе информацию обо всех скрытых состоянях &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; пропорционально оценке &amp;lt;math&amp;gt;e_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Пример использования для архитектуры ''Seq2seq'' ==&lt;br /&gt;
Пример добавления механизма внимания в ''Seq2seq'' сеть поможет лучше понять его предназначение. &lt;br /&gt;
Изначально в оригинальной статье&amp;lt;ref&amp;gt;[https://arxiv.org/abs/1409.0473 Neural Machine Translation by Jointly Learning to Align and Translate]&amp;lt;/ref&amp;gt; применяется механизм внимания в контексте именно Seq2seq сети.&lt;br /&gt;
&lt;br /&gt;
Несмотря на то, что нейронные сети рассматриваются как &amp;quot;черный ящик&amp;quot; и интерпретировать их внутренности в понятных человеку терминах часто невозможно, все же механизм внимания интуитивно понятный людям смог улучшить результаты машинного перевода для алгоритма используемого в статье.&lt;br /&gt;
&lt;br /&gt;
=== Базовая архитектура ''Seq2seq'' ===&lt;br /&gt;
[[File:Seq2SeqBasic.png|450px|thumb|Пример работы базовой ''Seq2seq'' сети]]&lt;br /&gt;
Данный пример рассматривает применение механизма внимания в задаче машинного перевода в применении к архитектуре ''Seq2seq''.&lt;br /&gt;
&lt;br /&gt;
''Seq2seq'' состоит из двух [[:Рекуррентные_нейронные_сети|RNN]] {{---}} ''Энкодера'' и ''Декодера''.&lt;br /&gt;
&lt;br /&gt;
''Энкодер'' {{---}} принимает предложение на языке ''A'' и сжимает его в вектор скрытого состояния.&lt;br /&gt;
&lt;br /&gt;
''Декодер'' {{---}} выдает слово на языке ''B'', принимает последнее скрытое состояние энкодера и предыдущее предыдущее предсказаное слово.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Рассмотрим пример работы ''Seq2seq'' сети:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''A''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние энкодера.&lt;br /&gt;
&lt;br /&gt;
''Блоки энкодера (зеленый)'' {{---}} блоки энкодера получающие на вход &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; и передающие скрытое состояние &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; на следующую итерацию.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние декодера.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''B''.&lt;br /&gt;
&lt;br /&gt;
''Блоки декодера (фиолетовый)'' {{---}} блоки декодера получающие на вход &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt; или специальный токен '''start''' в случае первой итерации и возвращаюшие &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''B''. &lt;br /&gt;
Передают &amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние декодера на следующую итерацию. &lt;br /&gt;
Перевод считается завершенным при &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt;, равном специальному токену '''end'''.&lt;br /&gt;
&lt;br /&gt;
=== Применение механизма внимания для ''Seq2seq'' ===&lt;br /&gt;
При добавлении механизма в данную архитектуру между [[:Рекуррентные_нейронные_сети|RNN]] ''Энкодер'' и ''Декодер'' слоя механизма внимания получится следуюшая схема:&lt;br /&gt;
&lt;br /&gt;
[[File:Seq2seqAttention.png|450px|thumb|Пример работы ''Seq2seq'' сети с механизмом внимания]]&lt;br /&gt;
&lt;br /&gt;
Здесь &amp;lt;math&amp;gt;x_i, h_i, d_i, y_i&amp;lt;/math&amp;gt; имееют те же назначения, что и в варианте без механизма внимания.&lt;br /&gt;
&lt;br /&gt;
''Аггрегатор скрытых состояний энкодера (желтый)'' {{---}} аггрегирует в себе все вектора &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; и возвращает всю последовательность векторов &amp;lt;math&amp;gt;h = [h_1, h_2, h_3, h_4]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt; {{---}} вектор контекста на итерации &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Блоки механизма внимания (красный)'' {{---}} механизм внимания. Принимает &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;d_{i - 1}&amp;lt;/math&amp;gt;, возвращает &amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Блоки декодера (фиолетовый)'' {{---}} по сравнению с обычной ''Seq2seq'' сетью меняются входные данные. Теперь на итерации &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; на вход подается не &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt;, а конкатенация &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом при помощи механизма внимания достигается &amp;quot;фокусирование&amp;quot; декодера на определенных скрытых состояниях. В случаях машинного перевода эта возможность помогает декодеру предсказывать на какие скрытые сосояния при исходных определенных словах на языке ''A'' необходимо обратить больше внимания при переводе данного слова на язык ''B''.&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
*[[:Сверточные_нейронные_сети|Сверточные нейронные сети]]&lt;br /&gt;
*[[:Нейронные_сети,_перцептрон|Нейронные сети, перцептрон]]&lt;br /&gt;
*[[:Рекуррентные_нейронные_сети|Рекуррентные нейронные сети]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
*[https://www.coursera.org/lecture/nlp-sequence-models/attention-model-lSwVa Лекция Andrew Ng о механизме внимания в NLP]&lt;br /&gt;
*[https://towardsdatascience.com/intuitive-understanding-of-attention-mechanism-in-deep-learning-6c9482aecf4f Статья с подробно разборанными примерами и кодом на ''Python'' и ''TensorFlow'']&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Нейронные сети]]&lt;br /&gt;
[[Категория: Рекуррентные нейронные сети]]&lt;/div&gt;</summary>
		<author><name>Gpevnev</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Seq2SeqAttention.png&amp;diff=73078</id>
		<title>Файл:Seq2SeqAttention.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Seq2SeqAttention.png&amp;diff=73078"/>
				<updated>2020-03-21T22:19:11Z</updated>
		
		<summary type="html">&lt;p&gt;Gpevnev: Gpevnev загрузил новую версию Файл:Seq2SeqAttention.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Gpevnev</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Seq2SeqBasic.png&amp;diff=73077</id>
		<title>Файл:Seq2SeqBasic.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Seq2SeqBasic.png&amp;diff=73077"/>
				<updated>2020-03-21T22:18:30Z</updated>
		
		<summary type="html">&lt;p&gt;Gpevnev: Gpevnev загрузил новую версию Файл:Seq2SeqBasic.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Gpevnev</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=73076</id>
		<title>Механизм внимания</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=73076"/>
				<updated>2020-03-21T22:17:10Z</updated>
		
		<summary type="html">&lt;p&gt;Gpevnev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Механизм внимания в рекуррентных нейронных сетях''' (англ. ''attention mechanism'', ''attention model'') {{---}} дополнительный слой используемый в [[:Рекуррентные_нейронные_сети|рекуррентных нейронных сетях (сокращенно ''RNN'')]] для &amp;quot;обращения внимания&amp;quot; последующих слоев сети на скрытое состояние нейронной сети &amp;lt;math&amp;gt;h_t&amp;lt;/math&amp;gt; в момент времени &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Изначально механизм внимания был представлен в [https://arxiv.org/abs/1409.0473| статье описывыющей данную технику] и ее [[:Механизм_внимания#Пример использования для архитектуры Seq2Seq|применение именно в ''Seq2Seq'' сетях]], и лишь позже был использован в [https://arxiv.org/abs/1502.03044| статье применительно к генерации описания изображений].&lt;br /&gt;
&lt;br /&gt;
== Обобщенное описание ==&lt;br /&gt;
[[File:AttentionGeneral.png|350px|thumb|Обобщенное описание механизма внимания]]&lt;br /&gt;
[[:Рекуррентные_нейронные_сети|Рекуррентные нейронные сети]] используются при обработке данных, для которых важна их последовательность. В классическом случае применения [[:Рекуррентные_нейронные_сети|RNN]] результатом является только последнее скрытое состояние &amp;lt;math&amp;gt;h_m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; {{---}} длина последовательности входных данных. Использование механизма внимания позволяет использовать информацию полученную не только из последнего скрытого состояниния, но и любого скрытого состояния &amp;lt;math&amp;gt;h_t&amp;lt;/math&amp;gt; для любого &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Обычно слой использующийся для механизма внимания представляет собой обычную, чаще всего однослойную, нейронную сеть на вход которой подаются &amp;lt;math&amp;gt;h_t, t = 1 \  \ldots m&amp;lt;/math&amp;gt;, а также вектор &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; в котором содержится некий контекст зависящий от конкретно задачи (пример &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; для задачи машинного перевода использующего ''Seq2Seq'' арихитектуру). &lt;br /&gt;
&lt;br /&gt;
Выходом данного слоя будет являтся вектор &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; (англ. ''score'') {{---}} оценки на основании которых на скрытое состояние &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; будет &amp;quot;обращено внимание&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Далее для нормализации значений &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; используется &amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt;[https://ru.wikipedia.org/wiki/Softmax Функция softmax]&amp;lt;/ref&amp;gt;. Тогда &amp;lt;math&amp;gt;e = softmax(s)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt; здесь используется благодоря своим свойствам: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;\forall s:\  \sum_{i=1}^n softmax(s)_i = 1, &amp;lt;/math&amp;gt;&lt;br /&gt;
*&amp;lt;math&amp;gt;\forall s,\ i: \ softmax(s)_i &amp;gt;= 0 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Далее считается &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; (англ. ''context vector'') &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;с = \sum_{i=1}^m e_i h_i&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результатом работы слоя внимания является &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; который, содержит в себе информацию обо всех скрытых состоянях &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; пропорционально оценке &amp;lt;math&amp;gt;e_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Пример использования для архитектуры ''Seq2Seq'' ==&lt;br /&gt;
Пример добавления механизма внимания в ''Seq2Seq'' сеть поможет лучше понять его предназначение. &lt;br /&gt;
Изначально в оригинальной статье&amp;lt;ref&amp;gt;[https://arxiv.org/abs/1409.0473 Neural Machine Translation by Jointly Learning to Align and Translate]&amp;lt;/ref&amp;gt; применяется механизм внимания в контексте именно Seq2Seq сети.&lt;br /&gt;
&lt;br /&gt;
Несмотря на то, что нейронные сети рассматриваются как &amp;quot;черный ящик&amp;quot; и интерпретировать их внутренности в понятных человеку терминах часто невозможно, все же механизм внимания интуитивно понятный людям смог улучшить результаты машинного перевода для алгоритма используемого в статье.&lt;br /&gt;
&lt;br /&gt;
=== Базовая архитектура ''Seq2Seq'' ===&lt;br /&gt;
[[File:Seq2SeqBasic.png|450px|thumb|Пример работы базовой ''Seq2Seq'' сети]]&lt;br /&gt;
Данный пример рассматривает применение механизма внимания в задаче машинного перевода в применении к архитектуре ''Seq2Seq''.&lt;br /&gt;
&lt;br /&gt;
''Seq2Seq'' состоит из двух [[:Рекуррентные_нейронные_сети|RNN]] {{---}} ''Энкодера'' и ''Декодера''.&lt;br /&gt;
&lt;br /&gt;
''Энкодер'' {{---}} принимает предложение на языке ''A'' и сжимает его в вектор скрытого состояния.&lt;br /&gt;
&lt;br /&gt;
''Декодер'' {{---}} выдает слово на языке ''B'', принимает последнее скрытое состояние энкодера и предыдущее предыдущее предсказаное слово.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Рассмотрим пример работы ''Seq2Seq'' сети:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''A''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние энкодера.&lt;br /&gt;
&lt;br /&gt;
''Блоки энкодера (зеленый)'' {{---}} блоки энкодера получающие на вход &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; и передающие скрытое состояние &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; на следующую итерацию.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние декодера.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''B''.&lt;br /&gt;
&lt;br /&gt;
''Блоки декодера (фиолетовый)'' {{---}} блоки декодера получающие на вход &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt; или специальный токен '''start''' в случае первой итерации и возвращаюшие &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''B''. &lt;br /&gt;
Передают &amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние декодера на следующую итерацию. &lt;br /&gt;
Перевод считается завершенным при &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt;, равном специальному токену '''end'''.&lt;br /&gt;
&lt;br /&gt;
=== Применение механизма внимания для ''Seq2Seq'' ===&lt;br /&gt;
При добавлении механизма в данную архитектуру между [[:Рекуррентные_нейронные_сети|RNN]] ''Энкодер'' и ''Декодер'' слоя механизма внимания получится следуюшая схема:&lt;br /&gt;
&lt;br /&gt;
[[File:Seq2SeqAttention.png|450px|thumb|Пример работы ''Seq2Seq'' сети с механизмом внимания]]&lt;br /&gt;
&lt;br /&gt;
Здесь &amp;lt;math&amp;gt;x_i, h_i, d_i, y_i&amp;lt;/math&amp;gt; имееют те же назначения, что и в варианте без механизма внимания.&lt;br /&gt;
&lt;br /&gt;
''Аггрегатор скрытых состояний энкодера (желтый)'' {{---}} аггрегирует в себе все вектора &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; и возвращает всю последовательность векторов &amp;lt;math&amp;gt;h = [h_1, h_2, h_3, h_4]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt; {{---}} вектор контекста на итерации &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Блоки механизма внимания (красный)'' {{---}} механизм внимания. Принимает &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;d_{i - 1}&amp;lt;/math&amp;gt;, возвращает &amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Блоки декодера (фиолетовый)'' {{---}} по сравнению с обычной ''Seq2Seq'' сетью меняются входные данные. Теперь на итерации &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; на вход подается не &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt;, а конкатенация &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом при помощи механизма внимания достигается &amp;quot;фокусирование&amp;quot; декодера на определенных скрытых состояниях. В случаях машинного перевода эта возможность помогает декодеру предсказывать на какие скрытые сосояния при исходных определенных словах на языке ''A'' необходимо обратить больше внимания при переводе данного слова на язык ''B''.&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
*[[:Сверточные_нейронные_сети|Сверточные нейронные сети]]&lt;br /&gt;
*[[:Нейронные_сети,_перцептрон|Нейронные сети, перцептрон]]&lt;br /&gt;
*[[:Рекуррентные_нейронные_сети|Рекуррентные нейронные сети]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
*[https://www.coursera.org/lecture/nlp-sequence-models/attention-model-lSwVa Лекция Andrew Ng о механизме внимания в NLP]&lt;br /&gt;
*[https://towardsdatascience.com/intuitive-understanding-of-attention-mechanism-in-deep-learning-6c9482aecf4f Статья с подробно разборанными примерами и кодом на ''Python'' и ''TensorFlow'']&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Нейронные сети]]&lt;br /&gt;
[[Категория: Рекуррентные нейронные сети]]&lt;/div&gt;</summary>
		<author><name>Gpevnev</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=73075</id>
		<title>Механизм внимания</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=73075"/>
				<updated>2020-03-21T22:07:43Z</updated>
		
		<summary type="html">&lt;p&gt;Gpevnev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Механизм внимания в рекуррентных нейронных сетях''' (англ. ''attention mechanism'', ''attention model'') {{---}} дополнительный слой используемый в [[:Рекуррентные_нейронные_сети|рекуррентных нейронных сетях (сокращенно ''RNN'')]] для &amp;quot;обращения внимания&amp;quot; последующих слоев сети на скрытое состояние нейронной сети &amp;lt;math&amp;gt;h_t&amp;lt;/math&amp;gt; в момент времени &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Изначально механизм внимания был представлен в [https://arxiv.org/abs/1409.0473| статье описывыющей данную технику] и ее [[:Механизм_внимания#Пример использования для архитектуры Seq2Seq|применение именно в ''Seq2Seq'' сетях]], и лишь позже был использован в [https://arxiv.org/abs/1502.03044| статье применительно к генерации описания изображений].&lt;br /&gt;
&lt;br /&gt;
== Обобщенное описание ==&lt;br /&gt;
[[File:AttentionGeneral.png|350px|thumb|Обобщенное описание механизма внимания]]&lt;br /&gt;
[[:Рекуррентные_нейронные_сети|Рекуррентные нейронные сети]] используются при обработке данных, для которых важна их последовательность. В классическом случае применения [[:Рекуррентные_нейронные_сети|RNN]] результатом является только последнее скрытое состояние &amp;lt;math&amp;gt;h_m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; {{---}} длина последовательности входных данных. Использование механизма внимания позволяет использовать информацию полученную не только из последнего скрытого состояниния, но и любого скрытого состояния &amp;lt;math&amp;gt;h_t&amp;lt;/math&amp;gt; для любого &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Обычно слой использующийся для механизма внимания представляет собой обычную, чаще всего однослойную, нейронную сеть на вход которой подаются &amp;lt;math&amp;gt;h_t, t = 1 \  \ldots m&amp;lt;/math&amp;gt;, а также вектор &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; в котором содержится некий контекст зависящий от конкретно задачи (пример &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; для задачи машинного перевода использующего ''Seq2Seq'' арихитектуру). &lt;br /&gt;
&lt;br /&gt;
Выходом данного слоя будет являтся вектор &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; (англ. ''score'') {{---}} оценки на основании которых на скрытое состояние &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; будет &amp;quot;обращено внимание&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Далее для нормализации значений &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; используется &amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt;[https://ru.wikipedia.org/wiki/Softmax Функция softmax]&amp;lt;/ref&amp;gt;. Тогда &amp;lt;math&amp;gt;e = softmax(s)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt; здесь используется благодоря своим свойствам: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;\forall s:\  \sum_{i=1}^n softmax(s)_i = 1, &amp;lt;/math&amp;gt;&lt;br /&gt;
*&amp;lt;math&amp;gt;\forall s,\ i: \ softmax(s)_i &amp;gt;= 0 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Далее считается &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; (англ. ''context vector'') &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;с = \sum_{i=1}^m e_i h_i&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результатом работы слоя внимания является &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; который, содержит в себе информацию обо всех скрытых состоянях &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; пропорционально оценке &amp;lt;math&amp;gt;e_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Пример использования для архитектуры ''Seq2Seq'' ==&lt;br /&gt;
Пример добавления механизма внимания в ''Seq2Seq'' сеть поможет лучше понять его предназначение. &lt;br /&gt;
Изначально в оригинальной статье&amp;lt;ref&amp;gt;[https://arxiv.org/abs/1409.0473|Neural Machine Translation by Jointly Learning to Align and Translate]&amp;lt;/ref&amp;gt; применяется механизм внимания в контексте именно Seq2Seq сети.&lt;br /&gt;
&lt;br /&gt;
Несмотря на то, что нейронные сети рассматриваются как &amp;quot;черный ящик&amp;quot; и интерпретировать их внутренности в понятных человеку терминах часто невозможно, все же механизм внимания интуитивно понятный людям смог улучшить результаты машинного перевода для алгоритма используемого в статье.&lt;br /&gt;
&lt;br /&gt;
=== Базовая архитектура ''Seq2Seq'' ===&lt;br /&gt;
[[File:Seq2SeqBasic.png|450px|thumb|Пример работы базовой ''Seq2Seq'' сети]]&lt;br /&gt;
Данный пример рассматривает применение механизма внимания в задаче машинного перевода в применении к архитектуре ''Seq2Seq''.&lt;br /&gt;
&lt;br /&gt;
''Seq2Seq'' состоит из двух [[:Рекуррентные_нейронные_сети|RNN]] {{---}} ''Энкодера'' и ''Декодера''.&lt;br /&gt;
&lt;br /&gt;
''Энкодер'' {{---}} принимает предложение на языке ''A'' и сжимает его в вектор скрытого состояния.&lt;br /&gt;
&lt;br /&gt;
''Декодер'' {{---}} выдает слово на языке ''B'', принимает последнее скрытое состояние энкодера и предыдущее предыдущее предсказаное слово.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Рассмотрим пример работы ''Seq2Seq'' сети:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''A''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние энкодера.&lt;br /&gt;
&lt;br /&gt;
''Блоки энкодера (зеленый)'' {{---}} блоки энкодера получающие на вход &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; и передающие скрытое состояние &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; на следующую итерацию.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние декодера.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''B''.&lt;br /&gt;
&lt;br /&gt;
''Блоки декодера (фиолетовый)'' {{---}} блоки декодера получающие на вход &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt; или специальный токен '''start''' в случае первой итерации и возвращаюшие &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''B''. &lt;br /&gt;
Передают &amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние декодера на следующую итерацию. &lt;br /&gt;
Перевод считается завершенным при &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt;, равном специальному токену '''end'''.&lt;br /&gt;
&lt;br /&gt;
=== Применение механизма внимания для ''Seq2Seq'' ===&lt;br /&gt;
При добавлении механизма в данную архитектуру между [[:Рекуррентные_нейронные_сети|RNN]] ''Энкодер'' и ''Декодер'' слоя механизма внимания получится следуюшая схема:&lt;br /&gt;
&lt;br /&gt;
[[File:Seq2SeqAttention.png|450px|thumb|Пример работы ''Seq2Seq'' сети с механизмом внимания]]&lt;br /&gt;
&lt;br /&gt;
Здесь &amp;lt;math&amp;gt;x_i, h_i, d_i, y_i&amp;lt;/math&amp;gt; имееют те же назначения, что и в варианте без механизма внимания.&lt;br /&gt;
&lt;br /&gt;
''Аггрегатор скрытых состояний энкодера (желтый)'' {{---}} аггрегирует в себе все вектора &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; и возвращает всю последовательность векторов &amp;lt;math&amp;gt;h = [h_1, h_2, h_3, h_4]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt; {{---}} вектор контекста на итерации &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Блоки механизма внимания (красный)'' {{---}} механизм внимания. Принимает &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;d_{i - 1}&amp;lt;/math&amp;gt;, возвращает &amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Блоки декодера (фиолетовый)'' {{---}} по сравнению с обычной ''Seq2Seq'' сетью меняются входные данные. Теперь на итерации &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; на вход подается не &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt;, а конкатенация &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом при помощи механизма внимания достигается &amp;quot;фокусирование&amp;quot; декодера на определенных скрытых состояниях. В случаях машинного перевода эта возможность помогает декодеру предсказывать на какие скрытые сосояния при исходных определенных словах на языке ''A'' необходимо обратить больше внимания при переводе данного слова на язык ''B''.&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
*[[:Сверточные_нейронные_сети|Сверточные нейронные сети]]&lt;br /&gt;
*[[:Нейронные_сети,_перцептрон|Нейронные сети, перцептрон]]&lt;br /&gt;
*[[:Рекуррентные_нейронные_сети|Рекуррентные нейронные сети]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
*[https://www.coursera.org/lecture/nlp-sequence-models/attention-model-lSwVa Лекция Andrew Ng о механизме внимания в NLP]&lt;br /&gt;
*[https://towardsdatascience.com/intuitive-understanding-of-attention-mechanism-in-deep-learning-6c9482aecf4f Статья с подробно разборанными примерами и кодом на ''Python'' и ''TensorFlow'']&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Нейронные сети]]&lt;br /&gt;
[[Категория: Рекуррентные нейронные сети]]&lt;/div&gt;</summary>
		<author><name>Gpevnev</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=73074</id>
		<title>Механизм внимания</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=73074"/>
				<updated>2020-03-21T22:06:54Z</updated>
		
		<summary type="html">&lt;p&gt;Gpevnev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Механизм внимания в рекуррентных нейронных сетях''' (англ. ''attention mechanism'', ''attention model'') {{---}} дополнительный слой используемый в [[:Рекуррентные_нейронные_сети|рекуррентных нейронных сетях (сокращенно ''RNN'')]] для &amp;quot;обращения внимания&amp;quot; последующих слоев сети на скрытое состояние нейронной сети &amp;lt;math&amp;gt;h_t&amp;lt;/math&amp;gt; в момент времени &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Изначально механизм внимания был представлен в [https://arxiv.org/abs/1409.0473| статье описывыющей данную технику] и ее [[:Механизм_внимания#Пример использования для архитектуры Seq2Seq|применение именно в ''Seq2Seq'' сетях]], и лишь позже был использован в [https://arxiv.org/abs/1502.03044| статье применительно к генерации описания изображений].&lt;br /&gt;
&lt;br /&gt;
== Обобщенное описание ==&lt;br /&gt;
[[File:AttentionGeneral.png|350px|thumb|Обобщенное описание механизма внимания]]&lt;br /&gt;
[[:Рекуррентные_нейронные_сети|Рекуррентные нейронные сети]] используются при обработке данных, для которых важна их последовательность. В классическом случае применения [[:Рекуррентные_нейронные_сети|RNN]] результатом является только последнее скрытое состояние &amp;lt;math&amp;gt;h_m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; {{---}} длина последовательности входных данных. Использование механизма внимания позволяет использовать информацию полученную не только из последнего скрытого состояниния, но и любого скрытого состояния &amp;lt;math&amp;gt;h_t&amp;lt;/math&amp;gt; для любого &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Обычно слой использующийся для механизма внимания представляет собой обычную, чаще всего однослойную, нейронную сеть на вход которой подаются &amp;lt;math&amp;gt;h_t, t = 1 \  \ldots m&amp;lt;/math&amp;gt;, а также вектор &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; в котором содержится некий контекст зависящий от конкретно задачи (пример &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; для задачи машинного перевода использующего ''Seq2Seq'' арихитектуру). &lt;br /&gt;
&lt;br /&gt;
Выходом данного слоя будет являтся вектор &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; (англ. ''score'') {{---}} оценки на основании которых на скрытое состояние &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; будет &amp;quot;обращено внимание&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Далее для нормализации значений &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; используется &amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt;[https://ru.wikipedia.org/wiki/Softmax | Функция softmax {{--}} Википедия]&amp;lt;/ref&amp;gt;. Тогда &amp;lt;math&amp;gt;e = softmax(s)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt; здесь используется благодоря своим свойствам: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;\forall s:\  \sum_{i=1}^n softmax(s)_i = 1, &amp;lt;/math&amp;gt;&lt;br /&gt;
*&amp;lt;math&amp;gt;\forall s,\ i: \ softmax(s)_i &amp;gt;= 0 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Далее считается &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; (англ. ''context vector'') &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;с = \sum_{i=1}^m e_i h_i&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результатом работы слоя внимания является &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; который, содержит в себе информацию обо всех скрытых состоянях &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; пропорционально оценке &amp;lt;math&amp;gt;e_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Пример использования для архитектуры ''Seq2Seq'' ==&lt;br /&gt;
Пример добавления механизма внимания в ''Seq2Seq'' сеть поможет лучше понять его предназначение. &lt;br /&gt;
Изначально в оригинальной статье&amp;lt;ref&amp;gt;[https://arxiv.org/abs/1409.0473|Neural Machine Translation by Jointly Learning to Align and Translate]&amp;lt;/ref&amp;gt; применяется механизм внимания в контексте именно Seq2Seq сети.&lt;br /&gt;
&lt;br /&gt;
Несмотря на то, что нейронные сети рассматриваются как &amp;quot;черный ящик&amp;quot; и интерпретировать их внутренности в понятных человеку терминах часто невозможно, все же механизм внимания интуитивно понятный людям смог улучшить результаты машинного перевода для алгоритма используемого в статье.&lt;br /&gt;
&lt;br /&gt;
=== Базовая архитектура ''Seq2Seq'' ===&lt;br /&gt;
[[File:Seq2SeqBasic.png|450px|thumb|Пример работы базовой ''Seq2Seq'' сети]]&lt;br /&gt;
Данный пример рассматривает применение механизма внимания в задаче машинного перевода в применении к архитектуре ''Seq2Seq''.&lt;br /&gt;
&lt;br /&gt;
''Seq2Seq'' состоит из двух [[:Рекуррентные_нейронные_сети|RNN]] {{---}} ''Энкодера'' и ''Декодера''.&lt;br /&gt;
&lt;br /&gt;
''Энкодер'' {{---}} принимает предложение на языке ''A'' и сжимает его в вектор скрытого состояния.&lt;br /&gt;
&lt;br /&gt;
''Декодер'' {{---}} выдает слово на языке ''B'', принимает последнее скрытое состояние энкодера и предыдущее предыдущее предсказаное слово.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Рассмотрим пример работы ''Seq2Seq'' сети:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''A''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние энкодера.&lt;br /&gt;
&lt;br /&gt;
''Блоки энкодера (зеленый)'' {{---}} блоки энкодера получающие на вход &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; и передающие скрытое состояние &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; на следующую итерацию.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние декодера.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''B''.&lt;br /&gt;
&lt;br /&gt;
''Блоки декодера (фиолетовый)'' {{---}} блоки декодера получающие на вход &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt; или специальный токен '''start''' в случае первой итерации и возвращаюшие &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''B''. &lt;br /&gt;
Передают &amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние декодера на следующую итерацию. &lt;br /&gt;
Перевод считается завершенным при &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt;, равном специальному токену '''end'''.&lt;br /&gt;
&lt;br /&gt;
=== Применение механизма внимания для ''Seq2Seq'' ===&lt;br /&gt;
При добавлении механизма в данную архитектуру между [[:Рекуррентные_нейронные_сети|RNN]] ''Энкодер'' и ''Декодер'' слоя механизма внимания получится следуюшая схема:&lt;br /&gt;
&lt;br /&gt;
[[File:Seq2SeqAttention.png|450px|thumb|Пример работы ''Seq2Seq'' сети с механизмом внимания]]&lt;br /&gt;
&lt;br /&gt;
Здесь &amp;lt;math&amp;gt;x_i, h_i, d_i, y_i&amp;lt;/math&amp;gt; имееют те же назначения, что и в варианте без механизма внимания.&lt;br /&gt;
&lt;br /&gt;
''Аггрегатор скрытых состояний энкодера (желтый)'' {{---}} аггрегирует в себе все вектора &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; и возвращает всю последовательность векторов &amp;lt;math&amp;gt;h = [h_1, h_2, h_3, h_4]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt; {{---}} вектор контекста на итерации &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Блоки механизма внимания (красный)'' {{---}} механизм внимания. Принимает &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;d_{i - 1}&amp;lt;/math&amp;gt;, возвращает &amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Блоки декодера (фиолетовый)'' {{---}} по сравнению с обычной ''Seq2Seq'' сетью меняются входные данные. Теперь на итерации &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; на вход подается не &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt;, а конкатенация &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом при помощи механизма внимания достигается &amp;quot;фокусирование&amp;quot; декодера на определенных скрытых состояниях. В случаях машинного перевода эта возможность помогает декодеру предсказывать на какие скрытые сосояния при исходных определенных словах на языке ''A'' необходимо обратить больше внимания при переводе данного слова на язык ''B''.&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
*[[:Сверточные_нейронные_сети|Сверточные нейронные сети]]&lt;br /&gt;
*[[:Нейронные_сети,_перцептрон|Нейронные сети, перцептрон]]&lt;br /&gt;
*[[:Рекуррентные_нейронные_сети|Рекуррентные нейронные сети]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
*[https://www.coursera.org/lecture/nlp-sequence-models/attention-model-lSwVa Лекция Andrew Ng о механизме внимания в NLP]&lt;br /&gt;
*[https://towardsdatascience.com/intuitive-understanding-of-attention-mechanism-in-deep-learning-6c9482aecf4f Статья с подробно разборанными примерами и кодом на ''Python'' и ''TensorFlow'']&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Нейронные сети]]&lt;br /&gt;
[[Категория: Рекуррентные нейронные сети]]&lt;/div&gt;</summary>
		<author><name>Gpevnev</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=73073</id>
		<title>Механизм внимания</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=73073"/>
				<updated>2020-03-21T21:58:55Z</updated>
		
		<summary type="html">&lt;p&gt;Gpevnev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Механизм внимания в рекуррентных нейронных сетях''' (англ. ''attention mechanism'', ''attention model'') {{---}} дополнительный слой используемый в [[:Рекуррентные_нейронные_сети|рекуррентных нейронных сетях (сокращенно ''RNN'')]] для &amp;quot;обращения внимания&amp;quot; последующих слоев сети на скрытое состояние нейронной сети &amp;lt;math&amp;gt;h_t&amp;lt;/math&amp;gt; в момент времени &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Изначально механизм внимания был представлен в [https://arxiv.org/abs/1409.0473| статье описывыющей данную технику] и ее [[:Механизм_внимания#Пример использования для архитектуры Seq2Seq|применение именно в ''Seq2Seq'' сетях]], и лишь позже был использован в [https://arxiv.org/abs/1502.03044| статье применительно к генерации описания изображений].&lt;br /&gt;
&lt;br /&gt;
== Обобщенное описание ==&lt;br /&gt;
[[File:AttentionGeneral.png|350px|thumb|Обобщенное описание механизма внимания]]&lt;br /&gt;
[[:Рекуррентные_нейронные_сети|Рекуррентные нейронные сети]] используются при обработке данных, для которых важна их последовательность. В классическом случае применения [[:Рекуррентные_нейронные_сети|RNN]] результатом является только последнее скрытое состояние &amp;lt;math&amp;gt;h_m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; {{---}} длина последовательности входных данных. Использование механизма внимания позволяет использовать информацию полученную не только из последнего скрытого состояниния, но и любого скрытого состояния &amp;lt;math&amp;gt;h_t&amp;lt;/math&amp;gt; для любого &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Обычно слой использующийся для механизма внимания представляет собой обычную, чаще всего однослойную, нейронную сеть на вход которой подаются &amp;lt;math&amp;gt;h_t, t = 1 \  \ldots m&amp;lt;/math&amp;gt;, а также вектор &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; в котором содержится некий контекст зависящий от конкретно задачи (пример &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; для задачи машинного перевода использующего ''Seq2Seq'' арихитектуру). &lt;br /&gt;
&lt;br /&gt;
Выходом данного слоя будет являтся вектор &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; (англ. ''score'') {{---}} оценки на основании которых на скрытое состояние &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; будет &amp;quot;обращено внимание&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Далее для нормализации значений &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; используется &amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt;. Тогда &amp;lt;math&amp;gt;e = softmax(s)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt; здесь используется благодоря своим свойствам: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;\forall s:\  \sum_{i=1}^n softmax(s)_i = 1, &amp;lt;/math&amp;gt;&lt;br /&gt;
*&amp;lt;math&amp;gt;\forall s,\ i: \ softmax(s)_i &amp;gt;= 0 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Далее считается &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; (англ. ''context vector'') &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;с = \sum_{i=1}^m e_i h_i&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результатом работы слоя внимания является &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; который, содержит в себе информацию обо всех скрытых состоянях &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; пропорционально оценке &amp;lt;math&amp;gt;e_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Пример использования для архитектуры ''Seq2Seq'' ==&lt;br /&gt;
Пример добавления механизма внимания в ''Seq2Seq'' сеть поможет лучше понять его предназначение. &lt;br /&gt;
Изначально в оригинальной статье&amp;lt;ref&amp;gt;[https://arxiv.org/abs/1409.0473|Neural Machine Translation by Jointly Learning to Align and Translate]&amp;lt;/ref&amp;gt; применяется механизм внимания в контексте именно Seq2Seq сети.&lt;br /&gt;
&lt;br /&gt;
Несмотря на то, что нейронные сети рассматриваются как &amp;quot;черный ящик&amp;quot; и интерпретировать их внутренности в понятных человеку терминах часто невозможно, все же механизм внимания интуитивно понятный людям смог улучшить результаты машинного перевода для алгоритма используемого в статье.&lt;br /&gt;
&lt;br /&gt;
=== Базовая архитектура ''Seq2Seq'' ===&lt;br /&gt;
[[File:Seq2SeqBasic.png|450px|thumb|Пример работы базовой ''Seq2Seq'' сети]]&lt;br /&gt;
Данный пример рассматривает применение механизма внимания в задаче машинного перевода в применении к архитектуре ''Seq2Seq''.&lt;br /&gt;
&lt;br /&gt;
''Seq2Seq'' состоит из двух [[:Рекуррентные_нейронные_сети|RNN]] {{---}} ''Энкодера'' и ''Декодера''.&lt;br /&gt;
&lt;br /&gt;
''Энкодер'' {{---}} принимает предложение на языке ''A'' и сжимает его в вектор скрытого состояния.&lt;br /&gt;
&lt;br /&gt;
''Декодер'' {{---}} выдает слово на языке ''B'', принимает последнее скрытое состояние энкодера и предыдущее предыдущее предсказаное слово.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Рассмотрим пример работы ''Seq2Seq'' сети:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''A''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние энкодера.&lt;br /&gt;
&lt;br /&gt;
''Блоки энкодера (зеленый)'' {{---}} блоки энкодера получающие на вход &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; и передающие скрытое состояние &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; на следующую итерацию.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние декодера.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''B''.&lt;br /&gt;
&lt;br /&gt;
''Блоки декодера (фиолетовый)'' {{---}} блоки декодера получающие на вход &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt; или специальный токен '''start''' в случае первой итерации и возвращаюшие &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''B''. &lt;br /&gt;
Передают &amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние декодера на следующую итерацию. &lt;br /&gt;
Перевод считается завершенным при &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt;, равном специальному токену '''end'''.&lt;br /&gt;
&lt;br /&gt;
=== Применение механизма внимания для ''Seq2Seq'' ===&lt;br /&gt;
При добавлении механизма в данную архитектуру между [[:Рекуррентные_нейронные_сети|RNN]] ''Энкодер'' и ''Декодер'' слоя механизма внимания получится следуюшая схема:&lt;br /&gt;
&lt;br /&gt;
[[File:Seq2SeqAttention.png|450px|thumb|Пример работы ''Seq2Seq'' сети с механизмом внимания]]&lt;br /&gt;
&lt;br /&gt;
Здесь &amp;lt;math&amp;gt;x_i, h_i, d_i, y_i&amp;lt;/math&amp;gt; имееют те же назначения, что и в варианте без механизма внимания.&lt;br /&gt;
&lt;br /&gt;
''Аггрегатор скрытых состояний энкодера (желтый)'' {{---}} аггрегирует в себе все вектора &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; и возвращает всю последовательность векторов &amp;lt;math&amp;gt;h = [h_1, h_2, h_3, h_4]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt; {{---}} вектор контекста на итерации &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Блоки механизма внимания (красный)'' {{---}} механизм внимания. Принимает &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;d_{i - 1}&amp;lt;/math&amp;gt;, возвращает &amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Блоки декодера (фиолетовый)'' {{---}} по сравнению с обычной ''Seq2Seq'' сетью меняются входные данные. Теперь на итерации &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; на вход подается не &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt;, а конкатенация &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом при помощи механизма внимания достигается &amp;quot;фокусирование&amp;quot; декодера на определенных скрытых состояниях. В случаях машинного перевода эта возможность помогает декодеру предсказывать на какие скрытые сосояния при исходных определенных словах на языке ''A'' необходимо обратить больше внимания при переводе данного слова на язык ''B''.&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
*[[:Сверточные_нейронные_сети|Сверточные нейронные сети]]&lt;br /&gt;
*[[:Нейронные_сети,_перцептрон|Нейронные сети, перцептрон]]&lt;br /&gt;
*[[:Рекуррентные_нейронные_сети|Рекуррентные нейронные сети]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
*[https://www.coursera.org/lecture/nlp-sequence-models/attention-model-lSwVa Лекция Andrew Ng о механизме внимания в NLP]&lt;br /&gt;
*[https://towardsdatascience.com/intuitive-understanding-of-attention-mechanism-in-deep-learning-6c9482aecf4f Статья с подробно разборанными примерами и кодом на ''Python'' и ''TensorFlow'']&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Нейронные сети]]&lt;br /&gt;
[[Категория: Рекуррентные нейронные сети]]&lt;/div&gt;</summary>
		<author><name>Gpevnev</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=73072</id>
		<title>Механизм внимания</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=73072"/>
				<updated>2020-03-21T21:52:21Z</updated>
		
		<summary type="html">&lt;p&gt;Gpevnev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Механизм внимания в рекуррентных нейронных сетях''' (англ. ''attention mechanism'', ''attention model'') {{---}} дополнительный слой используемый в [[:Рекуррентные_нейронные_сети|рекуррентных нейронных сетях (сокращенно ''RNN'')]] для &amp;quot;обращения внимания&amp;quot; последующих слоев сети на скрытое состояние нейронной сети &amp;lt;math&amp;gt;h_t&amp;lt;/math&amp;gt; в момент времени &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Изначально механизм внимания был представлен в [https://arxiv.org/abs/1409.0473| статье описывыющей данную технику] и ее [[:Механизм_внимания#Пример использования для архитектуры Seq2Seq|применение именно в ''Seq2Seq'' сетях]], и лишь позже был использован в [https://arxiv.org/abs/1502.03044| статье применительно к генерации описания изображений].&lt;br /&gt;
&lt;br /&gt;
== Обобщенное описание ==&lt;br /&gt;
[[File:AttentionGeneral.png|350px|thumb|Обобщенное описание механизма внимания]]&lt;br /&gt;
[[:Рекуррентные_нейронные_сети|Рекуррентные нейронные сети]] используются при обработке данных, для которых важна их последовательность. В классическом случае применения [[:Рекуррентные_нейронные_сети|RNN]] результатом является только последнее скрытое состояние &amp;lt;math&amp;gt;h_m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; {{---}} длина последовательности входных данных. Использование механизма внимания позволяет использовать информацию полученную не только из последнего скрытого состояниния, но и любого скрытого состояния &amp;lt;math&amp;gt;h_t&amp;lt;/math&amp;gt; для любого &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Обычно слой использующийся для механизма внимания представляет собой обычную, чаще всего однослойную, нейронную сеть на вход которой подаются &amp;lt;math&amp;gt;h_t, t = 1 \  \ldots m&amp;lt;/math&amp;gt;, а также вектор &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; в котором содержится некий контекст зависящий от конкретно задачи (пример &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; для задачи машинного перевода использующего ''Seq2Seq'' арихитектуру). &lt;br /&gt;
&lt;br /&gt;
Выходом данного слоя будет являтся вектор &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; (англ. ''score'') {{---}} оценки на основании которых на скрытое состояние &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; будет &amp;quot;обращено внимание&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Далее для нормализации значений &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; используется &amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt;. Тогда &amp;lt;math&amp;gt;e = softmax(s)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt; здесь используется благодоря своим свойствам: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;\forall s:\  \sum_{i=1}^n softmax(s)_i = 1, &amp;lt;/math&amp;gt;&lt;br /&gt;
*&amp;lt;math&amp;gt;\forall s,\ i: \ softmax(s)_i &amp;gt;= 0 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Далее считается &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; (англ. ''context vector'') &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;с = \sum_{i=1}^m e_i h_i&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результатом работы слоя внимания является &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; который, содержит в себе информацию обо всех скрытых состоянях &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; пропорционально оценке &amp;lt;math&amp;gt;e_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Пример использования для архитектуры ''Seq2Seq'' ==&lt;br /&gt;
Пример добавления механизма внимания в ''Seq2Seq'' сеть поможет лучше понять его предназначение. &lt;br /&gt;
Изначально в оригинальной статье&amp;lt;ref&amp;gt;[https://arxiv.org/abs/1409.0473|Neural Machine Translation by Jointly Learning to Align and Translate]&amp;lt;/ref&amp;gt; применяется механизм внимания в контексте именно Seq2Seq сети.&lt;br /&gt;
&lt;br /&gt;
Несмотря на то, что нейронные сети рассматриваются как &amp;quot;черный ящик&amp;quot; и интерпретировать их внутренности в понятных человеку терминах часто невозможно, все же механизм внимания интуитивно понятный людям смог улучшить результаты машинного перевода для алгоритма используемого в статье.&lt;br /&gt;
&lt;br /&gt;
=== Базовая архитектура ''Seq2Seq'' ===&lt;br /&gt;
[[File:Seq2SeqBasic.png|450px|thumb|Пример работы базовой ''Seq2Seq'' сети]]&lt;br /&gt;
Данный пример рассматривает применение механизма внимания в задаче машинного перевода в применении к архитектуре ''Seq2Seq''.&lt;br /&gt;
&lt;br /&gt;
''Seq2Seq'' состоит из двух [[:Рекуррентные_нейронные_сети|RNN]] {{---}} ''Encoder'' и ''Decoder''.&lt;br /&gt;
&lt;br /&gt;
''Encoder'' {{---}} принимает предложение на языке ''A'' и сжимает его в вектор скрытого состояния.&lt;br /&gt;
&lt;br /&gt;
''Decoder'' {{---}} выдает слово на языке ''B'', принимает последнее скрытое состояние энкодера и предыдущее предыдущее предсказаное слово.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Рассмотрим пример работы ''Seq2Seq'' сети:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''A''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние энкодера.&lt;br /&gt;
&lt;br /&gt;
''Блоки энкодера (зеленый)'' {{---}} блоки энкодера получающие на вход &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; и передающие скрытое состояние &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; на следующую итерацию.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние декодера.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''B''.&lt;br /&gt;
&lt;br /&gt;
''Блоки декодера (фиолетовый)'' {{---}} блоки декодера получающие на вход &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt; или специальный токен '''start''' в случае первой итерации и возвращаюшие &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''B''. &lt;br /&gt;
Передают &amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние декодера на следующую итерацию. &lt;br /&gt;
Перевод считается завершенным при &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt;, равном специальному токену '''end'''.&lt;br /&gt;
&lt;br /&gt;
=== Применение механизма внимания для ''Seq2Seq'' ===&lt;br /&gt;
При добавлении механизма в данную архитектуру между [[:Рекуррентные_нейронные_сети|RNN]] ''Encoder'' и ''Decoder'' слоя механизма внимания получится следуюшая схема:&lt;br /&gt;
&lt;br /&gt;
[[File:Seq2SeqAttention.png|450px|thumb|Пример работы ''Seq2Seq'' сети с механизмом внимания]]&lt;br /&gt;
&lt;br /&gt;
Здесь &amp;lt;math&amp;gt;x_i, h_i, d_i, y_i&amp;lt;/math&amp;gt; имееют те же назначения, что и в варианте без механизма внимания.&lt;br /&gt;
&lt;br /&gt;
''Аггрегатор скрытых состояний энкодера (желтый)'' {{---}} аггрегирует в себе все вектора &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; и возвращает всю последовательность векторов &amp;lt;math&amp;gt;h = [h_1, h_2, h_3, h_4]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt; {{---}} вектор контекста на итерации &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Блоки механизма внимания (красный)'' {{---}} механизм внимания. Принимает &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;d_{i - 1}&amp;lt;/math&amp;gt;, возвращает &amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Блоки декодера (фиолетовый)'' {{---}} по сравнению с обычной ''Seq2Seq'' сетью меняются входные данные. Теперь на итерации &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; на вход подается не &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt;, а конкатенация &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом при помощи механизма внимания достигается &amp;quot;фокусирование&amp;quot; декодера на определенных скрытых состояниях. В случаях машинного перевода эта возможность помогает декодеру предсказывать на какие скрытые сосояния при исходных определенных словах на языке ''A'' необходимо обратить больше внимания при переводе данного слова на язык ''B''.&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
*[[:Сверточные_нейронные_сети|Сверточные нейронные сети]]&lt;br /&gt;
*[[:Нейронные_сети,_перцептрон|Нейронные сети, перцептрон]]&lt;br /&gt;
*[[:Рекуррентные_нейронные_сети|Рекуррентные нейронные сети]]&lt;br /&gt;
&lt;br /&gt;
==Источники==&lt;br /&gt;
*[https://www.coursera.org/lecture/nlp-sequence-models/attention-model-lSwVa Лекция Andrew Ng о механизме внимания в NLP]&lt;br /&gt;
*[https://towardsdatascience.com/intuitive-understanding-of-attention-mechanism-in-deep-learning-6c9482aecf4f Статья с подробно разборанными примерами и кодом на ''Python'' и ''TensorFlow'']&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Нейронные сети]]&lt;br /&gt;
[[Категория: Рекуррентные нейронные сети]]&lt;/div&gt;</summary>
		<author><name>Gpevnev</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=73071</id>
		<title>Механизм внимания</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=73071"/>
				<updated>2020-03-21T21:50:40Z</updated>
		
		<summary type="html">&lt;p&gt;Gpevnev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Механизм внимания в рекуррентных нейронных сетях''' (англ. ''attention mechanism'', ''attention model'') {{---}} дополнительный слой используемый в [[:Рекуррентные_нейронные_сети|рекуррентных нейронных сетях (сокращенно 'RNN')]] для &amp;quot;обращения внимания&amp;quot; последующих слоев сети на скрытое состояние нейронной сети &amp;lt;math&amp;gt;h_t&amp;lt;/math&amp;gt; в момент времени &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Изначально механизм внимания был представлен в [https://arxiv.org/abs/1409.0473| статье описывыющей данную технику] и ее [[:Механизм_внимания#Пример использования для архитектуры Seq2Seq|применение именно в ''Seq2Seq'' сетях]], и лишь позже был использован в [https://arxiv.org/abs/1502.03044| статье применительно к генерации описания изображений].&lt;br /&gt;
&lt;br /&gt;
== Обобщенное описание ==&lt;br /&gt;
[[File:AttentionGeneral.png|350px|thumb|Обобщенное описание механизма внимания]]&lt;br /&gt;
[[:Рекуррентные_нейронные_сети|Рекуррентные нейронные сети]] используются при обработке данных, для которых важна их последовательность. В классическом случае применения [[:Рекуррентные_нейронные_сети|RNN]] результатом является только последнее скрытое состояние &amp;lt;math&amp;gt;h_m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; {{---}} длина последовательности входных данных. Использование механизма внимания позволяет использовать информацию полученную не только из последнего скрытого состояниния, но и любого скрытого состояния &amp;lt;math&amp;gt;h_t&amp;lt;/math&amp;gt; для любого &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Обычно слой использующийся для механизма внимания представляет собой обычную, чаще всего однослойную, нейронную сеть на вход которой подаются &amp;lt;math&amp;gt;h_t, t = 1 \  \ldots m&amp;lt;/math&amp;gt;, а также вектор &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; в котором содержится некий контекст зависящий от конкретно задачи (пример &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; для задачи машинного перевода использующего ''Seq2Seq'' арихитектуру). &lt;br /&gt;
&lt;br /&gt;
Выходом данного слоя будет являтся вектор &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; (англ. ''score'') {{---}} оценки на основании которых на скрытое состояние &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; будет &amp;quot;обращено внимание&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Далее для нормализации значений &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; используется &amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt;. Тогда &amp;lt;math&amp;gt;e = softmax(s)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt; здесь используется благодоря своим свойствам: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;\forall s:\  \sum_{i=1}^n softmax(s)_i = 1, &amp;lt;/math&amp;gt;&lt;br /&gt;
*&amp;lt;math&amp;gt;\forall s,\ i: \ softmax(s)_i &amp;gt;= 0 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Далее считается &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; (англ. ''context vector'') &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;с = \sum_{i=1}^m e_i h_i&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результатом работы слоя внимания является &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; который, содержит в себе информацию обо всех скрытых состоянях &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; пропорционально оценке &amp;lt;math&amp;gt;e_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Пример использования для архитектуры ''Seq2Seq'' ==&lt;br /&gt;
Пример добавления механизма внимания в ''Seq2Seq'' сеть поможет лучше понять его предназначение. &lt;br /&gt;
Изначально в оригинальной статье&amp;lt;ref&amp;gt;[https://arxiv.org/abs/1409.0473|Neural Machine Translation by Jointly Learning to Align and Translate]&amp;lt;/ref&amp;gt; применяется механизм внимания в контексте именно Seq2Seq сети.&lt;br /&gt;
&lt;br /&gt;
Несмотря на то, что нейронные сети рассматриваются как &amp;quot;черный ящик&amp;quot; и интерпретировать их внутренности в понятных человеку терминах часто невозможно, все же механизм внимания интуитивно понятный людям смог улучшить результаты машинного перевода для алгоритма используемого в статье.&lt;br /&gt;
&lt;br /&gt;
=== Базовая архитектура ''Seq2Seq'' ===&lt;br /&gt;
[[File:Seq2SeqBasic.png|450px|thumb|Пример работы базовой ''Seq2Seq'' сети]]&lt;br /&gt;
Данный пример рассматривает применение механизма внимания в задаче машинного перевода в применении к архитектуре ''Seq2Seq''.&lt;br /&gt;
&lt;br /&gt;
''Seq2Seq'' состоит из двух [[:Рекуррентные_нейронные_сети|RNN]] {{---}} ''Encoder'' и ''Decoder''.&lt;br /&gt;
&lt;br /&gt;
''Encoder'' {{---}} принимает предложение на языке ''A'' и сжимает его в вектор скрытого состояния.&lt;br /&gt;
&lt;br /&gt;
''Decoder'' {{---}} выдает слово на языке ''B'', принимает последнее скрытое состояние энкодера и предыдущее предыдущее предсказаное слово.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Рассмотрим пример работы ''Seq2Seq'' сети:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''A''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние энкодера.&lt;br /&gt;
&lt;br /&gt;
''Блоки энкодера (зеленый)'' {{---}} блоки энкодера получающие на вход &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; и передающие скрытое состояние &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; на следующую итерацию.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние декодера.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''B''.&lt;br /&gt;
&lt;br /&gt;
''Блоки декодера (фиолетовый)'' {{---}} блоки декодера получающие на вход &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt; или специальный токен '''start''' в случае первой итерации и возвращаюшие &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''B''. &lt;br /&gt;
Передают &amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние декодера на следующую итерацию. &lt;br /&gt;
Перевод считается завершенным при &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt;, равном специальному токену '''end'''.&lt;br /&gt;
&lt;br /&gt;
=== Применение механизма внимания для ''Seq2Seq'' ===&lt;br /&gt;
При добавлении механизма в данную архитектуру между [[:Рекуррентные_нейронные_сети|RNN]] ''Encoder'' и ''Decoder'' слоя механизма внимания получится следуюшая схема:&lt;br /&gt;
&lt;br /&gt;
[[File:Seq2SeqAttention.png|450px|thumb|Пример работы ''Seq2Seq'' сети с механизмом внимания]]&lt;br /&gt;
&lt;br /&gt;
Здесь &amp;lt;math&amp;gt;x_i, h_i, d_i, y_i&amp;lt;/math&amp;gt; имееют те же назначения, что и в варианте без механизма внимания.&lt;br /&gt;
&lt;br /&gt;
''Аггрегатор скрытых состояний энкодера (желтый)'' {{---}} аггрегирует в себе все вектора &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; и возвращает всю последовательность векторов &amp;lt;math&amp;gt;h = [h_1, h_2, h_3, h_4]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt; {{---}} вектор контекста на итерации &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Блоки механизма внимания (красный)'' {{---}} механизм внимания. Принимает &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;d_{i - 1}&amp;lt;/math&amp;gt;, возвращает &amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Блоки декодера (фиолетовый)'' {{---}} по сравнению с обычной ''Seq2Seq'' сетью меняются входные данные. Теперь на итерации &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; на вход подается не &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt;, а конкатенация &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом при помощи механизма внимания достигается &amp;quot;фокусирование&amp;quot; декодера на определенных скрытых состояниях. В случаях машинного перевода эта возможность помогает декодеру предсказывать на какие скрытые сосояния при исходных определенных словах на языке ''A'' необходимо обратить больше внимания при переводе данного слова на язык ''B''.&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
*[[:Сверточные_нейронные_сети|Сверточные нейронные сети]]&lt;br /&gt;
*[[:Нейронные_сети,_перцептрон|Нейронные сети, перцептрон]]&lt;br /&gt;
*[[:Рекуррентные_нейронные_сети|Рекуррентные нейронные сети]]&lt;br /&gt;
&lt;br /&gt;
==Источники==&lt;br /&gt;
*[https://www.coursera.org/lecture/nlp-sequence-models/attention-model-lSwVa Лекция Andrew Ng о механизме внимания в NLP]&lt;br /&gt;
*[https://towardsdatascience.com/intuitive-understanding-of-attention-mechanism-in-deep-learning-6c9482aecf4f Статья с подробно разборанными примерами и кодом на ''Python'' и ''TensorFlow'']&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Нейронные сети]]&lt;br /&gt;
[[Категория: Рекуррентные нейронные сети]]&lt;/div&gt;</summary>
		<author><name>Gpevnev</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=73070</id>
		<title>Механизм внимания</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=73070"/>
				<updated>2020-03-21T21:49:54Z</updated>
		
		<summary type="html">&lt;p&gt;Gpevnev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Механизм внимания в рекуррентных нейронных сетях''' (англ. ''attention mechanism'', ''attention model'') {{---}} дополнительный слой используемый в [[:Рекуррентные_нейронные_сети|рекуррентных нейронных сетях (сокращенно 'RNN')]] для &amp;quot;обращения внимания&amp;quot; последующих слоев сети на скрытое состояние нейронной сети &amp;lt;math&amp;gt;h_t&amp;lt;/math&amp;gt; в момент времени &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Изначально механизм внимания был представлен в [https://arxiv.org/abs/1409.0473|статье описывыющей данную технику] и ее [[:Механизм_внимания#Пример использования для архитектуры Seq2Seq|применение именно в ''Seq2Seq'' сетях]], и лишь позже был использован в [https://arxiv.org/abs/1502.03044|статье применительно к генерации описания изображений].&lt;br /&gt;
&lt;br /&gt;
== Обобщенное описание ==&lt;br /&gt;
[[File:AttentionGeneral.png|350px|thumb|Обобщенное описание механизма внимания]]&lt;br /&gt;
[[:Рекуррентные_нейронные_сети|Рекуррентные нейронные сети]] используются при обработке данных, для которых важна их последовательность. В классическом случае применения [[:Рекуррентные_нейронные_сети|RNN]] результатом является только последнее скрытое состояние &amp;lt;math&amp;gt;h_m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; {{---}} длина последовательности входных данных. Использование механизма внимания позволяет использовать информацию полученную не только из последнего скрытого состояниния, но и любого скрытого состояния &amp;lt;math&amp;gt;h_t&amp;lt;/math&amp;gt; для любого &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Обычно слой использующийся для механизма внимания представляет собой обычную, чаще всего однослойную, нейронную сеть на вход которой подаются &amp;lt;math&amp;gt;h_t, t = 1 \  \ldots m&amp;lt;/math&amp;gt;, а также вектор &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; в котором содержится некий контекст зависящий от конкретно задачи (пример &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; для задачи машинного перевода использующего ''Seq2Seq'' арихитектуру). &lt;br /&gt;
&lt;br /&gt;
Выходом данного слоя будет являтся вектор &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; (англ. ''score'') {{---}} оценки на основании которых на скрытое состояние &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; будет &amp;quot;обращено внимание&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Далее для нормализации значений &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; используется &amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt;. Тогда &amp;lt;math&amp;gt;e = softmax(s)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt; здесь используется благодоря своим свойствам: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;\forall s:\  \sum_{i=1}^n softmax(s)_i = 1, &amp;lt;/math&amp;gt;&lt;br /&gt;
*&amp;lt;math&amp;gt;\forall s,\ i: \ softmax(s)_i &amp;gt;= 0 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Далее считается &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; (англ. ''context vector'') &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;с = \sum_{i=1}^m e_i h_i&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результатом работы слоя внимания является &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; который, содержит в себе информацию обо всех скрытых состоянях &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; пропорционально оценке &amp;lt;math&amp;gt;e_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Пример использования для архитектуры ''Seq2Seq'' ==&lt;br /&gt;
Пример добавления механизма внимания в ''Seq2Seq'' сеть поможет лучше понять его предназначение. &lt;br /&gt;
Изначально в оригинальной статье&amp;lt;ref&amp;gt;[https://arxiv.org/abs/1409.0473|Neural Machine Translation by Jointly Learning to Align and Translate]&amp;lt;/ref&amp;gt; применяется механизм внимания в контексте именно Seq2Seq сети.&lt;br /&gt;
&lt;br /&gt;
Несмотря на то, что нейронные сети рассматриваются как &amp;quot;черный ящик&amp;quot; и интерпретировать их внутренности в понятных человеку терминах часто невозможно, все же механизм внимания интуитивно понятный людям смог улучшить результаты машинного перевода для алгоритма используемого в статье.&lt;br /&gt;
&lt;br /&gt;
=== Базовая архитектура ''Seq2Seq'' ===&lt;br /&gt;
[[File:Seq2SeqBasic.png|450px|thumb|Пример работы базовой ''Seq2Seq'' сети]]&lt;br /&gt;
Данный пример рассматривает применение механизма внимания в задаче машинного перевода в применении к архитектуре ''Seq2Seq''.&lt;br /&gt;
&lt;br /&gt;
''Seq2Seq'' состоит из двух [[:Рекуррентные_нейронные_сети|RNN]] {{---}} ''Encoder'' и ''Decoder''.&lt;br /&gt;
&lt;br /&gt;
''Encoder'' {{---}} принимает предложение на языке ''A'' и сжимает его в вектор скрытого состояния.&lt;br /&gt;
&lt;br /&gt;
''Decoder'' {{---}} выдает слово на языке ''B'', принимает последнее скрытое состояние энкодера и предыдущее предыдущее предсказаное слово.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Рассмотрим пример работы ''Seq2Seq'' сети:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''A''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние энкодера.&lt;br /&gt;
&lt;br /&gt;
''Блоки энкодера (зеленый)'' {{---}} блоки энкодера получающие на вход &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; и передающие скрытое состояние &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; на следующую итерацию.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние декодера.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''B''.&lt;br /&gt;
&lt;br /&gt;
''Блоки декодера (фиолетовый)'' {{---}} блоки декодера получающие на вход &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt; или специальный токен '''start''' в случае первой итерации и возвращаюшие &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''B''. &lt;br /&gt;
Передают &amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние декодера на следующую итерацию. &lt;br /&gt;
Перевод считается завершенным при &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt;, равном специальному токену '''end'''.&lt;br /&gt;
&lt;br /&gt;
=== Применение механизма внимания для ''Seq2Seq'' ===&lt;br /&gt;
При добавлении механизма в данную архитектуру между [[:Рекуррентные_нейронные_сети|RNN]] ''Encoder'' и ''Decoder'' слоя механизма внимания получится следуюшая схема:&lt;br /&gt;
&lt;br /&gt;
[[File:Seq2SeqAttention.png|450px|thumb|Пример работы ''Seq2Seq'' сети с механизмом внимания]]&lt;br /&gt;
&lt;br /&gt;
Здесь &amp;lt;math&amp;gt;x_i, h_i, d_i, y_i&amp;lt;/math&amp;gt; имееют те же назначения, что и в варианте без механизма внимания.&lt;br /&gt;
&lt;br /&gt;
''Аггрегатор скрытых состояний энкодера (желтый)'' {{---}} аггрегирует в себе все вектора &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; и возвращает всю последовательность векторов &amp;lt;math&amp;gt;h = [h_1, h_2, h_3, h_4]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt; {{---}} вектор контекста на итерации &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Блоки механизма внимания (красный)'' {{---}} механизм внимания. Принимает &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;d_{i - 1}&amp;lt;/math&amp;gt;, возвращает &amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Блоки декодера (фиолетовый)'' {{---}} по сравнению с обычной ''Seq2Seq'' сетью меняются входные данные. Теперь на итерации &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; на вход подается не &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt;, а конкатенация &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом при помощи механизма внимания достигается &amp;quot;фокусирование&amp;quot; декодера на определенных скрытых состояниях. В случаях машинного перевода эта возможность помогает декодеру предсказывать на какие скрытые сосояния при исходных определенных словах на языке ''A'' необходимо обратить больше внимания при переводе данного слова на язык ''B''.&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
*[[:Сверточные_нейронные_сети|Сверточные нейронные сети]]&lt;br /&gt;
*[[:Нейронные_сети,_перцептрон|Нейронные сети, перцептрон]]&lt;br /&gt;
*[[:Рекуррентные_нейронные_сети|Рекуррентные нейронные сети]]&lt;br /&gt;
&lt;br /&gt;
==Источники==&lt;br /&gt;
*[https://www.coursera.org/lecture/nlp-sequence-models/attention-model-lSwVa Лекция Andrew Ng о механизме внимания в NLP]&lt;br /&gt;
*[https://towardsdatascience.com/intuitive-understanding-of-attention-mechanism-in-deep-learning-6c9482aecf4f Статья с подробно разборанными примерами и кодом на ''Python'' и ''TensorFlow'']&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Нейронные сети]]&lt;br /&gt;
[[Категория: Рекуррентные нейронные сети]]&lt;/div&gt;</summary>
		<author><name>Gpevnev</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=73069</id>
		<title>Механизм внимания</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=73069"/>
				<updated>2020-03-21T21:47:00Z</updated>
		
		<summary type="html">&lt;p&gt;Gpevnev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Механизм внимания в рекуррентных нейронных сетях''' (англ. ''attention mechanism'', ''attention model'') {{---}} дополнительный слой используемый в [[:Рекуррентные_нейронные_сети|рекуррентных нейронных сетях (сокращенно 'RNN')]] для &amp;quot;обращения внимания&amp;quot; последующих слоев сети на скрытое состояние нейронной сети &amp;lt;math&amp;gt;h_t&amp;lt;/math&amp;gt; в момент времени &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Изначально механизм внимания был представлен в статье [https://arxiv.org/abs/1409.0473|Neural Machine Translation by Jointly Learning to Align and Translate] и предполагал [[:Механизм_внимания#Пример использования для архитектуры Seq2Seq|применение именно в ''Seq2Seq'' сетях]], и лишь позже был использован применительно к генерацияизображениям результаты кот[https://arxiv.org/abs/1502.03044|Show, Attend and Tell: Neural Image Caption Generation with Visual Attention].&lt;br /&gt;
&lt;br /&gt;
== Обобщенное описание ==&lt;br /&gt;
[[File:AttentionGeneral.png|350px|thumb|Обобщенное описание механизма внимания]]&lt;br /&gt;
[[:Рекуррентные_нейронные_сети|Рекуррентные нейронные сети]] используются при обработке данных, для которых важна их последовательность. В классическом случае применения [[:Рекуррентные_нейронные_сети|RNN]] результатом является только последнее скрытое состояние &amp;lt;math&amp;gt;h_m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; {{---}} длина последовательности входных данных. Использование механизма внимания позволяет использовать информацию полученную не только из последнего скрытого состояниния, но и любого скрытого состояния &amp;lt;math&amp;gt;h_t&amp;lt;/math&amp;gt; для любого &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Обычно слой использующийся для механизма внимания представляет собой обычную, чаще всего однослойную, нейронную сеть на вход которой подаются &amp;lt;math&amp;gt;h_t, t = 1 \  \ldots m&amp;lt;/math&amp;gt;, а также вектор &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; в котором содержится некий контекст зависящий от конкретно задачи (пример &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; для задачи машинного перевода использующего ''Seq2Seq'' арихитектуру). &lt;br /&gt;
&lt;br /&gt;
Выходом данного слоя будет являтся вектор &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; (англ. ''score'') {{---}} оценки на основании которых на скрытое состояние &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; будет &amp;quot;обращено внимание&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Далее для нормализации значений &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; используется &amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt;. Тогда &amp;lt;math&amp;gt;e = softmax(s)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt; здесь используется благодоря своим свойствам: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;\forall s:\  \sum_{i=1}^n softmax(s)_i = 1, &amp;lt;/math&amp;gt;&lt;br /&gt;
*&amp;lt;math&amp;gt;\forall s,\ i: \ softmax(s)_i &amp;gt;= 0 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Далее считается &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; (англ. ''context vector'') &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;с = \sum_{i=1}^m e_i h_i&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результатом работы слоя внимания является &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; который, содержит в себе информацию обо всех скрытых состоянях &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; пропорционально оценке &amp;lt;math&amp;gt;e_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Пример использования для архитектуры ''Seq2Seq'' ==&lt;br /&gt;
Пример добавления механизма внимания в ''Seq2Seq'' сеть поможет лучше понять его предназначение. &lt;br /&gt;
Изначально в оригинальной статье&amp;lt;ref&amp;gt;[https://arxiv.org/abs/1409.0473|Neural Machine Translation by Jointly Learning to Align and Translate]&amp;lt;/ref&amp;gt; применяется механизм внимания в контексте именно Seq2Seq сети.&lt;br /&gt;
&lt;br /&gt;
Несмотря на то, что нейронные сети рассматриваются как &amp;quot;черный ящик&amp;quot; и интерпретировать их внутренности в понятных человеку терминах часто невозможно, все же механизм внимания интуитивно понятный людям смог улучшить результаты машинного перевода для алгоритма используемого в статье.&lt;br /&gt;
&lt;br /&gt;
=== Базовая архитектура ''Seq2Seq'' ===&lt;br /&gt;
[[File:Seq2SeqBasic.png|450px|thumb|Пример работы базовой ''Seq2Seq'' сети]]&lt;br /&gt;
Данный пример рассматривает применение механизма внимания в задаче машинного перевода в применении к архитектуре ''Seq2Seq''.&lt;br /&gt;
&lt;br /&gt;
''Seq2Seq'' состоит из двух [[:Рекуррентные_нейронные_сети|RNN]] {{---}} ''Encoder'' и ''Decoder''.&lt;br /&gt;
&lt;br /&gt;
''Encoder'' {{---}} принимает предложение на языке ''A'' и сжимает его в вектор скрытого состояния.&lt;br /&gt;
&lt;br /&gt;
''Decoder'' {{---}} выдает слово на языке ''B'', принимает последнее скрытое состояние энкодера и предыдущее предыдущее предсказаное слово.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Рассмотрим пример работы ''Seq2Seq'' сети:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''A''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние энкодера.&lt;br /&gt;
&lt;br /&gt;
''Блоки энкодера (зеленый)'' {{---}} блоки энкодера получающие на вход &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; и передающие скрытое состояние &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; на следующую итерацию.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние декодера.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''B''.&lt;br /&gt;
&lt;br /&gt;
''Блоки декодера (фиолетовый)'' {{---}} блоки декодера получающие на вход &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt; или специальный токен '''start''' в случае первой итерации и возвращаюшие &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''B''. &lt;br /&gt;
Передают &amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние декодера на следующую итерацию. &lt;br /&gt;
Перевод считается завершенным при &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt;, равном специальному токену '''end'''.&lt;br /&gt;
&lt;br /&gt;
=== Применение механизма внимания для ''Seq2Seq'' ===&lt;br /&gt;
При добавлении механизма в данную архитектуру между [[:Рекуррентные_нейронные_сети|RNN]] ''Encoder'' и ''Decoder'' слоя механизма внимания получится следуюшая схема:&lt;br /&gt;
&lt;br /&gt;
[[File:Seq2SeqAttention.png|450px|thumb|Пример работы ''Seq2Seq'' сети с механизмом внимания]]&lt;br /&gt;
&lt;br /&gt;
Здесь &amp;lt;math&amp;gt;x_i, h_i, d_i, y_i&amp;lt;/math&amp;gt; имееют те же назначения, что и в варианте без механизма внимания.&lt;br /&gt;
&lt;br /&gt;
''Аггрегатор скрытых состояний энкодера (желтый)'' {{---}} аггрегирует в себе все вектора &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; и возвращает всю последовательность векторов &amp;lt;math&amp;gt;h = [h_1, h_2, h_3, h_4]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt; {{---}} вектор контекста на итерации &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Блоки механизма внимания (красный)'' {{---}} механизм внимания. Принимает &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;d_{i - 1}&amp;lt;/math&amp;gt;, возвращает &amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Блоки декодера (фиолетовый)'' {{---}} по сравнению с обычной ''Seq2Seq'' сетью меняются входные данные. Теперь на итерации &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; на вход подается не &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt;, а конкатенация &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом при помощи механизма внимания достигается &amp;quot;фокусирование&amp;quot; декодера на определенных скрытых состояниях. В случаях машинного перевода эта возможность помогает декодеру предсказывать на какие скрытые сосояния при исходных определенных словах на языке ''A'' необходимо обратить больше внимания при переводе данного слова на язык ''B''.&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
*[[:Сверточные_нейронные_сети|Сверточные нейронные сети]]&lt;br /&gt;
*[[:Нейронные_сети,_перцептрон|Нейронные сети, перцептрон]]&lt;br /&gt;
*[[:Рекуррентные_нейронные_сети|Рекуррентные нейронные сети]]&lt;br /&gt;
&lt;br /&gt;
==Источники==&lt;br /&gt;
*[https://www.coursera.org/lecture/nlp-sequence-models/attention-model-lSwVa Лекция Andrew Ng о механизме внимания в NLP]&lt;br /&gt;
*[https://towardsdatascience.com/intuitive-understanding-of-attention-mechanism-in-deep-learning-6c9482aecf4f Статья с подробно разборанными примерами и кодом на ''Python'' и ''TensorFlow'']&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Нейронные сети]]&lt;br /&gt;
[[Категория: Рекуррентные нейронные сети]]&lt;/div&gt;</summary>
		<author><name>Gpevnev</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=73068</id>
		<title>Механизм внимания</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=73068"/>
				<updated>2020-03-21T20:38:24Z</updated>
		
		<summary type="html">&lt;p&gt;Gpevnev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Механизм внимания в рекуррентных нейронных сетях''' (англ. ''attention mechanism'', ''attention model'') {{---}} дополнительный слой используемый в [[:Рекуррентные_нейронные_сети|рекуррентных нейронных сетях]] для &amp;quot;обращения внимания&amp;quot; последующих слоев сети на скрытое состояние нейронной сети &amp;lt;math&amp;gt;h_t&amp;lt;/math&amp;gt; в момент времени &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Изначально механизм внимания был представлен в статье [https://arxiv.org/abs/1409.0473|Neural Machine Translation by Jointly Learning to Align and Translate] и предполагал [[:Механизм_внимания#Пример использования для архитектуры Seq2Seq|применение именно в ''Seq2Seq'' сетях]], и лишь позже был использован применительно к изображениям [https://arxiv.org/abs/1502.03044|Show, Attend and Tell: Neural Image Caption Generation with Visual Attention].&lt;br /&gt;
&lt;br /&gt;
== Обобщенное описание ==&lt;br /&gt;
[[File:AttentionGeneral.png|350px|thumb|Обобщенное описание механизма внимания]]&lt;br /&gt;
[[:Рекуррентные_нейронные_сети|Рекуррентные нейронные сети]] используются при обработке данных, для которых важна их последовательность. В классическом случае применения [[:Рекуррентные_нейронные_сети|RNN]] результатом является только последнее скрытое состояние &amp;lt;math&amp;gt;h_m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; {{---}} длина последовательности входных данных. Использование механизма внимания позволяет использовать информацию полученную не только из последнего скрытого состояниния, но и любого скрытого состояния &amp;lt;math&amp;gt;h_t&amp;lt;/math&amp;gt; для любого &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Обычно слой использующийся для механизма внимания представляет собой обычную, чаще всего однослойную, нейронную сеть на вход которой подаются &amp;lt;math&amp;gt;h_t, t = 1 \  \ldots m&amp;lt;/math&amp;gt;, а также вектор &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; в котором содержится некий контекст зависящий от конкретно задачи (пример &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; для задачи машинного перевода использующего ''Seq2Seq'' арихитектуру). &lt;br /&gt;
&lt;br /&gt;
Выходом данного слоя будет являтся вектор &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; (англ. ''score'') {{---}} оценки на основании которых на скрытое состояние &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; будет &amp;quot;обращено внимание&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Далее для нормализации значений &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; используется &amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt;. Тогда &amp;lt;math&amp;gt;e = softmax(s)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt; здесь используется благодоря своим свойствам: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;\forall s:\  \sum_{i=1}^n softmax(s)_i = 1, &amp;lt;/math&amp;gt;&lt;br /&gt;
*&amp;lt;math&amp;gt;\forall s,\ i: \ softmax(s)_i &amp;gt;= 0 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Далее считается &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; (англ. ''context vector'') &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;с = \sum_{i=1}^m e_i h_i&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результатом работы слоя внимания является &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; который, содержит в себе информацию обо всех скрытых состоянях &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; пропорционально оценке &amp;lt;math&amp;gt;e_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Пример использования для архитектуры ''Seq2Seq'' ==&lt;br /&gt;
Пример добавления механизма внимания в ''Seq2Seq'' сеть поможет лучше понять его предназначение. &lt;br /&gt;
Изначально в оригинальной статье&amp;lt;ref&amp;gt;[https://arxiv.org/abs/1409.0473|Neural Machine Translation by Jointly Learning to Align and Translate]&amp;lt;/ref&amp;gt; применяется механизм внимания в контексте именно Seq2Seq сети.&lt;br /&gt;
&lt;br /&gt;
Несмотря на то, что нейронные сети рассматриваются как &amp;quot;черный ящик&amp;quot; и интерпретировать их внутренности в понятных человеку терминах часто невозможно, все же механизм внимания интуитивно понятный людям смог улучшить результаты машинного перевода для алгоритма используемого в статье.&lt;br /&gt;
&lt;br /&gt;
=== Базовая архитектура ''Seq2Seq'' ===&lt;br /&gt;
[[File:Seq2SeqBasic.png|450px|thumb|Пример работы базовой ''Seq2Seq'' сети]]&lt;br /&gt;
Данный пример рассматривает применение механизма внимания в задаче машинного перевода в применении к архитектуре ''Seq2Seq''.&lt;br /&gt;
&lt;br /&gt;
''Seq2Seq'' состоит из двух [[:Рекуррентные_нейронные_сети|RNN]] {{---}} ''Encoder'' и ''Decoder''.&lt;br /&gt;
&lt;br /&gt;
''Encoder'' {{---}} принимает предложение на языке ''A'' и сжимает его в вектор скрытого состояния.&lt;br /&gt;
&lt;br /&gt;
''Decoder'' {{---}} выдает слово на языке ''B'', принимает последнее скрытое состояние энкодера и предыдущее предыдущее предсказаное слово.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Рассмотрим пример работы ''Seq2Seq'' сети:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''A''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние энкодера.&lt;br /&gt;
&lt;br /&gt;
''Блоки энкодера (зеленый)'' {{---}} блоки энкодера получающие на вход &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; и передающие скрытое состояние &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; на следующую итерацию.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние декодера.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''B''.&lt;br /&gt;
&lt;br /&gt;
''Блоки декодера (фиолетовый)'' {{---}} блоки декодера получающие на вход &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt; или специальный токен '''start''' в случае первой итерации и возвращаюшие &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''B''. &lt;br /&gt;
Передают &amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние декодера на следующую итерацию. &lt;br /&gt;
Перевод считается завершенным при &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt;, равном специальному токену '''end'''.&lt;br /&gt;
&lt;br /&gt;
=== Применение механизма внимания для ''Seq2Seq'' ===&lt;br /&gt;
При добавлении механизма в данную архитектуру между [[:Рекуррентные_нейронные_сети|RNN]] ''Encoder'' и ''Decoder'' слоя механизма внимания получится следуюшая схема:&lt;br /&gt;
&lt;br /&gt;
[[File:Seq2SeqAttention.png|450px|thumb|Пример работы ''Seq2Seq'' сети с механизмом внимания]]&lt;br /&gt;
&lt;br /&gt;
Здесь &amp;lt;math&amp;gt;x_i, h_i, d_i, y_i&amp;lt;/math&amp;gt; имееют те же назначения, что и в варианте без механизма внимания.&lt;br /&gt;
&lt;br /&gt;
''Аггрегатор скрытых состояний энкодера (желтый)'' {{---}} аггрегирует в себе все вектора &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; и возвращает всю последовательность векторов &amp;lt;math&amp;gt;h = [h_1, h_2, h_3, h_4]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt; {{---}} вектор контекста на итерации &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Блоки механизма внимания (красный)'' {{---}} механизм внимания. Принимает &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;d_{i - 1}&amp;lt;/math&amp;gt;, возвращает &amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Блоки декодера (фиолетовый)'' {{---}} по сравнению с обычной ''Seq2Seq'' сетью меняются входные данные. Теперь на итерации &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; на вход подается не &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt;, а конкатенация &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом при помощи механизма внимания достигается &amp;quot;фокусирование&amp;quot; декодера на определенных скрытых состояниях. В случаях машинного перевода эта возможность помогает декодеру предсказывать на какие скрытые сосояния при исходных определенных словах на языке ''A'' необходимо обратить больше внимания при переводе данного слова на язык ''B''.&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
*[[:Сверточные_нейронные_сети|Сверточные нейронные сети]]&lt;br /&gt;
*[[:Нейронные_сети,_перцептрон|Нейронные сети, перцептрон]]&lt;br /&gt;
*[[:Рекуррентные_нейронные_сети|Рекуррентные нейронные сети]]&lt;br /&gt;
&lt;br /&gt;
==Источники==&lt;br /&gt;
*[https://www.coursera.org/lecture/nlp-sequence-models/attention-model-lSwVa Лекция Andrew Ng о механизме внимания в NLP]&lt;br /&gt;
*[https://towardsdatascience.com/intuitive-understanding-of-attention-mechanism-in-deep-learning-6c9482aecf4f Статья с подробно разборанными примерами и кодом на ''Python'' и ''TensorFlow'']&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Нейронные сети]]&lt;br /&gt;
[[Категория: Рекуррентные нейронные сети]]&lt;/div&gt;</summary>
		<author><name>Gpevnev</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=73067</id>
		<title>Механизм внимания</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=73067"/>
				<updated>2020-03-21T20:35:58Z</updated>
		
		<summary type="html">&lt;p&gt;Gpevnev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Механизм внимания в рекуррентных нейронных сетях''' (англ. ''attention mechanism'', ''attention model'') {{---}} дополнительный слой используемый в [[:Рекуррентные_нейронные_сети|рекуррентных нейронных сетях]] для &amp;quot;обращения внимания&amp;quot; последующих слоев сети на скрытое состояние нейронной сети &amp;lt;math&amp;gt;h_t&amp;lt;/math&amp;gt; в момент времени &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Изначально механизм внимания был представлен в статье [https://arxiv.org/abs/1409.0473|Neural Machine Translation by Jointly Learning to Align and Translate] и предполагал [[:Механизм_внимания#Пример использования для архитектуры Seq2Seq|применение именно в ''Seq2Seq'' сетях]], и лишь позже был использован применительно к изображениям [https://arxiv.org/abs/1502.03044|Show, Attend and Tell: Neural Image Caption Generation with Visual Attention].&lt;br /&gt;
&lt;br /&gt;
== Обобщенное описание ==&lt;br /&gt;
[[File:AttentionGeneral.png|350px|thumb|Обобщенное описание механизма внимания]]&lt;br /&gt;
[[:Рекуррентные_нейронные_сети|Рекуррентные нейронные сети]] используются при обработке данных, для которых важна их последовательность. В классическом случае применения [[:Рекуррентные_нейронные_сети|RNN]] результатом является только последнее скрытое состояние &amp;lt;math&amp;gt;h_m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; {{---}} длина последовательности входных данных. Использование механизма внимания позволяет использовать информацию полученную не только из последнего скрытого состояниния, но и любого скрытого состояния &amp;lt;math&amp;gt;h_t&amp;lt;/math&amp;gt; для любого &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Обычно слой использующийся для механизма внимания представляет собой обычную, чаще всего однослойную, нейронную сеть на вход которой подаются &amp;lt;math&amp;gt;h_t, t = 1 \  \ldots m&amp;lt;/math&amp;gt;, а также вектор &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; в котором содержится некий контекст зависящий от конкретно задачи (пример &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; для задачи машинного перевода использующего ''Seq2Seq'' арихитектуру). &lt;br /&gt;
&lt;br /&gt;
Выходом данного слоя будет являтся вектор &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; (англ. ''score'') {{---}} оценки на основании которых на скрытое состояние &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; будет &amp;quot;обращено внимание&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Далее для нормализации значений &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; используется &amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt;. Тогда &amp;lt;math&amp;gt;e = softmax(s)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt; здесь используется благодоря своим свойствам: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;\forall s:\  \sum_{i=1}^n softmax(s)_i = 1, &amp;lt;/math&amp;gt;&lt;br /&gt;
*&amp;lt;math&amp;gt;\forall s,\ i: \ softmax(s)_i &amp;gt;= 0 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Далее считается &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; (англ. ''context vector'') &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;с = \sum_{i=1}^m e_i h_i&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результатом работы слоя внимания является &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; который, содержит в себе информацию обо всех скрытых состоянях &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; пропорционально оценке &amp;lt;math&amp;gt;e_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Пример использования для архитектуры ''Seq2Seq'' ==&lt;br /&gt;
Пример добавления механизма внимания в ''Seq2Seq'' сеть поможет лучше понять его предназначение. &lt;br /&gt;
Изначально в оригинальной статье&amp;lt;ref&amp;gt;[https://arxiv.org/abs/1409.0473|Neural Machine Translation by Jointly Learning to Align and Translate]&amp;lt;/ref&amp;gt; применяется механизм внимания в контексте именно Seq2Seq сети.&lt;br /&gt;
&lt;br /&gt;
Несмотря на то, что нейронные сети рассматриваются как &amp;quot;черный ящик&amp;quot; и интерпретировать их внутренности в понятных человеку терминах часто невозможно, все же механизм внимания интуитивно понятный людям смог улучшить результаты машинного перевода для алгоритма используемого в статье.&lt;br /&gt;
&lt;br /&gt;
=== Базовая архитектура ''Seq2Seq'' ===&lt;br /&gt;
[[File:Seq2SeqBasic.png|450px|thumb|Пример работы базовой ''Seq2Seq'' сети]]&lt;br /&gt;
Данный пример рассматривает применение механизма внимания в задаче машинного перевода в применении к архитектуре ''Seq2Seq''.&lt;br /&gt;
&lt;br /&gt;
''Seq2Seq'' состоит из двух [[:Рекуррентные_нейронные_сети|RNN]] {{---}} ''Encoder'' и ''Decoder''.&lt;br /&gt;
&lt;br /&gt;
''Encoder'' {{---}} принимает предложение на языке ''A'' и сжимает его в вектор скрытого состояния.&lt;br /&gt;
&lt;br /&gt;
''Decoder'' {{---}} выдает слово на языке ''B'', принимает последнее скрытое состояние энкодера и предыдущее предыдущее предсказаное слово.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Рассмотрим пример работы ''Seq2Seq'' сети:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''A''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние энкодера.&lt;br /&gt;
&lt;br /&gt;
''Блоки энкодера (зеленый)'' {{---}} блоки энкодера получающие на вход &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; и передающие скрытое состояние &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; на следующую итерацию.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние декодера.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''B''.&lt;br /&gt;
&lt;br /&gt;
''Блоки декодера (фиолетовый)'' {{---}} блоки декодера получающие на вход &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt; или специальный токен '''start''' в случае первой итерации и возвращаюшие &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''B''. &lt;br /&gt;
Передают &amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние декодера на следующую итерацию. &lt;br /&gt;
Перевод считается завершенным при &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt;, равном специальному токену '''end'''.&lt;br /&gt;
&lt;br /&gt;
=== Применение механизма внимания для ''Seq2Seq'' ===&lt;br /&gt;
При добавлении механизма в данную архитектуру между [[:Рекуррентные_нейронные_сети|RNN]] ''Encoder'' и ''Decoder'' слоя механизма внимания получится следуюшая схема:&lt;br /&gt;
&lt;br /&gt;
[[File:Seq2SeqAttention.png|450px|thumb|Пример работы ''Seq2Seq'' сети с механизмом внимания]]&lt;br /&gt;
&lt;br /&gt;
Здесь &amp;lt;math&amp;gt;x_i, h_i, d_i, y_i&amp;lt;/math&amp;gt; имееют те же назначения, что и в варианте без механизма внимания.&lt;br /&gt;
&lt;br /&gt;
''Аггрегатор скрытых состояний энкодера (желтый)'' {{---}} аггрегирует в себе все вектора &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; и возвращает всю последовательность векторов &amp;lt;math&amp;gt;h = [h_1, h_2, h_3, h_4]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt; {{---}} вектор контекста на итерации &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Блоки механизма внимания (красный)'' {{---}} механизм внимания. Принимает &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;d_{i - 1}&amp;lt;/math&amp;gt;, возвращает &amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Блоки декодера (фиолетовый)'' {{---}} по сравнению с обычной ''Seq2Seq'' сетью меняются входные данные. Теперь на итерации &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; на вход подается не &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt;, а конкатенация &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом при помощи механизма внимания достигается &amp;quot;фокусирование&amp;quot; декодера на определенных скрытых состояниях. В случаях машинного перевода эта возможность помогает декодеру предсказывать на какие скрытые сосояния при исходных определенных словах на языке ''A'' необходимо обратить больше внимания при переводе данного слова на язык ''B''.&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
*[[:Сверточные_нейронные_сети|Сверточные нейронные сети]]&lt;br /&gt;
*[[:Нейронные_сети,_перцептрон|Нейронные сети, перцептрон]]&lt;br /&gt;
*[[:Рекуррентные_нейронные_сети|Рекуррентные нейронные сети]]&lt;br /&gt;
&lt;br /&gt;
==Источники==&lt;br /&gt;
*[https://arxiv.org/abs/1409.0473 Статья с предложением применения механизма внимания в Seq2Seq моделей]&lt;br /&gt;
*[https://arxiv.org/abs/1502.03044 Статья с предложением применения механизма внимания для описания содержания изображений]&lt;br /&gt;
*[https://www.coursera.org/lecture/nlp-sequence-models/attention-model-lSwVa Лекция Andrew Ng о механизме внимания в NLP]&lt;br /&gt;
*[https://towardsdatascience.com/intuitive-understanding-of-attention-mechanism-in-deep-learning-6c9482aecf4f Статья с подробно разборанными примерами и кодом на ''Python'' и ''TensorFlow'']&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Нейронные сети]]&lt;br /&gt;
[[Категория: Рекуррентные нейронные сети]]&lt;/div&gt;</summary>
		<author><name>Gpevnev</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=73066</id>
		<title>Механизм внимания</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=73066"/>
				<updated>2020-03-21T20:32:44Z</updated>
		
		<summary type="html">&lt;p&gt;Gpevnev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Механизм внимания в рекуррентных нейронных сетях''' (англ. ''attention mechanism'', ''attention model'') {{---}} дополнительный слой используемый в [[:Рекуррентные_нейронные_сети|рекуррентных нейронных сетях]] для &amp;quot;обращения внимания&amp;quot; последующих слоев сети на скрытое состояние нейронной сети &amp;lt;math&amp;gt;h_t&amp;lt;/math&amp;gt; в момент времени &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Изначально механизм внимания был представлен в статье [https://arxiv.org/abs/1409.0473|Neural Machine Translation by Jointly Learning to Align and Translate] и предполагал [[:Механизм_внимания#Пример использования для архитектуры Seq2Seq|применение именно в ''Seq2Seq'' сетях]], и лишь позже был использован применительно к изображениям [https://arxiv.org/abs/1502.03044|Show, Attend and Tell: Neural Image Caption Generation with Visual Attention].&lt;br /&gt;
&lt;br /&gt;
== Обобщенное описание ==&lt;br /&gt;
[[File:AttentionGeneral.png|350px|thumb|Обобщенное описание механизма внимания]]&lt;br /&gt;
[[:Рекуррентные_нейронные_сети|Рекуррентные нейронные сети]] используются при обработке данных, для которых важна их последовательность. В классическом случае применения [[:Рекуррентные_нейронные_сети|RNN]] результатом является только последнее скрытое состояние &amp;lt;math&amp;gt;h_m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; {{---}} длина последовательности входных данных. Использование механизма внимания позволяет использовать информацию полученную не только из последнего скрытого состояниния, но и любого скрытого состояния &amp;lt;math&amp;gt;h_t&amp;lt;/math&amp;gt; для любого &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Обычно слой использующийся для механизма внимания представляет собой обычную, чаще всего однослойную, нейронную сеть на вход которой подаются &amp;lt;math&amp;gt;h_t, t = 1 \  \ldots m&amp;lt;/math&amp;gt;, а также вектор &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; в котором содержится некий контекст зависящий от конкретно задачи (пример &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; для задачи машинного перевода использующего ''Seq2Seq'' арихитектуру). &lt;br /&gt;
&lt;br /&gt;
Выходом данного слоя будет являтся вектор &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; (англ. ''score'') {{---}} оценки на основании которых на скрытое состояние &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; будет &amp;quot;обращено внимание&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Далее для нормализации значений &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; используется &amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt;. Тогда &amp;lt;math&amp;gt;e = softmax(s)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt; здесь используется благодоря своим свойствам: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;\forall s:\  \sum_{i=1}^n softmax(s)_i = 1, &amp;lt;/math&amp;gt;&lt;br /&gt;
*&amp;lt;math&amp;gt;\forall s,\ i: \ softmax(s)_i &amp;gt;= 0 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Далее считается &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; (англ. ''context vector'') &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;с = \sum_{i=1}^m e_i h_i&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результатом работы слоя внимания является &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; который, содержит в себе информацию обо всех скрытых состоянях &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; пропорционально оценке &amp;lt;math&amp;gt;e_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Пример использования для архитектуры ''Seq2Seq'' ==&lt;br /&gt;
Пример добавления механизма внимания в ''Seq2Seq'' сеть поможет лучше понять его предназначение. &lt;br /&gt;
Изначально в статье [https://arxiv.org/abs/1409.0473|Neural Machine Translation by Jointly Learning to Align and Translate] применяется механизм внимания в контексте именно Seq2Seq сети.&lt;br /&gt;
&lt;br /&gt;
Несмотря на то, что нейронные сети рассматриваются как &amp;quot;черный ящик&amp;quot; и интерпретировать их внутренности в понятных человеку терминах часто невозможно, все же механизм внимания интуитивно понятный людям смог улучшить результаты машинного перевода для алгоритма используемого в статье.&lt;br /&gt;
&lt;br /&gt;
=== Базовая архитектура ''Seq2Seq'' ===&lt;br /&gt;
[[File:Seq2SeqBasic.png|450px|thumb|Пример работы базовой ''Seq2Seq'' сети]]&lt;br /&gt;
Данный пример рассматривает применение механизма внимания в задаче машинного перевода в применении к архитектуре ''Seq2Seq''.&lt;br /&gt;
&lt;br /&gt;
''Seq2Seq'' состоит из двух [[:Рекуррентные_нейронные_сети|RNN]] {{---}} ''Encoder'' и ''Decoder''.&lt;br /&gt;
&lt;br /&gt;
''Encoder'' {{---}} принимает предложение на языке ''A'' и сжимает его в вектор скрытого состояния.&lt;br /&gt;
&lt;br /&gt;
''Decoder'' {{---}} выдает слово на языке ''B'', принимает последнее скрытое состояние энкодера и предыдущее предыдущее предсказаное слово.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Рассмотрим пример работы ''Seq2Seq'' сети:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''A''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние энкодера.&lt;br /&gt;
&lt;br /&gt;
''Блоки энкодера (зеленый)'' {{---}} блоки энкодера получающие на вход &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; и передающие скрытое состояние &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; на следующую итерацию.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние декодера.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''B''.&lt;br /&gt;
&lt;br /&gt;
''Блоки декодера (фиолетовый)'' {{---}} блоки декодера получающие на вход &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt; или специальный токен '''start''' в случае первой итерации и возвращаюшие &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''B''. &lt;br /&gt;
Передают &amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние декодера на следующую итерацию. &lt;br /&gt;
Перевод считается завершенным при &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt;, равном специальному токену '''end'''.&lt;br /&gt;
&lt;br /&gt;
=== Применение механизма внимания для ''Seq2Seq'' ===&lt;br /&gt;
При добавлении механизма в данную архитектуру между [[:Рекуррентные_нейронные_сети|RNN]] ''Encoder'' и ''Decoder'' слоя механизма внимания получится следуюшая схема:&lt;br /&gt;
&lt;br /&gt;
[[File:Seq2SeqAttention.png|450px|thumb|Пример работы ''Seq2Seq'' сети с механизмом внимания]]&lt;br /&gt;
&lt;br /&gt;
Здесь &amp;lt;math&amp;gt;x_i, h_i, d_i, y_i&amp;lt;/math&amp;gt; имееют те же назначения, что и в варианте без механизма внимания.&lt;br /&gt;
&lt;br /&gt;
''Аггрегатор скрытых состояний энкодера (желтый)'' {{---}} аггрегирует в себе все вектора &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; и возвращает всю последовательность векторов &amp;lt;math&amp;gt;h = [h_1, h_2, h_3, h_4]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt; {{---}} вектор контекста на итерации &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Блоки механизма внимания (красный)'' {{---}} механизм внимания. Принимает &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;d_{i - 1}&amp;lt;/math&amp;gt;, возвращает &amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Блоки декодера (фиолетовый)'' {{---}} по сравнению с обычной ''Seq2Seq'' сетью меняются входные данные. Теперь на итерации &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; на вход подается не &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt;, а конкатенация &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом при помощи механизма внимания достигается &amp;quot;фокусирование&amp;quot; декодера на определенных скрытых состояниях. В случаях машинного перевода эта возможность помогает декодеру предсказывать на какие скрытые сосояния при исходных определенных словах на языке ''A'' необходимо обратить больше внимания при переводе данного слова на язык ''B''.&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
*[[:Сверточные_нейронные_сети|Сверточные нейронные сети]]&lt;br /&gt;
*[[:Нейронные_сети,_перцептрон|Нейронные сети, перцептрон]]&lt;br /&gt;
*[[:Рекуррентные_нейронные_сети|Рекуррентные нейронные сети]]&lt;br /&gt;
&lt;br /&gt;
==Источники==&lt;br /&gt;
*[https://arxiv.org/abs/1409.0473 Статья с предложением применения механизма внимания в Seq2Seq моделей]&lt;br /&gt;
*[https://arxiv.org/abs/1502.03044 Статья с предложением применения механизма внимания для описания содержания изображений]&lt;br /&gt;
*[https://www.coursera.org/lecture/nlp-sequence-models/attention-model-lSwVa Лекция Andrew Ng о механизме внимания в NLP]&lt;br /&gt;
*[https://towardsdatascience.com/intuitive-understanding-of-attention-mechanism-in-deep-learning-6c9482aecf4f Статья с подробно разборанными примерами и кодом на ''Python'' и ''TensorFlow'']&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Нейронные сети]]&lt;br /&gt;
[[Категория: Рекуррентные нейронные сети]]&lt;/div&gt;</summary>
		<author><name>Gpevnev</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:AttentionGeneral.png&amp;diff=73065</id>
		<title>Файл:AttentionGeneral.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:AttentionGeneral.png&amp;diff=73065"/>
				<updated>2020-03-21T20:28:14Z</updated>
		
		<summary type="html">&lt;p&gt;Gpevnev: Gpevnev загрузил новую версию Файл:AttentionGeneral.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Gpevnev</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Seq2SeqBasic.png&amp;diff=73064</id>
		<title>Файл:Seq2SeqBasic.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Seq2SeqBasic.png&amp;diff=73064"/>
				<updated>2020-03-21T20:27:18Z</updated>
		
		<summary type="html">&lt;p&gt;Gpevnev: Gpevnev загрузил новую версию Файл:Seq2SeqBasic.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Gpevnev</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Seq2SeqAttention.png&amp;diff=73063</id>
		<title>Файл:Seq2SeqAttention.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Seq2SeqAttention.png&amp;diff=73063"/>
				<updated>2020-03-21T20:25:13Z</updated>
		
		<summary type="html">&lt;p&gt;Gpevnev: Gpevnev загрузил новую версию Файл:Seq2SeqAttention.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Gpevnev</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=73062</id>
		<title>Механизм внимания</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=73062"/>
				<updated>2020-03-21T20:22:21Z</updated>
		
		<summary type="html">&lt;p&gt;Gpevnev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Механизм внимания в рекуррентных нейронных сетях''' (англ. ''attention mechanism'', ''attention model'') {{---}} дополнительный слой используемый в [[:Рекуррентные_нейронные_сети|рекуррентных нейронных сетях]] для &amp;quot;обращения внимания&amp;quot; последующих слоев сети на скрытое состояние нейронной сети &amp;lt;math&amp;gt;h_t&amp;lt;/math&amp;gt; в момент времени &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Изначально механизм внимания был представлен в статье [https://arxiv.org/abs/1409.0473|Neural Machine Translation by Jointly Learning to Align and Translate] и предполагал [[:Механизм_внимания#Пример использования для архитектуры Seq2Seq|применение именно в ''Seq2Seq'' сетях]], и лишь позже был использован применительно к изображениям [https://arxiv.org/abs/1502.03044|Show, Attend and Tell: Neural Image Caption Generation with Visual Attention].&lt;br /&gt;
&lt;br /&gt;
== Обобщенное описание ==&lt;br /&gt;
[[File:AttentionGeneral.png|350px|thumb|Обобщенное описание механизма внимания]]&lt;br /&gt;
[[:Рекуррентные_нейронные_сети|Рекуррентные нейронные сети]] используются при обработке данных, для которых важна их последовательность. В классическом случае применения [[:Рекуррентные_нейронные_сети|RNN]] результатом является только последнее скрытое состояние &amp;lt;math&amp;gt;h_m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; {{---}} длина последовательности входных данных. Использование механизма внимания позволяет использовать информацию полученную не только из последнего скрытого состояниния, но и любого скрытого состояния &amp;lt;math&amp;gt;h_t&amp;lt;/math&amp;gt; для любого &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Обычно слой использующийся для механизма внимания представляет собой обычную, чаще всего однослойную, нейронную сеть на вход которой подаются &amp;lt;math&amp;gt;h_t, t = 1 \  \ldots m&amp;lt;/math&amp;gt;, а также вектор &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; в котором содержится некий контекст зависящий от конкретно задачи (пример &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; для задачи машинного перевода использующего ''Seq2Seq'' арихитектуру). &lt;br /&gt;
&lt;br /&gt;
Выходом данного слоя будет являтся вектор &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; (англ. ''score'') {{---}} оценки на основании которых на скрытое состояние &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; будет &amp;quot;обращено внимание&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Далее для нормализации значений &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; используется &amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt;. Тогда &amp;lt;math&amp;gt;e = softmax(s)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt; здесь используется благодоря своим свойствам: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;\forall s:\  \sum_{i=1}^n softmax(s)_i = 1, &amp;lt;/math&amp;gt;&lt;br /&gt;
*&amp;lt;math&amp;gt;\forall s,\ i: \ softmax(s)_i &amp;gt;= 0 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Далее считается &amp;lt;math&amp;gt;СV&amp;lt;/math&amp;gt; (англ. ''context vector'') &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;с = \sum_{i=1}^m e_i h_i&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результатом работы слоя внимания является &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; который, содержит в себе информацию обо всех скрытых состоянях &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; пропорционально оценке &amp;lt;math&amp;gt;e_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Пример использования для архитектуры ''Seq2Seq'' ==&lt;br /&gt;
Пример добавления механизма внимания в ''Seq2Seq'' сеть поможет лучше понять его предназначение. &lt;br /&gt;
Изначально в статье [https://arxiv.org/abs/1409.0473|Neural Machine Translation by Jointly Learning to Align and Translate] применяется механизм внимания в контексте именно Seq2Seq сети.&lt;br /&gt;
&lt;br /&gt;
Несмотря на то, что нейронные сети рассматриваются как &amp;quot;черный ящик&amp;quot; и интерпретировать их внутренности в понятных человеку терминах часто невозможно, все же механизм внимания интуитивно понятный людям смог улучшить результаты машинного перевода для алгоритма используемого в статье.&lt;br /&gt;
&lt;br /&gt;
=== Базовая архитектура ''Seq2Seq'' ===&lt;br /&gt;
[[File:Seq2SeqBasic.png|450px|thumb|Пример работы базовой ''Seq2Seq'' сети]]&lt;br /&gt;
Данный пример рассматривает применение механизма внимания в задаче машинного перевода в применении к архитектуре ''Seq2Seq''.&lt;br /&gt;
&lt;br /&gt;
''Seq2Seq'' состоит из двух [[:Рекуррентные_нейронные_сети|RNN]] {{---}} ''Encoder'' и ''Decoder''.&lt;br /&gt;
&lt;br /&gt;
''Encoder'' {{---}} принимает предложение на языке ''A'' и сжимает его в вектор скрытого состояния.&lt;br /&gt;
&lt;br /&gt;
''Decoder'' {{---}} выдает слово на языке ''B'', принимает последнее скрытое состояние энкодера и предыдущее предыдущее предсказаное слово.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Рассмотрим пример работы ''Seq2Seq'' сети:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''A''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние энкодера.&lt;br /&gt;
&lt;br /&gt;
''Блоки энкодера (зеленый)'' {{---}} блоки энкодера получающие на вход &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; и передающие скрытое состояние &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; на следующую итерацию.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние декодера.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''B''.&lt;br /&gt;
&lt;br /&gt;
''Блоки декодера (фиолетовый)'' {{---}} блоки декодера получающие на вход &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt; или специальный токен '''start''' в случае первой итерации и возвращаюшие &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''B''. &lt;br /&gt;
Передают &amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние декодера на следующую итерацию. &lt;br /&gt;
Перевод считается завершенным при &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt;, равном специальному токену '''end'''.&lt;br /&gt;
&lt;br /&gt;
=== Применение механизма внимания для ''Seq2Seq'' ===&lt;br /&gt;
При добавлении механизма в данную архитектуру между [[:Рекуррентные_нейронные_сети|RNN]] ''Encoder'' и ''Decoder'' слоя механизма внимания получится следуюшая схема:&lt;br /&gt;
&lt;br /&gt;
[[File:Seq2SeqAttention.png|450px|thumb|Пример работы ''Seq2Seq'' сети с механизмом внимания]]&lt;br /&gt;
&lt;br /&gt;
Здесь &amp;lt;math&amp;gt;x_i, h_i, d_i, y_i&amp;lt;/math&amp;gt; имееют те же назначения, что и в варианте без механизма внимания.&lt;br /&gt;
&lt;br /&gt;
''Аггрегатор скрытых состояний энкодера (желтый)'' {{---}} аггрегирует в себе все вектора &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; и возвращает всю последовательность векторов &amp;lt;math&amp;gt;h = [h_1, h_2, h_3, h_4]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt; {{---}} вектор контекста на итерации &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Блоки механизма внимания (красный)'' {{---}} механизм внимания. Принимает &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;d_{i - 1}&amp;lt;/math&amp;gt;, возвращает &amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Блоки декодера (фиолетовый)'' {{---}} по сравнению с обычной ''Seq2Seq'' сетью меняются входные данные. Теперь на итерации &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; на вход подается не &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt;, а конкатенация &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом при помощи механизма внимания достигается &amp;quot;фокусирование&amp;quot; декодера на определенных скрытых состояниях. В случаях машинного перевода эта возможность помогает декодеру предсказывать на какие скрытые сосояния при исходных определенных словах на языке ''A'' необходимо обратить больше внимания при переводе данного слова на язык ''B''.&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
*[[:Сверточные_нейронные_сети|Сверточные нейронные сети]]&lt;br /&gt;
*[[:Нейронные_сети,_перцептрон|Нейронные сети, перцептрон]]&lt;br /&gt;
*[[:Рекуррентные_нейронные_сети|Рекуррентные нейронные сети]]&lt;br /&gt;
&lt;br /&gt;
==Источники==&lt;br /&gt;
*[https://arxiv.org/abs/1409.0473 Статья с предложением применения механизма внимания в Seq2Seq моделей]&lt;br /&gt;
*[https://arxiv.org/abs/1502.03044 Статья с предложением применения механизма внимания для описания содержания изображений]&lt;br /&gt;
*[https://www.coursera.org/lecture/nlp-sequence-models/attention-model-lSwVa Лекция Andrew Ng о механизме внимания в NLP]&lt;br /&gt;
*[https://towardsdatascience.com/intuitive-understanding-of-attention-mechanism-in-deep-learning-6c9482aecf4f Статья с подробно разборанными примерами и кодом на ''Python'' и ''TensorFlow'']&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Нейронные сети]]&lt;br /&gt;
[[Категория: Рекуррентные нейронные сети]]&lt;/div&gt;</summary>
		<author><name>Gpevnev</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:AttentionGeneral.png&amp;diff=73061</id>
		<title>Файл:AttentionGeneral.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:AttentionGeneral.png&amp;diff=73061"/>
				<updated>2020-03-21T20:21:51Z</updated>
		
		<summary type="html">&lt;p&gt;Gpevnev: Gpevnev загрузил новую версию Файл:AttentionGeneral.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Gpevnev</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Seq2SeqAttention.png&amp;diff=73060</id>
		<title>Файл:Seq2SeqAttention.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Seq2SeqAttention.png&amp;diff=73060"/>
				<updated>2020-03-21T20:20:42Z</updated>
		
		<summary type="html">&lt;p&gt;Gpevnev: Gpevnev загрузил новую версию Файл:Seq2SeqAttention.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Gpevnev</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Seq2SeqBasic.png&amp;diff=73059</id>
		<title>Файл:Seq2SeqBasic.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Seq2SeqBasic.png&amp;diff=73059"/>
				<updated>2020-03-21T20:19:38Z</updated>
		
		<summary type="html">&lt;p&gt;Gpevnev: Gpevnev загрузил новую версию Файл:Seq2SeqBasic.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Gpevnev</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=73058</id>
		<title>Механизм внимания</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=73058"/>
				<updated>2020-03-21T20:06:30Z</updated>
		
		<summary type="html">&lt;p&gt;Gpevnev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Механизм внимания в рекуррентных нейронных сетях''' (англ. ''attention mechanism'', ''attention model'') {{---}} дополнительный слой используемый в [[:Рекуррентные_нейронные_сети|рекуррентных нейронных сетях]] для &amp;quot;обращения внимания&amp;quot; последующих слоев сети на скрытое состояние нейронной сети &amp;lt;math&amp;gt;h_t&amp;lt;/math&amp;gt; в момент времени &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Изначально механизм внимания был представлен в статье [https://arxiv.org/abs/1409.0473|Neural Machine Translation by Jointly Learning to Align and Translate] и предполагал [[:Механизм_внимания#Пример использования для архитектуры Seq2Seq|применение именно в ''Seq2Seq'' сетях]], и лишь позже был использован применительно к изображениям [https://arxiv.org/abs/1502.03044|Show, Attend and Tell: Neural Image Caption Generation with Visual Attention].&lt;br /&gt;
&lt;br /&gt;
== Обобщенное описание ==&lt;br /&gt;
[[File:AttentionGeneral.png|350px|thumb|Обобщенное описание механизма внимания]]&lt;br /&gt;
[[:Рекуррентные_нейронные_сети|Рекуррентные нейронные сети]] используются при обработке данных, для которых важна их последовательность. В классическом случае применения [[:Рекуррентные_нейронные_сети|RNN]] результатом является только последнее скрытое состояние &amp;lt;math&amp;gt;h_m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; {{---}} длина последовательности входных данных. Использование механизма внимания позволяет использовать информацию полученную не только из последнего скрытого состояниния, но и любого скрытого состояния &amp;lt;math&amp;gt;h_t&amp;lt;/math&amp;gt; для любого &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Обычно слой использующийся для механизма внимания представляет собой обычную, чаще всего однослойную, нейронную сеть на вход которой подаются &amp;lt;math&amp;gt;h_t, t = 1 \  \ldots m&amp;lt;/math&amp;gt;, а также вектор &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; в котором содержится некий контекст зависящий от конкретно задачи (пример &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; для задачи машинного перевода использующего ''Seq2Seq'' арихитектуру). &lt;br /&gt;
&lt;br /&gt;
Выходом данного слоя будет являтся вектор &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; (англ. ''score'') {{---}} оценки на основании которых на скрытое состояние &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; будет &amp;quot;обращено внимание&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Далее для нормализации значений &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; используется &amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt;. Тогда &amp;lt;math&amp;gt;e = softmax(s)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt; здесь используется благодоря своим свойствам: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;\forall s:\  \sum_{i=1}^n softmax(s)_i = 1, &amp;lt;/math&amp;gt;&lt;br /&gt;
*&amp;lt;math&amp;gt;\forall s,\ i: \ softmax(s)_i &amp;gt;= 0 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Далее считается &amp;lt;math&amp;gt;СV&amp;lt;/math&amp;gt; (англ. ''context vector'') &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;СV = \sum_{i=1}^m e_i h_i&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результатом работы слоя внимания является &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; который, содержит в себе информацию обо всех скрытых состоянях &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; пропорционально оценке &amp;lt;math&amp;gt;e_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Пример использования для архитектуры ''Seq2Seq'' ==&lt;br /&gt;
Из-за интуитивной понятности механизма внимания для проблемы машинного перевода, а также поскольку в оригинальной статье рассматривается механизм внимания применительно именно к ''Seq2Seq'' сетям. Пример добавления механизма внимания в ''Seq2Seq'' сеть поможет лучше понять его предназначение.&lt;br /&gt;
&lt;br /&gt;
Несмотря на то, что нейронные сети рассматриваются как &amp;quot;черный ящик&amp;quot; и интерпретировать их внутренности в понятных человеку терминах часто невозможно, все же механизм внимания интуитивно понятный людям смог улучшить результаты машинного перевода для алгоритма используемого в статье.&lt;br /&gt;
&lt;br /&gt;
=== Базовая архитектура ''Seq2Seq'' ===&lt;br /&gt;
[[File:Seq2SeqBasic.png|450px|thumb|Пример работы базовой ''Seq2Seq'' сети]]&lt;br /&gt;
Данный пример рассматривает применение механизма внимания в задаче машинного перевода в применении к архитектуре ''Seq2Seq''.&lt;br /&gt;
&lt;br /&gt;
''Seq2Seq'' состоит из двух [[:Рекуррентные_нейронные_сети|RNN]] {{---}} ''Encoder'' и ''Decoder''.&lt;br /&gt;
&lt;br /&gt;
''Encoder'' {{---}} принимает предложение на языке ''A'' и сжимает его в вектор скрытого состояния.&lt;br /&gt;
&lt;br /&gt;
''Decoder'' {{---}} выдает слово на языке ''B'', принимает последнее скрытое состояние энкодера и предыдущее предыдущее предсказаное слово.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Рассмотрим пример работы ''Seq2Seq'' сети:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''A''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние энкодера.&lt;br /&gt;
&lt;br /&gt;
''Блоки энкодера (зеленый)'' {{---}} блоки энкодера получающие на вход &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; и передающие скрытое состояние &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; на следующую итерацию.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние декодера.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''B''.&lt;br /&gt;
&lt;br /&gt;
''Блоки декодера (фиолетовый)'' {{---}} блоки декодера получающие на вход &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt; или специальный токен '''start''' в случае первой итерации и возвращаюшие &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''B''. &lt;br /&gt;
Передают &amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние декодера на следующую итерацию. &lt;br /&gt;
Перевод считается завершенным при &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt;, равном специальному токену '''end'''.&lt;br /&gt;
&lt;br /&gt;
=== Применение механизма внимания для ''Seq2Seq'' ===&lt;br /&gt;
При добавлении механизма в данную архитектуру между [[:Рекуррентные_нейронные_сети|RNN]] ''Encoder'' и ''Decoder'' слоя механизма внимания получится следуюшая схема:&lt;br /&gt;
&lt;br /&gt;
[[File:Seq2SeqAttention.png|450px|thumb|Пример работы ''Seq2Seq'' сети с механизмом внимания]]&lt;br /&gt;
&lt;br /&gt;
Здесь &amp;lt;math&amp;gt;x_i, h_i, d_i, y_i&amp;lt;/math&amp;gt; имееют те же назначения, что и в варианте без механизма внимания.&lt;br /&gt;
&lt;br /&gt;
''Аггрегатор скрытых состояний энкодера (желтый)'' {{---}} аггрегирует в себе все вектора &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; и возвращает всю последовательность векторов &amp;lt;math&amp;gt;h = [h_1, h_2, h_3, h_4]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt; {{---}} вектор контекста на итерации &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Блоки механизма внимания (красный)'' {{---}} механизм внимания. Принимает &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;d_{i - 1}&amp;lt;/math&amp;gt;, возвращает &amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Блоки декодера (фиолетовый)'' {{---}} по сравнению с обычной ''Seq2Seq'' сетью меняются входные данные. Теперь на итерации &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; на вход подается не &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt;, а конкатенация &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом при помощи механизма внимания достигается &amp;quot;фокусирование&amp;quot; декодера на определенных скрытых состояниях. В случаях машинного перевода эта возможность помогает декодеру предсказывать на какие скрытые сосояния при исходных определенных словах на языке ''A'' необходимо обратить больше внимания при переводе данного слова на язык ''B''.&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
*[[:Сверточные_нейронные_сети|Сверточные нейронные сети]]&lt;br /&gt;
*[[:Нейронные_сети,_перцептрон|Нейронные сети, перцептрон]]&lt;br /&gt;
*[[:Рекуррентные_нейронные_сети|Рекуррентные нейронные сети]]&lt;br /&gt;
&lt;br /&gt;
==Источники==&lt;br /&gt;
*[https://arxiv.org/abs/1409.0473 Статья с предложением применения механизма внимания в Seq2Seq моделей]&lt;br /&gt;
*[https://arxiv.org/abs/1502.03044 Статья с предложением применения механизма внимания для описания содержания изображений]&lt;br /&gt;
*[https://www.coursera.org/lecture/nlp-sequence-models/attention-model-lSwVa Лекция Andrew Ng о механизме внимания в NLP]&lt;br /&gt;
*[https://towardsdatascience.com/intuitive-understanding-of-attention-mechanism-in-deep-learning-6c9482aecf4f Статья с подробно разборанными примерами и кодом на ''Python'' и ''TensorFlow'']&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Нейронные сети]]&lt;br /&gt;
[[Категория: Рекуррентные нейронные сети]]&lt;/div&gt;</summary>
		<author><name>Gpevnev</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=73057</id>
		<title>Механизм внимания</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=73057"/>
				<updated>2020-03-21T19:47:14Z</updated>
		
		<summary type="html">&lt;p&gt;Gpevnev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Механизм внимания в рекуррентных нейронных сетях''' (англ. ''attention mechanism'', ''attention model'') {{---}} дополнительный слой используемый в [[:Рекуррентные_нейронные_сети|рекуррентных нейронных сетях]] для &amp;quot;обращения внимания&amp;quot; последующих слоев сети на скрытое состояние нейронной сети &amp;lt;math&amp;gt;h_t&amp;lt;/math&amp;gt; в момент времени &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Изначально механизм внимания был представлен в статье [https://arxiv.org/abs/1409.0473|Neural Machine Translation by Jointly Learning to Align and Translate] и предполагал [[:Механизм_внимания#Пример использования для архитектуры Seq2Seq|применение именно в ''Seq2Seq'' сетях]], и лишь позже был использован применительно к изображениям [https://arxiv.org/abs/1502.03044|Show, Attend and Tell: Neural Image Caption Generation with Visual Attention].&lt;br /&gt;
&lt;br /&gt;
== Обобщенное описание ==&lt;br /&gt;
[[File:AttentionGeneral.png|350px|thumb|Обобщенное описание механизма внимания]]&lt;br /&gt;
[[:Рекуррентные_нейронные_сети|Рекуррентные нейронные сети]] используются при обработке данных, для которых важна их последовательность. В классическом случае применения [[:Рекуррентные_нейронные_сети|RNN]] результатом является только последнее скрытое состояние &amp;lt;math&amp;gt;h_m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; {{---}} длина последовательности входных данных. Использование механизма внимания позволяет использовать информацию полученную не только из последнего скрытого состояниния, но и любого скрытого состояния &amp;lt;math&amp;gt;h_t&amp;lt;/math&amp;gt; для любого &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Обычно слой использующийся для механизма внимания представляет собой обычную, чаще всего однослойную, нейронную сеть на вход которой подаются &amp;lt;math&amp;gt;h_t, t = 1 \  \ldots m&amp;lt;/math&amp;gt;, а также вектор &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; в котором содержится некий контекст зависящий от конкретно задачи (пример &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; для задачи машинного перевода использующего ''Seq2Seq'' арихитектуру). &lt;br /&gt;
&lt;br /&gt;
Выходом данного слоя будет являтся вектор &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; (англ. ''score'') {{---}} оценки на основании которых на скрытое состояние &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; будет &amp;quot;обращено внимание&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Далее для нормализации значений &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; используется &amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt;. Тогда &amp;lt;math&amp;gt;e = softmax(s)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt; здесь используется благодоря своим свойствам: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;\forall s:\  \sum_{i=1}^n softmax(s)_i = 1, &amp;lt;/math&amp;gt;&lt;br /&gt;
*&amp;lt;math&amp;gt;\forall s,\ i: \ softmax(s)_i &amp;gt;= 0 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Далее считается &amp;lt;math&amp;gt;СV&amp;lt;/math&amp;gt; (англ. ''context vector'') &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;СV = \sum_{i=1}^m e_i h_i&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результатом работы слоя внимания является &amp;lt;math&amp;gt;CV&amp;lt;/math&amp;gt; который, содержит в себе информацию обо всех скрытых состоянях &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; пропорционально оценке &amp;lt;math&amp;gt;e_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Пример использования для архитектуры ''Seq2Seq'' ==&lt;br /&gt;
Из-за интуитивной понятности механизма внимания для проблемы машинного перевода, а также поскольку в оригинальной статье рассматривается механизм внимания применительно именно к ''Seq2Seq'' сетям. Пример добавления механизма внимания в ''Seq2Seq'' сеть поможет лучше понять его предназначение.&lt;br /&gt;
&lt;br /&gt;
Несмотря на то, что нейронные сети рассматриваются как &amp;quot;черный ящик&amp;quot; и интерпретировать их внутренности в понятных человеку терминах часто невозможно, все же механизм внимания интуитивно понятный людям смог улучшить результаты машинного перевода для алгоритма используемого в статье.&lt;br /&gt;
&lt;br /&gt;
=== Базовая архитектура ''Seq2Seq'' ===&lt;br /&gt;
[[File:Seq2SeqBasic.png|450px|thumb|Пример работы базовой ''Seq2Seq'' сети]]&lt;br /&gt;
Данный пример рассматривает применение механизма внимания в задаче машинного перевода в применении к архитектуре ''Seq2Seq''.&lt;br /&gt;
&lt;br /&gt;
''Seq2Seq'' состоит из двух [[:Рекуррентные_нейронные_сети|RNN]] {{---}} ''Encoder'' и ''Decoder''.&lt;br /&gt;
&lt;br /&gt;
''Encoder'' {{---}} принимает предложение на языке ''A'' и сжимает его в вектор скрытого состояния.&lt;br /&gt;
&lt;br /&gt;
''Decoder'' {{---}} выдает слово на языке ''B'', принимает последнее скрытое состояние энкодера и предыдущее предыдущее предсказаное слово.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Рассмотрим пример работы ''Seq2Seq'' сети:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''A''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние энкодера.&lt;br /&gt;
&lt;br /&gt;
''Блоки энкодера (зеленый)'' {{---}} блоки энкодера получающие на вход &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; и передающие скрытое состояние &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; на следующую итерацию.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние декодера.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''B''.&lt;br /&gt;
&lt;br /&gt;
''Блоки декодера (фиолетовый)'' {{---}} блоки декодера получающие на вход &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt; или специальный токен '''start''' в случае первой итерации и возвращаюшие &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''B''. &lt;br /&gt;
Передают &amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние декодера на следующую итерацию. &lt;br /&gt;
Перевод считается завершенным при &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt;, равном специальному токену '''end'''.&lt;br /&gt;
&lt;br /&gt;
=== Применение механизма внимания для ''Seq2Seq'' ===&lt;br /&gt;
При добавлении механизма в данную архитектуру между [[:Рекуррентные_нейронные_сети|RNN]] ''Encoder'' и ''Decoder'' слоя механизма внимания получится следуюшая схема:&lt;br /&gt;
&lt;br /&gt;
[[File:Seq2SeqAttention.png|450px|thumb|Пример работы ''Seq2Seq'' сети с механизмом внимания]]&lt;br /&gt;
&lt;br /&gt;
Здесь &amp;lt;math&amp;gt;x_i, h_i, d_i, y_i&amp;lt;/math&amp;gt; имееют те же назначения, что и в варианте без механизма внимания.&lt;br /&gt;
&lt;br /&gt;
''Аггрегатор скрытых состояний энкодера (желтый)'' {{---}} аггрегирует в себе все вектора &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; и возвращает всю последовательность векторов &amp;lt;math&amp;gt;h = [h_1, h_2, h_3, h_4]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;СV_i&amp;lt;/math&amp;gt; {{---}} вектор контекста на итерации &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Блоки механизма внимания (красный)'' {{---}} механизм внимания. Принимает &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;d_{i - 1}&amp;lt;/math&amp;gt;, возвращает &amp;lt;math&amp;gt;СV_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Блоки декодера (фиолетовый)'' {{---}} по сравнению с обычной ''Seq2Seq'' сетью меняются входные данные. Теперь на итерации &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; на вход подается не &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt;, а конкатенация &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;CV_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом при помощи механизма внимания достигается &amp;quot;фокусирование&amp;quot; декодера на определенных скрытых состояниях. В случаях машинного перевода эта возможность помогает декодеру предсказывать на какие скрытые сосояния при исходных определенных словах на языке ''A'' необходимо обратить больше внимания при переводе данного слова на язык ''B''.&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
*[[:Сверточные_нейронные_сети|Сверточные нейронные сети]]&lt;br /&gt;
*[[:Нейронные_сети,_перцептрон|Нейронные сети, перцептрон]]&lt;br /&gt;
*[[:Рекуррентные_нейронные_сети|Рекуррентные нейронные сети]]&lt;br /&gt;
&lt;br /&gt;
==Источники==&lt;br /&gt;
*[https://arxiv.org/abs/1409.0473 Статья с предложением применения механизма внимания в Seq2Seq моделей]&lt;br /&gt;
*[https://arxiv.org/abs/1502.03044 Статья с предложением применения механизма внимания для описания содержания изображений]&lt;br /&gt;
*[https://www.coursera.org/lecture/nlp-sequence-models/attention-model-lSwVa Лекция Andrew Ng о механизме внимания в NLP]&lt;br /&gt;
*[https://towardsdatascience.com/intuitive-understanding-of-attention-mechanism-in-deep-learning-6c9482aecf4f Статья с подробно разборанными примерами и кодом на ''Python'' и ''TensorFlow'']&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Нейронные сети]]&lt;br /&gt;
[[Категория: Рекуррентные нейронные сети]]&lt;/div&gt;</summary>
		<author><name>Gpevnev</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=73056</id>
		<title>Механизм внимания</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=73056"/>
				<updated>2020-03-21T19:44:53Z</updated>
		
		<summary type="html">&lt;p&gt;Gpevnev: Новая страница: «'''Механизм внимания в рекуррентных нейронных сетях''' (англ. ''attention mechanism'', ''attention model'') {{---}}…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Механизм внимания в рекуррентных нейронных сетях''' (англ. ''attention mechanism'', ''attention model'') {{---}} дополнительный слой используемый в [[:Рекуррентные_нейронные_сети|рекуррентных нейронных сетях]] для &amp;quot;обращения внимания&amp;quot; последующих слоев сети на скрытое состояние нейронной сети &amp;lt;math&amp;gt;h_t&amp;lt;/math&amp;gt; в момент времени &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Изначально механизм внимания был представлен в статье [https://arxiv.org/abs/1409.0473|Neural Machine Translation by Jointly Learning to Align and Translate] и предполагал [[:Механизм_внимания#Пример использования для архитектуры Seq2Seq|применение именно в ''Seq2Seq'' сетях]], и лишь позже был использован применительно к изображениям [https://arxiv.org/abs/1502.03044|Show, Attend and Tell: Neural Image Caption Generation with Visual Attention].&lt;br /&gt;
&lt;br /&gt;
== Обобщенное описание ==&lt;br /&gt;
[[File:AttentionGeneral.png|350px|thumb|Обобщенное описание механизма внимания]]&lt;br /&gt;
[[:Рекуррентные_нейронные_сети|Рекуррентные нейронные сети]] используются при обработке данных, для которых важна их последовательность. В классическом случае применения [[:Рекуррентные_нейронные_сети|RNN]] результатом является только последнее скрытое состояние &amp;lt;math&amp;gt;h_m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; {{---}} длина последовательности входных данных. Использование механизма внимания позволяет использовать информацию полученную не только из последнего скрытого состояниния, но и любого скрытого состояния &amp;lt;math&amp;gt;h_t&amp;lt;/math&amp;gt; для любого &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Обычно слой использующийся для механизма внимания представляет собой обычную, чаще всего однослойную, нейронную сеть на вход которой подаются &amp;lt;math&amp;gt;h_t, t = 1 \  \ldots m&amp;lt;/math&amp;gt;, а также вектор &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; в котором содержится некий контекст зависящий от конкретно задачи (пример &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; для задачи машинного перевода использующего ''Seq2Seq'' арихитектуру). &lt;br /&gt;
&lt;br /&gt;
Выходом данного слоя будет являтся вектор &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; (англ. ''score'') - оценки на основании которых на скрытое состояние &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; будет &amp;quot;обращено внимание&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Далее для нормализации значений &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; используется &amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt;. Тогда &amp;lt;math&amp;gt;e = softmax(s)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt; здесь используется благодоря своим свойствам: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;\forall s:\  \sum_{i=1}^n softmax(s)_i = 1, &amp;lt;/math&amp;gt;&lt;br /&gt;
*&amp;lt;math&amp;gt;\forall s,\ i: \ softmax(s)_i &amp;gt;= 0 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Далее считается &amp;lt;math&amp;gt;СV&amp;lt;/math&amp;gt; (англ. ''context vector'') &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;СV = \sum_{i=1}^m e_i h_i&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результатом работы слоя внимания является &amp;lt;math&amp;gt;CV&amp;lt;/math&amp;gt; который, содержит в себе информацию обо всех скрытых состоянях &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; пропорционально оценке &amp;lt;math&amp;gt;e_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Пример использования для архитектуры ''Seq2Seq'' ==&lt;br /&gt;
Из-за интуитивной понятности механизма внимания для проблемы машинного перевода, а также поскольку в оригинальной статье рассматривается механизм внимания применительно именно к ''Seq2Seq'' сетям. Пример добавления механизма внимания в ''Seq2Seq'' сеть поможет лучше понять его предназначение.&lt;br /&gt;
&lt;br /&gt;
Несмотря на то, что нейронные сети рассматриваются как &amp;quot;черный ящик&amp;quot; и интерпретировать их внутренности в понятных человеку терминах часто невозможно, все же механизм внимания интуитивно понятный людям смог улучшить результаты машинного перевода для алгоритма используемого в статье.&lt;br /&gt;
&lt;br /&gt;
=== Базовая архитектура ''Seq2Seq'' ===&lt;br /&gt;
[[File:Seq2SeqBasic.png|450px|thumb|Пример работы базовой ''Seq2Seq'' сети]]&lt;br /&gt;
Данный пример рассматривает применение механизма внимания в задаче машинного перевода в применении к архитектуре ''Seq2Seq''.&lt;br /&gt;
&lt;br /&gt;
''Seq2Seq'' состоит из двух [[:Рекуррентные_нейронные_сети|RNN]] - ''Encoder'' и ''Decoder''.&lt;br /&gt;
&lt;br /&gt;
''Encoder'' {{---}} принимает предложение на языке ''A'' и сжимает его в вектор скрытого состояния.&lt;br /&gt;
&lt;br /&gt;
''Decoder'' {{---}} выдает слово на языке ''B'', принимает последнее скрытое состояние энкодера и предыдущее предыдущее предсказаное слово.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Рассмотрим пример работы ''Seq2Seq'' сети:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''A''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние энкодера.&lt;br /&gt;
&lt;br /&gt;
''Блоки энкодера (зеленый)'' {{---}} блоки энкодера получающие на вход &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; и передающие скрытое состояние &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; на следующую итерацию.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние декодера.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''B''.&lt;br /&gt;
&lt;br /&gt;
''Блоки декодера (фиолетовый)'' {{---}} блоки декодера получающие на вход &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt; или специальный токен '''start''' в случае первой итерации и возвращаюшие &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''B''. &lt;br /&gt;
Передают &amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние декодера на следующую итерацию. &lt;br /&gt;
Перевод считается завершенным при &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt;, равном специальному токену '''end'''.&lt;br /&gt;
&lt;br /&gt;
=== Применение механизма внимания для ''Seq2Seq'' ===&lt;br /&gt;
При добавлении механизма в данную архитектуру между [[:Рекуррентные_нейронные_сети|RNN]] ''Encoder'' и ''Decoder'' слоя механизма внимания получится следуюшая схема:&lt;br /&gt;
&lt;br /&gt;
[[File:Seq2SeqAttention.png|450px|thumb|Пример работы ''Seq2Seq'' сети с механизмом внимания]]&lt;br /&gt;
&lt;br /&gt;
Здесь &amp;lt;math&amp;gt;x_i, h_i, d_i, y_i&amp;lt;/math&amp;gt; имееют те же назначения, что и в варианте без механизма внимания.&lt;br /&gt;
&lt;br /&gt;
''Аггрегатор скрытых состояний энкодера (желтый)'' {{---}} аггрегирует в себе все вектора &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; и возвращает всю последовательность векторов &amp;lt;math&amp;gt;h = [h_1, h_2, h_3, h_4]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;СV_i&amp;lt;/math&amp;gt; {{---}} вектор контекста на итерации &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Блоки механизма внимания (красный)'' {{---}} механизм внимания. Принимает &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;d_{i - 1}&amp;lt;/math&amp;gt;, возвращает &amp;lt;math&amp;gt;СV_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Блоки декодера (фиолетовый)'' {{---}} по сравнению с обычной ''Seq2Seq'' сетью меняются входные данные. Теперь на итерации &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; на вход подается не &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt;, а конкатенация &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;CV_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом при помощи механизма внимания достигается &amp;quot;фокусирование&amp;quot; декодера на определенных скрытых состояниях. В случаях машинного перевода эта возможность помогает декодеру предсказывать на какие скрытые сосояния при исходных определенных словах на языке ''A'' необходимо обратить больше внимания при переводе данного слова на язык ''B''.&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
*[[:Сверточные_нейронные_сети|Сверточные нейронные сети]]&lt;br /&gt;
*[[:Нейронные_сети,_перцептрон|Нейронные сети, перцептрон]]&lt;br /&gt;
*[[:Рекуррентные_нейронные_сети|Рекуррентные нейронные сети]]&lt;br /&gt;
&lt;br /&gt;
==Источники==&lt;br /&gt;
*[https://arxiv.org/abs/1409.0473 Статья с предложением применения механизма внимания в Seq2Seq моделей]&lt;br /&gt;
*[https://arxiv.org/abs/1502.03044 Статья с предложением применения механизма внимания для описания содержания изображений]&lt;br /&gt;
*[https://www.coursera.org/lecture/nlp-sequence-models/attention-model-lSwVa Лекция Andrew Ng о механизме внимания в NLP]&lt;br /&gt;
*[https://towardsdatascience.com/intuitive-understanding-of-attention-mechanism-in-deep-learning-6c9482aecf4f Статья с подробно разборанными примерами и кодом на ''Python'' и ''TensorFlow'']&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Нейронные сети]]&lt;br /&gt;
[[Категория: Рекуррентные нейронные сети]]&lt;/div&gt;</summary>
		<author><name>Gpevnev</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Gpevnev&amp;diff=73048</id>
		<title>Участник:Gpevnev</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Gpevnev&amp;diff=73048"/>
				<updated>2020-03-21T15:21:52Z</updated>
		
		<summary type="html">&lt;p&gt;Gpevnev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Механизм внимания в рекуррентных нейронных сетях''' (англ. ''attention mechanism'', ''attention model'') {{---}} дополнительный слой используемый в [[:Рекуррентные_нейронные_сети|рекуррентных нейронных сетях]] для &amp;quot;обращения внимания&amp;quot; последующих слоев сети на скрытое состояние нейронной сети &amp;lt;math&amp;gt;h_t&amp;lt;/math&amp;gt; в момент времени &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Изначально механизм внимания был представлен в статье [https://arxiv.org/abs/1409.0473|Neural Machine Translation by Jointly Learning to Align and Translate] и предполагал применение именно в ''Seq2Seq'' сетях, и лишь позже был использован применительно к изображениям [https://arxiv.org/abs/1502.03044|Show, Attend and Tell: Neural Image Caption Generation with Visual Attention].&lt;br /&gt;
&lt;br /&gt;
== Обобщенное описание ==&lt;br /&gt;
[[File:AttentionGeneral.png|350px|thumb|Обобщенное описание механизма внимания]]&lt;br /&gt;
[[:Рекуррентные_нейронные_сети|Рекуррентные нейронные сети]] используются при обработке данных, для которых важна их последовательность. В классическом случае применения [[:Рекуррентные_нейронные_сети|РНН]] результатом является только последнее скрытое состояние &amp;lt;math&amp;gt;h_m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; - длина последовательности входных данных. Использование механизма внимания позволяет использовать информацию полученную не только из последнего скрытого состояниния, но и любого скрытого состояния &amp;lt;math&amp;gt;h_t&amp;lt;/math&amp;gt; для любого &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Обычно слой использующийся для механизма внимания представляет собой обычную, чаще всего однослойную, нейронную сеть на вход которой подаются &amp;lt;math&amp;gt;h_t, t = 1 \  \ldots m&amp;lt;/math&amp;gt;, а также вектор &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; в котором содержится некий контекст зависящий от конкретно задачи (пример &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; для задачи машинного перевода использующего ''Seq2Seq'' арихитектуру). &lt;br /&gt;
&lt;br /&gt;
Выходом данного слоя будет являтся вектор &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; (англ. ''score'') - оценки на основании которых на скрытое состояние &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; будет &amp;quot;обращено внимание&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Далее для нормализации значений &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; используется &amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt;. Тогда &amp;lt;math&amp;gt;e = softmax(s)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt; здесь используется благодоря своим свойствам: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;\forall s:\  \sum_{i=1}^n softmax(s)_i = 1, &amp;lt;/math&amp;gt;&lt;br /&gt;
*&amp;lt;math&amp;gt;\forall s,\ i: \ softmax(s)_i &amp;gt;= 0 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Далее считается &amp;lt;math&amp;gt;СV&amp;lt;/math&amp;gt; (англ. ''context vector'') &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;СV = \sum_{i=1}^m e_i h_i&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результатом работы слоя внимания является &amp;lt;math&amp;gt;CV&amp;lt;/math&amp;gt; который, содержит в себе информацию обо всех скрытых состоянях &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; пропорционально оценке &amp;lt;math&amp;gt;e_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Пример использования для архитектуры ''Seq2Seq'' ==&lt;br /&gt;
Из-за интуитивной понятности механизма внимания для проблемы машинного перевода, а также поскольку в оригинальной статье рассматривается механизм внимания применительно именно к ''Seq2Seq'' сетям. Пример добавления механизма внимания в ''Seq2Seq'' сеть поможет лучше понять его предназначение.&lt;br /&gt;
&lt;br /&gt;
Несмотря на то, что нейронные сети рассматриваются как &amp;quot;черный ящик&amp;quot; и интерпретировать их внутренности в понятных человеку терминах часто невозможно, все же механизм внимания интуитивно понятный людям смог улучшить результаты машинного перевода для алгоритма используемого в статье.&lt;br /&gt;
&lt;br /&gt;
=== Базовая архитектура ''Seq2Seq'' ===&lt;br /&gt;
[[File:Seq2SeqBasic.png|450px|thumb|Пример работы базовой ''Seq2Seq'' сети]]&lt;br /&gt;
Данный пример рассматривает применение механизма внимания в задаче машинного перевода в применении к архитектуре ''Seq2Seq''.&lt;br /&gt;
&lt;br /&gt;
''Seq2Seq'' состоит из двух [[:Рекуррентные_нейронные_сети|РНН]] - ''Encoder'' и ''Decoder''.&lt;br /&gt;
&lt;br /&gt;
''Encoder'' {{---}} принимает предложение на языке ''A'' и сжимает его в вектор скрытого состояния.&lt;br /&gt;
&lt;br /&gt;
''Decoder'' {{---}} выдает слово на языке ''B'', принимает последнее скрытое состояние энкодера и предыдущее предыдущее предсказаное слово.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Рассмотрим пример работы ''Seq2Seq'' сети:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''A''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние энкодера.&lt;br /&gt;
&lt;br /&gt;
''Блоки энкодера (зеленый)'' {{---}} блоки энкодера получающие на вход &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; и передающие скрытое состояние &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; на следующую итерацию.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние декодера.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''B''.&lt;br /&gt;
&lt;br /&gt;
''Блоки декодера (фиолетовый)'' {{---}} блоки декодера получающие на вход &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt; или специальный токен '''start''' в случае первой итерации и возвращаюшие &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; {{---}} слова в предложении на языке ''B''. &lt;br /&gt;
Передают &amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt; {{---}} скрытое состояние декодера на следующую итерацию. &lt;br /&gt;
Перевод считается завершенным при &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt;, равном специальному токену '''end'''.&lt;br /&gt;
&lt;br /&gt;
=== Применение механизма внимания для ''Seq2Seq'' ===&lt;br /&gt;
При добавлении механизма в данную архитектуру между [[:Рекуррентные_нейронные_сети|РНН]] ''Encoder'' и ''Decoder'' слоя механизма внимания получится следуюшая схема:&lt;br /&gt;
&lt;br /&gt;
[[File:Seq2SeqAttention.png|450px|thumb|Пример работы ''Seq2Seq'' сети с механизмом внимания]]&lt;br /&gt;
&lt;br /&gt;
Здесь &amp;lt;math&amp;gt;x_i, h_i, d_i, y_i&amp;lt;/math&amp;gt; имееют те же назначения, что и в варианте без механизма внимания.&lt;br /&gt;
&lt;br /&gt;
''Аггрегатор скрытых состояний энкодера (желтый)'' {{---}} аггрегирует в себе все вектора &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; и возвращает всю последовательность векторов &amp;lt;math&amp;gt;h = [h_1, h_2, h_3, h_4]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;СV_i&amp;lt;/math&amp;gt; {{---}} вектор контекста на итерации &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Блоки механизма внимания (красный)'' {{---}} механизм внимания. Принимает &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;d_{i - 1}&amp;lt;/math&amp;gt;, возвращает &amp;lt;math&amp;gt;СV_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Блоки декодера (фиолетовый)'' {{---}} по сравнению с обычной ''Seq2Seq'' сетью меняются входные данные. Теперь на итерации &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; на вход подается не &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt;, а конкатенация &amp;lt;math&amp;gt;y_{i-1}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;CV_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом при помощи механизма внимания достигается &amp;quot;фокусирование&amp;quot; декодера на определенных скрытых состояниях. В случаях машинного перевода эта возможность помогает декодеру предсказывать на какие скрытые сосояния при исходных определенных словах на языке ''A'' необходимо обратить больше внимания при переводе данного слова на язык ''B''.&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
*[[:Сверточные_нейронные_сети|Сверточные нейронные сети]]&lt;br /&gt;
*[[:Нейронные_сети,_перцептрон|Нейронные сети, перцептрон]]&lt;br /&gt;
*[[:Рекуррентные_нейронные_сети|Рекуррентные нейронные сети]]&lt;br /&gt;
&lt;br /&gt;
==Источники==&lt;br /&gt;
*[https://arxiv.org/abs/1409.0473 Neural Machine Translation by Jointly Learning to Align and Translate. Dzmitry Bahdanau, Kyunghyun Cho, Yoshua Bengio]&lt;br /&gt;
*[https://arxiv.org/abs/1502.03044 Show, Attend and Tell: Neural Image Caption Generation with Visual Attention. Kelvin Xu, Jimmy Ba, Ryan Kiros, Kyunghyun Cho, Aaron Courville, Ruslan Salakhutdinov, Richard Zemel, Yoshua Bengio]&lt;br /&gt;
*[https://www.coursera.org/lecture/nlp-sequence-models/attention-model-lSwVa Лекция Andrew Ng о механизме внимания в NLP]&lt;br /&gt;
*[https://towardsdatascience.com/intuitive-understanding-of-attention-mechanism-in-deep-learning-6c9482aecf4f Статья с подробно разборанными примерами и кодом на ''Python'' и ''TensorFlow'']&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Нейронные сети]]&lt;br /&gt;
[[Категория: Рекуррентные нейронные сети]]&lt;/div&gt;</summary>
		<author><name>Gpevnev</name></author>	</entry>

	</feed>