Transformer и предобученные модели
~22 мин

GPT и авторегрессионные модели

GPT-1/2/3/4, scaling laws, emergent abilities, in-context learning.

GPT — генеративный трансформер, который научился думать текстом

Загрузка интерактивного виджета...

BERT читает текст в обе стороны и отлично понимает — но генерировать не умеет. GPT (Generative Pre-trained Transformer) — это decoder-only трансформер, обученный на одной задаче: предсказывай следующий токен. Одна простая задача, масштабированная до сотен миллиардов параметров, привела к ChatGPT и целой революции в AI.

Аналогия: представь автозаполнение в телефоне, но возведённое в абсолют. Ты набрал «Объясни квантовую механику простыми словами» — и модель токен за токеном достраивает ответ, каждый раз выбирая наиболее вероятное продолжение с учётом всего предыдущего контекста. Это и есть авторегрессионная генерация (autoregressive generation): сгенерировал токен → добавил к контексту → сгенерировал следующий → повторил.

История GPT — это не история архитектурных прорывов (архитектура почти не менялась с 2018 года). Это история масштабирования: больше параметров, больше данных, больше compute — и внезапно модель начинает решать задачи, которым её никто не учил.

Большая картина: от pretrain до emergent abilities

GPT обучается в два этапа. Сначала pre-training на гигантском корпусе текста (вся Википедия, книги, код, форумы — сотни миллиардов токенов). Задача одна: предсказать следующий токен. Никаких меток, никакой разметки — модель учит статистическую структуру языка, а заодно фактические знания, логику, стиль.

Второй этап — alignment (выравнивание с намерениями пользователя). Pre-trained модель хорошо продолжает текст, но не умеет «быть ассистентом». RLHF или DPO учат модель быть полезной, честной и безопасной (подробнее — ниже).

Самое удивительное: при достаточном масштабе возникают эмерджентные способности (emergent abilities) — навыки, которым модель не учили напрямую. Модель на 10B параметров не решает арифметику — а на 100B вдруг решает. Не постепенное улучшение, а скачок. Chain-of-thought reasoning, программирование, перевод, суммаризация — всё это «бесплатные бонусы» масштабирования.

GPT архитектура: decoder-only трансформер с masked self-attention, предсказание следующего токена
GPT — стопка decoder-блоков с masked self-attention. Каждый токен видит только предыдущие. Обучение: предскажи следующий токен. Инференс: генерируй токен за токеном

Архитектура: decoder-only и causal mask

Оригинальный трансформер состоит из энкодера и декодера. GPT использует только декодер — без энкодера и без cross-attention. Почему?

Задача GPT — генерация. При генерации нет «исходного предложения», которое нужно понять (как при переводе) — есть только текст, который нужно продолжить. Энкодер здесь просто не нужен. А decoder-only архитектура элегантно унифицирует обучение и генерацию: и при train, и при inference модель делает одно и то же — читает токены слева направо и предсказывает следующий.

Causal mask (причинная маска) — ключевой элемент. Это нижнетреугольная матрица, которая гарантирует: токен на позиции i видит только токены 0, 1, …, i−1. Будущее закрыто. Маска заполняется значениями −∞ (не нулями!), потому что softmax(−∞) = 0 — полная блокировка, а softmax(0) ≠ 0 — утечка информации.

При обучении все позиции считаются параллельно — это называется teacher forcing. Для предложения из 1000 токенов модель за один forward pass получает 1000 обучающих сигналов (loss на каждой позиции). Именно поэтому GPT обучается так эффективно — каждый текст даёт столько задач, сколько в нём токенов.

Почему decoder-only победил encoder-decoder?

1. Унификация: один формат для всех задач — «продолжи текст». Перевод, суммаризация, QA, код — всё через prompt. 2. Масштабирование: проще масштабировать одну модель, чем две (encoder + decoder). Все параметры работают на одну задачу. 3. In-context learning: decoder-only модели учатся решать задачи по примерам в промпте, без fine-tuning. У encoder-decoder это работает хуже. 4. Инференс: KV-cache естественно ложится на decoder-only (кэш растёт линейно). У encoder-decoder кэширование сложнее.

Scaling Laws — предсказуемая сила масштаба

Kaplan et al. (2020) открыли удивительный факт: loss языковой модели убывает как степенная функция (power law) от трёх переменных — числа параметров N, объёма данных D и compute C. На логарифмическом графике — прямая линия, без «потолка» в исследованном диапазоне.

Это было неочевидно. Могло оказаться, что после 10B параметров рост прекратится, или что нужна принципиально новая архитектура. Но нет — power law работает на порядки, и это дало индустрии чёткий рецепт: хочешь лучше — масштабируй.

