Перейти к содержимому
ПереводыDatawhale и китайские курсы

Happy-LLM, глава 6 (дополнение): выравнивание предпочтений через RL

Полный перевод незавершённого дополнительного раздела 6.4 книги Datawhale «Строим большую модель с нуля»: откуда взялось обучение с подкреплением, его основные понятия и цель, модель награды и сбор данных о предпочтениях в формате chosen/rejected.

6.4 Выравнивание предпочтений с помощью обучения с подкреплением

Заголовок раздела «6.4 Выравнивание предпочтений с помощью обучения с подкреплением»

Прежде чем погружаться в детали обучения с подкреплением, посмотрим, откуда оно взялось. Обучение с подкреплением (Reinforcement Learning, сокращённо RL) — вовсе не новинка. Его теоретические основы восходят к поведенческой психологии начала XX века, прежде всего к исследованиям научения у животных Эдварда Торндайка и Б. Ф. Скиннера. Торндайк сформулировал «закон эффекта»: если поведение приводит к положительному результату, вероятность его повторения растёт. Скиннер развил эту мысль в теорию оперантного обусловливания: поведение формируется наградами и наказаниями.

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

6.4.1 Основные принципы обучения с подкреплением

Заголовок раздела «6.4.1 Основные принципы обучения с подкреплением»

Теперь перейдём к главному — основным принципам обучения с подкреплением.

  • Состояние (State) — конкретная ситуация системы в некоторый момент. Например, в настольной игре состояние — это текущее расположение всех фигур на доске. Для беспилотного автомобиля состояние может включать скорость и положение машины, а также положение окружающих препятствий.
  • Действие (Action) — операция, которую агент может выполнить в данном состоянии. Для велосипеда это, например, «ехать вперёд», «остановиться», «повернуть». В сложной системе множество действий может быть огромным.
  • Награда (Reward) — обратная связь, которую агент получает после выполнения действия; обычно это число. Награда бывает немедленной или отложенной. Хорошее действие может получить положительную награду, плохое — отрицательную.
  • Политика (Policy) — набор правил, по которым агент выбирает действия. Проще говоря, политика говорит агенту, что делать в каждом состоянии.
  • Функция ценности (Value Function) — инструмент оценки политики: она предсказывает, какую суммарную награду в долгосрочной перспективе можно получить, начиная с текущего состояния. Функция ценности помогает агенту учитывать не только награду текущего шага, но и лучше взвешивать краткосрочную и долгосрочную выгоду.
  • Модель (Model) — в некоторых системах обучения с подкреплением строят модель среды, которая помогает агенту предвидеть последствия своих действий. Это очень полезно во многих сложных вычислительных задачах.
flowchart TB
A["Агент (Agent)"] -- "действие a_t" --> E["Среда (Environment)"]
E -- "состояние s_t" --> A
E -- "награда r_t" --> A
Рисунок «Reinforcement Learning»: агент выбирает действие, среда возвращает новое состояние и награду (схема перерисована по рисунку оригинала docs/images/6-images/7.1-1.png)

Эти элементы работают вместе и помогают агенту, постоянно пробуя и ошибаясь в виртуальной среде, выучить наилучшую стратегию поведения. В обучении с подкреплением агент — субъект обучения и принятия решений. Он взаимодействует со средой так:

  1. Наблюдает состояние: сначала агент видит текущее состояние (State).
  2. Выбирает действие: по наблюдаемому состоянию и заданной политике агент выбирает действие (Action).
  3. Выполняет действие: агент совершает выбранное действие.
  4. Получает награду и новое состояние: после действия агент получает от среды соответствующую награду (Reward) и обновлённое состояние (State).
  5. Обновляет политику: агент использует полученную награду, чтобы скорректировать политику и в будущем получать лучшие результаты.

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

Цель обучения с подкреплением очень ясна: многократно пробуя и обучаясь в данной среде, научить агента выбирать последовательность действий, которая максимизирует его суммарную накопленную награду. Звучит, пожалуй, абстрактно — сравним с компьютерной игрой. В игре цель игрока — серией действий (ходить, прыгать, бить монстров) набрать много очков или пройти уровень. В обучении с подкреплением высоким очкам или прохождению уровня соответствует «максимизация награды».

Математически цель можно записать как обучение политики π\pi, при которой действия агента во всех состояниях ss максимизируют математическое ожидание отдачи R(τ)R(\tau). Конкретно мы хотим максимизировать такое ожидание:

E(R(τ))τ∼Pθ(τ)=∑τR(τ)Pθ(τ)E(R(\tau))_{\tau \sim P_{\theta}(\tau)} = \sum_{\tau} R(\tau) P_{\theta}(\tau)

