Механизм внимания

Материал из MachineLearning.

(Различия между версиями)
Перейти к: навигация, поиск
(Исправлены формулы LaTeX (String.raw), убрано дублирование имени)
(глубина, формулы, связность, второй промпт)
Строка 1: Строка 1:
-
{{well|Статья написана с использованием LLM '''Claude Sonnet 4''' и проверена участником [[Участник:Emil Petrov|Emil Petrov]] 14:59, 16 июня 2026 (MSD)
+
{{well|Статья написана с использованием LLM '''Claude Sonnet 4''' и проверена участником [[Участник:Emil Petrov|Emil Petrov]] 20:00, 14 июля 2026 (MSD)
Промпт приводится полностью в [[Обсуждение:Механизм внимания]]
Промпт приводится полностью в [[Обсуждение:Механизм внимания]]
}}
}}
{{TOCright}}
{{TOCright}}
-
'''Механи́зм внима́ния''' (англ. attention mechanism) — метод в [[Нейронная сеть|нейронных сетях]], позволяющий модели динамически взвешивать различные части входных данных при формировании каждого элемента выходной последовательности. Впервые предложен Bahdanau et al. (2014) для задачи нейронного машинного перевода<ref name="bahdanau2014">{{статья |автор=Bahdanau D., Cho K., Bengio Y. |заглавие=Neural Machine Translation by Jointly Learning to Align and Translate |издание=ICLR |год=2015 |ссылка=https://arxiv.org/abs/1409.0473}}</ref> и впоследствии ставший ключевым строительным блоком [[Трансформер (модель)|трансформера]].
+
'''Механи́зм внима́ния''' (англ. attention mechanism) — семейство операций в [[Нейронная сеть|нейронных сетях]], позволяющих модели динамически взвешивать части входа при построении каждого элемента выхода. Впервые в современном виде предложен Bahdanau, Cho и Bengio (2014) для нейронного машинного перевода<ref name="bahdanau2014">{{статья |автор=Bahdanau D., Cho K., Bengio Y. |заглавие=Neural Machine Translation by Jointly Learning to Align and Translate |издание=ICLR |год=2015 |ссылка=https://arxiv.org/abs/1409.0473}}</ref> и стал центральным блоком [[Трансформер (модель)|трансформера]] и [[Большая языковая модель|больших языковых моделей]].
-
== Мотивировка ==
+
Аналогия: переводчик, который при каждом новом слове заново пробегает глазами исходный текст и выделяет релевантные фрагменты, а не пытается удержать весь абзац в одной «коробочке» памяти. Внимание формализует этот просмотр как мягкое (дифференцируемое) распределение весов.
-
В классических энкодер-декодерных архитектурах на основе [[Рекуррентная нейронная сеть|рекуррентных нейронных сетей]] вся информация о входной последовательности сжимается в единственный вектор фиксированной длины — «контекстный вектор». При генерации длинных последовательностей это узкое место приводит к деградации качества: декодер не может напрямую «посмотреть» на нужный фрагмент входа. Механизм внимания устраняет это ограничение, позволяя декодеру на каждом шаге формировать взвешенную сумму всех скрытых состояний энкодера.
+
== Мотивировка: узкое горлышко seq2seq ==
-
== Базовый механизм внимания Bahdanau ==
+
В классических энкодер-декодерных [[Рекуррентная нейронная сеть|RNN]] вся входная последовательность сжимается в один вектор фиксированной длины — контекст <tex>c</tex>. Декодер порождает перевод, опираясь только на <tex>c</tex> и собственную историю. Для коротких предложений это работает; для длинных — качество падает: ранние слова «вытесняются», а модель не может явно вернуться к нужному фрагменту входа.
-
Пусть <tex>h_1, \ldots, h_T</tex> — скрытые состояния энкодера, <tex>s_{t-1}</tex> — скрытое состояние декодера на предыдущем шаге. Оценка релевантности (энергия) <tex>i</tex>-го токена входа для генерации токена <tex>t</tex>:
+
Bahdanau et al. разрешили декодеру на каждом шаге <tex>t</tex> строить ''свой'' контекст <tex>c_t</tex> как взвешенную сумму всех скрытых состояний энкодера. Так появилось обучаемое ''мягкое выравнивание'' (soft alignment) между словами перевода и оригинала — без жёсткого алгоритма выравнивания вроде IBM Models.
-
:<tex>e_{t,i} = a(s_{t-1}, h_i),</tex>
+
== Базовый механизм Bahdanau ==
-
где <tex>a(\cdot)</tex> — небольшая полносвязная сеть. Оценки нормируются функцией softmax:
+
Пусть <tex>h_1, \ldots, h_T</tex> — состояния энкодера, <tex>s_{t-1}</tex> — состояние декодера на предыдущем шаге. Энергия (оценка релевантности) пары <tex>(t, i)</tex>:
 +
 
 +
:<tex>e_{t,i} = a(s_{t-1}, h_i) = v_a^\top \tanh\!\left(W_a s_{t-1} + U_a h_i\right),</tex>
 +
 
 +
где <tex>a(\cdot)</tex> — небольшая сеть с параметрами <tex>v_a, W_a, U_a</tex>. Нормировка softmax:
:<tex>\alpha_{t,i} = \frac{\exp(e_{t,i})}{\sum_{j=1}^{T} \exp(e_{t,j})}.</tex>
:<tex>\alpha_{t,i} = \frac{\exp(e_{t,i})}{\sum_{j=1}^{T} \exp(e_{t,j})}.</tex>
-
Контекстный вектор для шага <tex>t</tex> формируется как взвешенная сумма:
+
Контекст для шага <tex>t</tex>:
:<tex>c_t = \sum_{i=1}^{T} \alpha_{t,i}\, h_i.</tex>
:<tex>c_t = \sum_{i=1}^{T} \alpha_{t,i}\, h_i.</tex>
-
Коэффициенты <tex>\alpha_{t,i}</tex> интерпретируются как «мягкое выравнивание» (soft alignment) — вероятности того, что <tex>i</tex>-й входной токен важен при генерации <tex>t</tex>-го выходного.
+
Коэффициенты <tex>\alpha_{t,i}</tex> удобно визуализировать как тепловую карту «какое входное слово важно для текущего выходного». Luong et al. (2015) предложили упрощённые скоринги скалярное произведение <tex>s^\top h</tex> и общее <tex>s^\top W h</tex> — ближе к тому, что позже закрепилось в трансформере.
 +
 
 +
'''Мягкое vs жёсткое внимание.''' Описанное выше — soft attention: веса дифференцируемы, обучение end-to-end через [[Метод обратного распространения ошибки|обратное распространение]]. Hard attention выбирает одну позицию (или дискретное подмножество) и требует REINFORCE/вариационных оценок; в NLP почти вытеснено soft-вариантом, но идея «выбрать фрагмент» жива в retrieval и tool-use у [[Большая языковая модель|LLM]].
== Scaled Dot-Product Attention ==
== Scaled Dot-Product Attention ==
-
В трансформере Vaswani et al. (2017) предложили более эффективную формуляцию через матричные операции. Входы — матрицы запросов <tex>Q \in \mathbb{R}^{n \times d_k}</tex>, ключей <tex>K \in \mathbb{R}^{m \times d_k}</tex> и значений <tex>V \in \mathbb{R}^{m \times d_v}</tex>:
+
Vaswani et al. (2017)<ref name="vaswani2017">{{статья |автор=Vaswani A. et al. |заглавие=Attention Is All You Need |издание=NeurIPS |год=2017 |ссылка=https://arxiv.org/abs/1706.03762}}</ref> сформулировали внимание как пакет матричных операций, удобный для GPU. Входы: запросы <tex>Q \in \mathbb{R}^{n \times d_k}</tex>, ключи <tex>K \in \mathbb{R}^{m \times d_k}</tex>, значения <tex>V \in \mathbb{R}^{m \times d_v}</tex>:
:<tex>\text{Attention}(Q, K, V) = \text{softmax}\!\left(\frac{QK^\top}{\sqrt{d_k}}\right) V.</tex>
:<tex>\text{Attention}(Q, K, V) = \text{softmax}\!\left(\frac{QK^\top}{\sqrt{d_k}}\right) V.</tex>
-
Деление на <tex>\sqrt{d_k}</tex> предотвращает попадание в области с малым градиентом функции softmax при больших значениях скалярных произведений.
+
'''Зачем делить на <tex>\sqrt{d_k}</tex>?''' Если компоненты <tex>q</tex> и <tex>k</tex> независимы со средним 0 и дисперсией 1, то <tex>\mathrm{Var}(q^\top k) = d_k</tex>. Без масштабирования при большом <tex>d_k</tex> аргументы softmax уходят в насыщение, градиенты становятся малыми, обучение замедляется. Масштаб возвращает дисперсию к порядку 1.
-
=== Типы внимания в трансформере ===
+
Интерпретация «библиотеки»: запрос — формулировка вопроса читателя; ключ — каталожная карточка; значение — содержимое книги. Softmax по строке даёт, какую долю внимания отдать каждой книге; выход — взвешенная сумма содержаний.
-
* '''Self-attention (само-внимание)''' — <tex>Q = K = V</tex> формируются из одного входа. Каждый токен «смотрит» на все остальные токены той же последовательности, захватывая зависимости вне зависимости от расстояния между ними.
+
=== Self-, cross- и masked-attention ===
-
* '''Cross-attention (кросс-внимание)''' — запросы <tex>Q</tex> поступают из декодера, а ключи <tex>K</tex> и значения <tex>V</tex> — из энкодера. Используется для установления связи между входной и выходной последовательностями.
+
* '''Self-attention''' — <tex>Q, K, V</tex> из одной последовательности. Каждый токен взаимодействует со всеми остальными за <tex>O(1)</tex> «прыжков» по графу зависимостей (против <tex>O(n)</tex> в RNN). Сложность по времени и памяти — <tex>O(n^2 d)</tex> при длине <tex>n</tex> и ширине <tex>d</tex>.
 +
* '''Cross-attention''' запросы из одной модальности/последовательности (например, декодер или карта изображения), ключи и значения из другой (энкодер, текстовые [[Нейросетевое встраивание|эмбеддинги]]). Связывает перевод с оригиналом, изображение с подписью, ответ с документом в RAG.
 +
* '''Masked (causal) attention''' — перед softmax в запрещённые позиции пишут <tex>-\infty</tex>, обнуляя веса. Нужно для авторегрессии в GPT-подобных моделях: позиция <tex>t</tex> не видит будущее. В энкодере BERT маски нет (двунаправленный контекст); при MLM маскируются сами входные токены, а не граф внимания.
-
* '''Маскированное внимание (masked attention)''' — позиции, на которые нельзя смотреть (будущие токены при авторегрессии), получают <tex>-\infty</tex> перед softmax, что обнуляет соответствующие веса внимания.
+
=== Сравнение с RNN по сложности ===
-
== Многоголовое внимание ==
+
{| class="wikitable"
 +
|-
 +
! || Self-attention || RNN/LSTM || Свёртка (ядро <tex>k</tex>)
 +
|-
 +
| Сложность на слой || <tex>O(n^2 d)</tex> || <tex>O(n d^2)</tex> || <tex>O(k n d^2)</tex>
 +
|-
 +
| Длина пути между позициями || <tex>O(1)</tex> || <tex>O(n)</tex> || <tex>O(n/k)</tex>
 +
|-
 +
| Параллелизм по последовательности || Полный || Нет || Полный
 +
|-
 +
| Память активаций || <tex>O(n^2)</tex> (без Flash) || <tex>O(n)</tex> || <tex>O(n)</tex>
 +
|}
-
Многоголовое внимание (multi-head attention) запускает <tex>h</tex> независимых операций внимания с разными линейными проекциями:
+
Для коротких и средних <tex>n</tex> квадрат внимания дешевле «дорогой» RNN с большим <tex>d</tex>; для очень длинных контекстов память становится узким местом — отсюда FlashAttention, sparse/GQA и исследования SSM.
 +
 
 +
== Многоголовое внимание ==
:<tex>\text{MultiHead}(Q, K, V) = \text{Concat}(\text{head}_1, \ldots, \text{head}_h)\, W^O,</tex>
:<tex>\text{MultiHead}(Q, K, V) = \text{Concat}(\text{head}_1, \ldots, \text{head}_h)\, W^O,</tex>
 +
:<tex>\text{head}_i = \text{Attention}(QW_i^Q,\; KW_i^K,\; VW_i^V),</tex>
:<tex>\text{head}_i = \text{Attention}(QW_i^Q,\; KW_i^K,\; VW_i^V),</tex>
-
где <tex>W_i^Q \in \mathbb{R}^{d_{\text{model}} \times d_k}</tex>, <tex>W_i^K \in \mathbb{R}^{d_{\text{model}} \times d_k}</tex>, <tex>W_i^V \in \mathbb{R}^{d_{\text{model}} \times d_v}</tex>, <tex>W^O \in \mathbb{R}^{h d_v \times d_{\text{model}}}</tex> — обучаемые матрицы.
+
где <tex>W_i^Q \in \mathbb{R}^{d_{\text{model}} \times d_k}</tex>, аналогично <tex>W_i^K, W_i^V</tex>, и <tex>W^O \in \mathbb{R}^{h d_v \times d_{\text{model}}}</tex>. Обычно <tex>d_k = d_v = d_{\text{model}} / h</tex>, так что суммарная стоимость сравнима с одной «широкой» головой.
-
Разные головы специализируются на синтаксических связях, семантических отношениях, кореференции, позиционных паттернах и т.д.
+
Разные головы могут фокусироваться на синтаксисе, пунктуации, кореференции, позиционных шаблонах. На практике специализация нечёткая и зависит от слоя: нижние слои ближе к локальным паттернам, верхние — к семантике. В LLM для ускорения инференса часто уменьшают число KV-голов (см. GQA ниже), сохраняя число query-голов.
 +
 
 +
При авторегрессионной генерации ключи и значения прошлых токенов кэшируют ('''KV-cache'''): на шаге <tex>t</tex> считают только новый query и дописывают одну строку в K/V. Объём кэша растёт как <tex>O(\text{слои} \cdot n \cdot d)</tex> и часто доминирует в стоимости обслуживания длинного диалога — ещё один стимул к GQA, квантизации кэша и скользящему окну.
== Эффективные варианты ==
== Эффективные варианты ==
-
Квадратичная сложность <tex>O(n^2)</tex> стандартного внимания ограничивает применение к длинным последовательностям. Предложены альтернативы:
+
Квадратичность <tex>O(n^2)</tex> ограничивает длинный контекст. Основные линии атак:
 +
 
 +
* '''Sparse attention''' (Longformer, BigBird) — локальное окно плюс глобальные токены / случайные связи; сложность <tex>O(n \log n)</tex> или <tex>O(n)</tex>. Хорошо для документов, хуже улавливает произвольные дальние пары без глобальных узлов.
 +
* '''Kernel / linear attention''' (Performer, Linear Transformer) — аппроксимация softmax через признаки ядра: <tex>\mathrm{softmax}(QK^\top)V \approx \phi(Q)\,(\phi(K)^\top V)</tex>, сложность <tex>O(n d^2)</tex>. Точность зависит от аппроксимации; на коротких последовательностях выигрыш невелик.
 +
* '''FlashAttention'''<ref name="dao2022">{{статья |автор=Dao T., Fu D. Y., Ermon S., Rudra A., Ré C. |заглавие=FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness |издание=NeurIPS |год=2022 |ссылка=https://arxiv.org/abs/2205.14135}}</ref> — ''точный'' Softmax-attention, но без материализации полной матрицы <tex>n \times n</tex> в HBM: блоки крутятся в SRAM, используются online-softmax и recomputation на backward. Ускорение 2–4× и существенная экономия памяти; FlashAttention-2/3 усиливают параллелизм и учёт тензорных ядер.
 +
* '''Grouped Query Attention (GQA)''' и Multi-Query Attention (MQA) — несколько query-голов делят общие K/V. Меньше KV-кэш при генерации → выше throughput у LLM без сильной потери качества относительно полного MHA.
 +
* '''Скользящее окно и гибриды''' (Mistral, Gemma-подобные схемы) — локальное внимание в части слоёв плюс редкие глобальные/полносвязные слои.
-
* '''Sparse Attention''' (Longformer, BigBird) — каждый токен посещает локальное окно и набор глобальных токенов, снижая сложность до <tex>O(n \log n)</tex> или <tex>O(n)</tex>.
+
Отдельно стоят альтернативы attenton-слою целиком (SSM, Mamba): они претендуют на почти линейную сложность, но экосистема LLM по-прежнему опирается на оптимизированный Softmax-attention.
-
* '''Linear Attention''' (Performer) — аппроксимация ядра softmax случайными признаками, линейная сложность <tex>O(n)</tex>.
+
-
* '''FlashAttention''' — IO-aware алгоритм точного вычисления внимания с блочной обработкой в SRAM GPU без материализации матрицы <tex>n \times n</tex>. Ускоряет вычисления в 2–4× при той же точности.
+
-
* '''Grouped Query Attention''' (GQA) — уменьшение числа голов для ключей и значений при сохранении голов для запросов; ускоряет инференс.
+
== Применения вне NLP ==
== Применения вне NLP ==
-
Механизм внимания проник во многие области машинного обучения:
+
* '''Компьютерное зрение''' — ViT применяет self-attention к патчам; DETR — к объектным запросам; в [[Диффузионная модель|диффузии]] кросс-внимание связывает текст и латент изображения.
 +
* '''Рекомендательные системы''' — внимание по истории кликов/просмотров вместо фиксированного пулинга.
 +
* '''Биология''' — AlphaFold2 (Evoformer): attention по множественному выравниванию и парам остатков.
 +
* '''Графы''' — Graph Attention Networks (GAT): веса рёбер обучаются через attention вместо фиксированной нормировки Лапласиана.
 +
* '''Речь и аудио''' — Conformer и Whisper сочетают свёртки с self-attention по времени.
 +
* '''Промпт и RAG''' — качество ответа [[Большая языковая модель|LLM]] зависит от того, какие фрагменты контекста «подсветит» внимание; отсюда важность [[Промпт-инжиниринг|промпт-инжиниринга]] и отбора документов.
-
* '''Компьютерное зрение''' — Vision Transformer (ViT) применяет self-attention к патчам изображений.
+
== Attention is not Explanation ==
-
* '''Рекомендательные системы''' — модели внимания над историей взаимодействий пользователя.
+
 
-
* '''Предсказание структуры белков''' — AlphaFold2 использует multi-head attention в блоках Evoformer.
+
Для специалистов важно разделение: ''внимание — механизм маршрутизации информации'', а не автоматически достоверное объяснение решения. Jain и Wallace (2019)<ref name="jain2019">{{статья |автор=Jain S., Wallace B. C. |заглавие=Attention is not Explanation |издание=NAACL-HLT |год=2019 |ссылка=https://arxiv.org/abs/1902.10186}}</ref> показали, что альтернативные распределения внимания часто дают почти тот же выход, а корреляция между весами внимания и градиентными/leave-one-out мерами важности признаков слаба. Последующие работы уточняют: в некоторых задачах и слоях внимание более интерпретируемо, особенно при анализе синтаксических голов, но ''нельзя'' отождествлять <tex>\alpha_{t,i}</tex> с «причиной», по которой модель выдала класс или токен.
-
* '''Генерация изображений''' [[Диффузионная модель|диффузионные модели]] применяют кросс-внимание между текстовым условием и картой признаков изображения.
+
 
-
* '''Обработка графов''' — Graph Attention Networks (GAT).
+
Практический вывод: тепловые карты внимания — полезный диагностический инструмент и источник гипотез, но для ответственности (medicine, law, credit) нужны дополнительные методы — integrated gradients, probing, causal interventions, human eval — а не только визуализация Softmax. Wiegreffe и Pinter (2019) возражают, что при дополнительных проверках (adversarial attention) часть карт всё же несёт сигнал; консенсус сообщества — ''осторожная'' интерпретация, а не полный отказ от анализа внимания.
 +
 
 +
Связь с выравниванием моделей: при [[Обучение с подкреплением из обратной связи человека (RLHF)|RLHF]] и предпочтениях меняется поведение генерации, но механизм внимания остаётся тем же вычислительным примитивом — меняются веса, а не сама операция Softmax-attention. [[Промпт-инжиниринг|Промпт]] же влияет на то, ''какие'' токены окажутся в контексте и, следовательно, между какими парами возникнут большие веса.
== См. также ==
== См. также ==
Строка 76: Строка 110:
* [[Большая языковая модель]]
* [[Большая языковая модель]]
* [[Нейросетевое встраивание]]
* [[Нейросетевое встраивание]]
-
* [[Рекуррентная нейронная сеть]]
+
* [[Промпт-инжиниринг]]
* [[Диффузионная модель]]
* [[Диффузионная модель]]
 +
* [[Обучение с подкреплением из обратной связи человека (RLHF)]]
 +
* [[Рекуррентная нейронная сеть]]
== Примечания ==
== Примечания ==
Строка 84: Строка 120:
== Литература ==
== Литература ==
* {{статья |автор=Bahdanau D., Cho K., Bengio Y. |заглавие=Neural Machine Translation by Jointly Learning to Align and Translate |издание=ICLR |год=2015 |ссылка=https://arxiv.org/abs/1409.0473}}
* {{статья |автор=Bahdanau D., Cho K., Bengio Y. |заглавие=Neural Machine Translation by Jointly Learning to Align and Translate |издание=ICLR |год=2015 |ссылка=https://arxiv.org/abs/1409.0473}}
 +
* {{статья |автор=Luong M.-T., Pham H., Manning C. D. |заглавие=Effective Approaches to Attention-based Neural Machine Translation |издание=EMNLP |год=2015 |ссылка=https://arxiv.org/abs/1508.04025}}
* {{статья |автор=Vaswani A. et al. |заглавие=Attention Is All You Need |издание=NeurIPS |год=2017 |ссылка=https://arxiv.org/abs/1706.03762}}
* {{статья |автор=Vaswani A. et al. |заглавие=Attention Is All You Need |издание=NeurIPS |год=2017 |ссылка=https://arxiv.org/abs/1706.03762}}
* {{статья |автор=Dao T., Fu D. Y., Ermon S., Rudra A., Ré C. |заглавие=FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness |издание=NeurIPS |год=2022 |ссылка=https://arxiv.org/abs/2205.14135}}
* {{статья |автор=Dao T., Fu D. Y., Ermon S., Rudra A., Ré C. |заглавие=FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness |издание=NeurIPS |год=2022 |ссылка=https://arxiv.org/abs/2205.14135}}
 +
* {{статья |автор=Ainslie J. et al. |заглавие=GQA: Training Generalized Multi-Query Transformer Models from Multi-Head Checkpoints |издание=EMNLP |год=2023 |ссылка=https://arxiv.org/abs/2305.13245}}
* {{статья |автор=Jain S., Wallace B. C. |заглавие=Attention is not Explanation |издание=NAACL-HLT |год=2019 |ссылка=https://arxiv.org/abs/1902.10186}}
* {{статья |автор=Jain S., Wallace B. C. |заглавие=Attention is not Explanation |издание=NAACL-HLT |год=2019 |ссылка=https://arxiv.org/abs/1902.10186}}
 +
* {{статья |автор=Wiegreffe S., Pinter Y. |заглавие=Attention is not not Explanation |издание=EMNLP |год=2019 |ссылка=https://arxiv.org/abs/1908.04626}}
[[Категория:Машинное обучение]]
[[Категория:Машинное обучение]]
[[Категория:Нейронные сети]]
[[Категория:Нейронные сети]]
[[Категория:Обработка естественного языка]]
[[Категория:Обработка естественного языка]]
 +
[[Категория:Глубокое обучение]]

Версия 17:13, 14 июля 2026

Статья написана с использованием LLM Claude Sonnet 4 и проверена участником Emil Petrov 20:00, 14 июля 2026 (MSD)

Промпт приводится полностью в Обсуждение:Механизм внимания


Содержание

Механи́зм внима́ния (англ. attention mechanism) — семейство операций в нейронных сетях, позволяющих модели динамически взвешивать части входа при построении каждого элемента выхода. Впервые в современном виде предложен Bahdanau, Cho и Bengio (2014) для нейронного машинного перевода[1] и стал центральным блоком трансформера и больших языковых моделей.

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

Мотивировка: узкое горлышко seq2seq

В классических энкодер-декодерных RNN вся входная последовательность сжимается в один вектор фиксированной длины — контекст c. Декодер порождает перевод, опираясь только на c и собственную историю. Для коротких предложений это работает; для длинных — качество падает: ранние слова «вытесняются», а модель не может явно вернуться к нужному фрагменту входа.

Bahdanau et al. разрешили декодеру на каждом шаге t строить свой контекст c_t как взвешенную сумму всех скрытых состояний энкодера. Так появилось обучаемое мягкое выравнивание (soft alignment) между словами перевода и оригинала — без жёсткого алгоритма выравнивания вроде IBM Models.

Базовый механизм Bahdanau

Пусть h_1, \ldots, h_T — состояния энкодера, s_{t-1} — состояние декодера на предыдущем шаге. Энергия (оценка релевантности) пары (t, i):

e_{t,i} = a(s_{t-1}, h_i) = v_a^\top \tanh\!\left(W_a s_{t-1} + U_a h_i\right),

где a(\cdot) — небольшая сеть с параметрами v_a, W_a, U_a. Нормировка softmax:

\alpha_{t,i} = \frac{\exp(e_{t,i})}{\sum_{j=1}^{T} \exp(e_{t,j})}.

Контекст для шага t:

c_t = \sum_{i=1}^{T} \alpha_{t,i}\, h_i.

Коэффициенты \alpha_{t,i} удобно визуализировать как тепловую карту «какое входное слово важно для текущего выходного». Luong et al. (2015) предложили упрощённые скоринги — скалярное произведение s^\top h и общее s^\top W h — ближе к тому, что позже закрепилось в трансформере.

Мягкое vs жёсткое внимание. Описанное выше — soft attention: веса дифференцируемы, обучение end-to-end через обратное распространение. Hard attention выбирает одну позицию (или дискретное подмножество) и требует REINFORCE/вариационных оценок; в NLP почти вытеснено soft-вариантом, но идея «выбрать фрагмент» жива в retrieval и tool-use у LLM.

Scaled Dot-Product Attention

Vaswani et al. (2017)[1] сформулировали внимание как пакет матричных операций, удобный для GPU. Входы: запросы Q \in \mathbb{R}^{n \times d_k}, ключи K \in \mathbb{R}^{m \times d_k}, значения V \in \mathbb{R}^{m \times d_v}:

\text{Attention}(Q, K, V) = \text{softmax}\!\left(\frac{QK^\top}{\sqrt{d_k}}\right) V.

Зачем делить на \sqrt{d_k}? Если компоненты q и k независимы со средним 0 и дисперсией 1, то \mathrm{Var}(q^\top k) = d_k. Без масштабирования при большом d_k аргументы softmax уходят в насыщение, градиенты становятся малыми, обучение замедляется. Масштаб возвращает дисперсию к порядку 1.

Интерпретация «библиотеки»: запрос — формулировка вопроса читателя; ключ — каталожная карточка; значение — содержимое книги. Softmax по строке даёт, какую долю внимания отдать каждой книге; выход — взвешенная сумма содержаний.

Self-, cross- и masked-attention

  • Self-attentionQ, K, V из одной последовательности. Каждый токен взаимодействует со всеми остальными за O(1) «прыжков» по графу зависимостей (против O(n) в RNN). Сложность по времени и памяти — O(n^2 d) при длине n и ширине d.
  • Cross-attention — запросы из одной модальности/последовательности (например, декодер или карта изображения), ключи и значения из другой (энкодер, текстовые эмбеддинги). Связывает перевод с оригиналом, изображение с подписью, ответ с документом в RAG.
  • Masked (causal) attention — перед softmax в запрещённые позиции пишут -\infty, обнуляя веса. Нужно для авторегрессии в GPT-подобных моделях: позиция t не видит будущее. В энкодере BERT маски нет (двунаправленный контекст); при MLM маскируются сами входные токены, а не граф внимания.

Сравнение с RNN по сложности

Self-attention RNN/LSTM Свёртка (ядро k)
Сложность на слой O(n^2 d) O(n d^2) O(k n d^2)
Длина пути между позициями O(1) O(n) O(n/k)
Параллелизм по последовательности Полный Нет Полный
Память активаций O(n^2) (без Flash) O(n) O(n)

Для коротких и средних n квадрат внимания дешевле «дорогой» RNN с большим d; для очень длинных контекстов память становится узким местом — отсюда FlashAttention, sparse/GQA и исследования SSM.

Многоголовое внимание

\text{MultiHead}(Q, K, V) = \text{Concat}(\text{head}_1, \ldots, \text{head}_h)\, W^O,
\text{head}_i = \text{Attention}(QW_i^Q,\; KW_i^K,\; VW_i^V),

где W_i^Q \in \mathbb{R}^{d_{\text{model}} \times d_k}, аналогично W_i^K, W_i^V, и W^O \in \mathbb{R}^{h d_v \times d_{\text{model}}}. Обычно d_k = d_v = d_{\text{model}} / h, так что суммарная стоимость сравнима с одной «широкой» головой.

Разные головы могут фокусироваться на синтаксисе, пунктуации, кореференции, позиционных шаблонах. На практике специализация нечёткая и зависит от слоя: нижние слои ближе к локальным паттернам, верхние — к семантике. В LLM для ускорения инференса часто уменьшают число KV-голов (см. GQA ниже), сохраняя число query-голов.

При авторегрессионной генерации ключи и значения прошлых токенов кэшируют (KV-cache): на шаге t считают только новый query и дописывают одну строку в K/V. Объём кэша растёт как O(\text{слои} \cdot n \cdot d) и часто доминирует в стоимости обслуживания длинного диалога — ещё один стимул к GQA, квантизации кэша и скользящему окну.

Эффективные варианты

Квадратичность O(n^2) ограничивает длинный контекст. Основные линии атак:

  • Sparse attention (Longformer, BigBird) — локальное окно плюс глобальные токены / случайные связи; сложность O(n \log n) или O(n). Хорошо для документов, хуже улавливает произвольные дальние пары без глобальных узлов.
  • Kernel / linear attention (Performer, Linear Transformer) — аппроксимация softmax через признаки ядра: \mathrm{softmax}(QK^\top)V \approx \phi(Q)\,(\phi(K)^\top V), сложность O(n d^2). Точность зависит от аппроксимации; на коротких последовательностях выигрыш невелик.
  • FlashAttention[1]точный Softmax-attention, но без материализации полной матрицы n \times n в HBM: блоки крутятся в SRAM, используются online-softmax и recomputation на backward. Ускорение 2–4× и существенная экономия памяти; FlashAttention-2/3 усиливают параллелизм и учёт тензорных ядер.
  • Grouped Query Attention (GQA) и Multi-Query Attention (MQA) — несколько query-голов делят общие K/V. Меньше KV-кэш при генерации → выше throughput у LLM без сильной потери качества относительно полного MHA.
  • Скользящее окно и гибриды (Mistral, Gemma-подобные схемы) — локальное внимание в части слоёв плюс редкие глобальные/полносвязные слои.

Отдельно стоят альтернативы attenton-слою целиком (SSM, Mamba): они претендуют на почти линейную сложность, но экосистема LLM по-прежнему опирается на оптимизированный Softmax-attention.

Применения вне NLP

  • Компьютерное зрение — ViT применяет self-attention к патчам; DETR — к объектным запросам; в диффузии кросс-внимание связывает текст и латент изображения.
  • Рекомендательные системы — внимание по истории кликов/просмотров вместо фиксированного пулинга.
  • Биология — AlphaFold2 (Evoformer): attention по множественному выравниванию и парам остатков.
  • Графы — Graph Attention Networks (GAT): веса рёбер обучаются через attention вместо фиксированной нормировки Лапласиана.
  • Речь и аудио — Conformer и Whisper сочетают свёртки с self-attention по времени.
  • Промпт и RAG — качество ответа LLM зависит от того, какие фрагменты контекста «подсветит» внимание; отсюда важность промпт-инжиниринга и отбора документов.

Attention is not Explanation

Для специалистов важно разделение: внимание — механизм маршрутизации информации, а не автоматически достоверное объяснение решения. Jain и Wallace (2019)[1] показали, что альтернативные распределения внимания часто дают почти тот же выход, а корреляция между весами внимания и градиентными/leave-one-out мерами важности признаков слаба. Последующие работы уточняют: в некоторых задачах и слоях внимание более интерпретируемо, особенно при анализе синтаксических голов, но нельзя отождествлять \alpha_{t,i} с «причиной», по которой модель выдала класс или токен.

Практический вывод: тепловые карты внимания — полезный диагностический инструмент и источник гипотез, но для ответственности (medicine, law, credit) нужны дополнительные методы — integrated gradients, probing, causal interventions, human eval — а не только визуализация Softmax. Wiegreffe и Pinter (2019) возражают, что при дополнительных проверках (adversarial attention) часть карт всё же несёт сигнал; консенсус сообщества — осторожная интерпретация, а не полный отказ от анализа внимания.

Связь с выравниванием моделей: при RLHF и предпочтениях меняется поведение генерации, но механизм внимания остаётся тем же вычислительным примитивом — меняются веса, а не сама операция Softmax-attention. Промпт же влияет на то, какие токены окажутся в контексте и, следовательно, между какими парами возникнут большие веса.

См. также

Примечания

Литература

  • Bahdanau D., Cho K., Bengio Y. Neural Machine Translation by Jointly Learning to Align and Translate // ICLR. — 2015.
  • Luong M.-T., Pham H., Manning C. D. Effective Approaches to Attention-based Neural Machine Translation // EMNLP. — 2015.
  • Vaswani A. et al. Attention Is All You Need // NeurIPS. — 2017.
  • Dao T., Fu D. Y., Ermon S., Rudra A., Ré C. FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness // NeurIPS. — 2022.
  • Ainslie J. et al. GQA: Training Generalized Multi-Query Transformer Models from Multi-Head Checkpoints // EMNLP. — 2023.
  • Jain S., Wallace B. C. Attention is not Explanation // NAACL-HLT. — 2019.
  • Wiegreffe S., Pinter Y. Attention is not not Explanation // EMNLP. — 2019.
Личные инструменты