Внимание: как трансформер решает, на что смотреть
Word2Vec показал: слова — это векторы, и близость по смыслу = близость в пространстве. Механизм внимания (attention) делает следующий шаг: каждое слово активно смотрит на остальные и собирает из них контекст — тем сильнее, чем ближе они ему по смыслу. Это сердце трансформеров, а значит и всех современных языковых моделей.
Внимание — это мягкий поиск
Представьте словарь-справочник: по точному ключу он возвращает одно значение. Внимание — это его «мягкая» версия. У каждого токена есть три вектора: запрос q (что я ищу), ключ k (чем я могу быть полезен) и значение v (что я отдам). Чтобы собрать контекст для запроса, считаем его схожесть с каждым ключом через скалярное произведение, превращаем схожести в веса и берём взвешенную сумму значений:
\text{score}_i = \frac{q \cdot k_i}{\sqrt{d}}, \qquad \alpha = \operatorname{softmax}(\text{score}), \qquad \text{out} = \sum_i \alpha_i\, v_i.
Деление на \sqrt{d} — нормировка, чтобы при большой размерности d скалярные произведения не разрастались и softmax не «схлопывался» в один токен слишком рано.
Softmax и температура
\operatorname{softmax} превращает произвольные числа в распределение (положительные, в сумме 1):
\alpha_i = \frac{e^{\text{score}_i / \tau}}{\sum_j e^{\text{score}_j / \tau}}.
Температура \tau управляет резкостью внимания. При \tau \to 0 всё внимание уходит на единственный самый похожий ключ (жёсткий argmax). При \tau \to \infty веса выравниваются — токен смотрит на всех одинаково и контекст размывается.
Потрогайте внимание
Токены живут в игрушечном 2D «пространстве смысла». Кликните любой, чтобы сделать его запросом — и увидите, как он распределяет внимание по остальным (толщина связи = вес). Перетаскивайте токены: придвинете слово ближе по смыслу — внимание к нему вырастет мгновенно. Покрутите температуру \tau: от острого выбора одного соседа до размытого взгляда на всех.
Здесь схожесть — скалярное произведение в 2D. В настоящем трансформере q, k, v получаются из эмбеддинга обучаемыми матрицами W_Q, W_K, W_V, а d — сотни измерений. Несколько «голов» внимания смотрят на разные аспекты (синтаксис, кореференция, тема) параллельно. Но арифметика — ровно та, что на этой картинке.
Внимание не «понимает» текст — оно вычисляет мягкое среднее по схожести. Магия в том, что если близость в пространстве эмбеддингов соответствует близости по смыслу (а её этому и учат), то взвешивание по q \cdot k автоматически вытаскивает релевантный контекст: местоимение «смотрит» на своё существительное, глагол — на подлежащее. Из этой простой операции, повторённой слоями, и вырастает language understanding.
Связи
- Word2Vec (§ Word2Vec): откуда берутся векторы слов, по которым считается схожесть.
- PCA (§ PCA и Eigenfaces): обе темы используют геометрию векторов и скалярные произведения, но PCA ищет фиксированные главные направления данных, а attention динамически строит веса для каждого запроса.
- Оптимизаторы (§ Как методы спускаются с горы): матрицы W_Q, W_K, W_V обучаются тем самым градиентным спуском.