где:

  • E(R(τ))τ∼Pθ(τ)E(R(\tau))_{\tau \sim P_{\theta}(\tau)} — математическое ожидание отдачи R(τ)R(\tau) траектории τ\tau при политике Pθ(τ)P_{\theta}(\tau);
  • R(τ)R(\tau) — отдача траектории τ\tau, то есть сумма всех наград от начального до конечного состояния;
  • τ\tau — траектория, то есть последовательность состояний и действий агента в среде;
  • Pθ(τ)P_{\theta}(\tau) — вероятность породить траекторию τ\tau при параметрах θ\theta; обычно её задаёт политика или сеть-политика;
  • θ\theta — параметры политики, которые управляют поведением политики PθP_{\theta}.

Чтобы найти такую политику, используют градиентный подъём: параметры политики θ\theta постоянно обновляют так, чтобы E(R(τ))τ∼Pθ(τ)E(R(\tau))_{\tau \sim P_{\theta}(\tau)} всё время росло.

Читаем формулу (от переводчика). Сумма перебирает все возможные траектории: «сколько дала траектория» × «насколько вероятно, что политика её выберет». Пример: у политики две траектории — с отдачей 1 (вероятность 0,3) и с отдачей 0 (вероятность 0,7). Ожидаемая отдача 1⋅0,3+0⋅0,7=0,31 \cdot 0{,}3 + 0 \cdot 0{,}7 = 0{,}3. Обучение сдвигает θ\theta так, чтобы вероятность хорошей траектории росла. Как посчитать градиент этой суммы, не перебирая все траектории, — теорема о градиенте политики из урока 6.3.1.

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

А применение обучения с подкреплением в больших моделях, например AlphaGo и AlphaZero, ещё яснее показало его силу в сложных задачах. Эти модели методами обучения с подкреплением постоянно улучшали стратегию и в итоге обыграли лучших игроков-людей в го, шахматах и других играх, продемонстрировав огромный потенциал обучения с подкреплением в сложных задачах.

Примечание переводчика. AlphaGo (2016) и AlphaZero (2017) — не языковые модели, а системы для настольных игр из нейросетей и поиска по дереву (MCTS). «Большие модели» здесь в широком смысле.

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

В обработке естественного языка большие языковые модели (серии Llama, Qwen и другие) уже показали сильные способности к пониманию и генерации текста. Однако предобученные модели не всегда прямо отвечают конкретным бизнес-задачам и человеческим ценностям. Поэтому их обычно «дообучают на инструкциях» (Instruction Tuning): дают модели конкретные инструкции (prompts) и примеры, чтобы в диалогах, ответах на вопросы, генерации текста и других задачах она вела себя ближе к ожиданиям людей.

Закончив начальное дообучение на инструкциях, мы хотим, чтобы ответы модели были не только правильными, но и как можно лучше соответствовали человеческим представлениям о хорошем, ценностям и стандартам безопасности. Для этого ввели понятие обучения с подкреплением на основе обратной связи от людей (Reinforcement Learning from Human Feedback, RLHF). В RLHFобучение с подкреплением на основе отзывов людей (RLHF)EN reinforcement learning from human feedback (RLHF) сначала получают от людей-разметчиков их предпочтения относительно ответов модели (например, показывают несколько ответов и просят их ранжировать), а затем этой обратной связью направляют обучение модели, постоянно повышая согласие её текстов с человеческими предпочтениями.

Чтобы в процессе RLHF автоматически «оценивать» ответы модели (выдавать награду), нужна специальная модель наградымодель вознагражденияEN reward model (Reward Model). Её обучают на данных, размеченных людьми, а в реальной работе она самостоятельно и автоматически оценивает выходы модели — это снижает затраты и задержки постоянного участия людей.

Прежде чем строить модель награды (Reward Model), нужно подготовить качественный датасет человеческой обратной связи. Его главная задача — для каждой заданной подсказки (prompt) дать несколько вариантов ответа (completion), которые люди-разметчики тщательно оценили и упорядочили. Сравнивая и отбирая ответы, мы получаем для модели ясный ориентир, который помогает ей дальше учиться порождать в данной задаче ответы, больше соответствующие ожиданиям людей.

Данные можно собирать так:

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

  2. Разметить и оценить вручную. Получив несколько вариантов ответа, приглашаем профессиональных разметчиков или краудсорсинг оценить качество каждого. Оценка обычно идёт по набору заранее заданных критериев: точность ответа, полнота, уместность в контексте, беглость языка, соблюдение этических норм и правил безопасности. Сравнение и ранжирование разных ответов помогает выделить лучшие и худшие из них — так получаются ценные обучающие данные.

  3. Отформатировать и упорядочить данные. После разметки данные приводят в порядок и форматируют — обычно в JSON, CSV или другой структурированный формат, удобный для обработки компьютером. В датасете нужно явно указать каждый вопрос (prompt), соответствующие ему несколько ответов (completions) и выбор разметчиков (например, лучший ответ помечают как “chosen”, худший — как “rejected”). Эти пометки прямо служат сигналом обучения для модели награды: при обучении она сама начинает склоняться к качественным ответам.

Ниже простой пример данных: два вопроса (question), ответы на них и результат оценки людьми. Сравнивая поля “chosen” и “rejected”, легко увидеть, какой ответ лучше.

