PPO、GRPO 与 DPO 的区别
区分在线策略优化、组相对在线优化和离线偏好目标。
学习目标
- 对齐输入数据、在线生成与价值模型需求,再比较三种优化路线。
- 独立复核“相同 prompt 数量不代表相同采样成本”的输入、计算和解释。
- 三者的反馈格式与采样流程不同。
为什么重要
对齐输入数据、在线生成与价值模型需求,再比较三种优化路线。
学习前需要掌握
背景与问题
PPO、GRPO、DPO 都用于语言模型后训练,却不要求相同数据。把三者放进同一个名称列表而不写数据流程,会误以为只改一个损失函数就能互换,实际需要的采样、评分和模型组件明显不同。
概念定义
PPO 是通用策略优化方法,语言 RLHF 中通常配价值模型与生成评分。GRPO 用同 prompt 的多响应相对奖励替代独立价值基线,并保留 PPO 风格更新。DPO 直接用离线偏好对和参考策略构造损失,不要求传统在线环境交互。
直观理解
PPO 像教练给每次表现一个相对预期评价;GRPO 像同题多份答卷互相比较;DPO 像根据已有的两两胜负记录调整偏好。三种记录格式不能不经转换就互相代替。
核心原理
PPO 的优势可由 critic 与 GAE 构造,GRPO 原始设计用组均值与标准差构造相对优势。两者都要正确保存旧策略概率,裁剪目标也都不是硬性 KL 保证;评分可来自模型或可验证规则。
DPO 的核心输入是相同 prompt 的优选和拒绝响应,参考策略用于相对 log 概率。它没有与环境转移一一对应的 TD 目标,也不应只因为理论联系就称为在线 RL。
比较资源需计算生成 token、评分、参考推断、价值模型和训练更新,而非只数网络个数。GRPO 省 critic 可能增加每 prompt 采样数;DPO 省在线生成但需要先获得有代表性的偏好数据。
数学表达
在线概率比率与离线偏好 logit
PPO 与 GRPO 使用近期采样的概率比率但优势构造不同;DPO 用偏好对的相对 logit,输入不能直接互换。
变量含义
π_old生成近期 rollout 的旧策略π_refDPO 的固定参考策略y_w、y_l同题优选与拒绝回答βDPO 目标尺度参数
计算步骤
- 1PPO 本轮生成 3 个响应,GRPO 生成 12 个。
- 2DPO 读取 3 对、共 6 个已存响应,本轮目标不要求新生成。
- 3只数响应仍未包含长度、评分和反向传播成本,不能据此给性能排名。
代码对应位置
示例 1相同 prompt 数量不代表相同采样成本:示例清单为 3 个 PPO 新响应、12 个 GRPO 新响应、6 个 DPO 存储响应。
变量解释
| 变量 | 含义 |
|---|---|
π_old | 生成近期 rollout 的旧策略 |
π_ref | DPO 的固定参考策略 |
y_w、y_l | 同题优选与拒绝回答 |
β | DPO 目标尺度参数 |
完整数值示例
相同 prompt 数量不代表相同采样成本
已知条件
- 构造一个最小数据清单:3 个 prompt。
- PPO 每题新采 1 个响应;GRPO 每题新采 4 个;DPO 每题已有 1 对偏好。
计算步骤
- PPO 本轮生成 3 个响应,GRPO 生成 12 个。
- DPO 读取 3 对、共 6 个已存响应,本轮目标不要求新生成。
- 只数响应仍未包含长度、评分和反向传播成本,不能据此给性能排名。
计算结果
示例清单为 3 个 PPO 新响应、12 个 GRPO 新响应、6 个 DPO 存储响应。
处理前后对比
- 三者的反馈格式与采样流程不同。
- 响应数是配置算术,不是真实吞吐或模型质量基准。
计算与实现步骤
- 判断是否有在线采样
- 判断是否有成对偏好或组奖励
- 选择目标
- 设置 reference/KL
- 独立评测
代码实现
示例 1
相同 prompt 数量不代表相同采样成本
example_01.py用途:示例清单为 3 个 PPO 新响应、12 个 GRPO 新响应、6 个 DPO 存储响应。
prompts = 3
ppo_generated = prompts * 1
grpo_generated = prompts * 4
dpo_stored = prompts * 2
print(f"PPO generated={ppo_generated}")
print(f"GRPO generated={grpo_generated}")
print(f"DPO stored={dpo_stored}, required_online_generation=0")代码解析
解析始终位于完整代码下方,并按实际代码段逐项对应。
输入数据与任务
示例清单为 3 个 PPO 新响应、12 个 GRPO 新响应、6 个 DPO 存储响应。
Step 1 · 1–7 行
输出中间参数、形状或最终指标,用于核对代码是否符合预期。
prompts = 3
ppo_generated = prompts * 1
grpo_generated = prompts * 4
dpo_stored = prompts * 2
print(f"PPO generated={ppo_generated}")
print(f"GRPO generated={grpo_generated}")
print(f"DPO stored={dpo_stored}, required_online_generation=0")预期输出或运行结果
PPO generated=3 GRPO generated=12 DPO stored=6, required_online_generation=0
常见错误 · 3 条
- 以为三种方法只要相同 batch 就能直接换损失。
- 把 GRPO 省 critic 解读成总成本必然更低。
- 把 DPO 的静态偏好训练描述成环境探索。
实际应用
- 序贯决策
- 控制与资源分配
常见错误
- 以为三种方法只要相同 batch 就能直接换损失。
- 把 GRPO 省 critic 解读成总成本必然更低。
- 把 DPO 的静态偏好训练描述成环境探索。
扩展内容说明
本页数值均为解释机制的构造案例,不能解读为真实训练或基准性能。定义和适用条件参见 Rafailov 等:Direct Preference Optimization。
算法属性与数据边界
失败模式、风险与性能
失败模式
- 以为三种方法只要相同 batch 就能直接换损失。
- 把 GRPO 省 critic 解读成总成本必然更低。
- 把 DPO 的静态偏好训练描述成环境探索。
风险
- 奖励函数与真实目标不一致会诱发奖励黑客。
- 部署策略的行动权限必须由环境和应用层约束。
性能考虑
- 样本效率、墙钟时间和显存占用需要分别报告。
- 应使用多个随机种子、置信区间和固定评测策略。
常见问题
只有偏好对时应直接使用 PPO 吗?
PPO 需要可用于其 rollout 的奖励与优势流程;仅有静态偏好对时,DPO 或奖励建模是更直接的数据接口,仍要按任务验证。
网页是否会训练模型?
不会。所有图表使用固定种子或解析公式在浏览器本地计算,不执行页面中的示例代码。
推荐学习资料
DeepSeekMath: Pushing the Limits of Mathematical Reasoning
介绍 DeepSeekMath 训练流程及以组内相对奖励替代独立 Value Model 的 GRPO。
Shao et al. · arXiv