Правильное понимание

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

while not done:
    tokens.append(model.sample_next_token(tokens))

Такой код действительно имеет внешний вид того, что можно назвать предиктором следующего токена. Во время предварительной подготовки модель многократно берёт несколько предыдущих токенов, смотрит на токен, который на самом деле последовал за ними, и делает этот токен более вероятным для выборки. Концептуально цикл обучения выглядит примерно так:

for tokens in training_data:
    for position in range(1, len(tokens)):
        prior_tokens = tokens[:position]
        actual_next_token = tokens[position]
        model.make_more_likely(
            actual_next_token,
            after=prior_tokens,
        )

Функция make_more_likely, разумеется, проделывает здесь огромную работу. Под капотом скрываются функции потерь, градиенты и обновления параметров, но для нашего обсуждения важен только итоговый результат: токен, который на самом деле пришёл дальше, становится более вероятным.

Ключевой момент: каждый actual_next_token происходит из существующей последовательности в training_data. Справедливо будет сказать, что базовая модель действительно работает как предиктор следующего токена: она обучена прогнозировать следующие токены, как они появляются в её тренировочных данных.

Но LLM, которые мы используем, — это не только базовые модели. Они подвергаются постобучению, а ключевая часть современного постобучения — усиленное обучение с проверяемыми вознаграждениями (RLVR). Во время предварительной подготовки модель учится только из последовательностей, уже существующих в тренировочных данных. Во время RLVR модель исследует, генерируя новые последовательности и учась из их результатов. Концептуально цикл обучения RLVR выглядит примерно так:

for task in training_tasks:
    for explored_tokens in model.explore(task):
        reward = evaluate_outcome(task, explored_tokens)
        for position in range(len(explored_tokens)):
            prior_tokens = task + explored_tokens[:position]
            explored_next_token = explored_tokens[position]
            model.make_more_likely(
                explored_next_token,
                after=prior_tokens,
                according_to=reward,
            )

Функция make_more_likely выполняет одинаковую работу в обоих циклах, но по принципиально разным причинам. Во время предварительной подготовки она делает actual_next_token более вероятным, потому что этот токен появился в тренировочных данных. Во время RLVR она делает explored_next_token более вероятным, потому что исследованная последовательность, содержащая его, получила высокое вознаграждение.

Таким образом, хотя постобученный LLM всё ещё имеет внешний вид предиктора следующего токена, генерируя токены один за другим, он больше не учится только на прогнозировании существующего текста. Он также учится из новых последовательностей, создаваемых его собственными исследованиями.

Аналогия с шахматами

Шахматный движок помогает лучше понять это различие. Представим две шахматные системы.

Первая обучена на большой базе данных партий гроссмейстеров. Она изучает закономерности того, как гроссмейстеры реагируют на различные позиции на доске. Учитывая новую позицию, она предсказывает ход, который гроссмейстер, вероятнее всего, сделает дальше. Это предиктор следующего хода.

Вторая — идеализированный шахматный движок, который исследовал все возможные партии. Из этого исчерпывающего исследования он знает вероятность победы с каждой возможной позиции на доске. Учитывая позицию, он выбирает ход, ведущий к наибольшей вероятности победы. В отличие от первой системы, она не обучена только на партиях, уже сыгранных гроссмейстерами. Она также учится из партий, создаваемых её собственным исследованием.

Называть вторую систему «предиктором следующего хода» было бы странно. Она не пытается предсказать, какой ход на самом деле последовал в наборе данных. Она пытается выбрать ход, который выигрывает.

Завершающие мысли

В этом тексте не рассматривались другие техники постобучения, но они тоже имеют значение. Усиленное обучение из обратной связи человека (RLHF), например, смещает модель от имитации её тренировочных данных в целом к моделированию полезного помощника. А как мы видели в этом материале, RLVR идёт ещё дальше: он позволяет LLM исследовать и учиться из идей, никогда не встречавшихся в его тренировочных данных.

Вот почему «предиктор следующего токена» — неправильная ментальная модель. Она описывает форму механизма — один токен, выданный за другим, — но игнорирует то, что кодирует этот механизм. Моделирование полезного помощника и знания, открытые через исследование, могут быть закодированы в точно такой же цикл выдачи следующего токена.