LLM 后训练实践
第4课:RLHF与GRPO

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-Base15.6%无(基座模型)
DeepSeek-R1-Zero71.0%纯 RL(GRPO)
OpenAI o1-091279.2%未公开

从 15.6% 到 71.0%——不需要任何标注的推理数据,纯粹通过 RL 信号让模型"学会思考"。

推理涌现的直觉

为什么 RL 可以涌现推理能力?考虑以下训练循环:

  1. 模型对数学题生成多个回复,有些直接给答案(常常错误),有些尝试逐步推理(更可能正确)
  2. 正确的回复获得 +1 奖励,错误的获得 0
  3. 经过组内归一化后,逐步推理的回复获得正的优势值
  4. PPO/GRPO 更新增强逐步推理的生成概率
  5. 随着训练进行,模型发展出越来越精细的推理策略

核心动力:数学的"可验证性"提供了纯净的 RL 信号——对就是对,错就是错,没有主观判断的噪声。

GRPO 算法详解

从 PPO 到 GRPO 的简化

回顾上一节,PPO 在 RLHF 中需要四个模型。其中价值模型(Critic)的作用是估计基线值(baseline),用于计算优势(advantage)。GRPO 的核心洞察是:

与其用一个独立的价值网络来估计基线,不如直接用同一批采样的平均奖励作为基线。

这就是"Group Relative"的含义——基线来自同一组采样的统计量。

GRPO 四步算法

步骤1:分组采样

对每个提示 qq,从当前策略 πθ\pi_\theta 采样 GG 个输出:

{o1,o2,,oG}πθold(q)\{o_1, o_2, \ldots, o_G\} \sim \pi_{\theta_{\text{old}}}(\cdot | q)

GG 通常取 8-16。每个 oio_i 是一个完整的回复序列。

为什么要多个采样? 单次采样无法区分"回复好因为模型本身好"还是"只是运气好"。多次采样后取统计量,可以更准确地评估每个回复的相对质量。

步骤2:计算奖励

对每个输出 oio_i 计算标量奖励 rir_i

ri=R(q,oi)r_i = R(q, o_i)

在 RLVR(可验证奖励)场景下,奖励函数通常非常简单:

