GRPO 组相对策略优化:无需价值模型的强化学习
GRPO 组相对策略优化:无需价值模型的强化学习
什么是 GRPO?一句话入门
GRPO(Group Relative Policy Optimization,组相对策略优化)是一种不依赖独立“价值模型”的强化学习算法,专为语言模型的对齐训练而设计。它通过对同一提示生成多个候选回答,并在组内比较这些回答的相对好坏来指导策略更新,从而彻底移除了传统 PPO 中沉重又耗内存的价值网络。GRPO 是 DeepSeek 系列模型成功训练背后的核心技术之一,尤其适合预算有限、追求高效微调的场景。
为什么我们需要 GRPO?——价值模型的三大痛点
在 RLHF(基于人类反馈的强化学习)流程中,主流算法 PPO 一直面临价值模型的“三高”问题:
| 痛点 | 具体表现 |
|---|---|
| 内存消耗高 | 价值模型通常与策略网络体量相当,需要额外加载一个巨型模型,显存占用直接翻倍。 |
| 训练难度高 | 价值模型的输出是标量回报,但语言任务稀疏、延迟奖励多,价值估计极不准确,容易带来高方差与训练坍塌。 |
| 工程复杂度高 | 需要同步更新策略网络和价值网络,调参困难,计算开销大,不利于快速实验。 |
GRPO 另辟蹊径:既然单个样本的绝对价值难估,那就让模型“自己跟自己比”,用同组内的相对表现代替绝对价值,价值模型就此下岗。
GRPO 核心思想:组内较量
GRPO 的“组”是其灵魂所在。简单来说,它的工作流如下:
- 同题多答:对于一个输入提示
x,从当前策略π_θ中采样G个不同的候选回答{o₁, o₂, ..., o_G}。 - 统一打分:用奖励模型(Reward Model)或者任务规则(如长度惩罚、格式奖励等)给这
G个回答分别打出绝对奖励{r₁, r₂, ..., r_G}。 - 组内标准化:计算这组奖励的均值
μ与标准差σ,然后为每个回答构建一个 组相对优势(Group Relative Advantage): [ \hat{A}_i = \frac{r_i - \mu}{\sigma} ] 这个优势值就反映了回答o_i在组内是“好于平均”还是“差于平均”。 - 带 KL 惩罚的策略更新:使用裁剪(Clipping)后的 PPO 式损失函数更新策略模型,同时加入一个 KL 散度项,防止模型偏离原始参照策略太远。
核心洞察:我们不再需要估计“回答 o_i 的绝对价值是多少”,只需要知道“在这几个答案中,o_i 表现如何”。奖励模型的绝对值往往有偏,但相对排名信息却稳定得多。
GRPO 算法详解
一、优势估计:组内相对归一化
对于一批包含 B 个提示、每个提示生成 G 个回答的数据(总样本量 B × G),优势的计算分为三步:
- 对每个提示
p,收集其G个回答的奖励r_{p,1}, …, r_{p,G}。 - 计算组统计量: [ \mu_p = \frac{1}{G} \sum_{j=1}^{G} r_{p,j}, \quad \sigma_p = \sqrt{\frac{1}{G}\sum_{j=1}^{G}(r_{p,j} - \mu_p)^2} ]
- 组相对优势: [ \hat{A}{p,i} = \frac{r{p,i} - \mu_p}{\sigma_p} ]
这样一来,优势值被归一化为零中心、单位标准差的正态分布,天然适合作为策略梯度的权重。
二、损失函数:带裁剪的 GRPO 目标
GRPO 直接沿用 PPO 的裁剪机制来稳定更新。对于每个回答 (x, o),其损失函数为:
[ \mathcal{L}^{\text{GRPO}}(\theta) = -\mathbb{E}{x, {o_i}} \left[ \min\left( \rho_i(\theta) \hat{A}i, ; \operatorname{clip}(\rho_i(\theta), 1-\epsilon, 1+\epsilon) \hat{A}i \right) - \beta , D{KL}(\pi\theta | \pi{\text{ref}}) \right] ]
其中:
ρ_i(θ) = π_θ(o_i | x) / π_old(o_i | x)是新旧策略在当前回答上的概率比。ε是裁剪系数(通常 0.2),防止策略更新一步迈得太大。β控制 KL 惩罚强度,D_KL近似为exp(log π_ref – log π_θ) – (log π_ref – log π_θ) – 1(低方差估计量)。π_ref是冻结的初始策略(一般为 SFT 后的模型)。
与 PPO 最关键的区别:损失函数中没有价值损失项,也不需要价值网络参与计算,训练目标单一,梯度计算更轻量。
三、完整训练流程(伪代码)
# 伪代码:GRPO 一次参数更新
for batch in dataset:
for each prompt x in batch:
# 1. 采样组
samples = [policy.sample(x) for _ in range(G)] # G 个回答
# 2. 计算奖励
rewards = [reward_model(x, s) for s in samples]
# 3. 组内标准化得到优势
mu = mean(rewards)
sigma = std(rewards)
advantages = [(r - mu) / sigma for r in rewards]
# 4. 计算 GRPO 损失并更新参数
for each sample (x, answer, advantage) in batch_expanded:
log_prob_new = policy.log_prob(x, answer)
log_prob_old = old_policy.log_prob(x, answer)
log_prob_ref = ref_policy.log_prob(x, answer)
ratio = exp(log_prob_new - log_prob_old)
clipped_ratio = clip(ratio, 1-epsilon, 1+epsilon)
# 策略损失
policy_loss = -min(ratio * advantage, clipped_ratio * advantage)
# KL 惩罚(近似低方差估计量)
kl = exp(log_prob_ref - log_prob_new) - (log_prob_ref - log_prob_new) - 1
loss = mean(policy_loss + beta * kl)
# 反向传播
loss.backward()
optimizer.step()
整个流程中,无需维护价值网络,也不需要计算价值损失,代码简洁度显著提升。
GRPO vs PPO:一张表看懂区别
| 模块 | PPO | GRPO |
|---|---|---|
| 价值模型 | 需要额外一个大模型(与策略模型等大) | 不需要,彻底移除 |
| 优势估计 | GAE(广义优势估计),依赖价值模型输出 | 组内相对归一化,只依赖奖励模型 |
| 内存占用 | 策略模型 + 价值模型 ≈ 2× 参数量 | 仅需策略模型,内存减少近一半 |
| 计算开销 | 需要前向传播计算价值、反向传播更新价值网络 | 前向传播只用于策略,无价值网络反向 |
| 训练稳定性 | 价值估计误差会污染策略梯度 | 组内比较天然抗噪声,稳定性好 |
| 奖励刻度敏感性 | 敏感,可能需要奖励归一化 | 不敏感,组内标准化已处理尺度 |
| 适用场景 | 传统 RLHF,资源充足时 | 资源受限、快速实验、大规模对齐(如 DeepSeek) |
GRPO 的核心优势与潜在局限
为什么选择 GRPO?
- 极致省资源:同等硬件下可以支持更大的模型或更大的批量,尤其适合 7B 以上模型的对齐。
- 实现简单:代码量减少 30% 以上,无需处理价值模型同步、GAE lambda 等复杂超参。
- 训练更稳定:组相对优势天然将奖励控制在零附近,避免了价值函数训练崩盘的风险。
- 超越奖励模型的绝对偏差:利用排名信息比利用绝对数值更鲁棒,缓解奖励 hacking。
潜在局限与注意事项
- 对组大小
G敏感:G太小会导致标准差估计不准确,优势退化到二值(正或负);G太大则计算开销上升。建议G = 4~8。 - 奖励模型的需求未消失:仍需一个可靠的奖励模型或规则引擎为组内回答打分,只是不再需要价值模型。
- 探索依赖组内多样性:如果采样的
G个回答同质化严重(如低温度采样),组内方差几乎为零,优势信号消失。因此需要合理设置采样温度(如 1.0 或更高)和 top-p 参数。
动手实践:从零搭建 GRPO 的关键超参
若你正在使用如 HuggingFace TRL、veRL 或自行复现,下列超参指南会很有帮助:
- 组大小
G:4 到 8 之间,平衡有效性与速度。 - KL 惩罚系数
β:0.001~0.1,从 0.04 开始调校。过大会让模型不敢偏离 SFT,过小则易产生奖励黑客。 - 裁剪范围
ε:沿用 PPO 常用值 0.2。 - 采样温度:1.0 左右,保证组内足够多样性;可辅以 top-p=0.9。
- 奖励模型选择:可使用开源 RM(如 OpenAssistant 奖励模型),或根据任务自定义规则(例如格式奖励+内容相关性奖励)。
- 批大小:因不使用价值模型,可适当增大 batch size(如 64~128 个提示),每个提示再乘以
G,充分利用显存。
应用案例与前景
GRPO 最早在 DeepSeekMath 和 DeepSeek-R1 的研发中亮相,并证明其在数学推理、代码生成等客观可评估任务上效果突出。此后,GRPO 迅速被社区采纳,成为:
- 开源 RLHF 框架 TRL 的最新支持算法。
- LLaMA-Factory、Unsloth 等高效微调工具的首选强化学习对齐方法。
- 学术研究中替代 PPO 的轻量级 baseline,例如在 DAPO(动态采样策略优化)等工作中作为基础。
未来,随着多模态、工具调用等复杂任务的对齐需求增长,GRPO 这种“去价值化”的思想可能会进一步延伸,与过程奖励模型、结果奖励模型结合,形成更通用的相对优势估计范式。
常见问题 FAQ
Q1: GRPO 必须使用奖励模型吗?可以用规则奖励吗?
完全可以使用规则奖励。事实上,许多推理任务(如数学题)只用规则判断最终答案是否正确,将触发信号转化为奖励,再经组内标准化即可。这也是 GRPO 在 DeepSeek-R1 中大量运用的原因。
Q2: 组内奖励标准化后,训练初期如果没有奖励差别怎么办?
初期奖励可能因为没有拉开差距导致标准差极小,优势值也会很小,更新会接近纯 KL 惩罚项,策略缓慢变动。这是安全的设计,避免早期剧烈更新。随着训练推进,模型会逐渐学会生成不同质量的回答,组内方差自然拉大。
Q3: GRPO 与 DPO 相比如何?
DPO 不需要单独的奖励模型和价值模型,但要求构造成对的偏好数据(好/坏对)。GRPO 则使用生成-打分-组内对比的流程,可以闭环迭代,不断用当前模型采样新数据自我提升,更适合在线式学习。两者常在不同阶段配合使用。
Q4: 能否将 GRPO 用于视觉-语言模型?
可以,只要能够对同一输入生成多个回答并可靠评分(例如用 CLIP 分数、任务指标),GRPO 的组相对优势机制与模态无关,可迁移至多模态对齐。
结语
GRPO 向我们展示了一个优雅的强化学习哲学:有时候,比较比度量更简单。通过移除价值模型这个沉重的历史包袱,GRPO 大幅降低了语言模型对齐的工程门槛,让个人开发者和小团队也有机会复现接近顶尖水平的人类对齐效果。如果你想在资源有限的前提下让模型学会推理、遵循格式或对齐偏好,GRPO 是一条绕不开的快车道。
开始动手吧——只需几行代码的改变,你就能从 PPO 切换到 GRPO,体验“轻装上阵”的强化学习。