English translation is not available yet. Showing Russian content.
Что такое PPO (Proximal Policy Optimization) и почему он используется в RLHF?
Краткий тезис
PPO (Proximal Policy Optimization) — это алгоритм обучения с подкреплением, который стабилизирует обновления политики (policy) за счёт clipping (ограничения) изменения вероятностей действий. В RLHF (Reinforcement Learning from Human Feedback) PPO применяется для дообучения языковой модели, чтобы она генерировала ответы, максимизирующие награду от reward model, но при этом не отклонялась слишком далеко от исходной (reference) модели. Это предотвращает коллапс политики и сохраняет качество генерации.
1. Основы Policy Gradient и проблема больших шагов
Policy gradient — класс методов RL, где политика $\pi_\theta(a|s)$ (вероятность действия $a$ в состоянии $s$) оптимизируется напрямую через градиент ожидаемой награды. Обновление параметров $\theta$ происходит по формуле:
$$ \theta_{new} = \theta_{old} + [alpha](/wiki/alpha) \nabla_\theta J(\theta) $$
где $\nabla_\theta J(\theta) = \mathbb{E}[\nabla_\theta \log \pi_\theta(a|s) \cdot R]$.
Проблема: если шаг обновления слишком большой, политика может резко измениться, что приводит к нестабильности, потере ранее выученного поведения и коллапсу. В контексте языковых моделей это означает, что модель начинает генерировать бессмысленный или небезопасный текст.
2. Идея PPO: доверительная область с clipping
PPO решает проблему больших шагов, ограничивая изменение политики на каждой итерации. Вместо того чтобы максимизировать награду напрямую, PPO оптимизирует суррогатную цель (surrogate objective), которая штрафует слишком большие отклонения от старой политики.
Ключевой элемент — clipping (отсечение) отношения вероятностей:
$$ r_t(\theta) = \frac{\pi_\theta(a_t|s_t)}{\pi_{\theta_{old}}(a_t|s_t)} $$
Целевая функция PPO:
$$ L^{CLIP}(\theta) = \mathbb{E}_t \left \min\left( r_t(\theta) \hat{A}_t, [text{clip}(r_t(\theta), 1-[epsilon](/wiki/Epsilon), 1+[epsilon](/wiki/Epsilon)) \hat{A}_t \right) \right] $$
где $\hat{A}_t$ — оценка advantage (преимущества действия), $[epsilon](/wiki/Epsilon)$ — гиперпараметр (обычно 0.2). Clipping гарантирует, что $r_t(\theta)$ не выйдет за пределы $1-[epsilon, 1+[epsilon](/wiki/Epsilon)]$, то есть новая политика не будет слишком сильно отличаться от старой.
Термин «доверительная область» (trust region): PPO неявно определяет область в пространстве параметров, где обновление считается безопасным.
3. PPO в контексте RLHF: общая схема
RLHF — это процесс дообучения языковой модели с использованием обратной связи от человека. Он состоит из трёх этапов:
- Supervised Fine-Tuning (SFT) — модель дообучается на демонстрациях человека (предпочтительные ответы).
- Обучение reward model — модель учится предсказывать оценку человека (reward) для пары (prompt, ответ).
- PPO fine-tuning — языковая модель (policy) оптимизируется так, чтобы максимизировать reward, но не отклоняться от SFT-модели (reference).
На этапе PPO:
- Policy — языковая модель (actor), которая генерирует ответы.
- State — текущий промпт (контекст).
- Action — следующее сгенерированное слово (токен).
- Reward — оценка от reward model за весь ответ (часто с дополнительным KL penalty).
- Advantage — разница между полученным reward и ожидаемым (baseline), часто оценивается через value function (critic).
4. Зачем PPO, а не другой алгоритм?
| Алгоритм | Проблема в RLHF | Почему PPO лучше |
|---|---|---|
| Vanilla Policy Gradient | Нестабильность, большие шаги | Clipping стабилизирует |
| TRPO (Trust Region Policy Optimization) | Сложный расчёт KL-дивергенции, дорого | PPO проще и эффективнее |
| DQN (Deep Q-Network) | Не подходит для непрерывных действий (токены) | PPO работает с дискретными действиями |
| DPO (Direct Preference Optimization) | Не требует reward model, но менее гибок | PPO позволяет использовать сложные reward |
PPO в RLHF даёт:
- Стабильность — модель не «сходит с ума» после одного обновления.
- Контроль отклонения — через KL penalty (штраф за расхождение с reference) и clipping.
- Эффективность — использует данные нескольких эпох (importance sampling) с коррекцией.
5. KL penalty и reference model
В RLHF к reward добавляют KL divergence penalty:
$$ R_{total} = R_{reward_model} - [beta](/wiki/beta) \cdot KL(\pi_{PPO} || \pi_{ref}) $$
где $[beta](/wiki/beta)$ — коэффициент. Это штрафует модель за слишком сильное отклонение от reference (SFT-модели). PPO с clipping дополнительно ограничивает изменение на уровне отдельных токенов.
Термин «reference model» — замороженная копия SFT-модели, которая служит точкой отсчёта. Без неё модель может забыть грамматику и факты.
6. Имплементация PPO для LLM (упрощённый код)
import torch
import torch.nn.functional as F
def ppo_update(policy_model, ref_model, reward_model, prompts, responses,
old_log_probs, advantages, clip_epsilon=0.2, beta=0.01):
# Текущие лог-вероятности
log_probs = policy_model.get_log_probs(prompts, responses)
# Отношение вероятностей
ratio = torch.exp(log_probs - old_log_probs)
# Clipped ratio
clipped_ratio = torch.clamp(ratio, 1 - clip_epsilon, 1 + clip_epsilon)
# PPO loss
surr1 = ratio * advantages
surr2 = clipped_ratio * advantages
policy_loss = -torch.min(surr1, surr2).mean()
# KL penalty (optional, часто встроен в reward)
with torch.no_grad():
ref_log_probs = ref_model.get_log_probs(prompts, responses)
kl = (log_probs - ref_log_probs).mean()
loss = policy_loss + beta * kl
# Обновление
loss.backward()
optimizer.step()
7. Почему PPO предотвращает collapse?
Collapse (коллапс политики) — ситуация, когда модель начинает генерировать однотипные или бессмысленные ответы, максимизируя reward, но теряя разнообразие. PPO предотвращает это двумя механизмами:
- Clipping — не даёт вероятности одного токена резко возрасти, сохраняя пространство для других вариантов.
- KL penalty — удерживает распределение модели близким к reference, которая уже умеет генерировать осмысленный текст.
Без PPO модель может «забыть», как писать грамотно, и начать повторять шаблоны, за которые reward model даёт высокие оценки.
8. Альтернативы PPO в RLHF
- DPO (Direct Preference Optimization) — не требует отдельной reward model и PPO, оптимизирует политику напрямую по парам предпочтений. Проще, но менее гибко (нельзя добавить сложный reward).
- GRPO (Group Relative Policy Optimization) — вариант PPO без value function, использует группу ответов для оценки advantage.
- Reinforce — простой градиентный метод, но менее стабильный.
На практике PPO остаётся стандартом для RLHF в больших языковых моделях (ChatGPT, Claude, Gemini) из-за проверенной стабильности.
Пет-проект для закрепления
Задача: Реализовать упрощённый RLHF с PPO для дообучения небольшой языковой модели (например, GPT-2) на задаче генерации вежливых ответов.
Инструменты:
- Python, PyTorch, Transformers (Hugging Face)
- Датасет: DailyDialog (диалоги) + разметка вежливости (можно синтетическую)
- Reward model: простая бинарная модель (вежливо/невежливо) на основе BERT
Шаги:
- Загрузить предобученную GPT-2 и дообучить на диалогах (SFT).
- Обучить reward model на парах (ответ, оценка вежливости).
- Реализовать PPO loop:
- Оценить: сравнить вежливость и разнообразие ответов до и после PPO.
Ожидаемый результат: Модель после PPO генерирует более вежливые ответы, не теряя связности и грамматики. При этом без PPO модель может стать слишком шаблонной (например, всегда отвечать «Thank you»).
Связь с другими вопросами
| Вопрос | Тема |
|---|---|
| 326 | Что такое RLHF и как он работает? |
| 328 | Как обучается reward model для RLHF? |
| 329 | Что такое DPO и чем он отличается от PPO? |
| 330 | Что такое alignment и зачем он нужен? |
| 331 | Как fine-tune LLM с подкреплением? |
Навигация
- Предыдущий: 326
- Следующий: 328
- Индекс: 00. Индекс разборов