深入理解 GRPO 强化学习:从 PPO 到 Group Relative Policy Optimization
2025-12-08
深度学习
00

目录

深入理解 GRPO 强化学习:从 PPO 到 Group Relative Policy Optimization
一、从一个类比开始:小学生考试的故事
1.1 最简单的情况:只看绝对分数
1.2 引入"基准线":父母的期望
2.2 PPO 需要哪些"模型"?
2.3 PPO 的目标函数
三、GRPO 的核心创新:不需要价值模型!
3.1 GRPO 的基本思路
3.2 GRPO 的详细流程
3.3 为什么要标准化?
四、GRPO 的数学公式
4.1 Advantage 计算
4.2 GRPO 目标函数
五、PPO vs GRPO:直观对比
5.1 为什么 GRPO 在 LLM 中有效?

深入理解 GRPO 强化学习:从 PPO 到 Group Relative Policy Optimization

当 DeepSeek-R1 横空出世,以开源姿态挑战 OpenAI 的 o1 模型时,整个 AI 社区都在关注一个问题:他们是如何做到的?答案的关键之一就是 GRPO (Group Relative Policy Optimization) —— 一种更高效的强化学习算法。

本文将带你从零开始理解 GRPO,看看它如何在保持性能的同时,将训练成本降低了近 50%。

一、从一个类比开始:小学生考试的故事

在深入技术细节之前,让我们用一个简单的类比来理解强化学习的核心思想。

1.1 最简单的情况:只看绝对分数

想象你是一个小学生,每次考试后:

  • 考了 90 分 → 很开心,下次继续这样做
  • 考了 60 分 → 不太好,下次要改进

这就像最基础的强化学习:根据奖励(分数)调整行为

但这有个问题:假如这次考试特别难,全班平均分只有 50 分,你考了 60 分其实已经很不错了。但如果你只看绝对分数,可能会错误地认为自己表现不好。

1.2 引入"基准线":父母的期望

聪明的父母会这样做:

  • 如果你通常考 80 分,这次考了 85 分 → 超出预期,奖励!
  • 如果你通常考 80 分,这次考了 75 分 → 低于预期,需要改进

这个"通常考多少分"就是基准线(Baseline)。我们不再看绝对分数,而是看相对于基准线的表现

在强化学习中,这个差值叫做 Advantage(优势):

展开代码
Advantage = 实际得分 - 基准线
  • Advantage > 0:表现好于预期,增强这个行为
  • Advantage < 0:表现差于预期,减弱这个行为

这就是 PPO 和 GRPO 的核心思想!

二、理解 PPO:传统的强化学习方法

在介绍 GRPO 之前,我们需要理解它的前身 —— PPO (Proximal Policy Optimization),这是 ChatGPT 使用的强化学习算法。

2.1 PPO 的完整流程

假设我们要训练一个数学推理模型,PPO 的流程是这样的:

步骤 1:生成回答 给模型一个问题:"计算 25 × 4 = ?" 模型生成回答:"25 × 4 = 100"

步骤 2:奖励模型评分 用一个专门训练的**奖励模型(Reward Model)**给这个回答打分:

  • 答案正确 → +10 分
  • 格式规范 → +2 分
  • 总分:12 分

步骤 3:价值模型估计基准 这是 PPO 的关键组件 —— 价值模型(Value Model / Critic):

价值模型会预测:"对于这个问题,平均来说应该能得多少分?" 假设价值模型估计:基准线 = 8 分

步骤 4:计算 Advantage

展开代码
Advantage = 实际奖励 - 价值模型估计 = 12 - 8 = +4

这个 +4 表示这次表现比预期好 4 分。

步骤 5:更新模型 基于这个 Advantage,我们会:

  • 增加生成这个回答的概率(因为 Advantage > 0)
  • 同时更新价值模型,让它的估计更准确

2.2 PPO 需要哪些"模型"?

PPO 训练需要 4 个大型模型同时工作:

  1. 策略模型(Policy Model) - 要训练的 LLM 本身
  2. 奖励模型(Reward Model) - 给回答打分
  3. 价值模型(Value Model / Critic) - 估计基准线
  4. 参考模型(Reference Model) - 原始模型的冻结副本,防止模型改变太大

这 4 个模型都是大型神经网络,通常都有几十亿参数,对内存和计算资源的要求非常高!

2.3 PPO 的目标函数

PPO 的数学目标是:

