Глубокое обучение
Transformers
2017. Google Brain. 8 инженеров написали статью за 6 месяцев. 9 страниц. Название - "Attention is All You Need". За один год она уничтожила 30 лет LSTM-доминирования. Через 2 года - GPT-2. Через 4 - ChatGPT. Через 6 - модели, которые проходят собеседования в Google. Эти 9 страниц изменили индустрию сильнее, чем любой другой paper в истории ML.
- **GPT-4, Claude, Gemini** - все построены на Transformer. Один forward pass GPT-4 обрабатывает до 128K токенов параллельно - то, что LSTM делал бы последовательно за секунды
- **GitHub Copilot** использует Transformer для code completion: каждое нажатие Tab - это decoder-only inference, attention по всему открытому файлу
- **Google Translate** переключился с LSTM seq2seq на Transformer в 2017 и получил +5 BLEU. Encoder-decoder архитектура работает в продакшне для 100+ языков
- **AlphaFold 2** применил Transformer к предсказанию структуры белков - задача, которую биологи не могли решить 50 лет. Attention здесь работает между аминокислотами, а не словами
Предварительные знания
- Как RNN/LSTM обрабатывают последовательности и почему они принципиально последовательны
- Проблема vanishing gradient и ограничения на длинные зависимости
- Матричное умножение, softmax и скалярное произведение
Attention Is All You Need
В 2017 году команда Google под руководством Ашиша Васвани опубликовала статью «Attention Is All You Need» и представила Transformer. Дерзкое заявление в названии было буквальным: полностью отказаться от рекуррентности и свёрток и опираться только на self-attention. Поскольку attention сравнивает каждый токен со всеми остальными сразу, вся последовательность обучается параллельно, а не шаг за шагом, и это позволило моделям масштабироваться далеко за пределы возможностей LSTM. Уже через несколько лет на той же архитектуре выросли BERT, семейство GPT и вся последующая волна больших языковых моделей.
Self-Attention: когда каждое слово смотрит на всех
**2017. Google Brain. 8 инженеров, 6 месяцев работы, 9 страниц текста - и 30 лет LSTM-доминирования закончились.** Статья называлась "Attention is All You Need". Через 2 года появился GPT-2. Через 4 - ChatGPT. Через 6 - модели, которые пишут код лучше большинства разработчиков. Все они стоят на одном механизме: self-attention.
Проблема LSTM была в бутылочном горлышке: как бы длинна ни была последовательность, вся история сжималась в один вектор фиксированного размера. Предложение из 100 слов - один вектор на 512 чисел. Переводчик должен был упаковать весь смысл в 512 чисел и передать декодеру. Когда предложение длинное - информация неизбежно терялась.
Self-attention решает это радикально: **каждый токен одновременно смотрит на каждый другой токен в последовательности**. Не через цепочку шагов - сразу, параллельно. Слово "кот" из начала предложения и слово "рыжий" из конца - они видят друг друга напрямую, без передачи сообщения через 10 промежуточных состояний.
Деление на $\sqrt{d_k}$ - не украшение формулы. При больших значениях $d_k$ скалярные произведения растут, softmax уходит в насыщение (градиент почти 0), обучение замедляется. Деление нормализует масштаб. GPT-4 использует $d_k = 128$ на голову - 128 = магическое число, которое балансирует размер и скорость.
**Аналогия с поиском**: Query - это поисковый запрос. Key - заголовки документов. Value - содержимое документов. Attention вычисляет мягкое (soft) взвешенное извлечение: не один документ, а взвешенная смесь всех. Именно так работает Retrieval в RAG - только там используются отдельные эмбеддинги, а не внутренние Q/K/V одной сети.
Зачем в формуле Attention делить на sqrt(d_k)?
Multi-Head Attention и позиционное кодирование
Одна голова attention видит один тип зависимостей. Это как читать текст одновременно анализируя только синтаксис - но пропускать семантику, кореференцию и прагматику. Multi-head attention запускает несколько независимых механизмов attention параллельно, каждый со своими матрицами $W_Q, W_K, W_V$. Результаты конкатенируются и проецируются.
GPT-4 использует 96 голов. Каждая специализируется автоматически - никто не задаёт явно, что голова 7 должна отслеживать синтаксис, а голова 23 - кореференцию. Это возникает само в процессе обучения. Исследователи Anthropic (2024) интерпретировали отдельные головы GPT-2 и нашли, что разные головы реально специализируются на разных лингвистических функциях.
Но у self-attention есть слепое пятно: он не видит порядок. Матрица scores зависит только от попарных скалярных произведений токенов - перемешай токены в произвольном порядке, и результат не изменится. Для языка это катастрофа: "кот съел рыбу" и "рыба съела кота" дадут одинаковые attention-веса.
**Positional Encoding** добавляет к эмбеддингу каждого токена вектор, уникальный для его позиции. В оригинальной статье - синусы и косинусы разных частот. В BERT - обучаемые векторы. В RoPE (Rotary Position Embedding, используется в LLaMA, GPT-4) - умножение комплексных чисел. Разные подходы, одна цель: дать модели информацию о том, токен 1 это или токен 100.
**KV-cache** - прямое следствие архитектуры. При генерации новый токен добавляет только одну строку в K и V матрицы. Все предыдущие K, V уже посчитаны и закешированы. GPT-4o при длинном контексте держит в памяти десятки гигабайт KV-cache - это основная причина высокой стоимости длинных запросов.
Зачем нужно позиционное кодирование в Transformer?
Encoder-only, Decoder-only, Encoder-Decoder
Оригинальный Transformer 2017 года - это encoder + decoder. Encoder читает входную последовательность (например, английское предложение), создаёт контекстные представления всех токенов. Decoder генерирует выходную последовательность (перевод) токен за токеном, используя cross-attention к выходу encoder. Эта архитектура царствовала в машинном переводе.
Но задачи разные - и архитектуры разошлись. BERT (2018, Devlin et al.) взял только encoder. Без decoder, без авторегрессии. Обучение через masked language modeling: 15% токенов маскируются, модель восстанавливает. Двунаправленное внимание - каждый токен видит всех слева и справа. Результат: мощные контекстные представления для классификации, NER, question answering. Encoder-only - главный инструмент для понимания текста.
GPT путь - decoder-only - оказался победителем в эпоху масштабирования. Причина простая: авторегрессивное обучение (предсказать следующий токен) - это бесконечный датасет. Весь интернет - обучающие данные. Encoder-only требует специально сконструированных задач. Decoder-only учится на сыром тексте. Когда данных триллионы токенов - decoder-only выигрывает.
Стандартный Transformer block (используется в любой вариации): **LayerNorm -> MHA -> residual -> LayerNorm -> FFN -> residual**. FFN (Feed-Forward Network) - два линейных слоя с активацией между ними. В GPT-3 FFN имеет размерность 4 * d_model = 49152. Это больше, чем attention. 2/3 параметров модели живут в FFN. Исследование Geva et al. (2021) показало, что FFN работает как "фактическая память" - хранит конкретные факты, тогда как attention управляет потоком информации.
**Pre-norm vs Post-norm**: оригинальная статья применяла Layer Norm после residual (post-norm). GPT-2 переключился на pre-norm (до MHA и FFN). Pre-norm стабилизирует обучение больших моделей - градиенты не взрываются. Почти все современные LLM используют pre-norm, часто с RMSNorm вместо стандартного Layer Norm (LLaMA, Mistral) - RMSNorm быстрее, не хуже по качеству.
Attention "понимает" слова - это что-то похожее на человеческое понимание
Attention вычисляет взвешенную сумму векторов на основе скалярных произведений - чистая линейная алгебра
Интерпретируемые паттерны (голова отслеживает синтаксис и т.д.) возникают как побочный эффект оптимизации, а не закладываются целенаправленно. Модель минимизирует cross-entropy loss - всё остальное эмергентно.
Почему GPT (decoder-only) доминирует в современных LLM, а не encoder-decoder?
Ключевые идеи
- **Self-attention** - каждый токен смотрит на всех через Q/K/V механизм. Attention(Q,K,V) = softmax(QK^T / sqrt(d_k))V. Деление на sqrt(d_k) предотвращает насыщение softmax
- **Multi-head attention** - несколько параллельных голов, каждая специализируется автоматически. GPT-4: 96 голов, d_k=128. KV-cache позволяет не пересчитывать прошлые K,V при генерации
- **Positional encoding** - без него attention не видит порядок. Sinusoidal (оригинал), learned (BERT), RoPE (LLaMA/GPT-4) - разные подходы к одной проблеме
- **Три архитектуры**: encoder-only (BERT - понимание), decoder-only (GPT - генерация), encoder-decoder (T5 - seq2seq). Decoder-only победил в эпоху масштабирования благодаря self-supervised обучению на сыром тексте
Связанные темы
Transformer - точка, откуда расходятся десятки направлений:
- Vision Transformer (ViT) — Применение той же архитектуры к патчам изображений вместо токенов
- Transfer Learning и Fine-Tuning — Pre-trained Transformer как база для downstream задач (BERT, GPT fine-tuning)
- LLM Fundamentals — Практическая сторона Transformer: tokenization, inference, API
- RNN, LSTM, GRU — Предшественники, чьи ограничения Transformer решил
Вопросы для размышления
- Self-attention имеет сложность O(n^2) по длине последовательности. Как это ограничивает применение к очень длинным контекстам и какие решения существуют (Sparse Attention, Flash Attention, sliding window)?
- Decoder-only модели используют causal masking - токен не видит будущего. Как это влияет на задачи, где нужен весь контекст (например, суммаризация длинного документа)?
- FFN в Transformer хранит "фактические знания", attention управляет потоком. Что происходит при fine-tuning - меняются факты в FFN или меняются паттерны внимания?
Связанные уроки
- dl-05 — LSTM - предшественник; Transformer решает его главные ограничения
- dl-07 — ViT - прямое применение Transformer к изображениям
- dl-11 — Transfer learning на базе pre-trained Transformer (BERT, GPT)
- aie-03-llm-fundamentals — LLM fundamentals - практическая сторона Transformer в продакшне
- aie-04-tokens-context-window — KV-cache и context window - прямые следствия архитектуры Transformer
- dl-09 — AdamW - стандартный оптимизатор при обучении Transformer
- la-04-matrix-ops