4.2 GRPO 与推理涌现
DeepSeek-R1-Zero 里程碑、GRPO 四步算法详解、RLVR 可验证奖励、DeepSeek-R1 完整流程
DeepSeek-R1-Zero:纯 RL 的里程碑
一个惊人的发现
2025年1月,DeepSeek 团队发布了 DeepSeek-R1-Zero——一个完全不经过 SFT、仅通过强化学习训练的推理模型。这一发现震动了 AI 社区:
核心发现:一个基座语言模型,在没有任何人类标注的思维链数据、没有 SFT 阶段的情况下,通过纯 RL 训练,自发地发展出了以下能力:
- 思维链推理(Chain-of-Thought):逐步分析问题
- 自我验证(Self-Verification):在给出答案后检查自己的推理
- 回溯(Backtracking):发现错误后回到之前的步骤重来
- "顿悟时刻"(Aha Moment):在推理过程中突然发现新的解题策略
量化结果
| 模型 | AIME 2024 (pass@1) | 训练方式 |
|---|---|---|
| DeepSeek-V3-Base | 15.6% | 无(基座模型) |
| DeepSeek-R1-Zero | 71.0% | 纯 RL(GRPO) |
| OpenAI o1-0912 | 79.2% | 未公开 |
从 15.6% 到 71.0%——不需要任何标注的推理数据,纯粹通过 RL 信号让模型"学会思考"。
推理涌现的直觉
为什么 RL 可以涌现推理能力?考虑以下训练循环:
- 模型对数学题生成多个回复,有些直接给答案(常常错误),有些尝试逐步推理(更可能正确)
- 正确的回复获得 +1 奖励,错误的获得 0
- 经过组内归一化后,逐步推理的回复获得正的优势值
- PPO/GRPO 更新增强逐步推理的生成概率
- 随着训练进行,模型发展出越来越精细的推理策略
核心动力:数学的"可验证性"提供了纯净的 RL 信号——对就是对,错就是错,没有主观判断的噪声。
GRPO 算法详解
从 PPO 到 GRPO 的简化
回顾上一节,PPO 在 RLHF 中需要四个模型。其中价值模型(Critic)的作用是估计基线值(baseline),用于计算优势(advantage)。GRPO 的核心洞察是:
与其用一个独立的价值网络来估计基线,不如直接用同一批采样的平均奖励作为基线。
这就是"Group Relative"的含义——基线来自同一组采样的统计量。
GRPO 四步算法
步骤1:分组采样
对每个提示 ,从当前策略 采样 个输出:
通常取 8-16。每个 是一个完整的回复序列。
为什么要多个采样? 单次采样无法区分"回复好因为模型本身好"还是"只是运气好"。多次采样后取统计量,可以更准确地评估每个回复的相对质量。
步骤3:组内归一化(Group-Relative Advantage)
计算每个输出的组相对优势:
即:
其中 ,。
直觉:
- 如果一个回复的奖励高于组平均值:,应该被强化
- 如果一个回复的奖励低于组平均值:,应该被抑制
- 归一化确保优势值的尺度与奖励的绝对值无关
为什么这能替代价值网络? 传统 PPO 中,优势 ,需要一个价值网络 来估计基线。GRPO 直接用组内均值 作为基线估计,避免了训练价值网络的需要。虽然这个估计比价值网络粗糙,但在实践中足够有效。
步骤4:PPO 截断目标 + KL 惩罚
使用组相对优势和 PPO 截断目标更新策略:
其中:
- 是 token 级别的概率比
- 是 token 级别的 KL 散度惩罚
- 是 KL 惩罚系数
- 是 PPO 截断参数
完整 GRPO 损失公式
将所有组件合在一起,GRPO 的完整损失为:
其中 KL 散度的近似计算为:
这是 KL 散度的一种无偏估计(Schulman 近似)。
GRPO vs PPO 对比
| 方面 | PPO | GRPO |
|---|---|---|
| 优势估计 | 价值网络 + GAE | 组统计量 |
| 模型数量 | 4个 | 2-3个(无价值模型) |
| 内存需求 | 极高 | 减少 ~50% |
| token 级/序列级 | token 级优势 | 序列级优势 |
| 基线准确度 | 较高(学习到的 ) | 较粗糙(组均值) |
| 实现复杂度 | 高 | 中 |
| 训练稳定性 | 低 | 中(无价值模型崩溃问题) |
RLVR:可验证奖励的强化学习
什么是 RLVR
RLVR(Reinforcement Learning with Verifiable Rewards) 是 GRPO 最自然的应用场景。当任务有确定性标准答案时,奖励函数就是简单的正确性检查:
| 任务类型 | 奖励函数 | 可验证性 |
|---|---|---|
| 数学推理 | 提取答案 → 与标准答案比较 | 完全可验证 |
| 代码生成 | 执行代码 → 检查输出/通过测试用例 | 完全可验证 |
| 逻辑推理 | 检查逻辑一致性 | 部分可验证 |
| 翻译 | BLEU/METEOR 等自动指标 | 部分可验证 |
| 通用对话 | 需要人类/AI 判断 | 不可验证 |
RLVR 的优势
RLVR 为什么强大?
- 零噪声奖励:正确就是正确,没有主观判断的噪声
- 无奖励黑客:不存在可被利用的奖励模型漏洞
- 完全自动化:不需要人类标注,可以无限扩展
- 与 GRPO 完美结合:组统计量 + 二值奖励 = 简洁高效的训练
这就是为什么 DeepSeek-R1、QwQ-32B 和 Qwen3 的推理阶段都采用了 RLVR 方法。
典型的数学推理奖励函数
import re
def math_reward(question: str, response: str, ground_truth: str) -> float:
"""
数学推理奖励函数
Args:
question: 数学问题
response: 模型的完整回复
ground_truth: 标准答案
Returns:
reward: 1.0 (正确) 或 0.0 (错误)
"""
# 1. 尝试从 \boxed{} 中提取答案
boxed_match = re.search(r'\\boxed\{([^}]+)\}', response)
if boxed_match:
predicted = boxed_match.group(1).strip()
else:
# 2. 回退:提取最后一个数字
numbers = re.findall(r'-?\d+\.?\d*', response)
if numbers:
predicted = numbers[-1]
else:
return 0.0 # 无法提取答案
# 3. 比较答案
try:
if float(predicted) == float(ground_truth):
return 1.0
else:
return 0.0
except ValueError:
return 1.0 if predicted.strip() == ground_truth.strip() else 0.0DeepSeek-R1 完整流程
四阶段训练
DeepSeek-R1 的完整训练流程包含四个阶段:
阶段1:冷启动 SFT
使用少量高质量的长思维链数据对基座模型进行 SFT。这些数据来自人类标注和 few-shot prompting,包含详细的推理过程。
目的:给模型一个"学会推理格式"的初始化。纯 R1-Zero 虽然能涌现推理,但格式混乱、可读性差。冷启动 SFT 解决了这个问题。
数据量:约数千条高质量推理样本。
阶段2:大规模 GRPO
在冷启动后的模型上进行大规模 GRPO 训练:
- 数据:数学(GSM8K、MATH、竞赛题)+ 代码(LeetCode、CodeContests)
- 奖励:可验证的正确性奖励
- 规模:数万步训练,消耗大量计算
结果:模型发展出深度推理能力,AIME 等竞赛成绩大幅提升。
阶段3:拒绝采样 + SFT
使用阶段2的 GRPO 模型对大量问题进行拒绝采样(Rejection Sampling):生成多个回复,只保留正确的回复,然后用这些高质量数据做 SFT。
目的:将 RL 训练的推理能力"固化"到模型中,提高推理链的质量和一致性。
与 Qwen3 后训练的对比
| 阶段 | DeepSeek-R1 | Qwen3 |
|---|---|---|
| 1 | 冷启动 SFT | 长思维链冷启动 SFT |
| 2 | 大规模 GRPO | 推理 RL(GRPO) |
| 3 | 拒绝采样 + SFT | 思考模式融合 |
| 4 | 最终 RL | 通用 RL |
两者的核心思路高度一致:先用 SFT 初始化 → 用 RL 强化推理 → 融合/固化 → 通用优化。
推理涌现的深层理解
为什么 RL 能涌现推理
基座语言模型在预训练阶段已经"见过"了大量的推理文本(教科书、论文、StackOverflow 等),因此具备了推理的潜在能力。RL 的作用是通过奖励信号激活这些潜在能力:
- 信号放大:基座模型对"逐步推理"有微弱的偏好(因为训练数据中推理文本获得了好的 next-token prediction),RL 将这个微弱信号放大
- 策略优化:RL 不仅激活推理能力,还优化推理策略——学会何时分步、何时验证、何时回溯
- 格式发现:模型自发地发现了有效的推理格式(如
<think>标签、分步列举等)
训练过程中的涌现现象
在 GRPO 训练过程中,可以观察到以下阶段性变化:
| 训练阶段 | 回复特征 | 正确率 |
|---|---|---|
| 早期(~10步) | 直接给答案,很少推理 | ~10% |
| 中期(~100步) | 开始出现简单的计算步骤 | ~30% |
| 后期(~300步) | 出现逐步推理、自我检验 | ~50%+ |
| 收敛(~500步) | 结构化推理、回溯、验证 | ~60%+ |
"顿悟时刻":DeepSeek 团队报告了一个有趣的现象——在训练的某个阶段,模型突然"顿悟"了自我验证的策略,在回复中出现了"Wait, let me reconsider..."之类的表述,随后正确率显著跳升。这被称为推理的"涌现"——不是渐进地出现,而是在某个临界点突然出现。
GRPO 的关键超参数
| 超参数 | 含义 | 推荐值 | 影响 |
|---|---|---|---|
| (num_generations) | 每个提示的采样数量 | 8-16 | 更大 → 更准确的基线估计,但计算成本更高 |
| (kl_coef) | KL 惩罚系数 | 0.001-0.01 | 更大 → 更保守,更小 → 更激进 |
| (clip_range) | PPO 截断参数 | 0.1-0.2 | 更大 → 允许更大的更新步幅 |
| lr (learning_rate) | 学习率 | 1e-6 ~ 5e-6 | 更大 → 更快收敛但可能不稳定 |
| max_new_tokens | 最大生成 token 数 | 1024-2048 | 更大 → 允许更长的推理链 |