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, наоборот, видит всё предложение — ему можно, он не генерирует слева направо.

BERTGPT
Часть трансформераэнкодердекодер
Направлениедвунаправленныйслева направо
Сильная сторонапониманиегенерация

Откуда «магия» больших моделей

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

Температура: насколько случайна генерация

При генерации можно брать не всегда самый вероятный токен, а сэмплировать из распределения. Параметр температуры регулирует случайность: низкая температура — предсказуемый, «безопасный» текст; высокая — разнообразный и креативный, но рискованный. Это рычаг между скучным и творческим выводом.

Итог

  • GPT предсказывает следующий токен — та же идея, что у n-граммных моделей.
  • Но контекст — вся история через self-attention, а не 1-2 слова.
  • Генерация авторегрессивна: токен за токеном, слева направо.
  • GPT — декодер (генерация), BERT — энкодер (понимание).
  • Масштаб данных и параметров рождает сложное поведение (основа LLM).
Проверьте себя
1. Какую задачу решает GPT на самом базовом уровне?
AКлассифицирует тональность
BПредсказывает следующий токен по всем предыдущим
CСчитает TF-IDF документов
DУдаляет стоп-слова
2. Чем GPT отличается от BERT по назначению?
AGPT — декодер для генерации, BERT — энкодер для понимания
BGPT понимает текст, а BERT его генерирует
CОни идентичны
DGPT не использует трансформер
3. Почему GPT видит только предыдущие токены, а не будущие?
AИз-за нехватки памяти
BПотому что при генерации будущих токенов ещё не существует — он порождает текст слева направо
CПотому что будущие токены — стоп-слова
DЭто ограничение видеокарты
Поддержать проект