Глава 11. Attention

Глава 11. Attention is All You Need: Механизм внимания

Вместо того чтобы гнать смысл через узкое скрытое состояние шага за шагом,
позволим каждой позиции напрямую спросить: «кто мне сейчас важен?»

Глава 10 оставила требование: нужен широкий контекст и параллелизм.
Attention — операция, которая это обещание выполняет… и выставляет новый счёт.


11.1. Идея запроса: Q, K, V без мистики

У каждой позиции есть три роли:

  • Query (Q) — «что я ищу»;
  • Key (K) — «что я рекламирую о своём содержимом»;
  • Value (V) — «что я отдам, если меня выбрали».

Сходство Q и K даёт веса.
Веса смешивают V.

для позиции i:

  score_ij = similarity(Q_i, K_j)
  α_ij     = softmax(score_i·)
  out_i    = Σ_j α_ij · V_j

Attention: Q K V

Смысл для инженера:

Attention — это мягкая адресация памяти по содержимому,
а не по фиксированному соседству свёртки и не по цепочке RNN.

В свёртке соседи заданы геометрией.
В RNN прошлое задано порядком шагов.
В attention связи вычисляются динамически.


11.2. Self-attention и параллелизм

В self-attention Q/K/V берутся из одной последовательности.
На обучении все позиции могут считаться одновременно: это большие матричные умножения.

RNN:     out_t зависит от out_{t-1}     →  последовательность
Attention: Out = softmax(QKᵀ/√d) V     →  матрицы, GPU счастлив

Отсюда взрывной практический эффект 2017 года:
большие корпуса + большой батч + длиннее контекст в пределах памяти стали обучаться куда охотнее.

«Attention is All You Need» звучит радикально не потому, что attention был неизвестен.
А потому, что авторы показали: можно убрать RNN/CNN из ядра и оставить стек attention + FFN + residual + norm.


11.3. Масштабы, головы, позиционные кодировки

Чистый скалярный продукт Q·K недостаточно стабилен в большой размерности — отсюда масштаб 1/√d.

Multi-head: несколько attention параллельно в разных проекциях.
Интуиция — разные головы могут специализироваться на разных типах связей (синтаксис, соположение, длинная отсылка). Это снова обмен: больше параллельных подпространств ↔ больше параметров/вычислений.

Позиции: attention сам по себе перестановочно чувствителен слабо — без явного сигнала порядка «собака укусила человека» и перестановка токенов легко смешиваются.
Поэтому добавляют positional encodings / positional embeddings / относительные позиции — отдельный инженерный мини-мир.

Компонент Роль
QKᵀ → softmax → V Динамические связи
multi-head Несколько типов связей сразу
positional signal Вернуть порядок / геометрию
FFN после attention Поточечное нелинейное преобразование
residual + norm Та же стабилизация глубины

Заметьте рифму с Частью II: глубокий стек снова живёт на skip и нормализации.
Сменился только способ смешивать информацию между позициями.


11.4. Счёт, который выставляет attention

Параллелизм куплен ценой сложности.

Грубая оценка памяти/вычислений attention:

последовательность длины N
attention ~ O(N²) по связям
N = 512    →  относительно комфортно
N = 4k–32k →  уже война за память
N = 100k+  →  нужны приближения, окна, линейные варианты, chunking…

Поэтому зоопарк продолжений:

  • FlashAttention и друзья — тот же алгоритм математически, но без материализации полной матрицы в HBM (глава 11a);
  • window / local attention — вернуть локальность свёртки внутри attention;
  • linear attention / Performer — приблизить softmax-attention;
  • later: SSM/Mamba — другой базис для длинного контекста.

Правильный вывод:

Transformer победил не потому, что O(N²) «хорошо».
Он победил потому, что на доступных N и железе
обмен «квадрат ↔ параллелизм + качество» оказался выигрышным.


11.5. Что attention значит для архитектора вообще

Даже если вы всю жизнь в детекции, урок переносим:

  1. Фиксированный маршрут информации (локальное окно, строгий time-step) — сильный prior и сильное ограничение.
  2. Динамическая маршрутизация (attention) дороже, но гибче.
  3. Любая гибкость требует нового бюджета: память, стабилизация, позиционные индуктивные смещения.
flowchart LR
    A[Как смешивать токены?] --> B[Локально: Conv]
    A --> C[Последовательно: RNN]
    A --> D[Динамически: Attention]
    B --> B1[Дешёво / сильный prior]
    C --> C1[Естественное время / плохой parallel]
    D --> D1[Гибко / O(N²) и память]

В следующей главе этот механизм вернётся в зрение: картинку нарежут на патчи и спросят, хватит ли «чистой мощи данных» без свёрточного prior.


Если бы вы были автором статьи…

  1. Покажите численно, при каком N ваш FFN перестаёт быть главным потребителем, а attention становится. На каком GPU.

  2. Уберите positional encoding. На каких задачах качество умрёт сразу, на каких продержится?

  3. Спроектируйте hybrid: локальный attention в окне + редкие глобальные токены.
    Какой обмен вы рекламируете против vanilla Transformer?

Дальше — Vision Transformer и столкновение двух философий: индуктивное смещение свёртки против масштаба данных и внимания.