Scaling laws: loss убывает по степенному закону от параметров, данных и compute
Scaling laws: логарифмический график loss vs параметры/данные/compute — прямая линия. Больше ресурсов = предсказуемо ниже loss

Формула compute и Chinchilla-optimal

Грубая оценка compute для обучения: C ≈ 6ND FLOPs, где N — число параметров, D — число токенов, 6 — множитель от forward (2ND) + backward (4ND) pass. Эта формула позволяет прикинуть стоимость обучения без экспериментов.

Chinchilla (Hoffmann et al., 2022) уточнил правила: параметры и данные надо масштабировать пропорционально. Оптимальное соотношение: D ≈ 20N (на 1B параметров — 20B токенов). GPT-3 с 175B параметров был underfitted — ему нужно было больше данных. Chinchilla с 70B параметров на 4× данных обогнал GPT-3.

  • C ≈ 6ND — compute в FLOPs. Для GPT-3 (175B params, 300B tokens): C ≈ 3.1 × 10²³ FLOPs
  • Chinchilla-optimal: D ≈ 20N. Для 7B модели — ~140B токенов
  • Overtraining (2024-2025 тренд): LLaMA 3 8B обучена на 15T токенов (100× Chinchilla). SmolLM3 3B — 11T токенов. Зачем? Маленькая модель на огромных данных дешевле в инференсе для миллионов запросов
  • Inference-aware scaling: дешевле потратить больше compute на training, если это позволит уменьшить N и ускорить каждый из миллиардов inference-запросов

Эволюция: GPT-1 → GPT-2 → GPT-3 → GPT-4

История GPT — идеальная иллюстрация scaling laws. Архитектура почти не менялась — росли масштабы и возможности.

GPT-1 (2018, 117M параметров). Обучен на BookCorpus (~5GB текста). Главная идея: unsupervised pre-training + supervised fine-tuning работает для decoder-моделей. Показал, что один pre-trained трансформер можно адаптировать под разные задачи — но каждую задачу требовал отдельного fine-tuning.

GPT-2 (2019, 1.5B параметров). Обучен на WebText (40 ГБ, ~8M веб-страниц). Ключевое открытие: zero-shot transfer — модель решает задачи без fine-tuning, только по инструкции в промпте. Качество перевода, суммаризации, QA — на уровне простых baseline-ов, но без единого примера. OpenAI сначала побоялись выпускать «из-за рисков злоупотреблений».

GPT-3 (2020, 175B параметров). 570 ГБ текста, тренировка за ~$5M на кластере NVIDIA V100. Революция: in-context learning — модель решает задачи по нескольким примерам в промпте, без обновления весов. Пишет эссе, код, решает математику. Разрыв между GPT-2 и GPT-3 — не количественный, а качественный: эмерджентные способности.

GPT-4 (2023). Архитектура не раскрыта. Мультимодальный (текст + изображения). По слухам — Mixture of Experts. Уровень эксперта на SAT, LSAT, медицинских экзаменах. С RLHF/RLAIF — значительно лучше следует инструкциям и меньше галлюцинирует.

Эволюция GPT: от 117M до триллионов параметров, от fine-tuning к in-context learning
GPT-1: fine-tune на каждую задачу. GPT-2: zero-shot. GPT-3: few-shot in-context learning. GPT-4: мультимодальность + reasoning

In-Context Learning — обучение без обучения

Главное открытие GPT-3: большая модель может решать задачу, просто увидев несколько примеров в промпте. Никакого градиентного спуска, никакого обновления весов — модель «понимает» задачу из контекста. Это in-context learning (ICL), и это одна из самых загадочных способностей LLM.

Три режима по количеству примеров: Zero-shot — только описание задачи: «Переведи на русский: Hello world →». Модель использует знания из pre-training. One-shot — один пример: «Hello → Привет. Good morning →». Модель «схватывает» формат. Few-shot — 3-5 примеров в промпте. Обычно достаточно для хорошего качества на большинстве задач.

# Few-shot in-context learning — модель "понимает" задачу по примерам
prompt = ""  .

: "Отличный товар, рекомендую!"
: 

: "Ужасное качество, деньги на ветер"
: 

: "Нормальный телефон за свои деньги"
:""

# Модель ответит "нейтральная" — без обучения, без меток, без fine-tuning

Как это работает? Полного объяснения пока нет, но есть гипотезы. Одна из них: в процессе pre-training модель видит огромное количество «задач» в естественном тексте — определения слов, переводы, примеры кода с объяснениями. При in-context learning модель не «учится новому», а вспоминает похожий паттерн из training data и применяет его. Другая гипотеза: attention-слои реализуют «неявный градиентный спуск» внутри forward pass.

