张芷铭的个人博客

GRPO(Group Relative Policy Optimization)是DeepSeek提出的无价值网络强化学习算法,通过组内相对奖励估计优势,显存降低40%-50%,已成为LLM强化学习主流方案。

核心定义

GRPO是无价值网络的在线策略梯度算法:对同一prompt采样G个候选输出,通过组内奖励Z-score标准化计算优势,替代PPO中价值网络。

核心创新:用「同组内自我对比」替代「外部专家打分」,解决PPO双模型资源开销。

GRPO vs PPO对比

维度PPOGRPO
价值网络需训练等规模Critic完全摒弃
显存占用极高(7B需80GB+)低(降低40%-50%)
优势估计TD误差/GAE组内Z-score标准化
训练流程复杂(回放池、多模型同步)极简(四步闭环)
超参数敏感性极高较低
训练稳定性中等(价值崩塌风险)

算法流程

  1. 组采样:对prompt $q$,从$\pi_{\theta_{old}}$采样$G$个候选输出
  2. 奖励计算:计算每个输出奖励$r_i$
  3. 相对优势估计:$\hat{A}_i = \frac{r_i - \mu_r}{\sigma_r + \epsilon}$
  4. 策略更新:基于裁剪目标和KL约束更新参数

数学推导

目标函数

$$J_{GRPO}(\theta) = \mathbb{E}{q\sim D} \left[ \frac{1}{G} \sum{i=1}^G \min\left( \rho_i \cdot \hat{A}i, \text{clip}(\rho_i, 1-\epsilon, 1+\epsilon) \cdot \hat{A}i \right) - \beta \cdot D{KL}(\pi\theta | \pi_{ref}) \right]$$

其中$\rho_i = \frac{\pi_\theta(o_i|q)}{\pi_{\theta_{old}}(o_i|q)}$。

token级损失

$$L_{GRPO}(\theta) = - \frac{1}{G} \sum_{i=1}^G \frac{1}{|o_i|} \sum_{t=1}^{|o_i|} \left[ \min\left( \rho_{i,t} \cdot \hat{A}i, \text{clip}(\rho{i,t}, 1-\epsilon, 1+\epsilon) \cdot \hat{A}i \right) - \beta \cdot \text{KL}{i,t} \right]$$

核心性质

性质说明
收敛性满足Lipschitz连续、奖励有界条件下收敛到局部最优
内存效率仅需策略模型+参考模型,无需Critic
训练稳定性组内归一化消除奖励漂移,KL直接约束策略偏离
样本效率一次采样多次利用,仅需PPO 30%样本量

适用场景

适用不适用
可验证推理任务(数学、代码)长地平线连续控制
大模型对齐单样本奖励无区分度
多目标优化极低资源小模型微调
资源受限训练离线强化学习

PyTorch实现

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
def grpo_loss(old_logps, new_logps, ref_logps, rewards, mask,
              clip_eps=0.2, kl_beta=0.04):
    # 组内相对优势
    advantages = (rewards - rewards.mean()) / (rewards.std() + 1e-8)
    advantages = advantages.unsqueeze(1)

    # 重要性采样比率
    ratio = torch.exp(new_logps - old_logps.detach())

    # 裁剪目标
    surr1 = ratio * advantages
    surr2 = torch.clamp(ratio, 1 - clip_eps, 1 + clip_eps) * advantages
    pg_loss = -torch.min(surr1, surr2)

    # KL散度
    kl = torch.exp(ref_logps - new_logps) - (ref_logps - new_logps) - 1

    loss = (pg_loss + kl_beta * kl) * mask
    return (loss.sum(dim=1) / mask.sum(dim=1).clamp(min=1)).mean()

超参数调优

参数推荐值说明
组大小$G$4-8数学推理用8,通用对齐用4
KL系数$\beta$0.02-0.1确保KL不超过10
学习率2e-7~1e-6(7B模型)优先调整
裁剪系数$\epsilon$0.15-0.25最后调整

改进变体

变体改进点
Dr.GRPO移除标准差归一化,消除长度偏差
DAPO解耦裁剪机制,动态采样,解决熵坍缩
TIC-GRPO轨迹级校正,无偏估计,收敛快30%
GDPO多奖励解耦归一化
Flow-GRPO扩展到视觉生成

常见问题

问题原因解决方案
KL爆炸$\beta$过小或学习率过高增大$\beta$,降低学习率
熵坍缩$G$过小或$\epsilon$过紧增大$G$,放宽$\epsilon$
奖励作弊奖励函数缺陷优化奖励函数,增大KL约束
NaN损失标准差为0或log概率溢出添加稳定项,裁剪log概率

Comments