[
{
"question": "Что такое список в Python?",
"chosen": "Список в Python — это упорядоченный изменяемый контейнер: он хранит несколько элементов, к которым можно обращаться по индексу.",
"rejected": "Список в Python нужен для хранения данных."
},
{
"question": "Что такое кортеж в Python?",
"chosen": "Кортеж в Python — это упорядоченный неизменяемый контейнер: он хранит несколько элементов, и после создания его нельзя изменить.",
"rejected": "Кортеж в Python нужен для хранения данных."
}
]

В этом примере разметчики сочли ответы в поле “chosen” лучше соответствующих “rejected” по описанию, точности и информативности. Например, в определении списка ответ “chosen” яснее объясняет свойства списка (упорядоченный, изменяемый, доступ по индексу), а не ограничивается общей фразой «нужен для хранения данных».

Обучить модель награды можно с помощью фреймворка обучения с подкреплением для больших моделей TRL (Transformer Reinforcement Learning). TRL — фреймворк обучения на основе обучения с подкреплением; его цель — с помощью обратной связи от людей направлять модель к ответам, которые больше соответствуют ожиданиям людей. В TRL модель награды — это отдельный компонент, который оценивает ответы модели и по результатам оценки выдаёт награду или наказание.

На этом текст оригинала обрывается.


Продолжение от переводчика: как обучают модель награды

Заголовок раздела «Продолжение от переводчика: как обучают модель награды»

Ниже — не перевод, а наше краткое продолжение, чтобы довести мысль раздела до рабочего кода.

Устройство. Модель награды — это обычно та же LLM (часто SFT-модель), у которой языковую «голову» заменили линейным слоем с одним выходом: на вход — prompt и ответ, на выход — одно число r(x,y)r(x, y), «насколько хорош ответ».

Функция потерь. Модель учится на парах: для подсказки xx лучший ответ ywy_w (chosen) должен получить оценку выше худшего yly_l (rejected). Потери по модели Брэдли–Терри (модель Брэдли–Терримодель Брэдли–ТерриEN Bradley–Terry modelP(A ≻ B) = σ(r_A − r_B). Та же модель стоит за рейтингом Эло и лидербордом Chatbot Arena.):

L=−log⁡σ(r(x,yw)−r(x,yl))\mathcal{L} = -\log \sigma\big(r(x, y_w) - r(x, y_l)\big)

Словами: берём разность оценок, пропускаем через сигмоиду (получаем «вероятность, что chosen лучше») и штрафуем, если эта вероятность мала. Пример: r(x,yw)=2,0r(x, y_w) = 2{,}0, r(x,yl)=0,5r(x, y_l) = 0{,}5, разность 1,5, σ(1,5)≈0,818\sigma(1{,}5) \approx 0{,}818, потери −ln⁡0,818≈0,201-\ln 0{,}818 \approx 0{,}201. Если бы модель ошиблась и дала chosen на 1,5 меньше, потери были бы −ln⁡σ(−1,5)≈1,701-\ln \sigma(-1{,}5) \approx 1{,}701 — в 8,5 раза больше.

Минимальный код на TRL. RewardTrainer ждёт столбцы chosen и rejected (и при желании prompt), поэтому поле question из примера выше переименуем в prompt:

from datasets import Dataset
from transformers import AutoModelForSequenceClassification, AutoTokenizer
from trl import RewardConfig, RewardTrainer
model_name = "Qwen/Qwen2.5-0.5B-Instruct" # маленькая модель для опыта
tokenizer = AutoTokenizer.from_pretrained(model_name)
# num_labels=1: вместо распределения по словарю модель выдаёт одно число — награду
model = AutoModelForSequenceClassification.from_pretrained(model_name, num_labels=1)
model.config.pad_token_id = tokenizer.pad_token_id # голове классификации нужен pad-токен
data = [
{"prompt": "Что такое список в Python?",
"chosen": "Упорядоченный изменяемый контейнер с доступом по индексу.",
"rejected": "Нужен для хранения данных."},
# ... здесь должны быть тысячи пар
]
train_dataset = Dataset.from_list(data)
args = RewardConfig(output_dir="rm-out", per_device_train_batch_size=2, num_train_epochs=1)
trainer = RewardTrainer(model=model, args=args, train_dataset=train_dataset,
processing_class=tokenizer)
trainer.train()

Дальше обученную модель награды используют в PPO (см. урок 6.3.2), а DPO обходится без неё — модель награды «прячется» внутри функции потерь (урок 6.3.3). В главе 8 книги (GRPO) модели награды тоже нет: там награду выдаёт программа-проверяльщик ответа.

EnglishРусский
reinforcement learning, RLобучение с подкреплением
law of effectзакон эффекта
operant conditioningоперантное обусловливание
state / action / rewardсостояние / действие / награда
policyполитика
value functionфункция ценности
agentагент
trajectoryтраектория
returnотдача
gradient ascentградиентный подъём
RLHFобучение с подкреплением на обратной связи от людей
reward modelмодель награды
instruction tuningдообучение на инструкциях
annotatorразметчик