Глава 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 — это мягкая адресация памяти по содержимому,
а не по фиксированному соседству свёртки и не по цепочке 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 значит для архитектора вообще
Даже если вы всю жизнь в детекции, урок переносим:
- Фиксированный маршрут информации (локальное окно, строгий time-step) — сильный prior и сильное ограничение.
- Динамическая маршрутизация (attention) дороже, но гибче.
- Любая гибкость требует нового бюджета: память, стабилизация, позиционные индуктивные смещения.
flowchart LR
A[Как смешивать токены?] --> B[Локально: Conv]
A --> C[Последовательно: RNN]
A --> D[Динамически: Attention]
B --> B1[Дешёво / сильный prior]
C --> C1[Естественное время / плохой parallel]
D --> D1[Гибко / O(N²) и память]
В следующей главе этот механизм вернётся в зрение: картинку нарежут на патчи и спросят, хватит ли «чистой мощи данных» без свёрточного prior.
Если бы вы были автором статьи…
-
Покажите численно, при каком N ваш FFN перестаёт быть главным потребителем, а attention становится. На каком GPU.
-
Уберите positional encoding. На каких задачах качество умрёт сразу, на каких продержится?
-
Спроектируйте hybrid: локальный attention в окне + редкие глобальные токены.
Какой обмен вы рекламируете против vanilla Transformer?
Дальше — Vision Transformer и столкновение двух философий: индуктивное смещение свёртки против масштаба данных и внимания.