GRPO:Group Relative Policy Optimization
对同一输入采样一组输出,用组内相对奖励估计 advantage,再进行带裁剪与 KL 的策略优化。
学习目标
- 用同一 prompt 的组内相对奖励构造信号,说明归一化和零方差的边界。
- 独立复核“有区分奖励与全相同奖励的组优势”的输入、计算和解释。
- 相对优势来自同问题回答之间的差异。
为什么重要
用同一 prompt 的组内相对奖励构造信号,说明归一化和零方差的边界。
学习前需要掌握
背景与问题
为语言回答训练独立 value model 会增加资源与工程成本。GRPO 对同一问题采样多个回答,用它们之间的奖励差形成相对优势,减少对独立 critic 的需求;这并不意味着可以不采样或不提供评分。
概念定义
DeepSeekMath 的 GRPO 是 PPO 风格策略优化变体:同 prompt 的一组响应共享组均值与尺度形成相对优势,再用于概率比率裁剪目标,配合参考策略 KL。原始设计不训练独立 value model;不同后续实现的归一化、长度处理与 KL 方式可能不同。
直观理解
同一道题里比较多份答卷,比把不同难度题的原始得分混在一起更有针对性。但如果这题的所有答案都错或都对且奖励相同,组内比较本身就没有方向。
核心原理
组的单位是同一个 prompt,不能把不同问题的奖励混合标准化。标准差的总体或样本约定、ε 处理与组大小都会改变数值;记录这些细节,才能解释优势尺度和复现梯度。
所有奖励相同时,中心化优势为零;分母加 ε 只能避免除零,不能创造区分信号。极小方差会放大微小评分噪声,稀疏奖励还可能导致大量全错组没有有效改进方向。
组内标准化可能抹去不同题目的绝对收益尺度,并影响任务加权。省掉 value model 也不等于整体计算必然更低,因为每个 prompt 需多次生成和评分;实际 token 成本应独立计算。
数学表达
组相对 Advantage
同一组内中心化和缩放奖励。
变量含义
G同一 prompt 的采样输出数量。r_i第 i 个输出奖励。Â_i组相对 advantage。π_ref用于 KL 约束的参考策略。
计算步骤
- 1第一组均值 0.5、标准差 0.5,优势近似 [1,−1,1,−1]。
- 2第二组均值 1、标准差 0,中心化奖励全为 0。
- 3ε 防止除零,第二组优势仍全部为 0。
代码对应位置
示例 1有区分奖励与全相同奖励的组优势:一组产生正负方向,等分组没有组内优势信号;示例只核对归一化,不实现完整 GRPO。
变量解释
| 变量 | 含义 |
|---|---|
G | 同一 prompt 的采样输出数量。 |
r_i | 第 i 个输出奖励。 |
Â_i | 组相对 advantage。 |
π_ref | 用于 KL 约束的参考策略。 |
完整数值示例
有区分奖励与全相同奖励的组优势
已知条件
- 同 prompt 第一组奖励为 [1,0,1,0],第二组均为 1。
- 用总体标准差,分母加 1e−8。
计算步骤
- 第一组均值 0.5、标准差 0.5,优势近似 [1,−1,1,−1]。
- 第二组均值 1、标准差 0,中心化奖励全为 0。
- ε 防止除零,第二组优势仍全部为 0。
计算结果
一组产生正负方向,等分组没有组内优势信号;示例只核对归一化,不实现完整 GRPO。
处理前后对比
- 相对优势来自同问题回答之间的差异。
- 完整优化还需要旧概率、裁剪、参考策略与正确 token/序列约定。
计算与实现步骤
- 对每个 prompt 从 old policy 采样 G 个输出
- 奖励模型或规则评分
- 组内标准化得到 advantage
- 计算新旧策略 ratio
- clipped surrogate
- 加入 KL 约束并更新
- 重新采样新组
代码实现
示例 1
有区分奖励与全相同奖励的组优势
example_01.py用途:一组产生正负方向,等分组没有组内优势信号;示例只核对归一化,不实现完整 GRPO。
import math
groups = [[1.0, 0.0, 1.0, 0.0], [1.0, 1.0, 1.0, 1.0]]
for rewards in groups:
average = sum(rewards) / len(rewards)
std = math.sqrt(sum((r-average)**2 for r in rewards) / len(rewards))
advantage = [(r-average)/(std+1e-8) for r in rewards]
print(f"mean={average:.3f} std={std:.3f} advantages=" + ",".join(f"{a:.3f}" for a in advantage))代码解析
解析始终位于完整代码下方,并按实际代码段逐项对应。
输入数据与任务
一组产生正负方向,等分组没有组内优势信号;示例只核对归一化,不实现完整 GRPO。
mean- 训练特征逐列均值。
std- 训练特征逐列标准差。
Step 1 · 1–7 行
导入当前步骤需要的数值计算、预处理、模型或评价工具。依赖集中写在代码开头,便于复现。
import math
groups = [[1.0, 0.0, 1.0, 0.0], [1.0, 1.0, 1.0, 1.0]]
for rewards in groups:
average = sum(rewards) / len(rewards)
std = math.sqrt(sum((r-average)**2 for r in rewards) / len(rewards))
advantage = [(r-average)/(std+1e-8) for r in rewards]
print(f"mean={average:.3f} std={std:.3f} advantages=" + ",".join(f"{a:.3f}" for a in advantage))代码与数学原理
减去训练均值并除以训练标准差,对应代码中的 mean/std 或 StandardScaler。
预期输出或运行结果
mean=0.500 std=0.500 advantages=1.000,-1.000,1.000,-1.000 mean=1.000 std=0.000 advantages=0.000,0.000,0.000,0.000
常见错误 · 4 条
- 不要在测试集上调用 fit 或 fit_transform;测试集只能复用训练参数。
- 跨 prompt 混合奖励后仍称组相对优势。
- 零方差时除零,或把 ε 误当能产生新学习信号。
- 用新旧策略差的平方冒充完整参考策略 KL。
实际应用
- 序贯决策
- 控制与资源分配
常见错误
- 跨 prompt 混合奖励后仍称组相对优势。
- 零方差时除零,或把 ε 误当能产生新学习信号。
- 用新旧策略差的平方冒充完整参考策略 KL。
扩展内容说明
本页数值均为解释机制的构造案例,不能解读为真实训练或基准性能。定义和适用条件参见 Shao 等:DeepSeekMath: Pushing the Limits of Mathematical Reasoning in Open Language Models。
算法属性与数据边界
目标函数
group-relative clipped surrogate with KL
Reference Policy
用于 KL 约束
Reward Model
可用奖励模型或可验证规则奖励
Group Data
同一 prompt 的多条在线采样输出
Advantage
组内标准化奖励,不使用独立 Value Model
KL 约束
限制策略偏离 reference
Clip Range
PPO 风格 ratio clipping
与 DQN、SAC 及相邻方法对照
- PPO 变体
- 原始设计不需要独立 Value Model
- 奖励组质量和方差直接影响信号
失败模式、风险与性能
失败模式
- 跨 prompt 混合奖励后仍称组相对优势。
- 零方差时除零,或把 ε 误当能产生新学习信号。
- 用新旧策略差的平方冒充完整参考策略 KL。
风险
- 奖励函数与真实目标不一致会诱发奖励黑客。
- 部署策略的行动权限必须由环境和应用层约束。
性能考虑
- 样本效率、墙钟时间和显存占用需要分别报告。
- 应使用多个随机种子、置信区间和固定评测策略。
常见问题
GRPO 不要 critic 就不需要奖励了吗?
仍需要组内各响应的可比较评分,可来自规则、可验证结果或奖励模型;省掉的是独立 value model,而不是反馈来源。
网页是否会训练模型?
不会。所有图表使用固定种子或解析公式在浏览器本地计算,不执行页面中的示例代码。
推荐学习资料
DeepSeekMath: Pushing the Limits of Mathematical Reasoning
介绍 DeepSeekMath 训练流程及以组内相对奖励替代独立 Value Model 的 GRPO。
Shao et al. · arXiv