Emergent abilities — способности, которые появляются только при достаточном масштабе. Арифметика, chain-of-thought reasoning, кодогенерация — модель на 10B не умеет, а на 100B — вдруг умеет. Механизм до конца не понят, и есть дискуссия: это настоящий «фазовый переход» или артефакт метрик (при непрерывных метриках переход выглядит плавным).

RLHF и DPO — как научить модель быть ассистентом

Pre-trained GPT отлично продолжает текст, но плохо следует инструкциям. Если попросить «напиши стихотворение», модель может продолжить «…написать стихотворение можно так:» вместо того, чтобы написать стих. Модель обучена продолжать текст из интернета, а не помогать пользователю.

Alignment (выравнивание) решает эту проблему в три шага: Шаг 1. SFT (Supervised Fine-Tuning) — fine-tune на диалогах «вопрос → качественный ответ», написанных людьми. Модель учится формату ассистента. Шаг 2. Reward Model — обучаем отдельную модель оценивать ответы. Людям показывают два ответа и просят выбрать лучший. Из этих сравнений обучается модель-судья. Шаг 3. RL — оптимизируем GPT с помощью PPO (Proximal Policy Optimization), чтобы максимизировать оценку от Reward Model, не уходя далеко от SFT-модели (KL-штраф).

DPO (Direct Preference Optimization, 2023) — упрощённая альтернатива RLHF. Вместо обучения отдельной Reward Model и RL-оптимизации, DPO напрямую оптимизирует модель по парам «хороший ответ vs плохой ответ». Математически эквивалентно RLHF, но проще в реализации: не нужен RL-loop, reward model и PPO. Большинство open-source моделей в 2024-2025 используют DPO или его вариации (SimPO, KTO, ORPO).

Зачем alignment нужен?

Без alignment модель: придумывает факты (галлюцинации), выполняет вредные запросы, не понимает формат «ассистент». InstructGPT (с RLHF) с 1.3B параметров побеждает base GPT-3 с 175B по полезности — alignment критичнее размера модели для user-facing продуктов.

Инференс: как GPT генерирует текст эффективно

При авторегрессионной генерации модель запускает forward pass для каждого нового токена. Наивная реализация: на шаге t пересчитываем attention для всех t токенов — квадратичная стоимость. Но есть трюк.

KV-Cache — не считай одно и то же дважды

KV-cache — ключевая оптимизация инференса. Идея простая: при генерации токена t ключи (K) и значения (V) для токенов 0…t−1 уже были вычислены на предыдущих шагах. Зачем считать их заново? Кэшируем K и V, а на каждом шаге считаем Q, K, V только для нового токена и дописываем K, V в кэш.

Результат: вместо O(t²) attention на каждом шаге — O(t). Цена — память: KV-cache для длинного контекста (128K токенов) может занимать десятки ГБ. Отсюда — GQA (несколько Query-голов делят одну пару K/V, экономя кэш в 4-8×) и квантизация KV-cache.

Стратегии сэмплирования: температура, top-p, beam search

На каждом шаге модель выдаёт вектор logits размером |vocab|. Как выбрать следующий токен?

Температура (temperature) — делит logits на T перед softmax. T=1 — без изменений. T<1 — распределение «обостряется», модель увереннее выбирает топ-вариант (детерминировано). T>1 — распределение «размазывается», ответы разнообразнее (но более шумные). T→0 = greedy decoding.

Top-p (nucleus sampling) — сортируем токены по вероятности, берём минимальный набор, чья суммарная вероятность ≥ p. Из этого ядра (nucleus) сэмплируем. При p=0.9 отсекаем маловероятные токены, сохраняя разнообразие в пределах «разумного».

Beam search — на каждом шаге храним top-B гипотез (beam width), продолжаем каждую, оставляем лучшие B. Даёт более связный текст, но менее разнообразный. Хорош для перевода и суммаризации, плох для креативных задач.

from transformers import pipeline

gen = pipeline("text-generation", model="gpt2")

# Greedy (temperature → 0): детерминированный, но скучный
result = gen("Трансформеры изменили NLP, потому что",
             max_new_tokens=30, do_sample=False)

# Творческий (temperature=0.9, top_p=0.95)
result = gen("Трансформеры изменили NLP, потому что",
             max_new_tokens=30, do_sample=True,
             temperature=0.9, top_p=0.95)

print(result[0]["generated_text"])

Ограничения GPT

Галлюцинации (hallucinations). GPT генерирует текст, который *звучит* убедительно, но фактически неверен. Модель не «знает» факты — она моделирует распределение текста. Если наиболее вероятное продолжение — ложное утверждение, модель его выдаст с полной уверенностью. Частичные решения: RAG (добавление фактов из внешних источников), grounding, цитирование.

