Что такое attention

Что такое attention

DeepSchool

Авторы: Ксения Рябинова, Марк Страхов
Редактура:
Александр Гончаренко, Тимур Фатыхов, Денис Рябоконь


Интуиция

Бывают ситуации, когда нам нужно, чтобы сеть “смотрела” не только на локальный контекст, а сразу на все изображение, т.е. на глобальный контекст.

Что нужно, чтобы сверточная сеть “видела” сразу всю картинку? Например, можно добавить слоев и увеличить глубину. Еще можно увеличить размерность сверток или изменить сам сверточный слой (например, заменить на dilated). А можно использовать attention-слой.

Простой attention-слой

Attention-слоев бывает много разных, но основная идея всегда одна: мы рассчитываем релевантность какой-либо информации и агрегируем ее.

Рассмотрим самый простой вариант: взвесим feature-map по одной из осей.

Feature-map может быть любой. Например, это могут быть фичи с любой части сети или эмбеддинги каких-либо сущностей.

Запишем attention в виде формулы:


Поставим в формулу матрицы из примера на первом рисунке.

Операция похожа на global-pooling, но с одним отличием: фичи у feature-map теперь взвешены с помощью attention-scores. Attention-scores меняются в зависимости от входа сети.

Attention часто называют умным пуллингом. Потому что мы не просто усредняем по фичам (или находим максимум), а хитро взвешиваем, и веса у нас каждый раз разные. Таким образом получаем больше вариативности.

Attention может быть локальным и глобальным, может применяться к разным фичам (к каналам, к эмбеддингам токенов и др.). Но по сути мы выполняем взвешивание скорами, которые меняются в зависимости от входных данных.

Вот, собственно, и все.

Заметка

Attention - это операция, которая рассчитывает релевантность, а затем агрегирует входные данные в соответствии с этой релевантностью. Но часто в статьях, упоминающих attention, всплывают сущности под названием Query, Key и Value. Эти термины легко могут запутать, поэтому давайте с ними разберемся.

Откуда берутся Query, Key, Value?

Рассмотрим на примере Dot-product Self-attention (Self-attention - это attention, который применяется к одной и той же feature-map, a Dot-product означает, что внутри расчета релевантности есть скалярное произведение).

QueryKey и Value - это тензоры, которые участвуют в расчете attention. Судя по всему, традиция называть так эти тензоры пошла из статьи “Attention is all you need”. Эти тензоры получаются после умножения feature-map X на веса W. Как правило W - это обычные тензоры, которые мы обучаем. Функции активации после умножения на W нет! В статье “Attention is all you need” Dot-product Self-attention выглядит примерно так:


Более подробно тут и тут.

Похожие термины есть в retrieval-системах (поиск релевантных сущностей по запросу). Например, когда вы ищите видео в Ютубе, поисковый движок проецирует ваш запрос (Query) на множество сущностей (Keys) в базе данных. Сущностью может быть хеш от видео, название видео, описание, никнейм автора и т.д. Эти сущности связаны с базой видеофайлов (Values) из которых нам и надо выбрать релевантные (Result). Attention-механизм можно понимать как retrieval-процесс. Более подробно можно прочитать здесь.


Report Page