GPT architecture на собеседовании Data Scientist
Normal(μ, σ) при известном σ. Какая точечная оценка MLE для параметра μ?Содержание:
Decoder-only
GPT — это decoder-only Transformer: у него нет энкодера, только стек декодер-блоков. Модель обучается авторегрессивно, то есть предсказывает следующий токен по всем предыдущим и генерирует текст слева направо, по одному токену за шаг.
Токены [t1, t2, t3] → Transformer → P(t4 | t1, t2, t3)От оригинального Transformer (encoder-decoder для перевода) GPT отличается тем, что убрал энкодер и cross-attention. Осталось только маскированное self-attention внутри одного стека. Это делает архитектуру простой и универсальной: любую задачу можно свести к «продолжи текст», а значит, обучать на огромных неразмеченных корпусах в режиме language modeling.
Causal masking
Ключевое ограничение авторегрессии: токен на позиции i может «смотреть» (attend) только на позиции 0..i, но не на будущие. Это реализуют через causal mask — нижнетреугольную матрицу, которая обнуляет (ставит -inf перед softmax) веса внимания к токенам справа.
Маска внимания:
[1 0 0 0]
[1 1 0 0]
[1 1 1 0]
[1 1 1 1]Маска нужна, чтобы предотвратить «утечку из будущего» (future leak): при обучении модель видит всю последовательность сразу, и без маски она могла бы подсмотреть ответ, а не научиться его предсказывать. Благодаря маске обучение идёт параллельно по всем позициям, но каждая позиция предсказывает следующий токен только по левому контексту — ровно как при генерации.
Layer normalization
Где именно стоит нормализация — важный архитектурный выбор, который влияет на устойчивость обучения глубоких сетей.
- Post-LN. Как в оригинальном Transformer: нормализация ставится после residual-связи. Работает, но у очень глубоких моделей градиенты нестабильны, часто нужен прогрев learning rate.
- Pre-LN. Современный дефолт: нормализация стоит перед attention и FFN, внутри residual-ветки. Даёт более стабильный поток градиентов и позволяет обучать десятки-сотни слоёв без хитрого прогрева.
- RMSNorm. Упрощённый вариант: только масштабирование по среднеквадратичной норме, без вычитания среднего (без центрирования) и без bias. Дешевле по вычислениям и работает не хуже — используется в Llama и GPT-NeoX.
Positional encoding (RoPE)
Self-attention само по себе не знает порядка токенов — позицию нужно закодировать явно. В оригинальном GPT это были абсолютные синусоидальные (или обучаемые) позиционные эмбеддинги, которые прибавлялись к входу.
Современный стандарт — RoPE (Rotary Position Embedding). Вместо прибавления вектора он поворачивает векторы query и key на угол, пропорциональный позиции. За счёт свойств поворота скалярное произведение q·k начинает зависеть от относительной разницы позиций, а не от абсолютных значений.
Плюсы RoPE:
- Относительная позиция. Внимание естественно учитывает расстояние между токенами, а не их абсолютный индекс.
- Экстраполяция на длину. Модель лучше работает на последовательностях длиннее, чем видела при обучении (особенно с приёмами вроде position interpolation).
RoPE используется в Llama, GPT-NeoX, Mistral. Альтернатива — ALiBi: он не трогает эмбеддинги, а добавляет к скорам внимания линейный штраф, растущий с расстоянием (наклон свой для каждой головы). ALiBi тоже хорошо экстраполируется на длинный контекст и совсем дёшев.
SwiGLU
В блоке feed-forward (FFN) вместо обычного Linear → ReLU → Linear современные модели используют SwiGLU — вариант gated linear unit (GLU) с активацией SiLU (она же Swish).
SwiGLU(x) = (SiLU(x·W1) ⊗ x·W3) · W2Идея gating: одна линейная проекция даёт «контент», вторая — «вентиль» (gate) через SiLU, и они перемножаются поэлементно. Это даёт сети более гибкую нелинейность, чем ReLU или GELU, и на больших языковых моделях стабильно поднимает качество.
Деталь, которую любят на собесе: SwiGLU-FFN использует три весовые матрицы вместо двух, поэтому скрытую размерность обычно уменьшают примерно до 2/3, чтобы сохранить общее число параметров. SwiGLU применяется в Llama и PaLM.
Как это спрашивают на собесе
Типичные формулировки:
- «Чем decoder-only отличается от encoder-decoder и BERT?» — ждут: у GPT только левый контекст и causal-маска (авторегрессия), у BERT двунаправленное внимание (masked language modeling), encoder-decoder нужен для seq2seq с cross-attention.
- «Зачем causal mask и что будет без неё?» — ждут: без маски модель подсмотрит будущие токены, обучение сведётся к копированию, генерация станет невозможной.
- «Почему Pre-LN, а не Post-LN?» — ждут: устойчивость градиентов в глубоких сетях, обучение без сложного прогрева LR.
- «Что даёт RoPE по сравнению с абсолютными эмбеддингами?» — ждут: относительная позиция и экстраполяция на длинный контекст.
- «Как decoder-only ускоряет генерацию?» — ждут: KV-cache — на каждом шаге пересчитываются key/value только для нового токена, а прошлые берутся из кэша.
Частые ошибки
- Путать GPT и BERT. GPT — авторегрессия и левый контекст; BERT — двунаправленный энкодер с MLM. Это разные задачи обучения, а не «одно и то же с маской».
- Говорить, что у GPT есть энкодер. У decoder-only энкодера и cross-attention нет — только маскированное self-attention.
- Считать, что маска нужна только при генерации. Она нужна и при обучении, иначе будет утечка из будущего.
- Путать Pre-LN и Post-LN местами. Pre-LN стоит перед подблоком (внутри residual-ветки), Post-LN — после сложения с residual.
- Называть RoPE абсолютным кодированием. RoPE через поворот даёт именно относительную зависимость позиций.
Связанные темы
- BERT vs GPT для DS
- Transformer для DS
- Attention для DS
- Mixture of Experts для DS
- Подготовка к собесу Data Scientist
FAQ
Почему GPT — decoder-only, а не encoder-decoder?
Для генеративного language modeling достаточно одного маскированного декодера: задача «предсказать следующий токен» естественно решается левым контекстом. Encoder-decoder нужен для seq2seq (перевод, суммаризация в классической постановке), где вход и выход разделены cross-attention. Decoder-only проще, лучше масштабируется и универсально сводит любые задачи к продолжению текста.
В чём разница между causal-маской и маской в BERT?
Causal-маска в GPT скрывает будущие токены — внимание строго слева направо. В BERT маскируется не позиция, а случайные токены во входе (masked language modeling), при этом внимание двунаправленное: модель видит и левый, и правый контекст.
Зачем нужны RMSNorm и Pre-LN?
Pre-LN стабилизирует градиенты и позволяет обучать глубокие сети без тонкой настройки прогрева. RMSNorm — более дешёвая нормализация (без центрирования и bias), которая по качеству не уступает LayerNorm и экономит вычисления. Вместе они — стандартный современный рецепт.
Что такое KV-cache и при чём тут архитектура?
При авторегрессивной генерации на каждом шаге добавляется один токен. KV-cache хранит уже посчитанные key/value для всех прошлых токенов, поэтому на новом шаге считаются только k/v нового токена. Это возможно именно из-за causal-структуры decoder-only и радикально ускоряет инференс.
Это официальная информация?
Нет. Статья основана на публичных работах: Radford et al. 2019 (GPT-2), Su et al. 2021 (RoPE), Shazeer 2020 (GLU-варианты), а также технических отчётах Llama. Детали зависят от конкретной модели.
Тренируйте Data Science — откройте тренажёр с 1500+ вопросами для собесов.