GRPO:Group Relative Policy Optimization
对同一输入采样一组输出,用组内相对奖励估计 advantage,再进行带裁剪与 KL 的策略优化。
学习目标
- 定义GRPO:Group Relative Policy Optimization并复述输入输出。
- 从公式计算一个最小数值例子。
- 说明它与相邻算法的区别、失败模式和适用场景。
为什么重要
GRPO:Group Relative Policy Optimization位于“状态—行动—反馈—更新”学习链中的关键位置。
掌握它能帮助学习者判断算法使用的数据、策略归属和稳定性边界。
学习前需要掌握
背景与问题
强化学习面对序贯决策:动作会改变之后能看到的状态和奖励,因此样本通常并非独立同分布。
同一算法的效果取决于环境、探索策略、函数近似、随机种子和评测协议,单次曲线不足以下结论。
概念定义
DeepSeekMath 提出的 GRPO 是 PPO 的变体,以组内奖励标准化替代独立 Value Model 的 advantage 估计。
本页使用“问题定义—数学目标—更新过程—代码—失败诊断”的顺序组织,避免只记算法缩写。
直观理解
同一道题生成多份答案,不问绝对难度,而比较同组中谁明显更好。
把价值看作“未来累计收益的估计”,把策略看作“在状态下如何选动作的规则”;算法差异主要在估计谁、使用谁生成的数据以及如何更新。
核心原理
Group 是同一 prompt 的多条采样输出。
组均值与标准差形成 relative advantage。
原始 GRPO 设计避免独立 Critic/Value Model。
仍需 reference policy/KL 与概率比率裁剪控制更新。
数学表达
组相对 Advantage
同一组内中心化和缩放奖励。
变量含义
G同一 prompt 的采样输出数量。r_i第 i 个输出奖励。Â_i组相对 advantage。π_ref用于 KL 约束的参考策略。
计算步骤
- 1计算 bootstrap 目标:1+0.9×2=2.8。
- 2目标与当前估计差为 2.8−0.5=2.3。
- 3若学习率 α=0.1,新估计为 0.5+0.1×2.3=0.73。
代码对应位置
示例 1GRPO:组内奖励标准化与 clipped objective:按 DeepSeekMath 的组相对思想,展示同一 prompt 多个输出如何形成相对 advantage。
变量解释
| 变量 | 含义 |
|---|---|
G | 同一 prompt 的采样输出数量。 |
r_i | 第 i 个输出奖励。 |
Â_i | 组相对 advantage。 |
π_ref | 用于 KL 约束的参考策略。 |
完整数值示例
GRPO:Group Relative Policy Optimization的最小计算
已知条件
- 即时奖励为 1
- 下一状态估计为 2
- 折扣因子 γ=0.9
- 当前估计为 0.5
- 1
计算 bootstrap 目标:1+0.9×2=2.8。
- 2
目标与当前估计差为 2.8−0.5=2.3。
- 3
若学习率 α=0.1,新估计为 0.5+0.1×2.3=0.73。
一次更新后估计从 0.5 变为 0.73;是否收敛需要持续采样与满足相应条件。
处理前后对比
- 较大 α 更新快但噪声和震荡更强。
- 较大 γ 更重视远期奖励,但误差传播范围更长。
- 使用真实回报与 bootstrap 目标会带来不同偏差—方差权衡。
计算与实现步骤
- 1
对每个 prompt 从 old policy 采样 G 个输出
- 2
奖励模型或规则评分
- 3
组内标准化得到 advantage
- 4
计算新旧策略 ratio
- 5
clipped surrogate
- 6
加入 KL 约束并更新
- 7
重新采样新组
代码实现
示例 1
GRPO:组内奖励标准化与 clipped objective
example_01.py用途:按 DeepSeekMath 的组相对思想,展示同一 prompt 多个输出如何形成相对 advantage。
import torch
rewards = torch.tensor([1.0, 0.2, 0.8, -0.2])
old_log_prob = torch.log(torch.tensor([0.25, 0.25, 0.25, 0.25]))
new_log_prob = torch.log(torch.tensor([0.30, 0.20, 0.28, 0.22], requires_grad=True))
clip_range = 0.2
mean = rewards.mean()
std = rewards.std(unbiased=False).clamp_min(1e-6)
advantage = (rewards - mean) / std
ratio = torch.exp(new_log_prob - old_log_prob)
clipped_ratio = torch.clamp(ratio, 1 - clip_range, 1 + clip_range)
surrogate = torch.minimum(ratio * advantage, clipped_ratio * advantage)
kl_penalty = 0.01 * (new_log_prob - old_log_prob).square()
loss = -(surrogate - kl_penalty).mean()
loss.backward()
print('group advantage:', advantage)
print('loss:', round(loss.item(), 4))代码解析
解析始终位于完整代码下方,并按实际代码段逐项对应。
输入数据与任务
按 DeepSeekMath 的组相对思想,展示同一 prompt 多个输出如何形成相对 advantage。
mean- 训练特征逐列均值。
std- 训练特征逐列标准差。
loss- 当前预测与目标之间的损失值。
Step 1 · 1–1 行
导入当前步骤需要的数值计算、预处理、模型或评价工具。依赖集中写在代码开头,便于复现。
import torchStep 2 · 3–6 行
每个奖励减组均值并除组标准差,得到 group-relative advantage。
rewards = torch.tensor([1.0, 0.2, 0.8, -0.2])
old_log_prob = torch.log(torch.tensor([0.25, 0.25, 0.25, 0.25]))
new_log_prob = torch.log(torch.tensor([0.30, 0.20, 0.28, 0.22], requires_grad=True))
clip_range = 0.2Step 3 · 8–18 行
只从训练数据逐列计算均值与标准差,对应标准化公式中的 μ 和 σ。
mean = rewards.mean()
std = rewards.std(unbiased=False).clamp_min(1e-6)
advantage = (rewards - mean) / std
ratio = torch.exp(new_log_prob - old_log_prob)
clipped_ratio = torch.clamp(ratio, 1 - clip_range, 1 + clip_range)
surrogate = torch.minimum(ratio * advantage, clipped_ratio * advantage)
kl_penalty = 0.01 * (new_log_prob - old_log_prob).square()
loss = -(surrogate - kl_penalty).mean()
loss.backward()
print('group advantage:', advantage)
print('loss:', round(loss.item(), 4))代码与数学原理
减去训练均值并除以训练标准差,对应代码中的 mean/std 或 StandardScaler。
平方误差代码对应均方损失。
预期输出或运行结果
组内高奖励样本 advantage 为正,低奖励样本为负;打印有限的代理损失。
常见错误 · 4 条
- 不要在测试集上调用 fit 或 fit_transform;测试集只能复用训练参数。
- 只报告最好的一次随机种子
- 训练回报与评测回报混用
- 终止状态仍错误 bootstrap
实际应用
- 序贯决策
- 控制与资源分配
常见错误
文档来源
强化学习可靠资料扩展资料
外部原始教材或论文- DeepSeekMath / §4.1 Group Relative Policy Optimization
- DeepSeekMath / Figure 2 与公式
扩展内容说明
未找到可直接映射的本地强化学习文档;中文直觉、数值例子、代码和交互演示属于扩展解释,算法定义与公式以所列教材或原论文为依据。
算法属性与数据边界
- 目标函数
- 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
- 奖励组质量和方差直接影响信号
失败模式、风险与性能
失败模式
- 探索不足
- 目标漂移
- 函数近似不稳定
目标与安全风险
- 奖励函数与真实目标不一致会诱发奖励黑客。
- 部署策略的行动权限必须由环境和应用层约束。
性能与复现
- 样本效率、墙钟时间和显存占用需要分别报告。
- 应使用多个随机种子、置信区间和固定评测策略。
常见问题
GRPO:Group Relative Policy Optimization是 on-policy 还是 off-policy?
本页算法/方法按 on-policy 组织。
网页是否会训练模型?
不会。所有图表使用固定种子或解析公式在浏览器本地计算,不执行页面中的示例代码。
资料来源与核对日期
核对日期:2026-08-30。算法定义与公式依据以下外部教材或原论文;中文直觉、教学代码、对照与部署建议属于本站扩展解释。
推荐学习资料
DeepSeekMath: Pushing the Limits of Mathematical Reasoning
介绍 DeepSeekMath 训练流程及以组内相对奖励替代独立 Value Model 的 GRPO。
Shao et al. · arXiv