深入理解 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 > 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 个大型模型同时工作:
- 策略模型(Policy Model) - 要训练的 LLM 本身
- 奖励模型(Reward Model) - 给回答打分
- 价值模型(Value Model / Critic) - 估计基准线
- 参考模型(Reference Model) - 原始模型的冻结副本,防止模型改变太大
这 4 个模型都是大型神经网络,通常都有几十亿参数,对内存和计算资源的要求非常高!
2.3 PPO 的目标函数
PPO 的数学目标是:
JPPO(θ)=E[min(πθold(a∣s)πθ(a∣s)At,clip(πθold(a∣s)πθ(a∣s),1−ϵ,1+ϵ)At)]
看起来复杂,但本质是:
- At 是 Advantage
- πθold(a∣s)πθ(a∣s) 是概率比(新模型生成这个回答的概率 / 旧模型生成的概率)
- clip(...) 限制更新幅度,防止模型变化太大
- 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 的详细流程
让我们看一个具体例子:
输入问题:
步骤 1:生成一组回答(Group)
对同一个问题,让模型生成 G=4 个不同的回答:
回答 1: "13 × 17 = 221"
回答 2: "13 × 17 = 230"
回答 3: "13 × 17 = 221"
回答 4: "Let me think... 221"
步骤 2:奖励模型评分
每个回答通过奖励模型获得分数:
回答 1: r₁ = 10.0 (完全正确)
回答 2: r₂ = 0.0 (答案错误)
回答 3: r₃ = 10.0 (完全正确)
回答 4: r₄ = 7.0 (答案对但格式差)
步骤 3:计算这一组的平均奖励和标准差
平均奖励 = (10.0 + 0.0 + 10.0 + 7.0) / 4 = 6.75
标准差 = 4.27
步骤 4:计算每个回答的归一化 Advantage
GRPO 使用标准化的 Advantage(类似 Z-score):
A^i=std(r)ri−mean(r)
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 计算
对于问题 q,生成 G 个回答 {o1,o2,...,oG},每个获得奖励 ri:
A^i=G1∑j=1G(rj−rˉ)2ri−G1∑j=1Grj
简化写法:
A^i=std(r)ri−mean(r)
4.2 GRPO 目标函数
完整的 GRPO 目标是:
JGRPO(θ)=E[G1∑i=1G∣oi∣1∑t=1∣oi∣min(ρtA^i,clip(ρt,1−ϵ,1+ϵ)A^i)−βDKL]
其中:
- ρt=πθold(oi,t∣q,oi,<t)πθ(oi,t∣q,oi,<t) 是概率比
- A^i 是归一化的 Advantage
- clip(ρt,1−ϵ,1+ϵ) 限制概率比在 [1−ϵ,1+ϵ] 范围内(通常 ϵ=0.2)
- βDKL 是 KL 散度惩罚项(可选,现代实现通常设为 0)
4.3 公式拆解
让我们逐部分理解:
1. 概率比 ρt
ρt=πθold(oi,t∣q,oi,<t)πθ(oi,t∣q,oi,<t)
这是"新模型生成这个 token 的概率"除以"旧模型生成这个 token 的概率":
- ρt>1:新模型更倾向于生成这个 token
- ρt<1:新模型更不倾向于生成这个 token
- ρt=1:概率没变
2. 为什么需要 clip?
想象一个极端情况:
- 旧模型生成某个 token 的概率:0.001
- 新模型生成的概率:0.5
- 概率比 = 500!
如果不限制,这会导致梯度爆炸。clip 函数将其限制在合理范围:
clip(ρt,1−ϵ,1+ϵ)=clip(ρt,0.8,1.2)
3. min 操作
min(ρtA^i,clip(ρt,1−ϵ,1+ϵ)A^i)
这个 min 的作用是:选择更保守的更新。
- 如果 Advantage > 0(好的行为):我们想增大概率,但 clip 防止增大太多
- 如果 Advantage < 0(坏的行为):我们想减小概率,但 clip 防止减小太多
4. 对所有 token 平均
∣oi∣1∑t=1∣oi∣
虽然 Advantage 是对整个回答计算的,但更新是对每个 token 进行的。我们把整个序列的 Advantage 分配给每个 token。
五、PPO vs GRPO:直观对比
让我们用一张对比表总结区别:
| 特性 | PPO | GRPO |
|---|
| 所需模型数量 | 4 个(策略、奖励、价值、参考) | 2-3 个(策略、奖励,可选参考) |
| 基准线来源 | 价值模型预测 | 同组回答平均值 |
| 内存占用 | 高(需要额外的价值模型) | 低(省去价值模型) |
| 计算开销 | 需要训练价值模型 | 只需多次采样 |
| 训练稳定性 | 依赖价值模型质量 | 依赖采样数量 |
| 最适合场景 | 状态空间复杂的任务 | 可验证正确性的任务(数学、代码) |
5.1 为什么 GRPO 在 LLM 中有效?
GRPO 特别适合大语言模型的原因:
1. 奖励可以客观验证
- 数学题:答案对就是对,错就是错
- 代码生成:运行测试用例即可验证
- 不需要复杂的"价值估计"
2. 现代 GPU 可以高效并行采样
- 生成 64 个回答并不比生成 1 个慢太多(批处理)
- 价值模型也是个大模型,内存占用和策略模型一样大
3. 群组比较更自然
- 奖励模型通常本身就是通过"比较"训练的(哪个回答更好)
- GRPO 的群组相对比较正好匹配这种训练方式