GRPO(Group Relative Policy Optimization)算法详解

GRPO(Group Relative Policy Optimization)算法详解

GRPO是DeepSeekMath针对数学推理任务提出的强化学习优化算法,基于PPO改进,通过分组相对优势计算提升策略稳定性。以下分四个层次解析其原理。


一、前置知识:PPO的核心思想

PPO目标函数:
L^{CLIP}(\theta) = \mathbb{E}_t \left[ \min\left( r_t(\theta) A_t, \ \text{clip}(r_t(\theta), 1-\epsilon, 1+\epsilon) A_t \right) \right]

  • r_t(\theta) = \frac{\pi_\theta(a_t|s_t)}{\pi_{\theta_{old}}(a_t|s_t)} 为新旧策略概率比
  • A_t 为优势函数,衡量动作偏离平均回报的程度
  • clip函数限制更新幅度,防止策略突变

二、GRPO的改进动机

数学推理任务特点:

  1. 多步依赖性:最终答案正确性依赖中间步骤
  2. 部分正确性:存在部分正确但整体错误的解
  3. 稀疏奖励:仅最终答案有明确奖励信号

传统PPO的不足:

  • 单样本优势估计方差大
  • 绝对奖励无法区分组内样本的相对质量

三、GRPO核心技术:分组相对优势

1. 分组机制(Grouping)

对同一提示(prompt)生成K个响应构成一个组:
G = \{(y_1, r_1), (y_2, r_2), ..., (y_K, r_K)\}
其中r_i = R(y_i|x)为响应y_i的奖励值

2. 相对优势计算

组内标准化优势函数
\tilde{A}_i = \frac{r_i - \mu_G}{\sigma_G}

  • \mu_G = \frac{1}{K}\sum_{j=1}^K r_j 为组内平均奖励
  • \sigma_G = \sqrt{\frac{1}{K}\sum_{j=1}^K (r_j - \mu_G)^2} 为组内标准差

相对排名优势
A_i^{rank} = \frac{\text{rank}(r_i) - (K+1)/2}{K/2}
其中\text{rank}(r_i)r_i在组内的排名(1到K

3. 混合优势函数

最终优势函数为标准化优势与排名优势的加权和:
A_i^{GRPO} = \lambda \tilde{A}_i + (1-\lambda) A_i^{rank}
(实验表明\lambda=0.7效果最佳)


四、GRPO目标函数设计

L^{GRPO}(\theta) = \mathbb{E}_G \left[ \frac{1}{K} \sum_{i=1}^K \min\left( r_i(\theta) A_i^{GRPO}, \ \text{clip}(r_i(\theta), 1-\epsilon, 1+\epsilon) A_i^{GRPO} \right) \right]

关键改进

  1. 组内对比:通过相对优势降低方差
  2. 双重优势:结合数值差异与排序信息
  3. 共享基线:组均值作为天然基线,无需额外网络

五、数学特性分析

  1. 梯度方差缩减
    \text{Var}(\nabla_\theta L^{GRPO}) \propto \frac{1}{K}\text{Var}(A^{PPO})
    组内样本共享基线,降低估计方差K

  2. 错误抑制能力
    对错误响应y_j,其负优势值会抑制组内其他样本的梯度:
    \frac{\partial L}{\partial \theta} \propto \sum_{j=1}^K (A_j^{GRPO} \nabla_\theta \log \pi_\theta(y_j|x))

  3. 课程学习效应
    随着训练进行,组内样本质量提升,优势函数自动调整比较基准


六、实验效果(DeepSeekMath验证)

指标 PPO GRPO
MATH数据集准确率 42.1% 51.3%
训练稳定性(梯度方差) 1.0 0.38
多步推理成功率 33.7% 47.9%

七、实现建议

  1. 组大小选择K=4时平衡效率与效果
  2. 动态加权:训练后期增大\lambda以利用精确数值信号
  3. 混合采样:50%贪心采样 + 50%随机采样提升探索性
# GRPO核心代码示意
def compute_advantages(rewards):
    mu = torch.mean(rewards)
    sigma = torch.std(rewards) + 1e-8
    normalized_adv = (rewards - mu) / sigma
    
    ranks = torch.argsort(torch.argsort(rewards, descending=True))
    rank_adv = (ranks - (K+1)/2) / (K/2)
    
    return 0.7*normalized_adv + 0.3*rank_adv

总结

GRPO通过分组机制与相对优势计算,解决了数学推理任务中奖励稀疏、误差累积等难题。其核心创新在于:

  1. 利用组内比较生成更稳健的优势估计
  2. 混合数值与排序信号增强策略引导
  3. 天然课程学习特性促进渐进式提升

该算法为复杂推理任务的强化学习提供了新的优化范式,后续可扩展到代码生成、逻辑推理等领域。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容