JPPO(θ)=E[min(πθ(as)πθold(as)At,clip(πθ(as)πθold(as),1ϵ,1+ϵ)At)]J_{PPO}(\theta) = \mathbb{E}\left[\min\left(\frac{\pi_\theta(a|s)}{\pi_{\theta_{old}}(a|s)} A^t, \text{clip}\left(\frac{\pi_\theta(a|s)}{\pi_{\theta_{old}}(a|s)}, 1-\epsilon, 1+\epsilon\right) A^t\right)\right]

看起来复杂,但本质是:

  • AtA^t 是 Advantage
  • πθ(as)πθold(as)\frac{\pi_\theta(a|s)}{\pi_{\theta_{old}}(a|s)} 是概率比(新模型生成这个回答的概率 / 旧模型生成的概率)
  • clip(...)\text{clip}(...) 限制更新幅度,防止模型变化太大
  • min(...)\min(...) 选择更保守的更新方向

三、GRPO 的核心创新:不需要价值模型!

GRPO 的关键创新在于:用一组回答的平均奖励替代价值模型

3.1 GRPO 的基本思路

回到考试的类比:

PPO 的做法:

  • 父母(价值模型)根据你平时的表现预测:"这次考试你大概能考 80 分"
  • 你考了 85 分 → Advantage = +5

GRPO 的做法:

  • 不需要父母预测,让你做同一份试卷 8 次
  • 你 8 次分别考了:82, 78, 90, 75, 88, 80, 85, 92
  • 平均分 = 83.75
  • 某一次考了 90 分 → Advantage = 90 - 83.75 = +6.25
  • 某一次考了 75 分 → Advantage = 75 - 83.75 = -8.75

核心思想:用同一组问题的多次尝试的平均值作为基准线,而不是训练一个单独的模型来预测基准线。

3.2 GRPO 的详细流程

让我们看一个具体例子:

输入问题:

展开代码
"What is 13 × 17?"

步骤 1:生成一组回答(Group)

对同一个问题,让模型生成 G=4 个不同的回答:

python
展开代码
回答 1: "13 × 17 = 221" # 正确 回答 2: "13 × 17 = 230" # 错误 回答 3: "13 × 17 = 221" # 正确 回答 4: "Let me think... 221" # 正确但格式不好

步骤 2:奖励模型评分

每个回答通过奖励模型获得分数:

python
展开代码
回答 1: r₁ = 10.0 (完全正确) 回答 2: r₂ = 0.0 (答案错误) 回答 3: r₃ = 10.0 (完全正确) 回答 4: r₄ = 7.0 (答案对但格式差)

步骤 3:计算这一组的平均奖励和标准差

python
展开代码
平均奖励 = (10.0 + 0.0 + 10.0 + 7.0) / 4 = 6.75 标准差 = 4.27

步骤 4:计算每个回答的归一化 Advantage

GRPO 使用标准化的 Advantage(类似 Z-score):

A^i=rimean(r)std(r)\hat{A}_i = \frac{r_i - \text{mean}(r)}{\text{std}(r)}

python
展开代码
Advantage₁ = (10.0 - 6.75) / 4.27 = +0.76 (好于平均) Advantage₂ = (0.0 - 6.75) / 4.27 = -1.58 (远差于平均) Advantage₃ = (10.0 - 6.75) / 4.27 = +0.76 (好于平均) Advantage₄ = (7.0 - 6.75) / 4.27 = +0.06 (略好于平均)

步骤 5:更新模型

  • 回答 1 和 3
    为正,增加生成类似回答的概率
  • 回答 2
    为负且很大,大幅降低生成类似回答的概率
  • 回答 4
    略为正,稍微增加概率

3.3 为什么要标准化?

标准化(除以标准差)有重要作用:

情况 A:回答质量差异大

展开代码
回答奖励:[10, 9, 2, 1] 平均:5.5,标准差:4.2 Advantage₁ = (10-5.5)/4.2 = 1.07

情况 B:回答质量都差不多

展开代码
回答奖励:[6, 6, 5, 5] 平均:5.5,标准差:0.58 Advantage₁ = (6-5.5)/0.58 = 0.86

虽然都是 +0.5 的差值,但情况 A 中的差异更显著,所以得到更大的 Advantage。这让训练更稳定。

四、GRPO 的数学公式

理解了核心思想后,让我们看看完整的数学形式。

4.1 Advantage 计算

对于问题 qq,生成 GG 个回答 {o1,o2,...,oG}\{o_1, o_2, ..., o_G\},每个获得奖励 rir_i:

A^i=ri1Gj=1Grj1Gj=1G(rjrˉ)2\hat{A}_i = \frac{r_i - \frac{1}{G}\sum_{j=1}^G r_j}{\sqrt{\frac{1}{G}\sum_{j=1}^G (r_j - \bar{r})^2}}

简化写法:

