Механизм внимания для моделирования последовательности был впервые представлен в статье: Нейронный машинный перевод путем совместного обучения выравниванию и переводу, Bengio et. al. ICLR 2015 ». Несмотря на то, что в самой статье слово внимание упоминается редко (всего 3 раза в 2 последовательных строках !!), этот термин прижился. Многие известные работы, появившиеся позже, используют то же соглашение об именах (ну, я, например, думаю, что это скорее мягкая память, а не внимание).

Этот пост посвящен Bengio et. al. 2015 и пытается дать пошаговое объяснение модели (внимания), описанной в их статье. Возможно, это только я, но объяснение, данное в статье, и прилагаемые к ней диаграммы оставили многое для воображения. Этот пост пытается немного облегчить понимание их великой работы. Итак, начнем:

Основная идея внимания:

Основное предположение в сетях моделирования последовательности, таких как RNN, LSTM и GRU, заключается в том, что текущее состояние содержит информацию для всего входного сигнала, который мы видели до сих пор. Следовательно, конечное состояние RNN после чтения всей входной последовательности должно содержать полную информацию об этой последовательности. Это кажется слишком сильным условием и слишком большим требованием.

Механизм внимания ослабляет это предположение и предлагает, чтобы мы смотрели на скрытые состояния, соответствующие всей входной последовательности, чтобы сделать какой-либо прогноз. Но как решить, на какие состояния смотреть? Что ж, попробуй научиться этому !!

Пошаговое руководство

Как было сказано в предыдущем разделе, перед нами стоит следующая задача:

Чтобы «узнать», насколько нам нужно «уделять внимание» каждому скрытому состоянию кодировщика.

Полная архитектура выглядит следующим образом:

Сеть показана в состоянии, когда кодер (нижняя часть рис. 2) вычислил скрытые состояния hⱼ, соответствующие каждому входу Xⱼ, а декодер (верхняя часть рис. 2) отработал t-1 шагов и теперь работает. произвести вывод для временного шага t.

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

  1. Кодирование
  2. Вычисление весов внимания / выравнивания
  3. Создание вектора контекста
  4. Расшифровка / перевод

Давайте посмотрим!!

Кодировка:

Следовательно, скрытое состояние для jᵗʰ входа hⱼ представляет собой конкатенацию jᵗʰ скрытых состояний прямой и обратной RNN. Мы будем использовать взвешенную линейную комбинацию всех этих hⱼs, чтобы делать прогнозы на каждом шаге декодера. Длина выходного сигнала декодера может быть такой же или иной, чем у кодировщика.

Вычисление веса внимания / выравнивания:

На каждом временном шаге t декодера количество внимания, которое следует уделять скрытому блоку кодирования hⱼ, составляет обозначается αₜⱼ и рассчитывается как функция как hⱼ, так и предыдущего скрытого состояния декодера s ₜ-₁:

В статье a параметризуется как нейронная сеть прямого распространения, которая работает для всех j на временном шаге декодирования t. Обратите внимание на 0 ≤ αₜⱼ 1 и что все ∑ⱼ αₜⱼ = 1 из-за softmax на eₜⱼ. Эти αₜⱼ можно визуализировать как внимание, уделяемое декодером на временном шаге t скрытому блоку кодирования hⱼ.

Вектор вычислительного контекста:

Пора воспользоваться весами внимания, которые мы вычислили на предыдущем шаге !! Вот еще одна цифра, которая поможет понять:

Вектор контекста - это просто линейная комбинация скрытых весов hⱼ, взвешенных на основе вычисленных нами значений внимания αₜⱼ:

Из уравнения видно, что αₜⱼ определяет, насколько hⱼ влияет на контекст cₜ. Чем выше значение, тем выше влияние hⱼ на контекст для времени t.

Расшифровка / перевод:

Мы почти у цели! Остается только использовать вектор контекста cₜ, над вычислением которого мы так усердно работали, вместе с предыдущим скрытым состоянием декодера s ₜ-₁ и предыдущий вывод yₜ-₁ и использовать их все для вычисления нового скрытого состояния и вывода декодера: sₜ и yₜ соответственно .

В статье авторы использовали ячейку ГРУ для f и аналогичную функцию для g. Это подробности более высокого уровня, и если вам интересно, я предлагаю вам ознакомиться с Приложением А к статье. Подробную информацию о тренировках см. В Приложении B статьи.

Так что да, все кончено. Это оно. Внимание освоено! (Вероятно, на каком-то уровне понимания мы это сделали). Большое спасибо за то, что остались до сих пор.

Заключение

Это была первая статья, в которой была представлена ​​концепция внимания, и с тех пор появилось несколько работ, основанных на ней. Эта идея оказалась наиболее полезной в НЛП, где современные трансформаторные сети, использующие самооценку, штурмом взяли эту область. Это руководство станет первым шагом к глубокому погружению в поле. Я надеюсь, что это было полезно. Жду ваших комментариев и предложений.

Примечание. Все используемые здесь диаграммы созданы автором. Не стесняйтесь использовать их вместе с благодарностью :-)