Контекстное окно (context window). GPT-2 — 1024 токена. GPT-3 — 4096. GPT-4 — 8K/32K/128K. Всё что не влезает в окно — модель не видит. Для длинных документов это ограничение: модель не может «прочитать» книгу целиком (хотя 128K ≈ 300 страниц). Решения: увеличение контекста (RoPE scaling), retrieval (RAG), chunking.

Стоимость. Инференс GPT-4 — ~$0.03/1K input tokens (API). Для миллионов запросов в день это десятки тысяч долларов. Обучение GPT-4 — по оценкам $50-100M. Решения: дистилляция, квантизация, inference-aware scaling (маленькие модели на больших данных), батчинг.

Reasoning. Базовый GPT плохо справляется с многошаговым логическим рассуждением и точной арифметикой. Chain-of-thought prompting и специальное обучение (o1, DeepSeek-R1) частично решают проблему, но настоящее «рассуждение» vs «паттерн-матчинг» — открытый вопрос.

BERT vs GPT — когда что использовать

Часто спрашивают

BERT — encoder, двунаправленный, каждый токен видит весь контекст. Лучше для задач понимания: классификация, NER, semantic similarity, extractive QA. GPT — decoder, авторегрессионный, каждый токен видит только прошлое. Лучше для генерации: диалоги, суммаризация, перевод, написание кода. Мнемоника: BERT = читатель, GPT = писатель. На практике (2024-2025): для NLU-задач (классификация, NER) часто дешевле fine-tune BERT/RoBERTa, чем использовать GPT через API. Для генерации, reasoning, мультимодальных задач — GPT и его потомки безальтернативны.

🎯 На собеседовании

Junior

GPT — encoder или decoder? Decoder-only. Авторегрессивный: генерирует токен за токеном, видит только прошлое (causal mask). • В чём разница BERT и GPT? BERT — encoder, двунаправленный, для понимания. GPT — decoder, левоправый, для генерации. • Что такое температура при генерации? Делит logits на T перед softmax. T<1 — увереннее и однообразнее, T>1 — разнообразнее и шумнее.

Middle

Scaling laws — что это? Loss ∝ N^(-α) · D^(-β) · C^(-γ) — степенная зависимость от параметров, данных, compute. Больше = предсказуемо лучше. • In-context learning — как работает без обновления весов? Гипотеза: attention-слои реализуют неявный gradient descent внутри forward pass. Практически: модель «вспоминает» паттерн из pre-training data. • Что такое KV-cache? Кэш ключей и значений для уже обработанных токенов. Без него каждый шаг генерации — O(t²), с ним — O(t). Цена — память. • Зачем нужен RLHF/DPO? Base модель продолжает текст, но не следует инструкциям. Alignment учит быть полезным ассистентом. InstructGPT 1.3B > base GPT-3 175B по полезности.

Senior

Chinchilla vs overtraining — что оптимально? Chinchilla-optimal: D ≈ 20N. Но для инференса выгоднее маленькая перетренированная модель (LLaMA 3 8B на 15T токенов). Trade-off: training compute vs inference compute. • DPO vs RLHF? DPO — implicit reward model, оптимизация напрямую по парам предпочтений. Проще: нет отдельной reward model и PPO. Математически эквивалентно RLHF с KL-constraint. • Как бороться с галлюцинациями? RAG (grounding на документах), цитирование, self-consistency (несколько ответов → голосование), fine-tune на faithful данных, отказ от ответа при неуверенности. • Как оценить стоимость обучения модели? C ≈ 6ND FLOPs. Знаем FLOPs GPU (H100 ≈ 10^15 FLOPs/s) → время ≈ C / (num_gpus × FLOPs/s × MFU). MFU ≈ 0.3-0.5.

Собираем всё вместе

GPT — это decoder-only трансформер, обученный предсказывать следующий токен. Одна простая задача, но при достаточном масштабе из неё вырастают удивительные способности: in-context learning, reasoning, кодогенерация. Scaling laws дают предсказуемый рецепт: больше параметров × больше данных × больше compute = лучше. RLHF/DPO превращают «генератор текста» в полезного ассистента. KV-cache и стратегии сэмплирования делают инференс эффективным.

Если запомнить одну вещь из этой ноды: GPT — это не новая архитектура, а демонстрация силы масштабирования. Decoder-only трансформер 2018 года, масштабированный до 175B+ параметров и выровненный с помощью RLHF, стал основой для всей индустрии LLM.

Подробнее про scaling laws и токенизацию — в ноде «Scaling Laws & Tokenization». Про современные архитектуры (MoE, GQA, RoPE) — в ноде «Современные архитектуры LLM». Про fine-tuning и LoRA — в ноде «LLM Fine-tuning».