GRPO(Group Relative Policy Optimization)训练详解
一、基本定义
GRPO(Group Relative Policy Optimization)是由DeepSeek团队提出的一种面向大规模语言模型(LLM)强化学习优化的算法,旨在解决传统PPO(Proximal Policy Optimization)算法中依赖价值网络(Critic Model)导致的计算开销大、策略更新不稳定等问题。其核心思想是通过组内相对奖励比较替代传统优势函数估计,从而简化训练流程并提升效率。
核心特点:
- 无需价值网络:通过同一状态下多个动作的组内奖励比较,直接计算相对优势,避免维护与策略模型规模相当的价值网络。
- 稳定性提升:引入KL散度约束,防止策略更新偏离参考模型过远。
- 计算高效:内存占用减少50%,训练速度提升30%。
二、技术细节
1. 算法流程
GRPO的训练流程分为以下关键步骤:
- 组采样(Group Sampling):对每个输入状态(如问题提示),从当前策略模型中采样一组动作(如生成多个候选答案)。
- 奖励评估(Reward Evaluation):通过奖励模型(RM)对每个动作打分,例如基于答案正确性或格式规范性。
- 相对优势计算(Relative Advantage Estimation):
- 对组内奖励进行归一化处理:
r ~ i = r i − mean ( r ) std ( r ) \tilde{r}_i = \frac{r_i - \text{mean}(\mathbf{r})}{\text{std}(\mathbf{r})} r~i=std(r)ri−mean(r)
其中, r \mathbf{r} r为组内所有动作的奖励值。
- 对组内奖励进行归一化处理:
- 策略更新(Policy Update):
- 目标函数结合策略梯度、裁剪机制和KL散度惩罚项:
L = E [ min ( π θ ( a ∣ s ) π θ old ( a ∣ s ) A ^ , clip ( π θ ( a ∣ s ) π θ old ( a ∣ s ) , 1 − ϵ , 1 + ϵ ) A ^ ) ] − β ⋅ KL ( π θ ∣ ∣ π ref ) \mathcal{L} = \mathbb{E} \left[ \min\left( \frac{\pi_\theta(a|s)}{\pi_{\theta_{\text{old}}}(a|s)} \hat{A}, \text{clip}\left( \frac{\pi_\theta(a|s)}{\pi_{\theta_{\text{old}}}(a|s)}, 1-\epsilon, 1+\epsilon \right) \hat{A} \right) \right] - \beta \cdot \text{KL}(\pi_\theta || \pi_{\text{ref}}) L=E[min(πθold(a∣s)πθ(a∣s)A^,clip(πθold(a∣s)πθ(a∣s),1−ϵ,1+ϵ)A^)]−β⋅KL(πθ∣∣πref)- ϵ \epsilon ϵ控制更新幅度, β \beta β调节KL散度权重。
- 目标函数结合策略梯度、裁剪机制和KL散度惩罚项:
2. 与PPO的关键差异
维度 | PPO | GRPO |
---|---|---|
价值网络 | 依赖Critic模型估计优势函数 | 完全摒弃Critic模型 |
优势估计 | 基于广义优势估计(GAE) | 基于组内奖励归一化 |
更新约束 | 使用概率比裁剪(Clip) | 引入KL散度惩罚项 |
适用场景 | 通用任务(如控制系统) | 推理密集型任务(如数学解题) |
三、代码示例(伪代码)
# GRPO核心训练循环(简化版)
for epoch in epochs:
# 1. 采样组动作
prompts = sample_prompts(batch_size)
responses = [policy.generate(prompt, num_samples=G) for prompt in prompts]
# 2. 计算奖励
rewards = reward_model.evaluate(responses)
# 3. 计算相对优势
normalized_rewards = (rewards - rewards.mean()) / (rewards.std() + 1e-8)
# 4. 策略更新
optimizer.zero_grad()
loss = compute_grpo_loss(
policy,
old_policy,
responses,
normalized_rewards,
clip_epsilon=0.2,
kl_coef=0.1
)
loss.backward()
optimizer.step()
四、重点文献
- 《DeepSeekMath: Pushing the Limits of Mathematical Reasoning in Open Language Models》
- 首次提出GRPO算法,详细阐述其在数学推理任务中的应用及实验效果。
- 《DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning》
- 展示GRPO在复杂推理任务(如代码生成)中的扩展性,结合迭代训练与奖励模型优化。
- 《Proximal Policy Optimization Algorithms》
- PPO算法的原始论文,为GRPO的设计提供理论基础。
五、重点技术
- 组内相对优势估计
- 通过多候选答案的对比,减少对单个奖励绝对值的依赖,降低方差。
- KL散度约束
- 防止策略更新偏离初始监督微调(SFT)模型,缓解灾难性遗忘。
- 结果与过程监督结合
- 结果监督:仅在输出序列末尾提供奖励(如答案正确性)。
- 过程监督:在关键推理步骤(如中间计算)提供奖励信号,提升复杂任务表现。
- 自适应超参数调整
- 动态调整KL散度系数 β \beta β,平衡策略更新与稳定性。
应用案例
- DeepSeek-R1:在数学推理任务(AIME竞赛)中,通过GRPO将准确率提升至71%。
- DeepSeekMath:在代码生成任务中,生成代码可运行性达85%。
总结
GRPO通过组内对比和KL约束机制,显著提升了大规模语言模型强化学习的效率与稳定性,尤其在数学推理、代码生成等复杂任务中表现突出。其核心创新在于简化优势估计流程并增强策略更新的可控性,为未来LLM训练提供了重要技术参考。