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

## Метаданные

- **Спикер:** 3Blue1Brown
- **Канал:** 3Blue1Brown
- **Тема:** Детальный разбор механизма внимания (attention) в трансформерах — ключевого компонента больших языковых моделей. Визуализация матриц запросов, ключей и значений.
- **Длительность:** 26:09
- **YouTube:** https://www.youtube.com/watch?v=eMlx5fFNoYc
- **Источник:** https://ekstraktznaniy.ru/workbook/652

## Ключевые тезисы

1. **Эмбеддинги кодируют смысл как направления в пространстве** — Каждому токену сопоставляется высокоразмерный вектор (эмбеддинг), где направления соответствуют семантическим значениям. Например, существует направление, кодирующее род: шаг в этом направлении переводит эмбеддинг мужского существительного в женское. Задача трансформера — постепенно обогащать эти векторы контекстом.
2. **Внимание решает проблему контекстной многозначности** — Слово «mole» имеет разные значения в разных контекстах (животное, единица измерения, родинка), но начальный эмбеддинг одинаков во всех случаях. Механизм внимания вычисляет, что нужно добавить к общему эмбеддингу, чтобы сдвинуть его к конкретному значению в зависимости от окружающих слов.
3. **Запросы и ключи — это механизм поиска релевантности** — Матрица запросов (Query) кодирует вопрос: «Какая информация мне нужна?». Матрица ключей (Key) кодирует ответ: «Какую информацию я могу предоставить?». Скалярное произведение пар запрос-ключ показывает, насколько каждое слово релевантно для обновления другого. Оба вектора живут в пространстве меньшей размерности (128 вместо 12 288).
4. **Паттерн внимания — нормализованная матрица релевантности** — Скалярные произведения всех пар ключ-запрос образуют сетку оценок. Функция softmax нормализует каждый столбец так, чтобы значения были от 0 до 1 и в сумме давали единицу — получается распределение вероятностей, определяющее вес каждого слова при обновлении.
5. **Матрица значений определяет, что именно передаётся** — Третья матрица — Value — при умножении на эмбеддинг слова создаёт «вектор значения»: конкретное изменение, которое нужно добавить к эмбеддингу другого слова. Если слово «пушистый» релевантно для «существа», вектор значения сдвинет эмбеддинг «существа» в область «пушистое существо».
6. **Маскирование запрещает будущим токенам влиять на прошлые** — При обучении модель одновременно предсказывает следующий токен для каждой позиции в тексте. Чтобы поздние слова не подсказывали ответ, все записи выше диагонали устанавливаются в минус бесконечность перед softmax, превращаясь в нули после нормализации. Это называется маскированием.
7. **Размер контекстного окна — квадратичное узкое место** — Размер паттерна внимания равен квадрату длины контекста. Это делает масштабирование контекстного окна нетривиальной задачей и мотивирует исследования альтернативных вариантов внимания для работы с длинными текстами.
8. **Многоголовое внимание улавливает разные типы связей** — Один блок внимания содержит множество «голов» (в GPT-3 — 96), работающих параллельно. Каждая голова имеет свои матрицы Q, K, V и улавливает свой тип контекстной связи: одна — грамматику, другая — кореференцию, третья — тональность. Результаты всех голов суммируются.
9. **Матрица значений факторизуется для экономии параметров** — Вместо одной большой квадратной матрицы 12288×12288 используются две меньшие: «value down» проецирует эмбеддинг в малое пространство, а «value up» возвращает обратно. Это низкоранговая аппроксимация, уравнивающая число параметров Value с числом параметров Key и Query.
10. **Выходная матрица объединяет результаты всех голов** — На практике все матрицы «value up» из разных голов склеиваются в одну большую выходную матрицу (output matrix). Это стандартная реализация, описанная в оригинальной статье. Когда в литературе упоминают «матрицу значений» для головы, обычно имеют в виду только проекцию вниз.
11. **Глубина сети позволяет строить абстракции** — Данные проходят через десятки блоков внимания (96 слоёв в GPT-3), чередующихся с MLP. На каждом уровне эмбеддинги обогащаются всё более тонким контекстом — от грамматики к семантике, от семантики к тональности и абстрактным смыслам.
12. **Параллелизуемость — ключевое преимущество архитектуры** — Успех внимания — не столько в конкретном поведении, сколько в возможности массивной параллелизации на 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) функцию одной головы внимания: входные эмбеддинги (матрица N×D), три матрицы весов (Q, K, V). Вычислите Q·K^T, поделите на √d_k, примените маскирование, softmax и умножение на V. Протестируйте на случайных данных размерности 4×8, проверьте, что выходные размерности корректны и столбцы паттерна суммируются в 1.

## Ключевые цитаты

> «Самая важная идея, которую я хочу, чтобы вы держали в голове — как направления в этом высокоразмерном пространстве всех возможных эмбеддингов могут соответствовать семантическому значению (The most important idea I want you to have in mind is how directions in this high-dimensional space can correspond with semantic meaning)»
> — 3Blue1Brown

> «Цель трансформера — постепенно корректировать эмбеддинги так, чтобы они кодировали не просто отдельное слово, а гораздо более богатое контекстное значение (The aim of a transformer is to progressively adjust these embeddings so that they don't merely encode an individual word but instead they bake in some much richer contextual meaning)»
> — 3Blue1Brown

> «Представьте, что входной текст — это почти весь детективный роман вплоть до момента, где написано: «Итак, убийца был...» Если модель хочет точно предсказать следующее слово, последний вектор должен каким-то образом закодировать всю релевантную информацию из полного контекстного окна (Imagine that the text you input is most of an entire mystery novel... therefore the murderer was)»
> — 3Blue1Brown

> «Как и во многом в глубоком обучении, истинное поведение гораздо труднее интерпретировать, потому что оно основано на подстройке огромного числа параметров для минимизации функции потерь (The true behavior is much harder to parse because it's based on tweaking and tuning a huge number of parameters to minimize some cost function)»
> — 3Blue1Brown

> «Вы никогда не хотите, чтобы более поздние слова влияли на более ранние, поскольку иначе они бы подсказывали ответ (You never want to allow later words to influence earlier words since otherwise they could kind of give away the answer for what comes next)»
> — 3Blue1Brown

> «Размер паттерна внимания равен квадрату размера контекста — вот почему контекстное окно может быть огромным узким местом для больших языковых моделей (Its size is equal to the square of the context size — this is why context size can be a really huge bottleneck for large language models)»
> — 3Blue1Brown

> «Запуская множество различных голов параллельно, вы даёте модели способность выучить много разных способов, которыми контекст изменяет значение (By running many distinct heads in parallel you're giving the model the capacity to learn many distinct ways that context changes meaning)»
> — 3Blue1Brown

> «Успех механизма внимания — не столько в каком-то конкретном поведении, которое он обеспечивает, сколько в том, что он исключительно хорошо параллелизуется (A big part of the story for the success of the attention mechanism is not so much any specific kind of behavior that it enables but the fact that it's extremely parallelizable)»
> — 3Blue1Brown

> «Один из главных уроков глубокого обучения за последние десять-двадцать лет — масштаб сам по себе даёт огромные качественные улучшения в работе моделей (One of the big lessons about deep learning in the last decade or two has been that scale alone seems to give huge qualitative improvements in model performance)»
> — 3Blue1Brown

## Полный текст экстракта

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

> Спикер: 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