Обработка естественного языка
GPT и авторегрессионные LM
Предварительные знания
- BERT и парадигма pretrain-then-fine-tune
- Self-attention и Transformer (BERT - encoder-only, GPT - decoder-only)
GPT: от GPT-1 к GPT-3
В июне 2018 года Алек Рэдфорд с коллегами из OpenAI опубликовали 'Improving Language Understanding by Generative Pre-Training' (GPT-1): decoder-only Transformer, предобученный авторегрессионно (предсказание следующего токена) и затем дообучаемый под задачи. В отличие от двунаправленного BERT, GPT строго слева-направо, что делает его естественным генератором текста. В 2019 году GPT-2 (1.5B параметров) показал, что масштаб даёт связную генерацию длинных текстов; OpenAI сначала придержал релиз полной модели из-за опасений злоупотреблений. В 2020 году GPT-3 (175B параметров) в статье 'Language Models are Few-Shot Learners' продемонстрировал few-shot обучение в контексте без обновления весов. Эта линия привела к InstructGPT и ChatGPT (2022). Авторегрессионный рецепт GPT - архитектурная основа практически всех современных генеративных LLM
В ноябре 2022 года OpenAI выпустила ChatGPT. За пять дней - миллион пользователей. За два месяца - сто миллионов, самый быстрый рост любого продукта в истории. Под капотом - decoder-only Transformer, обученный предсказывать следующий токен на триллионах токенов интернета, плюс RLHF. Та же архитектура, которую Radford с коллегами опубликовали в 2018 году в скромной статье 'Improving Language Understanding by Generative Pre-Training', через четыре года переформатировала индустрию.
- ChatGPT (GPT-3.5, GPT-4) - универсальный ассистент, использующий few-shot, CoT и tool use поверх decoder-only LM
- GitHub Copilot - дообученная GPT (Codex) генерирует код авторегрессионно, видя текущий файл как prompt
- Перплексити, Claude, Gemini, Llama, Mistral - все ведущие LLM используют decoder-only архитектуру с causal masking
Авторегрессия: следующий токен как условная вероятность
BERT восстанавливает маскированные токены, видя весь контекст сразу. GPT (Generative Pre-trained Transformer, 2018) идёт другим путём: моделируется совместное распределение последовательности через цепное правило вероятностей. P(w1, w2, ..., wn) = P(w1) * P(w2|w1) * P(w3|w1,w2) * ... Каждое слово предсказывается строго на основе того, что было слева. Это называется авторегрессией - модель регрессирует на собственный предыдущий выход. Преимущество: одна и та же модель умеет и оценивать вероятность готового текста, и порождать новый, продолжая последовательность токен за токеном. Цена: контекст всегда односторонний, правую часть модель не видит.
Декодинг авторегрессионной модели сводится к выбору следующего токена из распределения. Greedy берёт argmax и часто зацикливается. Beam search хранит k лучших гипотез - даёт связный, но 'безопасный' текст. Temperature sampling делит логиты на T: T<1 заостряет распределение, T>1 размывает. Top-k и top-p (nucleus) отсекают хвост: top-p=0.9 семплирует только из токенов, накапливающих 90% массы вероятности.
Почему авторегрессионная модель не может посмотреть на правый контекст при предсказании текущего токена?
Causal mask: треугольная матрица внимания
Архитектурно decoder-only Transformer почти не отличается от encoder-блока BERT: те же multi-head attention, FFN, residuals и LayerNorm. Разница в одной строчке: перед softmax внутри attention к scores добавляется causal mask - верхнетреугольная матрица из -inf. После softmax эти позиции зануляются, и токен на позиции t может аггрегировать информацию только с позиций 0..t. Это позволяет учить модель параллельно по всей последовательности: при обучении токены 1..n предсказываются одновременно, но каждый видит только свой префикс. Без маски модель просто скопировала бы свой вход - тривиальный shortcut, обнуляющий loss.
Во время инференса causal mask имеет ещё одно следствие: ключи и значения для уже обработанных токенов не меняются. Это даёт KV-cache - оптимизацию, где K и V прошлых позиций сохраняются и переиспользуются. Без KV-cache каждый шаг генерации был бы O(n^2) по длине, с KV-cache - O(n) на токен. Именно поэтому первый токен GPT-4 на длинном prompt отдаётся медленнее последующих.
Зачем при обучении decoder-only модели применять causal mask, а не просто учить на парах (префикс, следующий токен) отдельно?
In-context learning: задачи без градиентов
Главный сюрприз GPT-3 (2020, 175B параметров): достаточно показать модели несколько примеров прямо в prompt, и она начинает решать новые задачи без обновления весов. Это назвали in-context learning. Zero-shot: задача описана словами, примеров нет. One-shot: один пример демонстрации. Few-shot: несколько пар вход-выход в качестве 'обучающей выборки'. Веса модели заморожены, никакого backprop - и тем не менее точность на бенчмарках растёт с числом примеров. Гипотеза: достаточно крупная LM выучивает мета-задачу 'продолжи паттерн', и examples в контексте играют роль программы для интерпретатора, в качестве которого выступает forward pass.
Эмерджентные способности (Wei et al., 2022): in-context learning, цепочки рассуждений, арифметика проявляются скачкообразно при определённом масштабе модели. GPT-3 малого размера (1B) почти не умеет few-shot, а 175B - умеет. Это породило закон масштабирования (Kaplan, Chinchilla) и гонку за параметрами. Позже DeepMind показал, что многие модели обучены недостаточно: 70B Chinchilla на 1.4T токенов обходит 280B Gopher на 300B токенов.
В чём фундаментальное отличие in-context learning от классического fine-tuning?
Prompt engineering: формулировка как программа
Раз модель учится из контекста, формулировка prompt становится критичной. Маленькие изменения в постановке задачи дают радикально разные результаты. Хороший prompt включает: чёткую инструкцию (что делать), примеры в нужном формате (few-shot), контекст (роль модели, ограничения), формат вывода (JSON, список, шаги). Chain-of-thought (Wei et al., 2022) - явно попросить модель рассуждать пошагово - поднимает точность на математических задачах с 18% до 57% на GSM8K без всякого fine-tuning. Self-consistency: семплировать несколько цепочек рассуждений и выбирать наиболее частый ответ - ещё +10%. ReAct: чередовать рассуждение и вызовы инструментов. Эти техники превратили инженерию промптов в полноценную инженерную дисциплину.
RLHF (Reinforcement Learning from Human Feedback) - следующий уровень после prompt engineering. Базовая GPT обучена просто продолжать текст и часто не следует инструкциям буквально. InstructGPT (2022) дообучили на парах (prompt, хороший ответ) от разметчиков и применили RL с reward model, которая предсказывает оценки людей. Результат: модель в 100 раз меньшего размера (1.3B vs 175B) предпочитается людьми чаще, чем оригинальная GPT-3. Этот рецепт лёг в основу ChatGPT.
GPT 'понимает' задачу из prompt так же, как человек понимает условие
GPT предсказывает следующий токен, который максимально правдоподобен после данного префикса; 'понимание' - это статистическая аппроксимация паттернов из обучающей выборки
Авторегрессионная LM минимизирует кросс-энтропию на корпусе текстов. Если в корпусе есть много примеров пар 'задача - решение', модель выучивает условные распределения, которые на новом prompt дают похожий на решение текст. Это не семантическое понимание, а очень мощная аппроксимация - отсюда галлюцинации, провалы на out-of-distribution и чувствительность к формулировке.
Почему chain-of-thought prompting улучшает точность на математических и логических задачах без изменения весов модели?
Ключевые идеи
- Авторегрессия моделирует P(текст) через произведение условных вероятностей P(w_t | w_1..w_{t-1}) - одна модель и для оценки, и для генерации
- Causal mask превращает encoder-блок в decoder: треугольная маска внимания позволяет параллельно учить все позиции, при этом каждая видит только свой префикс
- In-context learning - эмерджентное свойство больших LM: задачи решаются через примеры в prompt без обновления весов
- Prompt engineering (few-shot, chain-of-thought, self-consistency, ReAct) превращает формулировку запроса в инструмент управления поведением модели
- RLHF на InstructGPT поверх базовой GPT - рецепт превращения 'продолжателя текста' в 'ассистента', следующего инструкциям
Связанные темы
От базового GPT путь идёт к instruction tuning, RLHF, мультимодальности и агентам. Сюрприз ChatGPT 2022 года вырос из decoder-only архитектуры 2018-го, докрученной масштабом и обратной связью от людей.
- BERT и маскированные LM — Параллельная ветвь: encoder-only с двунаправленным вниманием против decoder-only с авторегрессией
- Transformer и attention — Общая архитектурная основа: GPT - это стек decoder-блоков из исходного Transformer
- Embeddings и языковые модели — GPT как развитие идеи language modeling: от n-грамм через RNN/LSTM к Transformer
Вопросы для размышления
- Если авторегрессия не видит правый контекст, как тогда GPT справляется с задачами вроде 'заполни пропуск в середине предложения'?
- Почему ICL эмерджентен - то есть появляется только при достаточном масштабе модели, а не плавно растёт с числом параметров?
- Где граница между prompt engineering и fine-tuning - в каких случаях стоит дообучать веса, а в каких хватит хорошего промпта?
Связанные уроки
- nlp-12 — BERT - отправная точка для понимания GPT autoregressive
- nlp-10 — Attention mechanism - ядро GPT архитектуры
- nlp-15 — GPT - базовая архитектура Large Language Models
- nlp-16 — RLHF обучает GPT следовать инструкциям
- gai-04 — GPT архитектура в NLP = GPT архитектура в generative AI
- it-01 — Autoregressive LM минимизирует cross-entropy - это Shannon entropy на практике
- dl-01