什么是组相对策略优化(Group Relative Policy Optimization)?
组相对策略优化(GRPO)是 DeepSeekMath 论文提出的一种强化学习后训练方法,属于近端策略优化(PPO)的变体。它通过对同一提示采样一组回答、用组内相对得分估计优势,从而在提升数学推理能力的同时降低 PPO 的内存开销。Hugging Face TRL 提供了对应的 GRPO Trainer 实现。
组相对策略优化(Group Relative Policy Optimization,简称 GRPO)是一种用于大语言模型后训练的强化学习方法。据 DeepSeekMath 论文描述,它是近端策略优化(Proximal Policy Optimization,PPO)的一个变体,其核心做法是对同一个提示(prompt)采样一组回答(completion),用这组回答之间的相对得分来估计优势(advantage),而不是像 PPO 那样依赖一个单独训练的价值网络(critic)。它要解决的问题是:在保留 PPO 式策略优化效果的同时,降低 PPO 在显存和计算上的开销。
为什么重要
在 GRPO 出现之前,用强化学习对齐语言模型的主流做法是 PPO。PPO 属于在线(online)学习算法,训练过程中不断用当前模型自己生成的数据来迭代改进。它通常需要同时维护至少四个模型:待训练的策略模型、一个冻结的参考模型(用于约束策略不要偏离太远)、一个奖励模型,以及一个价值网络。价值网络的作用是估计每个状态的价值,从而算出优势,指导策略更新。
这套流程的代价在于:价值网络往往与策略模型规模相当,训练时显存占用高;价值估计本身也是一个需要单独训练的回归任务,引入额外的误差来源和调参负担。对于数学推理这类需要长链式推理的任务,回答长度大、采样成本高,PPO 的开销问题会更加突出。
DeepSeekMath 论文在摘要中明确把 GRPO 的动机写成两点:一是提升数学推理能力,二是「同时优化 PPO 的内存占用」。也就是说,GRPO 的定位不是另起一套全新范式,而是在 PPO 框架内做减法——去掉价值网络这一组件,用组内相对比较来替代它。
工作机制
根据 Hugging Face TRL 官方文档的说明,GRPO 是一种在线学习算法,它通过使用训练中模型自身生成的数据来迭代改进。其目标函数的直觉是:最大化所生成回答的优势,同时确保模型不会偏离参考策略太远。文档把 GRPO 拆解为四个主要步骤:
- 生成回答(Generating completions):对同一批提示,用当前策略模型采样出多个回答,这些回答构成一个「组」。组的存在是 GRPO 区别于 PPO 的关键——优势不再来自价值网络的单点估计,而是来自组内回答之间的相互比较。
- 计算优势(Computing the advantage):对组内每个回答给出奖励分数,再以组内的统计量(例如组内平均分)作为基线,衡量每个回答相对同组其他回答好多少。这样得到的相对优势取代了 PPO 中由价值网络给出的绝对优势估计。
- 估计 KL 散度(Estimating the KL divergence):计算当前策略与参考策略之间的 KL 散度,作为约束项,防止策略在优化过程中偏离参考模型过远。这与 PPO 中保持「信任域」的思路一致。
- 计算损失(Computing the loss):把优势项与 KL 约束项组合成最终的目标函数,对策略模型做梯度更新。
从工程角度看,这套流程省掉了价值网络,因此不需要为价值估计单独训练一个模型,也不需要为它分配显存。奖励信号则来自可编程的奖励函数,而不是必须训练一个奖励模型——TRL 文档中的示例就直接传入了一个准确率奖励函数。
典型例子
GRPO 最初出现在 DeepSeekMath 论文中。该论文介绍了 DeepSeekMath 7B:它在 DeepSeek-Coder-Base-v1.5 7B 的基础上继续预训练,使用了从 Common Crawl 中筛选出的 120B 数学相关 token,并混合自然语言与代码数据。论文摘要称,DeepSeekMath 7B 在不依赖外部工具和投票技术的情况下,在竞赛级 MATH 基准上取得 51.7% 的分数,接近 Gemini-Ultra 与 GPT-4 的水平;对 DeepSeekMath 7B 做 64 次采样的自一致性(self-consistency)可达到 60.9%。论文把数学推理能力的来源归结为两个因素:一是通过精心设计的数据筛选流程挖掘公开网页数据,二是提出 GRPO 这一 PPO 变体。
在工具实现层面,Hugging Face TRL 官方文档提供了 GRPO Trainer。文档给出的快速开始示例是:用 DeepMath-103K 数据集的提示训练 Qwen2.5 0.5B Instruct 模型,通过 GRPOTrainer 传入模型名、奖励函数和训练数据集,再调用训练方法。文档说明,在 8 张 GPU 上分布式训练大约需要 1 天;文档同时注明,其展示的奖励曲线是用 Qwen2-0.5B-Instruct 生成的,换用 Qwen2.5-0.5B-Instruct 结果在性质上相近。该后训练方法的文档贡献者署名为 Quentin Gallouédec。
边界与常见误解
第一,GRPO 并不是「不需要奖励信号」的方法。它去掉的是价值网络,而不是奖励。奖励仍然需要由奖励模型或奖励函数提供,奖励设计的质量直接决定优化方向。TRL 示例中使用的是准确率奖励函数,这属于可验证奖励的一类,并不代表所有任务都能轻易写出这样的函数。
第二,GRPO 的「组」是有成本的。每个提示要采样多个回答才能形成组内比较,采样数量越多,单步训练的计算量越大。它省下的是价值网络的显存与训练开销,换来的是一组回答的生成开销,两者并非无条件划算。
第三,GRPO 是 PPO 的变体,不是对 PPO 的全面取代。论文的表述是它在增强数学推理能力的同时优化 PPO 的内存占用,这是一个针对特定训练场景的改进主张,而不是说 PPO 在所有场景下都应被替换。是否采用,取决于任务是否有可靠的奖励来源、采样预算是否充足。
第四,关于效果的数字需要区分来源。51.7% 与 60.9% 这两个数字出自 DeepSeekMath 论文自身的报告,对应的是该论文设定的模型、数据与评测条件;它们不是对 GRPO 这一方法在任意模型上通用增益的证明。同理,TRL 文档中「8 张 GPU 约 1 天」是文档针对其示例配置给出的说明,换模型、换数据、换硬件都会不同。
第五,容易把 GRPO 与「拒绝采样」「自一致性投票」混为一谈。后两者是推理阶段或数据筛选阶段的技术,而 GRPO 是训练阶段的策略优化目标。它们可以同时出现在一个系统里,但作用环节不同。