R(q,o)={1如果 o 中的最终答案正确0如果 o 中的最终答案错误R(q, o) = \begin{cases} 1 & \text{如果 } o \text{ 中的最终答案正确} \\ 0 & \text{如果 } o \text{ 中的最终答案错误} \end{cases}

还可以加入格式奖励:如果回复包含 <think>...</think> 标签,额外奖励 +0.1。

步骤3:组内归一化(Group-Relative Advantage)

计算每个输出的组相对优势

A^i=rimean({r1,,rG})std({r1,,rG})\hat{A}_i = \frac{r_i - \text{mean}(\{r_1, \ldots, r_G\})}{\text{std}(\{r_1, \ldots, r_G\})}

即:

A^i=riμrσr\hat{A}_i = \frac{r_i - \mu_r}{\sigma_r}

其中 μr=1Gj=1Grj\mu_r = \frac{1}{G}\sum_{j=1}^{G} r_jσr=1Gj=1G(rjμr)2\sigma_r = \sqrt{\frac{1}{G}\sum_{j=1}^{G}(r_j - \mu_r)^2}

直觉

  • 如果一个回复的奖励高于组平均值:A^i>0\hat{A}_i > 0,应该被强化
  • 如果一个回复的奖励低于组平均值:A^i<0\hat{A}_i < 0,应该被抑制
  • 归一化确保优势值的尺度与奖励的绝对值无关

为什么这能替代价值网络? 传统 PPO 中,优势 A^t=Q(st,at)V(st)\hat{A}_t = Q(s_t, a_t) - V(s_t),需要一个价值网络 VV 来估计基线。GRPO 直接用组内均值 μr\mu_r 作为基线估计,避免了训练价值网络的需要。虽然这个估计比价值网络粗糙,但在实践中足够有效。

步骤4:PPO 截断目标 + KL 惩罚

使用组相对优势和 PPO 截断目标更新策略:

LGRPO(θ)=1Gi=1G1oit=1oi[min(ρi,tA^i,  clip(ρi,t,1ϵ,1+ϵ)A^i)βDKL(i,t)]\mathcal{L}_{\text{GRPO}}(\theta) = -\frac{1}{G}\sum_{i=1}^{G} \frac{1}{|o_i|}\sum_{t=1}^{|o_i|} \left[\min\left(\rho_{i,t} \hat{A}_i, \; \text{clip}(\rho_{i,t}, 1-\epsilon, 1+\epsilon) \hat{A}_i\right) - \beta \, D_{\text{KL}}^{(i,t)}\right]

其中:

  • ρi,t=πθ(oi,tq,oi,<t)πθold(oi,tq,oi,<t)\rho_{i,t} = \frac{\pi_\theta(o_{i,t} | q, o_{i,<t})}{\pi_{\theta_{\text{old}}}(o_{i,t} | q, o_{i,<t})} 是 token 级别的概率比
  • DKL(i,t)D_{\text{KL}}^{(i,t)} 是 token 级别的 KL 散度惩罚
  • β\beta 是 KL 惩罚系数
  • ϵ\epsilon 是 PPO 截断参数

完整 GRPO 损失公式

将所有组件合在一起,GRPO 的完整损失为:

LGRPO(θ)=EqD[1Gi=1G1oit=1oi(min(ρi,tA^i,  clip(ρi,t,1ϵ,1+ϵ)A^i)βDKL(i,t))]\boxed{ \mathcal{L}_{\text{GRPO}}(\theta) = -\mathbb{E}_{q \sim \mathcal{D}} \left[\frac{1}{G}\sum_{i=1}^{G} \frac{1}{|o_i|}\sum_{t=1}^{|o_i|} \left(\min\left(\rho_{i,t} \hat{A}_i, \; \text{clip}(\rho_{i,t}, 1-\epsilon, 1+\epsilon) \hat{A}_i\right) - \beta \, D_{\text{KL}}^{(i,t)}\right)\right] }

其中 KL 散度的近似计算为:

DKL(i,t)=πref(oi,tq,oi,<t)πθ(oi,tq,oi,<t)logπref(oi,tq,oi,<t)πθ(oi,tq,oi,<t)1D_{\text{KL}}^{(i,t)} = \frac{\pi_{\text{ref}}(o_{i,t} | q, o_{i,<t})}{\pi_\theta(o_{i,t} | q, o_{i,<t})} - \log \frac{\pi_{\text{ref}}(o_{i,t} | q, o_{i,<t})}{\pi_\theta(o_{i,t} | q, o_{i,<t})} - 1

这是 KL 散度的一种无偏估计(Schulman 近似)。

GRPO vs PPO 对比

方面PPOGRPO
优势估计价值网络 VψV_\psi + GAE组统计量 A^i=(riμ)/σ\hat{A}_i = (r_i - \mu)/\sigma
模型数量4个2-3个(无价值模型)
内存需求极高减少 ~50%
token 级/序列级token 级优势序列级优势
基线准确度较高(学习到的 VV较粗糙(组均值)
实现复杂度
训练稳定性中(无价值模型崩溃问题)

RLVR:可验证奖励的强化学习

什么是 RLVR

RLVR(Reinforcement Learning with Verifiable Rewards) 是 GRPO 最自然的应用场景。当任务有确定性标准答案时,奖励函数就是简单的正确性检查:

任务类型奖励函数可验证性
数学推理提取答案 → 与标准答案比较完全可验证
代码生成执行代码 → 检查输出/通过测试用例完全可验证
逻辑推理检查逻辑一致性部分可验证
翻译BLEU/METEOR 等自动指标部分可验证
通用对话需要人类/AI 判断不可验证

RLVR 的优势

RLVR 为什么强大?

  1. 零噪声奖励:正确就是正确,没有主观判断的噪声
  2. 无奖励黑客:不存在可被利用的奖励模型漏洞
  3. 完全自动化:不需要人类标注,可以无限扩展
  4. 与 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.0

DeepSeek-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 训练的推理能力"固化"到模型中,提高推理链的质量和一致性。

阶段4:最终 RL

在更广泛的任务上进行最终的 RL 优化,包括通用对话、安全对齐等,全面提升模型能力。

目的:不仅是推理专家,还要成为全面的通用助手。

与 Qwen3 后训练的对比

阶段DeepSeek-R1Qwen3
1冷启动 SFT长思维链冷启动 SFT
2大规模 GRPO推理 RL(GRPO)
3拒绝采样 + SFT思考模式融合
4最终 RL通用 RL

两者的核心思路高度一致:先用 SFT 初始化 → 用 RL 强化推理 → 融合/固化 → 通用优化。

推理涌现的深层理解

为什么 RL 能涌现推理

基座语言模型在预训练阶段已经"见过"了大量的推理文本(教科书、论文、StackOverflow 等),因此具备了推理的潜在能力。RL 的作用是通过奖励信号激活这些潜在能力:

  1. 信号放大:基座模型对"逐步推理"有微弱的偏好(因为训练数据中推理文本获得了好的 next-token prediction),RL 将这个微弱信号放大
  2. 策略优化:RL 不仅激活推理能力,还优化推理策略——学会何时分步、何时验证、何时回溯
  3. 格式发现:模型自发地发现了有效的推理格式(如 <think> 标签、分步列举等)

训练过程中的涌现现象

在 GRPO 训练过程中,可以观察到以下阶段性变化:

训练阶段回复特征正确率
早期(~10步)直接给答案,很少推理~10%
中期(~100步)开始出现简单的计算步骤~30%
后期(~300步)出现逐步推理、自我检验~50%+
收敛(~500步)结构化推理、回溯、验证~60%+

"顿悟时刻":DeepSeek 团队报告了一个有趣的现象——在训练的某个阶段,模型突然"顿悟"了自我验证的策略,在回复中出现了"Wait, let me reconsider..."之类的表述,随后正确率显著跳升。这被称为推理的"涌现"——不是渐进地出现,而是在某个临界点突然出现。

GRPO 的关键超参数

超参数含义推荐值影响
GG (num_generations)每个提示的采样数量8-16更大 → 更准确的基线估计,但计算成本更高
β\beta (kl_coef)KL 惩罚系数0.001-0.01更大 → 更保守,更小 → 更激进
ϵ\epsilon (clip_range)PPO 截断参数0.1-0.2更大 → 允许更大的更新步幅
lr (learning_rate)学习率1e-6 ~ 5e-6更大 → 更快收敛但可能不稳定
max_new_tokens最大生成 token 数1024-2048更大 → 允许更长的推理链