Источники: Вот сокращенная версия статьи wildml: http://www.wildml.com/2016/01/attention-and-memory-in-deep-learning-and-nlp/

Типичные модели seq2seq обычно имеют форму, описанную в моем блоге: https://medium.com/towards-data-science/sequence-to-sequence-model-introduction-and-concepts-44d9b41cd42d

При использовании примера перевода с языка на язык: предполагается, что декодер сгенерирует перевод исключительно на основе последнего скрытого состояния от кодировщика. Этот вектор должен кодировать все, что нам нужно знать об исходном предложении. Он должен полностью улавливать его смысл. Говоря техническим языком, этот вектор представляет собой предложение встраивание. Фактически, если вы построите вложения различных предложений в низкоразмерном пространстве, используя PCA или t-SNE для уменьшения размерности, вы можете увидеть, что семантически похожие фразы заканчиваются рядом друг с другом. Это просто потрясающе.

Тем не менее, кажется несколько неразумным предполагать, что мы можем закодировать всю информацию о потенциально очень длинном предложении в один вектор, а затем заставить декодер произвести хороший перевод, основанный только на этом. Допустим, ваше исходное предложение состоит из 50 слов. Первое слово английского перевода, вероятно, сильно коррелирует с первым словом исходного предложения. Но это означает, что декодер должен учитывать информацию, полученную 50 шагами назад, и эту информацию нужно каким-то образом закодировать в векторе. Известно, что рекуррентные нейронные сети имеют проблемы с такими зависимостями на больших расстояниях. Теоретически такие архитектуры, как LSTM, должны уметь справляться с этим, но на практике долгосрочные зависимости все еще проблематичны. Например, исследователи обнаружили, что реверсирование исходной последовательности (подача ее обратно в кодер) дает значительно лучшие результаты, поскольку сокращает путь от декодера до соответствующих частей кодера. Точно так же двойная подача входной последовательности также помогает сети лучше запоминать вещи. Это помогает улучшить работу на практике, но это не принципиальное решение. Большинство тестов на перевод выполняется на таких языках, как французский и немецкий, которые очень похожи на английский (даже порядок слов в китайском очень похож на английский). Но есть языки (например, японский), в которых последнее слово предложения может быть очень важным для первого слова в английском переводе. В этом случае реверсирование входа только усугубит ситуацию. Итак, какая альтернатива? Механизмы внимания.

С помощью механизма внимания мы больше не пытаемся кодировать полное исходное предложение в вектор фиксированной длины. Скорее, мы позволяем декодеру следить за различными частями исходного предложения на каждом этапе генерации вывода. Важно отметить, что мы позволяем модели узнать, на что следует обратить внимание, на основе введенного предложения и того, что она уже произвела. Таким образом, в языках, которые довольно хорошо согласованы (например, английский и немецкий), декодер, вероятно, решит рассматривать вещи последовательно. Внимание к первому слову при создании первого английского слова и так далее. Именно это было сделано в Нейро-машинном переводе путем совместного обучения выравниванию и переводу и выглядит следующим образом:

Здесь y - это наши переведенные слова, полученные декодером, а x - это слова исходного предложения. На приведенном выше рисунке используется двунаправленная рекуррентная сеть, но это не важно. Важная часть состоит в том, что каждое выходное слово yt декодера теперь зависит от взвешенной комбинации всех входных состояний, а не только от последнего состояния. A - это веса, которые определяют, какую часть каждого входного состояния следует учитывать для каждого выхода. Итак, если a32 - большое число, это будет означать, что декодер уделяет много внимания второму состоянию в исходном предложении, производя третье слово целевого предложения. Обычно а обычно нормализуются до суммы 1 (так что они являются распределением по входным состояниям). Большое преимущество внимания состоит в том, что оно дает нам возможность интерпретировать и визуализировать то, что делает модель. Например, визуализируя матрицу весов внимания a при переводе предложения, мы можем понять, как переводится модель:

Здесь мы видим, что при переводе с французского на английский, сеть последовательно обслуживает каждое входное состояние, но иногда при создании выходных данных она обслуживает сразу два слова, как, например, в переводе «Сирия» на «Сирия».

Стоимость внимания

Если мы посмотрим более внимательно на уравнение внимания, мы увидим, что за внимание приходится платить. Нам нужно рассчитать значение внимания для каждой комбинации входного и выходного слова. Если у вас есть входная последовательность из 50 слов и генерируется выходная последовательность из 50 слов, это будет 2500 значений внимания. Это не так уж и плохо, но если вы выполняете вычисления на уровне персонажа и имеете дело с последовательностями, состоящими из сотен токенов, указанные выше механизмы внимания могут стать чрезмерно дорогими. Это кажется пустой тратой, и это совсем не то, что делают люди. На самом деле, это больше похоже на доступ к памяти, а не на внимание, что, на мой взгляд, неправильно (подробнее об этом ниже). Тем не менее, это не помешало механизмам внимания стать довольно популярными и хорошо справляться со многими задачами.

Альтернативный подход к вниманию - использовать обучение с подкреплением для прогнозирования приблизительного местоположения, на котором нужно сосредоточиться. Это больше похоже на человеческое внимание, и именно это сделано в Рекуррентных моделях визуального внимания.

Внимание за пределами машинного перевода

Механизм внимания сверху можно применить к любой повторяющейся модели.

В Покажи, посети, расскажи авторы применяют механизмы внимания к проблеме генерации описаний изображений. Они используют сверточную нейронную сеть для кодирования изображения и рекуррентную нейронную сеть с механизмами внимания для генерации описания. Визуализируя веса внимания (как в примере с переводом), мы интерпретируем то, на что смотрит модель при генерации слова: