Генеративный AI
Архитектура GPT
Предварительные знания
- Механика self-attention и multi-head attention
- Как токены превращаются в embedding-векторы
Февраль 2023 года: ChatGPT достигает 100 миллионов пользователей за 2 месяца - быстрее любого продукта в истории. За этим стоит GPT-3.5 - decoder-only трансформер с 175 миллиардами параметров. Архитектура: 96 слоёв, 96 голов внимания, размерность 12288. Обучен на 570GB текста за несколько месяцев на тысячах A100 GPU. Но ключевой инсайт - не масштаб. Это правильная архитектура: causal attention позволяет модели учиться предсказывать следующий токен, что приводит к emergent abilities - reasoning, code generation, instruction following.
- **GitHub Copilot**: GPT архитектура для code completion - 1 миллион платных подписчиков за первый год, $100M ARR
- **Cursor IDE**: GPT-4 based code assistant - применяет KV-cache для fast streaming, context window management для codebase
- **Claude (Anthropic)**: decoder-only с RoPE позиционированием и extended context windows до 200K токенов
Алек Рэдфорд (2018)
В июне 2018 года OpenAI опубликовал 'Improving Language Understanding by Generative Pre-Training' - первый GPT. До этого BERT (Google) был на слуху, но GPT предложил принципиально иной подход: только decoder, только causal attention, только generative pre-training. GPT-1: 117M параметров, 12 слоёв. Год спустя - GPT-2 (1.5B), настолько 'опасный', что OpenAI поначалу не публиковал веса. В 2020 - GPT-3 (175B): few-shot learning без fine-tuning. В 2022 InstructGPT добавил RLHF. В 2023 ChatGPT - то, что изменило мир. За 5 лет один архитектурный выбор (decoder-only + scale) превратился в индустриальную революцию. Decoder-only autoregressive architecture стала доминирующей парадигмой для всех современных LLM: LLaMA, Mistral, Gemma, Qwen, Claude, GPT-4
Decoder-only: архитектура автрорегрессии
GPT использует **decoder-only** Transformer в отличие от оригинальной encoder-decoder архитектуры (Vaswani 2017). Нет encoder'а - только стек decoder блоков. Задача: автрорегрессивное языковое моделирование - предсказать следующий токен по предыдущим. Pre-training: minimize cross-entropy loss over next token prediction на триллионах токенов.
**Pre-norm vs Post-norm**: оригинальный Transformer (2017) использовал Post-norm (LayerNorm после residual). GPT использует **Pre-norm** (LayerNorm перед attention/MLP). Pre-norm стабильнее при обучении глубоких моделей - gradient не взрывается. **Weight tying**: token embedding и LM head делят матрицу весов - экономия памяти и лучшая generalization.
Почему GPT использует decoder-only архитектуру вместо полного encoder-decoder (как T5 или BART)?
Causal Self-Attention: маска будущего
Causal (masked) self-attention - ключевое отличие decoder от encoder. Каждый токен может 'видеть' только предыдущие токены (и себя), не будущие. Это реализуется через **causal mask**: верхний треугольник матрицы attention весов заполняется -inf перед softmax. После softmax соответствующие веса = 0.
**Flash Attention** (Dao et al., 2022) - memory-efficient реализация causal attention: вместо материализации полной [T, T] матрицы в HBM, вычисляет attention по tiles в SRAM. Memory: O(T) вместо O(T²). Скорость: 2-4x быстрее стандартной реализации. Это сделало возможным контексты 100K+ токенов.
Почему causal mask необходим при обучении языковой модели, но не при inference?
KV-Cache: ускорение autoregressive generation
При autoregressive generation GPT генерирует по одному токену. Без оптимизации: каждый новый токен требует пересчёта K и V для всех предыдущих токенов - O(T²) time complexity на генерацию T токенов. **KV-Cache**: сохранять K и V векторы предыдущих токенов, при добавлении нового - только вычислить его K и V и сконкатенировать с кешем.
KV-cache потребляет O(T * n_layers * n_heads * head_dim) памяти. Для LLaMA-2-70B с seq_len=4096 и batch_size=32 это ~350GB - больше веса модели. Оптимизации: **Grouped Query Attention** (GQA) делит Q heads на группы с общими KV парами; **Multi-Query Attention** (MQA) - один KV для всех Q heads.
Почему KV-cache не нужен при обучении, но критически важен при inference?
RoPE: Rotary Position Embedding
GPT-2 использует абсолютные позиционные эмбеддинги (learned), ограниченные максимальной длиной обучения. **RoPE** (Rotary Position Embedding, Su et al., 2021) кодирует позицию через вращение Q и K векторов: dot product Q_i · K_j автоматически зависит только от разности позиций (i - j). Это даёт extrapolation за пределы обучающей длины.
RoPE используется в LLaMA, Mistral, Qwen, Gemma и большинстве современных open-source LLM. **YaRN** (Yet another RoPE extensioN) и **LongRoPE** масштабируют RoPE до 128K+ токенов через интерполяцию частот. Это позволяет LLaMA-3.1 работать с 128K токенами, обучившись на 8K.
GPT генерирует весь ответ параллельно, как encoder обрабатывает входной текст
GPT генерирует по одному токену последовательно - каждый токен зависит от всех предыдущих; параллелизм только при обучении, не при inference
Autoregressive generation - O(T) последовательных forward passes; это главное ограничение LLM latency и причина важности KV-cache
В чём главное преимущество RoPE перед абсолютными позиционными эмбеддингами GPT-2?
Связанные темы
Архитектура GPT находится в центре пайплайна генеративного AI:
- Токенизация: BPE, SentencePiece — Embedding layer отображает token IDs в векторы; размер словаря задаёт размерность embedding-матрицы
- Обучение LLM: pre-training — Именно эту decoder-only архитектуру обучают на триллионах токенов через next-token prediction
- Языковые модели: от n-gram до GPT — Causal attention обобщает идею n-gram об учёте предыдущего контекста, но с неограниченной дальностью
Ключевые идеи
- **Decoder-only**: стек трансформер блоков с pre-norm, weight tying, autoregressive generation по одному токену
- **Causal attention**: upper triangular mask блокирует будущие токены - необходима при параллельном обучении на sequences
- **KV-Cache**: сохранение K/V векторов предыдущих токенов - O(T) вместо O(T²) при generation
- **RoPE**: вращение Q/K через sin/cos - относительное позиционирование и extrapolation за пределы обучающей длины
Вопросы для размышления
- Почему weight tying (shared weights для token embeddings и LM head) улучшает generalization, а не создаёт underfitting?
- Как Grouped Query Attention (GQA) уменьшает потребление памяти KV-cache при inference без значительной потери качества?
- Каким образом RoPE через интерполяцию/экстраполяцию частот (YaRN) позволяет модели работать с контекстами длиннее обучающих?
Связанные уроки
- gai-03 — Архитектура encoder-decoder и основы attention - фундамент, на котором строится GPT
- gai-05 — Файн-тюнинг и RLHF работают поверх предобученной архитектуры GPT
- aie-03-llm-fundamentals — Понимание decoder-only архитектуры нужно для работы с LLM API и промптинга
- dl-03 — GPT расширяет Transformer-блоки из dl-03: те же Q/K/V attention и MLP, но с causal mask
- nlp-04 — Token embeddings в GPT аналогичны Word2Vec: плотные векторы, но контекстные, а не статичные
- dl-01