组相对策略优化 (GRPO)#
1. 引言#
组相对策略优化 (GRPO) 是一种针对提示级相对比较设计的 PPO 变体。
在 PPO 中,需要一个 Critic 模型来评估采样到的行为(即回答序列)是好还是坏。
在 GRPO 中,对于同一个提示,会采样多个回答组成一个组。 组内回答的相对表现被用来计算每个回答的优势, 使得策略更新专注于相同上下文下的相对表现。
由于 GRPO 不再依赖单独的 Critic 模型,它显著降低了计算资源需求。 这使得它特别适合大规模 LLM 训练,因为维护一个 Critic 模型代价过高。
更多细节请参考原始论文: DeepSeek-R1。
2. 目标函数#
对于一个问答对 \((q,a)\),行为策略 \(\pi_{\theta_{\mathrm{old}}}\) 会采样一个包含 \(G\) 个回答的组 \(\{o_i\}_{i=1}^{G}\),并得到对应的序列奖励 \(\{R_i\}_{i=1}^{G}\)。
序列 \(i\) 中每个 token 的组相对优势定义为:
该优势衡量一个回答相对于组均值的好坏程度, 并通过组内奖励的方差进行归一化。
与 PPO 类似,GRPO 采用带裁剪的代理目标函数,并可选地加上 KL 惩罚项。 在某些实现和任务中,KL 项可能会被省略。
其中
\(r_{i,t}(\theta)\) 是重要性采样比率。
\(\varepsilon\) 是裁剪阈值,用来防止更新过大。
\(\beta\) 控制相对于参考策略 \(\pi_{\mathrm{ref}}\) 的 KL 惩罚强度。
3. 配置#
我们的框架支持在 LLM 数学任务和具身任务中使用 GRPO。 下面给出一个 LLM 数学任务的示例配置:
algorithm:
# 核心 GRPO 设置(建议不要修改)
adv_type: grpo
loss_type: actor
loss_agg_func: "token-mean"
# 算法参数(通常需要调优)
group_size: 16 # 每个提示采样的回答数量
kl_beta: 0.0 # KL 惩罚系数
kl_penalty_type: low_var_kl # 可选:low_var_kl, kl, abs, mse
ratio_clip_eps: 0.2 # 重要性比率的裁剪范围
calculate_entropy: False # 可选:鼓励探索
entropy_bonus: 0.0
normalize_advantages: True
early_stop_imp_ratio: 5.0 # 丢弃重要性比率极端的 minibatch,提升稳定性
use_valid_token_scale: False # 标准 GRPO 实现。
# 若为 True,则优势会除以有效 token 数(DAPO 技巧)。
4. 注意事项#
始终为每个提示批量生成多个完成(≥ 2 个回答)。
使用较高的采样温度(0.7–1.0)以鼓励生成多样化候选回答。
奖励必须在同一提示组内可比,因为优势是相对计算的。