LLM RL 核心算法:PPO、DPO、GRPO

Apr 2026 · RLHF / Preference Optimization / Reasoning RL

这篇只聚焦三件事:PPO 是经典 online RLHF,DPO 是最常用的 offline preference optimization,GRPO 是 reasoning model 时代最该懂的 critic-free RL。其他变体可以之后单开一篇,这里先把主干打牢。

一句话:LLM RL 的底层思想是 policy gradient:采样答案,给 reward 或偏好信号,提高好答案的概率,同时用 KL / reference model / clipping 防止模型跑飞。

0. 先背这张表

算法 最短定位 数据从哪来 是否 online rollout 是否需要 critic 适合场景
PPO 经典 RLHF reward model / rule reward / judge 通常需要 通用对齐、reward model 已经有了
DPO 偏好对齐 chosen / rejected pair 不需要 指令风格、偏好数据、稳定省事
GRPO 推理 RL 同题多采样后的 reward group 不需要 数学、代码、可验证 reward 的 reasoning

记忆法:

PPO  = 在线采样 + reward model/function + critic baseline + KL/clip
DPO  = 离线偏好对 + reference model + 分类式 loss
GRPO = 在线同题多采样 + 组内相对 reward + no critic

1. 共同底层:Policy Gradient

LLM 可以看成策略:

pi_theta(y | x)

给定 prompt x,模型生成答案 y。RL 的目标是最大化期望奖励:

maximize_theta E_{y ~ pi_theta}[R(x, y)]

最朴素的更新方向:

grad J(theta) ~= R(x, y) * grad log pi_theta(y | x)

直觉:

2. PPO:经典 RLHF

PPO 的标准 RLHF pipeline:

SFT model
-> train reward model from preference data
-> online rollout with current policy
-> PPO update policy under KL constraint

LLM 版 PPO 常见奖励:

reward = reward_model_score - beta * KL(pi_theta || pi_ref)

PPO 训练时通常有四个角色:

角色 作用
policy model 正在被训练的 LLM
reference model 通常是 SFT checkpoint,用来计算 KL,限制别跑飞
reward model / reward function 给完整回答或过程打分
value model / critic 估计 baseline / value,帮助算 advantage、降方差

PPO 的核心目标可以这样理解:

ratio = pi_theta(token) / pi_old(token)
objective = min(ratio * advantage, clip(ratio, 1-eps, 1+eps) * advantage)

为什么要 clip:如果新 policy 相对旧 policy 改太猛,就截断更新,避免一次梯度把模型推崩。

PPO 具体怎么 work

假设 prompt 是:

写一个 Python 函数,判断括号字符串是否合法。

当前 policy 采样出一个回答:

用栈扫描字符串;遇到左括号入栈,遇到右括号检查栈顶是否匹配。

训练时会发生这几步:

步骤 发生了什么 这个量用来干嘛
1. rollout 当前 policy 真正生成一条答案 得到一条 token trajectory
2. reward reward model / unit test / judge 给答案打分,比如 0.86 告诉模型这条答案好不好
3. KL penalty 如果新模型离 reference 太远,扣掉一点分,比如 0.06 防止为了 reward 把语言能力训坏
4. critic value model 预测每个 prefix 未来大概能拿多少分 提供 baseline,降低方差
5. advantage actual return - critic prediction 判断这段生成比预期好还是差
6. PPO update 用 clipped ratio 更新 token 概率 好的 token trajectory 概率上升,坏的下降

一个数字例子:

reward_model_score = 0.86
kl_penalty = 0.06
actual_return = 0.80

critic prediction at this prefix = 0.55
advantage = 0.80 - 0.55 = +0.25

这说明这段生成比 critic 预期更好,PPO 会提高这条回答里相关 token 的概率。但如果某个 token 的概率变化太猛:

ratio = pi_theta(token) / pi_old(token) = 1.35
clip range = [0.8, 1.2]