A^i=rimean(r)std(r)\hat{A}_i = \frac{r_i - \text{mean}(r)}{\text{std}(r)}

4.2 GRPO 目标函数

完整的 GRPO 目标是:

JGRPO(θ)=E[1Gi=1G1oit=1oimin(ρtA^i,clip(ρt,1ϵ,1+ϵ)A^i)βDKL]J_{GRPO}(\theta) = \mathbb{E}\left[\frac{1}{G}\sum_{i=1}^G \frac{1}{|o_i|}\sum_{t=1}^{|o_i|} \min\left(\rho_t \hat{A}_i, \text{clip}(\rho_t, 1-\epsilon, 1+\epsilon) \hat{A}_i\right) - \beta D_{KL}\right]

其中:

  • ρt=πθ(oi,tq,oi,<t)πθold(oi,tq,oi,<t)\rho_t = \frac{\pi_\theta(o_{i,t}|q, o_{i,<t})}{\pi_{\theta_{old}}(o_{i,t}|q, o_{i,<t})} 是概率比
  • A^i\hat{A}_i 是归一化的 Advantage
  • clip(ρt,1ϵ,1+ϵ)\text{clip}(\rho_t, 1-\epsilon, 1+\epsilon) 限制概率比在 [1ϵ,1+ϵ][1-\epsilon, 1+\epsilon] 范围内(通常 ϵ=0.2\epsilon=0.2)
  • βDKL\beta D_{KL} 是 KL 散度惩罚项(可选,现代实现通常设为 0)

4.3 公式拆解

让我们逐部分理解:

1. 概率比 ρt\rho_t

ρt=πθ(oi,tq,oi,<t)πθold(oi,tq,oi,<t)\rho_t = \frac{\pi_\theta(o_{i,t}|q, o_{i,<t})}{\pi_{\theta_{old}}(o_{i,t}|q, o_{i,<t})}

这是"新模型生成这个 token 的概率"除以"旧模型生成这个 token 的概率":

  • ρt>1\rho_t > 1:新模型更倾向于生成这个 token
  • ρt<1\rho_t < 1:新模型更不倾向于生成这个 token
  • ρt=1\rho_t = 1:概率没变

2. 为什么需要 clip?

想象一个极端情况:

  • 旧模型生成某个 token 的概率:0.001
  • 新模型生成的概率:0.5
  • 概率比 = 500!

如果不限制,这会导致梯度爆炸。clip 函数将其限制在合理范围:

clip(ρt,1ϵ,1+ϵ)=clip(ρt,0.8,1.2)\text{clip}(\rho_t, 1-\epsilon, 1+\epsilon) = \text{clip}(\rho_t, 0.8, 1.2)

3. min 操作

min(ρtA^i,clip(ρt,1ϵ,1+ϵ)A^i)\min(\rho_t \hat{A}_i, \text{clip}(\rho_t, 1-\epsilon, 1+\epsilon) \hat{A}_i)

这个 min 的作用是:选择更保守的更新

  • 如果 Advantage > 0(好的行为):我们想增大概率,但 clip 防止增大太多
  • 如果 Advantage < 0(坏的行为):我们想减小概率,但 clip 防止减小太多

4. 对所有 token 平均

1oit=1oi\frac{1}{|o_i|}\sum_{t=1}^{|o_i|}

虽然 Advantage 是对整个回答计算的,但更新是对每个 token 进行的。我们把整个序列的 Advantage 分配给每个 token。

五、PPO vs GRPO:直观对比

让我们用一张对比表总结区别:

特性PPOGRPO
所需模型数量4 个(策略、奖励、价值、参考)2-3 个(策略、奖励,可选参考)
基准线来源价值模型预测同组回答平均值
内存占用高(需要额外的价值模型)低(省去价值模型)
计算开销需要训练价值模型只需多次采样
训练稳定性依赖价值模型质量依赖采样数量
最适合场景状态空间复杂的任务可验证正确性的任务(数学、代码)

5.1 为什么 GRPO 在 LLM 中有效?

GRPO 特别适合大语言模型的原因:

1. 奖励可以客观验证

  • 数学题:答案对就是对,错就是错
  • 代码生成:运行测试用例即可验证
  • 不需要复杂的"价值估计"

2. 现代 GPU 可以高效并行采样

  • 生成 64 个回答并不比生成 1 个慢太多(批处理)
  • 价值模型也是个大模型,内存占用和策略模型一样大

3. 群组比较更自然

  • 奖励模型通常本身就是通过"比较"训练的(哪个回答更好)
  • GRPO 的群组相对比较正好匹配这种训练方式
如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:Dong

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!