Модуль 8: Революция Attention и Трансформеры
В 2017 году статья «Attention is all you need» предложила архитектуру Transformer: вместо последовательной обработки текста через RNN или LSTM модель обрабатывает все позиции параллельно и связывает их механизмом внимания (attention). Каждый элемент последовательности может «смотреть» на любой другой и агрегировать информацию по контексту. Эта идея лежит в основе всех современных больших языковых моделей — GPT, BERT, LLaMA и аналогов.
Задача модуля: объяснить механизм внимания (Query, Key, Value), архитектуру трансформера (энкодер и декодер), роль позиционного кодирования и многоголового внимания. После модуля вы будете понимать, на какой архитектуре построены ChatGPT и подобные системы и как они «видят» контекст.
Что разберём
- Attention — Q, K, V, веса внимания, взвешенная сумма.
- Transformer — энкодер, декодер, слои и блоки.
- Позиционное кодирование — зачем нужен порядок токенов.
- Multi-Head Attention — несколько «голов» для разных типов связей.
8.1 Механизм внимания (Attention)
Интуиция: при ответе на вопрос по тексту вы не опираетесь на все слова одинаково — вы «обращаете внимание» на ключевые фрагменты. Механизм внимания в нейросетях формализует эту идею: для каждого элемента (например, токена) мы вычисляем веса относительно всех остальных элементов и формируем выход как взвешенную комбинацию их представлений. Так модель явно решает, откуда брать информацию.
Математически вводятся три роли. Query (Q) — «запрос»: что мы ищем, обычно представление текущего элемента. Key (K) — «ключ»: по чему ищем, представления элементов, на которые можно смотреть. Value (V) — «значение»: что именно берём с каждого элемента. Для каждой пары (текущий элемент, другой элемент) считают сходство между Query и Key (часто скалярное произведение или его масштабированный вариант). После применения softmax по «другим» элементам получают веса внимания — распределение вероятностей, куда смотреть. Выход — взвешенная сумма Value по этим весам. В результате каждый токен получает контекстуализированное представление, зависящее от всей последовательности.
В трансформере используется self-attention: для одного и того же набора токенов формируются Q, K, V (как линейные преобразования их эмбеддингов). Каждый токен «смотрит» на все остальные и на себя; порядок элементов сам по себе в этой операции не заложен — его добавляют отдельно через позиционное кодирование.
Связь с модулем 1: сходство Query и Key часто считают через скалярное произведение — та же идея «похожести» векторов, что и в косинусном сходстве и в описании Attention в статьях.
8.2 Архитектура трансформера (Transformer)
Трансформер отказался от рекуррентных слоёв: «Attention is all you need». Входная последовательность обрабатывается параллельно; связи между позициями задаются только механизмом внимания и позиционным кодированием. Архитектура состоит из двух частей: энкодера и декодера (в моделях только для декодирования, например GPT, используется только стек декодерных блоков).
Энкодер принимает входную последовательность (например, исходный текст). Каждый блок энкодера содержит слой self-attention (каждый токен обогащается контекстом от всех остальных), затем слой нормализации, затем feed-forward сеть (два линейных слоя с нелинейностью между ними) и снова нормализацию. Блоки повторяются; на выходе энкодера — контекстуализированные представления каждого токена.
Декодер генерирует выход по одному токену за раз. В каждом блоке декодера: маскированное self-attention (токен видит только себя и предыдущие сгенерированные токены, чтобы не «подглядывать» в будущее), затем cross-attention на выход энкодера (вопрос «на что из входа смотреть при генерации»), затем feed-forward и нормализации. Огромные модели (миллиарды параметров) — это десятки таких блоков и гигантские матрицы весов; обучение требует больших данных и вычислительных ресурсов.
Кратко
Энкодер: вход → self-attention → нормализация → feed-forward → нормализация; повтор N раз. Декодер: выход (по токенам) → маскированное self-attention → cross-attention на энкодер → feed-forward; повтор N раз. Генерация — по одному токену, каждый следующий зависит от энкодера и уже сгенерированного префикса.
8.3 Позиционное кодирование (Positional Encoding)
Self-attention сам по себе не различает порядок токенов: если переставить слова в предложении, матрица весов внимания между ними изменится только из-за изменения содержимого, но не из-за позиции. Модель не «знает», что первое слово идёт раньше второго. Чтобы передать информацию о порядке, к эмбеддингам токенов добавляют позиционное кодирование — вектор, зависящий от позиции в последовательности.
В оригинальной статье использовались фиксированные кодировки — синусы и косинусы разной частоты для разных размерностей вектора. Так получают уникальный вектор для каждой позиции, и модель может различать «первый токен», «второй» и т.д. В современных реализациях часто используют обучаемое позиционное кодирование (отдельная таблица или слой) или схемы относительных позиций (расстояние между токенами). Идея одна: явно сообщить модели, где находится каждый элемент в последовательности, чтобы она могла использовать порядок при интерпретации контекста.
8.4 Многоголовое внимание (Multi-Head Attention)
Один механизм внимания вычисляет одну взвешенную комбинацию по контексту. Но связи в тексте бывают разного типа: грамматические (подлежащее–сказуемое), смысловые (анафора, синонимы), локальные (соседние слова). Multi-Head Attention — это несколько параллельных «голов» внимания: у каждой свои матрицы для получения Q, K, V из входов, и каждая считает свои веса и свой взвешенный выход. Таким образом, каждая голова может специализироваться на своих типах зависимостей.
Выходы всех голов конкатенируются и проходят через общий линейный слой — получается итоговое представление, объединяющее информацию от разных типов внимания. Так модель одновременно учитывает разные аспекты контекста: и синтаксис, и семантику, и локальную связность. В больших моделях число голов может быть десятки (например, 12, 16, 32); размерность на голову при этом уменьшают, чтобы суммарный объём вычислений оставался управляемым.
Итог
Трансформер = self-attention (и multi-head) + позиционное кодирование + feed-forward и нормализация, собранные в блоки энкодера и декодера. На этой архитектуре построены все современные LLM; понимание Q, K, V и роли позиций — ключ к чтению статей и кодов по NLP и генеративным моделям.