那 PPO 不按 1.35 * advantage 更新,而按 1.2 * advantage 更新。直觉就是:

可以朝高 reward 方向走,但一步不能迈太大。

如果另一个回答 reward 很低:

actual_return = 0.20
critic prediction = 0.55
advantage = -0.35

对应 token 的概率就会被压低。PPO 的重点不是只看 reward,而是看:

这个生成结果是否比 critic 原本预期更好?
新 policy 相对 old policy 改得是否过猛?
新 policy 是否离 reference model 太远?

PPO 的优点:

PPO 的缺点:

3. DPO:偏好优化,不是传统 online RL

DPO 直接使用偏好对:

prompt x
chosen answer y_w > rejected answer y_l

它不需要先训练一个显式 reward model,也不需要在线采样 rollout。核心是让模型相对 reference 更偏向 chosen、更远离 rejected:

log pi_theta(y_w | x) - log pi_ref(y_w | x)
should be larger than
log pi_theta(y_l | x) - log pi_ref(y_l | x)

DPO loss 的直觉版:

loss = -log sigmoid(
  beta * [
    log_ratio(chosen) - log_ratio(rejected)
  ]
)

这里的 reference model 仍然很关键:它不是 critic,而是“别离原模型太远”的坐标系。

DPO 具体怎么 work

DPO 不让模型在线试错,而是直接吃偏好数据。比如一条训练样本是:

Prompt:
解释 reward model 和 critic 的区别。

Chosen:
reward model 是裁判,给完整答案打分;critic 是预测器,估计当前状态未来能拿多少 reward。

Rejected:
reward model 和 critic 都是给模型打分的东西,差别不大。

DPO 看的是:当前模型相对 reference model,有没有更偏向 chosen。

假设当前 policy 的 log probability 是:

log pi_theta(chosen | x)   = -120
log pi_theta(rejected | x) = -115

这说明当前模型反而更容易生成 rejected,因为 -115-120 概率更高。

再看 reference model:

log pi_ref(chosen | x)   = -118
log pi_ref(rejected | x) = -116

于是 DPO 比较的是两个 reference-relative ratio:

chosen_log_ratio   = -120 - (-118) = -2
rejected_log_ratio = -115 - (-116) = +1
gap = chosen_log_ratio - rejected_log_ratio = -3

gap 是负的,说明当前模型相对 reference 更偏向 rejected。DPO loss 会推动:

increase log pi_theta(chosen | x)
decrease log pi_theta(rejected | x)

所以 DPO 的训练信号不是:

这个答案 reward = 0.8

而是:

同一个 prompt 下,chosen 应该比 rejected 更容易被模型生成。

它的关键优点是工程简单:没有 rollout、没有 reward model online 打分、没有 critic。缺点也来自这里:模型只在已有偏好对里学习,不会主动探索一个全新的更优答案。

DPO 的优点:

DPO 的缺点:

4. GRPO:推理模型常用的 critic-free RL

GRPO 的核心是同一个 prompt 采样多个答案,然后组内比较。

Prompt x
├── answer A -> reward 0.9
├── answer B -> reward 0.7
├── answer C -> reward 0.2
└── answer D -> reward 0.0

用组内均值 / 标准差做 baseline:

mean = 0.45
A_adv = 0.9 - 0.45 = +0.45
B_adv = 0.7 - 0.45 = +0.25
C_adv = 0.2 - 0.45 = -0.25
D_adv = 0.0 - 0.45 = -0.45

所以它可以省掉 value model / critic:

PPO:  reward function + critic baseline
GRPO: reward function + group-relative baseline

GRPO 具体怎么 work

假设 prompt 是一道数学题:

如果 3x + 5 = 20,求 x。

GRPO 不只采样一个答案,而是同一个 prompt 采样一组答案:

