# Механизм внимания в трансформерах: пошаговый разбор

> Спикер: 3Blue1Brown | Длительность: 26:09

## Ключевые идеи

1. **Эмбеддинги кодируют смысл как направления в пространстве** — каждому токену сопоставляется высокоразмерный вектор, где направления соответствуют семантическим значениям. Задача трансформера — постепенно обогащать эти векторы контекстом.

2. **Внимание решает проблему контекстной многозначности** — слово «mole» имеет разные значения в разных контекстах, но начальный эмбеддинг одинаков. Механизм внимания вычисляет, что добавить к общему вектору, чтобы сдвинуть его к нужному значению.

3. **Запросы и ключи — механизм поиска релевантности** — матрица Query кодирует «что я ищу», матрица Key — «что я могу дать». Скалярное произведение пар показывает степень релевантности.

4. **Паттерн внимания — нормализованная матрица весов** — softmax превращает сырые оценки в вероятностное распределение, определяющее вклад каждого слова при обновлении.

5. **Матрица значений определяет содержание передаваемой информации** — Value-матрица создаёт конкретный вектор изменения, добавляемый к эмбеддингу целевого слова.

6. **Маскирование запрещает утечку информации из будущего** — при обучении все позиции выше диагонали заполняются −∞ перед softmax, превращаясь в нули после нормализации.

7. **Квадратичная сложность от длины контекста** — размер матрицы внимания растёт как квадрат числа токенов, создавая узкое место при масштабировании.

8. **Многоголовое внимание улавливает разные типы связей** — 96 голов в GPT-3 работают параллельно, каждая со своими матрицами Q, K, V для разных аспектов контекста.

9. **Факторизация матрицы значений экономит параметры** — вместо одной большой матрицы используются две малые (проекция вниз и обратно), давая низкоранговую аппроксимацию.

10. **Выходная матрица объединяет все головы** — матрицы «value up» всех голов склеиваются в одну большую выходную матрицу.

11. **Глубина сети строит уровни абстракции** — 96 слоёв позволяют перейти от грамматических связей к семантике, тональности и абстрактным концепциям.

12. **Параллелизуемость — главное конкурентное преимущество** — возможность массивной параллелизации на GPU важнее конкретного поведения механизма.

## Транскрипт

### Повторение: эмбеддинги

Трансформер — ключевая технология внутри больших языковых моделей, впервые представленная в знаменитой статье 2017 года «Attention Is All You Need». Входной текст разбивается на токены, каждому из которых сопоставляется высокоразмерный вектор — эмбеддинг. Направления в пространстве эмбеддингов соответствуют семантическим значениям: например, существует направление, кодирующее род, по которому можно перейти от мужского существительного к женскому. Цель трансформера — постепенно корректировать эти векторы, чтобы они кодировали не отдельное слово, а богатое контекстное значение.

### Мотивирующие примеры

Слово «mole» имеет совершенно разные значения: животное, единица измерения в химии, родинка. Однако после первого шага трансформера вектор для «mole» одинаков во всех трёх случаях — начальное сопоставление работает как таблица подстановки без учёта контекста. Только на следующем шаге окружающие эмбеддинги передают информацию в этот вектор.

Аналогично, слово «tower» — общее направление, связанное с высокими сооружениями. Если перед ним стоит «Eiffel», вектор должен сдвинуться к «Эйфелевой башне», коррелируя с Парижем и сталью. Если добавить «miniature» — вектор должен дополнительно декоррелироваться от «большой и высокий».

Экстремальный пример: представьте детективный роман, заканчивающийся словами «Итак, убийца был...» Последний вектор, начавший жизнь как эмбеддинг слова «был», должен вобрать всю релевантную информацию из тысяч токенов контекста.

### Паттерн внимания

Рассмотрим фразу «a fluffy blue creature roamed the verdant forest». Упрощённый пример: прилагательные должны обновить значения соответствующих существительных. Это работа одной «головы» внимания.

Каждый эмбеддинг кодирует и значение слова, и его позицию. Цель — получить новый набор уточнённых эмбеддингов. Вычисления сводятся к произведениям матриц на векторы, где матрицы заполнены обучаемыми весами.

**Запросы (Queries):** Каждое существительное как бы спрашивает: «Есть ли перед мной прилагательные?» Этот вопрос кодируется вектором запроса — результатом умножения матрицы W_Q на эмбеддинг. Размерность запроса меньше эмбеддинга (128 вместо 12 288).

**Ключи (Keys):** Вторая матрица W_K, умноженная на каждый эмбеддинг, создаёт ключи — потенциальные ответы на запросы. Ключи совпадают с запросами по размерности.

**Скалярные произведения:** Для каждой пары ключ-запрос вычисляется скалярное произведение. Большое значение означает высокую релевантность — слова «fluffy» и «blue» «обращают внимание» на «creature».

**Нормализация (Softmax):** Сырые оценки нормализуются softmax по столбцам, превращаясь в распределение вероятностей. Для числовой стабильности значения предварительно делятся на √d_k. Результат — паттерн внимания.

### Маскирование

При обучении модель одновременно предсказывает следующий токен для каждой позиции. Чтобы будущие слова не подсказывали ответ, все позиции выше диагонали заполняются −∞ перед softmax. После нормализации они становятся нулями, а столбцы остаются нормализованными.

### Размер контекста

