GPT и генеративные модели
GPT доводит до предела старую идею «предсказать следующее слово» — ту самую, что мы видели у n-граммных моделей, только на трансформере и гигантских масштабах.
GPT (Generative Pre-trained Transformer) — генеративная модель на основе декодера трансформера, которая порождает текст, предсказывая следующий токен по всем предыдущим.
Та же задача, что в начале курса
Вспомните биграммную языковую модель из раздела 3: по предыдущему слову предсказать следующее. GPT делает ровно то же самое — предсказывает следующий токен, — но вместо одного предыдущего слова учитывает тысячи через self-attention, и обучен на огромных объёмах текста. Концептуально это прямой потомок n-граммных моделей; разница — в мощности механизма и масштабе.
n-граммная модель: P(следующее | 1-2 предыдущих слова)
GPT: P(следующий токен | ВСЕ предыдущие токены, через self-attention)
одна идея — несопоставимая мощность
Авторегрессивная генерация
GPT генерирует текст так же, как декодер из seq2seq: по одному токену за раз, добавляя предсказанное обратно на вход. Покажем цикл «предсказал — дописал — повторил» на игрушечной модели, где вероятности заданы вручную.
# игрушечная "GPT": по последнему слову даёт распределение следующих
model = {
"я": {"люблю": 0.7, "вижу": 0.3},
"люблю": {"котов": 0.6, "море": 0.4},
"котов": {"<конец>": 1.0},
}
def generate(start, max_len=5):
word = start
text = [word]
for _ in range(max_len):
if word not in model:
break
# жадно берём самый вероятный следующий токен
nxt = max(model[word], key=model[word].get)
if nxt == "<конец>":
break
text.append(nxt)
word = nxt
return " ".join(text)
print(generate("я"))
Вывод:
я люблю котов
Механизм тот же, что у биграммной модели в начале курса: взять текущее состояние, выбрать следующий токен, продолжить. Настоящий GPT отличается тем, что распределение следующего токена он вычисляет не по таблице, а прогоняя всю историю через десятки слоёв self-attention, — поэтому учитывает длинный контекст и порождает связные абзацы.
Декодер, а не энкодер
Если BERT — это энкодер (понимание), то GPT — декодер (генерация). Важная деталь: GPT использует «маскированное» self-attention, при котором каждый токен видит только предыдущие, но не будущие. Это логично: при генерации будущих слов ещё нет. BERT, наоборот, видит всё предложение — ему можно, он не генерирует слева направо.
| BERT | GPT | |
| Часть трансформера | энкодер | декодер |
| Направление | двунаправленный | слева направо |
| Сильная сторона | понимание | генерация |
Откуда «магия» больших моделей
Простая задача «предскажи следующий токен» на колоссальных данных и с миллиардами параметров неожиданно порождает сложное поведение: модель учится грамматике, фактам, рассуждению, переводу — всему, что помогает лучше предсказывать текст. С ростом масштаба появляются способности, которых не было у маленьких моделей (это называют эмерджентностью). На этом стоят современные большие языковые модели (LLM).
Температура: насколько случайна генерация
При генерации можно брать не всегда самый вероятный токен, а сэмплировать из распределения. Параметр температуры регулирует случайность: низкая температура — предсказуемый, «безопасный» текст; высокая — разнообразный и креативный, но рискованный. Это рычаг между скучным и творческим выводом.
Итог
- GPT предсказывает следующий токен — та же идея, что у n-граммных моделей.
- Но контекст — вся история через self-attention, а не 1-2 слова.
- Генерация авторегрессивна: токен за токеном, слева направо.
- GPT — декодер (генерация), BERT — энкодер (понимание).
- Масштаб данных и параметров рождает сложное поведение (основа LLM).