样本 模型回答 reward
A 3x=15,所以 x=5 1.0
B 3x=25,所以 x=8.33 0.0
C x=(20-5)/3=5 1.0
D x=15 0.0

组内平均 reward:

mean_reward = (1.0 + 0.0 + 1.0 + 0.0) / 4 = 0.5

于是每个回答的 advantage 可以近似理解成:

A_adv = 1.0 - 0.5 = +0.5
B_adv = 0.0 - 0.5 = -0.5
C_adv = 1.0 - 0.5 = +0.5
D_adv = 0.0 - 0.5 = -0.5

训练更新就很直观:

A / C 的 token 概率上升
B / D 的 token 概率下降

这里没有单独的 value model,因为 baseline 来自同一个 prompt 的 group mean / group std。也就是说:

PPO 问 critic: 这个 prefix 未来大概值多少分?
GRPO 问同组样本: 这个答案比同题其他答案强还是弱?

GRPO 还会保留 PPO 类似的 ratio / KL 控制,避免模型为了拿 reward 过度偏离 reference。它最适合数学、代码、选择题、格式可验证任务,因为 reward 可以自动算:

数学: 最终答案是否正确
代码: unit tests 是否通过
工具调用: 任务是否完成、证据是否满足

GRPO 特别适合 RLVR(reinforcement learning with verifiable rewards):

GRPO 的优点:

GRPO 的缺点:

5. Reward Model 和 Critic 不要混

项目 Reward model / reward function Critic / value model
一句话 裁判 预测器
输出 这个回答得几分 当前状态未来大概能得几分
是否是优化目标 是,policy 要提高 reward 不是,只是 baseline
PPO 需要吗 需要 reward 信号 通常需要
GRPO 需要吗 需要 reward 信号 不需要
DPO 需要吗 不显式需要 不需要

最容易被问的点:

reward model: answer -> score
critic: partial trajectory/state -> expected return
advantage: actual return - critic prediction

6. 怎么选算法

条件 优先选
只有 chosen/rejected 偏好对,想快速稳定对齐 DPO
有可靠 reward model,要做经典 RLHF PPO
数学/代码/推理,reward 可自动验证 GRPO
训练资源有限,不想维护 critic DPO 或 GRPO
想让模型在在线 rollout 里探索更优 reasoning GRPO
想最大化通用 reward,同时 reward model 已成熟 PPO

最实用的面试回答:

PPO 是传统 RLHF 主力,完整但重;DPO 是偏好对齐主力,离线、简单、稳定;GRPO 是 reasoning RL 主力,用组内相对 reward 替代 critic,适合数学/代码这类可验证任务。

7. 高频问答

DPO 算不算 RL?

广义上它来自 RLHF 目标的推导,狭义上不是传统 online RL。它没有 rollout、没有环境交互、没有 critic,更准确叫 offline preference optimization。

GRPO 为什么不需要 critic?

因为它对同一个 prompt 采样多个答案,用组内 reward 的均值 / 标准差构造 baseline。critic 的作用是提供 baseline,GRPO 用 group baseline 替代了它。

PPO 和 GRPO 最大区别?

PPO 通常训练 value model / critic 来估计 advantage;GRPO 用同题多样本的相对 reward 估计 advantage。PPO 更通用,GRPO 在可验证 reasoning 任务上更省、更直接。

三者共同点是什么?

都在控制“新模型相对旧模型/reference model 的概率变化”。PPO 用 ratio clipping 和 KL,DPO 用 reference-relative preference loss,GRPO 通常也会保留 KL 或 ratio clipping。

8. 最终速记

PPO:
  online RLHF, reward model/function + critic + KL/clip
  strongest general RLHF baseline, but expensive and sensitive

DPO:
  offline preference optimization, chosen/rejected pair
  no rollout, no reward model, no critic
  simple, stable, good for alignment

GRPO:
  online critic-free RL, group-relative advantage
  no value model, good for verifiable reasoning rewards
  central for modern reasoning RL