Паттерн внимания имеет размер N², где N — длина контекста. Это квадратичное узкое место мотивирует исследования более масштабируемых вариантов внимания.

### Значения (Values)

Третья матрица — Value. Её произведение на эмбеддинг слова даёт «вектор значения» — то, что нужно прибавить к эмбеддингу другого слова для его обновления. Вектор значения живёт в том же пространстве, что и эмбеддинги.

Для каждого столбца паттерна внимания вычисляется взвешенная сумма всех векторов значений с весами из паттерна. Результат (ΔE) добавляется к исходному эмбеддингу, давая уточнённый вектор.

### Подсчёт параметров

Матрицы Q и K: 12 288 × 128 ≈ 1,5 млн параметров каждая. Матрица V факторизуется на «value down» (12 288 → 128) и «value up» (128 → 12 288), что выравнивает число параметров. Итого одна голова ≈ 6,3 млн параметров.

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

Одна голова улавливает один тип связи (прилагательное-существительное). Но контекст влияет по-разному: «they crashed the» меняет ассоциации со словом «car»; слово «wizard» в тексте с «Harry» указывает на Поттера, а «Queen, Sussex, William» — на принца.

GPT-3 использует 96 голов на блок, каждая со своими Q, K, V. Все предложенные изменения суммируются и добавляются к эмбеддингу. С учётом 96 голов один блок содержит ~600 млн параметров.

### Выходная матрица

На практике все матрицы «value up» из разных голов объединяются в одну выходную матрицу. Когда в литературе говорят о «матрице значений» для конкретной головы, обычно имеют в виду только проекцию вниз.

### Глубина и масштаб

Данные проходят через 96 слоёв, чередуя блоки внимания с MLP. На каждом уровне эмбеддинги обогащаются более тонким контекстом. Общее число параметров внимания: ~58 млрд (треть от 175 млрд GPT-3). Остальное — MLP-блоки.

Главное преимущество внимания — не конкретное поведение, а исключительная параллелизуемость на GPU, позволяющая масштабироваться и получать качественные улучшения.

## Практические задания

### Задание 1: Визуализация эмбеддингов и направлений
Возьмите три слова с разными значениями (например, «ключ» — музыкальный, дверной, к разгадке). Нарисуйте схему, где общий эмбеддинг слова — это точка, а стрелки показывают направления к конкретным значениям. Для каждого значения напишите, какие контекстные слова должны сдвинуть вектор. Это упражнение помогает интуитивно понять, как внимание разрешает многозначность.

### Задание 2: Ручной расчёт паттерна внимания
Возьмите фразу из 4 слов. Придумайте упрощённые 2D-векторы для запросов и ключей. Вычислите все скалярные произведения, заполните матрицу 4×4. Примените softmax к каждому столбцу. Затем примените маскирование — обнулите верхний треугольник перед softmax. Сравните результаты.

### Задание 3: Подсчёт параметров мини-модели
Спроектируйте модель: эмбеддинг = 64, ключ/запрос = 16, 4 головы, 2 слоя. Посчитайте общее число параметров: (Q + K + V_down + V_up) × головы × слои. Удвойте эмбеддинг и сравните — убедитесь в квадратичной зависимости.

### Задание 4: Анализ типов контекстных связей
Возьмите абзац из 5-7 предложений. Для каждого существительного определите влияющие слова и тип связи: грамматическая, семантическая, дальняя. Определите, сколько разных голов внимания нужно для всех типов.

### Задание 5: Эксперимент с маскированием
Возьмите предложение из 8-10 слов. Для каждой позиции закройте все последующие слова и предскажите следующее. Запишите, где предсказание легкое, а где невозможное — это демонстрирует авторегрессионную природу модели.

### Задание 6: Реализация одной головы внимания в коде
Напишите на Python с NumPy функцию `attention(Q, K, V, mask)`. Вычислите Q·K^T/√d_k, примените маскирование, softmax и умножение на V. Протестируйте на случайных данных 4×8, проверьте корректность размерностей и нормализации.

## Лучшие цитаты

> «Самая важная идея — как направления в высокоразмерном пространстве могут соответствовать семантическому значению» — 3Blue1Brown

> «Цель трансформера — постепенно корректировать эмбеддинги так, чтобы они кодировали не просто отдельное слово, а гораздо более богатое контекстное значение» — 3Blue1Brown

> «Представьте детективный роман вплоть до момента: «Итак, убийца был...» — последний вектор должен закодировать всю релевантную информацию из полного контекстного окна» — 3Blue1Brown

> «Истинное поведение гораздо труднее интерпретировать, потому что оно основано на подстройке огромного числа параметров для минимизации функции потерь» — 3Blue1Brown

> «Вы никогда не хотите, чтобы более поздние слова влияли на более ранние, иначе они бы подсказывали ответ» — 3Blue1Brown

> «Размер паттерна внимания равен квадрату размера контекста — вот почему контекстное окно может быть огромным узким местом» — 3Blue1Brown

> «Запуская множество различных голов параллельно, вы даёте модели способность выучить много разных способов, которыми контекст изменяет значение» — 3Blue1Brown

> «Успех механизма внимания — не столько в конкретном поведении, сколько в том, что он исключительно хорошо параллелизуется» — 3Blue1Brown

> «Масштаб сам по себе даёт огромные качественные улучшения в работе моделей» — 3Blue1Brown