Эпоха 5 · Эра LLM · 2018

35 GPT-1

Improving Language Understanding by Generative Pre-Training · Radford, Narasimhan, Salimans, Sutskever · OpenAI
🟦 хватит конспекта~30 миноригинал ↗
Суть за 20 секунд. Декодер-трансформер, генеративно предобученный на неразмеченном тексте, затем дообученный под задачу, бьёт спец-архитектуры. Начало линии GPT: decoder-only, авторегрессионный, генеративный — в отличие от двунаправленного BERT.

Контекст

Тот же 2018-й; OpenAI пробует рецепт, параллельный BERT — генеративное предобучение трансформера-декодера на потоке текста.

Идея и механизм

Этап 1 (unsupervised): учим обычную языковую модель (предсказание следующего токена) на большом корпусе книг. Этап 2 (supervised): под каждую задачу слегка переформатируем вход и добавляем линейную голову, дообучая на размеченных данных. Минимум task-specific архитектуры — почти всё знание сидит в предобученном декодере.

теория вероятностей Две стадии: предобучение и дообучение

Стадия 1 — генеративное предобучение. Максимизируем правдоподобие следующего токена (causal LM) на неразмеченном тексте:

L1 = Σt log P(xt | xt−k..t−1; θ)

Стадия 2 — supervised дообучение. Для размеченных (x, y) добавляем линейную голову поверх последнего состояния и максимизируем:

L2 = Σ log P(y | x1..m)  (+ λ L1 как вспомогательный)

Ключ: тяжёлое знание языка выучивается на стадии 1 из дешёвого неразмеченного текста, а дорогие размеченные данные нужны лишь чтобы «настроить» модель под задачу на стадии 2. Это и есть transfer learning для NLP, которое потом доведут до zero-shot (GPT-2/3).

PyTorch Лосс causal LM (предобучение)
import torch.nn.functional as F
# предсказать следующий токен: сдвиг последовательности на 1
def lm_loss(logits, tokens, V):
    return F.cross_entropy(logits[:, :-1].reshape(-1, V),
                           tokens[:, 1:].reshape(-1))   # target = вход, сдвинутый влево
предобучениенеразмеченный текст дообучениеразмеченная задача ответ учим язык (дёшево, много) настраиваем под задачу (дорого, мало)
Дешёвое предобучение на тексте даёт «знание языка»; дорогая разметка нужна лишь для финальной настройки под конкретную задачу.
Аналогия. Сначала человек просто много читает — набирает общую грамотность и эрудицию (предобучение). Потом, устраиваясь на конкретную работу, проходит короткий профильный курс (дообучение). Долго учить язык под каждую работу заново глупо — общую базу набирают один раз и переиспользуют.

Почему это важно

Заложил линию GPT (decoder-only, авторегрессионный, однонаправленный) — в отличие от двунаправленного encoder-BERT. Эта линия приведёт к GPT-2/3 и ChatGPT. Вышел тихо, PDF-отчётом без конференции; концептуально превзойдён GPT-2/3.

Связи

← опирается на32. Transformer

GPT — это декодерная половина трансформера на масштабном предобучении. Causal self-attention (видит только прошлое) — ровно то, что нужно для авторегрессионной генерации, в отличие от двунаправленного энкодера BERT.

→ масштабируется в36. GPT-2

GPT-2 берёт ту же decoder-only схему и просто сильно увеличивает модель и данные — и обнаруживает zero-shot способности. Прямое продолжение: тот же рецепт, другой масштаб.

↔ контраст34. BERT

Близнецы 2018-го с противоположной философией: BERT — двунаправленное понимание (fine-tune под задачу), GPT — авторегрессионная генерация (позже — управление промптом). Их развилка определила два класса LLM.

Вопросы пытливого ума

Почему линия GPT в итоге «победила» BERT в публичном сознании?

Потому что генерация масштабируется в универсального ассистента, управляемого промптом, без дообучения под каждую задачу — а это интерфейс, понятный всем (ChatGPT). BERT остался мощным инструментом понимания внутри систем (поиск, классификация), но он не «разговаривает». Победила не архитектура как таковая, а парадигма «одна генеративная модель на всё через текст».

Почему обучали именно на книгах (BooksCorpus), а не на любом тексте?

Книги дают длинные связные пассажи — модель учится зависимостям на больших дистанциях, а не на обрывках. Это важно для генерации связного текста. Позже (GPT-2/3) корпус расширили до качественного веба, но идея «длинный связный контекст полезнее для LM» осталась.

Дообучение под каждую задачу — разве это не то, от чего потом ушли?

Именно. GPT-1 ещё требовал supervised дообучения на стадии 2. GPT-2 показал, что при достаточном масштабе можно решать задачи zero-shot через промпт, а GPT-3 — few-shot. Так линия GPT за два шага ушла от «дообучи под задачу» к «опиши задачу в промпте» — это и есть главный сдвиг парадигмы.

Что читать в оригинале

Конспекта достаточно — концепт превзойдён GPT-2/3. Если интересно, посмотрите, как минимально переформатируется вход под разные задачи на стадии 2.