Механизм внимания в трансформерах: пошаговый разбор > Спикер: 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 функцию . Вычислите Q·K^T/√d_k, примените маскирование, softmax и умножение на V. Протестируйте на случайных данных 4×8, проверьте корректность размерностей и нормализации. Лучшие цитаты > «Самая важная идея — как направления в высокоразмерном пространстве могут соответствовать семантическому значению» — 3Blue1Brown > «Цель трансформера — постепенно корректировать эмбеддинги так, чтобы они кодировали не просто отдельное слово, а гораздо более богатое контекстное значение» — 3Blue1Brown > «Представьте детективный роман вплоть до момента: «Итак, убийца был...» — последний вектор должен закодировать всю релевантную информацию из полного контекстного окна» — 3Blue1Brown > «Истинное поведение гораздо труднее интерпретировать, потому что оно основано на подстройке огромного числа параметров для минимизации функции потерь» — 3Blue1Brown > «Вы никогда не хотите, чтобы более поздние слова влияли на более ранние, иначе они бы подсказывали ответ» — 3Blue1Brown > «Размер паттерна внимания равен квадрату размера контекста — вот почему контекстное окно может быть огромным узким местом» — 3Blue1Brown > «Запуская множество различных голов параллельно, вы даёте модели способность выучить много разных способов, которыми контекст изменяет значение» — 3Blue1Brown > «Успех механизма внимания — не столько в конкретном поведении, сколько в том, что он исключительно хорошо параллелизуется» — 3Blue1Brown > «Масштаб сам по себе даёт огромные качественные улучшения в работе моделей» — 3Blue1Brown