GRPO 组相对策略优化
GRPO 比较同一问题下多次采样的奖励,用组内的相对好坏构造学习信号,再据此更新策略。
理解与应用
GRPO(Group Relative Policy Optimization)是一种强化学习策略优化方法。它为同一提示采样多个回答或轨迹,根据这些候选的奖励估计相对优势,用来引导策略更新。原始方法不依赖单独训练的价值模型提供这一步基线;这里的“组”指同题候选集合,并不是几个智能体共同讨论。
例如同一道金额计算题采样四个答案,评分得到 0、0、1、1。与本组平均奖励比较,两个正确答案获得正向信号,另外两个获得负向信号。常见的教学理解是先减去组内均值,再用组内标准差缩放,这使“这一候选比同题其他候选好多少”成为学习依据。
相对比较也有边界。若四个答案都错而且奖励相同,组内就没有可用的高低差;若都正确且同分,也无法仅凭这个分数区分哪种写法更好。奖励差异接近零时,缩放还涉及数值稳定性。采样多样性和评分器能否给出有意义的区别,因此会直接影响训练信号。
完整 GRPO 不只是这几步减法和除法。原始目标还涉及新旧策略的概率比率、裁剪和参考策略的 KL 约束等部分,不同实现也可能调整损失归一化与奖励缩放。复现时需要对应具体论文或实现配置。无论算法细节怎样选择,奖励漏洞仍然是漏洞;训练后在独立任务上的正确率、成本和约束遵守,才回答它是否真正改善了应用。
动手试一试:同题候选的相对优势与同分情况
算例采用总体标准差,并为零方差明确返回零,只展示组内相对信号。它没有采样模型、计算策略损失或更新参数;真实实现的标准差与稳定项约定也需要单独确认。
将代码保存为 example.py,使用 Python 3.10+ 运行 python3 example.py。仅使用标准库,无需密钥,不会调用外部模型。
Python 代码
from math import sqrt
def advantages(rewards):
mean = sum(rewards) / len(rewards)
variance = sum((reward - mean) ** 2 for reward in rewards) / len(rewards)
std = sqrt(variance)
if std == 0:
return [0.0] * len(rewards)
return [round((reward - mean) / std, 3) for reward in rewards]
print("有高低差:", advantages([0, 0, 1, 1]))
print("全部同分:", advantages([1, 1, 1, 1]))运行结果
有高低差: [-1.0, -1.0, 1.0, 1.0] 全部同分: [0.0, 0.0, 0.0, 0.0]
常见误区
- 奖励标准化是 GRPO 的一个环节,不是完整训练算法。
- 同分组没有相对高低,不能把零优势简单解释为模型已经学会了该题。
- 同题候选得分可比较的前提是评分可靠,算法不会修复奖励本身的偏差。
前置与延伸
建议先读
相关概念
参考与版本
Apollo 原创讲解与教学示例。参考资料用于核对技术定义;核验日不代表资料的发布日期。
- DeepSeekMath ↗
核对原始 GRPO 的组相对优势、策略优化与 KL 约束;不同训练库变体须另核版本。 · 核验:2026-10-10
- TRL:GRPO Trainer ↗
核对实现中的奖励函数、组内缩放和损失配置;正文不把某一配置默认值称作算法唯一规定。 · 核验:2026-10-10