Вопрос или проблема
За последние несколько лет было несколько публикаций по так называемому механизму “Внимания” в глубоком обучении (например, 1 2). Концепция заключается в том, что мы хотим, чтобы нейронная сеть сосредоточилась или обратила больше внимания на определенные признаки, и она продемонстрировала некоторые эмпирические успехи в области обработки естественного языка и связанных последовательных моделей.
Когда я смотрю на некоторые примеры кода, такие как этот пример, добавление слоя Внимания интуитивно кажется разумным и, похоже, улучшает производительность модели LSTM. Однако на вид это очень похоже на обычный полностью связанный слой. В этой ссылке (и с некоторым небольшим изменением нотации) слой Внимания выдает
$$ c(x) = \tanh(\mathbf{W}x + \mathbf{b} ) $$
$$ \beta(x) = \frac{e^{c(x_j)}}{\sum_{j} e^{c(x_j)}} $$
$$ f_{Attention}(x) = x\beta $$
где $W,b$ — это веса/смещения, $x$ — это вход слоя, а $f(.)$ — это выход слоя. В отличие от этого, обычный полностью связанный слой:
$$ f_{Dense} = \sigma(\mathbf{W}x + \mathbf{b}) $$
для некоторой функции активации $\sigma(.)$.
Моя интерпретация реализации Внимания выше заключается в том, что это практически то же самое, что и стандартный полностью связанный слой, но с активацией $\tanh$ (почему?), затем с $\text{softmax}$ (чтобы “веса внимания” $\beta$ суммировались до 1), а затем линейное скалярное произведение.
Как эта архитектура позволяет модели иметь “внимание”? Я не вижу, чем это принципиально отличается или является более выразительным, чем просто добавление стандартного полностью связанного слоя. Неужели я что-то не понимаю?
Исправление/Моя интерпретация
Я внимательно рассмотрел пример кода, и на самом деле есть разница из-за форм параметров.
Для входного $X$ с формой (N,T,K)
, где $N$ — это образцы, $T$ — это временной интервал, а $K$ — это признаки, формы параметров Внимания следующие: $W$ (K, 1)
, $b$ (T,1)
. Это предполагает, что как “контекст” $c$, так и “веса внимания” $\beta$ имеют форму (N,T,1)
. Таким образом, в конечном скалярном произведении мы используем слой Внимания, чтобы весить каждый временной шаг (например, уделять больше внимания ценам вчера и 5 дней назад, но меньше — 30 дней назад).
В отличие от этого, полностью связанный слой в этом контексте будет генерировать некоторые (нормализованные) веса для каждого столбца признаков равномерно по временным меткам (например, уделять больше внимания всем ценам, но меньше — процентным ставкам).
Механизм внимания основан на трансформерах, которые действительно также включают полностью связанные слои.
Разница в основном связана с РНН, которые являются основой механизма внимания. Однако это внимание довольно ограничено.
Может быть сложно понять, как именно это работает, даже если вы понимаете идею шаг за шагом.
Вот почему хороший способ понять, как они работают — использовать песочницы, такие как следующие:
Ответ или решение
Вопрос о различии между механизмом внимания (Attention) и полносвязными слоями (Fully Connected Layers) в глубоких нейронных сетях действительно важен, особенно в контексте современных архитектур, таких как трансформеры и рекуррентные нейронные сети (RNN). Давайте рассмотрим основные отличия и функциональные аспекты этих двух компонентов.
Полносвязные слои
Полносвязные слои, или Dense слои, представляют собой тип нейронной сети, где каждый нейрон в слое связан с каждым нейроном в предыдущем слое. Выход слоя определяется как:
$$ f_{Dense} = \sigma(\mathbf{W}x + \mathbf{b}) $$
где:
- ( W ) — матрица весов,
- ( b ) — смещение,
- ( \sigma ) — функция активации (например, ReLU или сигмоид).
Полносвязные слои обрабатывают входные данные и выдают фиксированные выходы, основываясь на обученных весах и смещениях. Такие слои хорошо подходят для задач классификации и регрессии, но они не способны "фокусироваться" на различных частях входных данных в зависимости от контекста.
Механизм внимания
С другой стороны, механизм внимания был разработан для того, чтобы модели могли фокусироваться на определенных частях входных данных, игнорируя менее значимые. Основной целью является выделение ключевой информации в последовательных данных (например, в текстах или временных рядах) и преобразование этих данных в контекстуальные представления. В простейшем виде механизм внимания формулируется следующим образом:
- Контекстные векторы:
$$ c(x) = \tanh(\mathbf{W}x + \mathbf{b}) $$
- Веса внимания:
$$ \beta(x) = \frac{e^{c(xj)}}{\sum{j} e^{c(x_j)}} $$
- Итоговый вывод:
$$ f_{Attention}(x) = x \beta $$
Здесь, после вычисления контекстного вектора ( c ) и весов внимания ( \beta ), выходное представление создается путем взвешивания входных данных. Это позволяет механизму внимания адаптивно выделять разные временные точки или элементы последовательности в зависимости от их значимости для текущей прогнозируемой задачи.
Основное различие
Ключевое различие между полносвязным слоем и слоем внимания заключается в том, что внимание работает не только на уровне элементов входных данных, но и на уровне контекстуального восприятия данных. Это означает, что механизм внимания может динамически изменять свои веса на основе входных данных, а полносвязный слой использует статичные веса, которые не зависят от контекста.
-
Адаптивность: Внимание динамично изменяет веса на основе значимости информации, тогда как полносвязный слой использует фиксированные веса для всех входов.
-
Контекстуальная обработка: Механизм внимания позволяет модели "помнить", на какие части входных данных следует обращать внимание, а не рассматривать их порционно, как это делают полносвязные слои.
-
Обработка последовательностей: В случаях, где данные имеют временную или последовательную природу, механизм внимания может учитывать предшествующие временные шаги, тогда как полносвязные слои, как правило, игнорируют эту аспект.
Заключение
Таким образом, хотя механизм внимания может напоминать полносвязные слои по своей математической структуре, его истинная сила заключается в способности адаптивно фокусироваться на наиболее значимой информации, что делает его особенно полезным в задачах обработки естественного языка и работе с временными рядами. Понимание этих различий поможет более эффективно применять модели глубокого обучения по мере их развития и усложнения.