Chapter 03

DeepSeek-R1 解析:强化学习训练推理

2025 年 1 月,DeepSeek-R1 的开源震惊了整个 AI 界。它证明了一件事:推理能力可以通过强化学习自发涌现,无需人工标注推理过程。

为什么 DeepSeek-R1 重要

在 R1 之前,业界普遍认为训练推理模型需要:大量人工标注的推理轨迹、复杂的 RLHF 流程、OpenAI 级别的资源。R1 打破了这个认知:

无需人工标注推理过程
R1 的关键创新是使用结果奖励代替过程奖励。只需判断最终答案是否正确,模型自发学会了生成有效的中间推理步骤。
性能对标 o1
在 AIME 2024、MATH-500、Codeforces 等关键基准上,R1 的性能与 OpenAI o1 相当,部分指标超越。而 R1 的训练成本估计不到 o1 的 1/10。
完全开源
R1 的权重、训练细节、蒸馏版本全部开源。这催生了大量开源推理模型:QwQ、Sky-T1、STILL-2 等。

GRPO:Group Relative Policy Optimization

R1 使用的核心算法是 GRPO,它是 PPO 的一个简化变体:

PPO(传统 RLHF)的问题: 需要单独训练 Critic(价值网络) Critic 与 Policy 规模相当,训练成本翻倍 训练不稳定,调参复杂 GRPO 的解决方案: 对同一个问题,采样 G 个输出(G = 4~16) 计算每个输出的奖励 r_i 用组内相对排名代替 Critic: 优势 = (r_i - mean(r)) / std(r) 优于平均的输出被强化,低于平均的被抑制
# GRPO 核心逻辑(简化版)
def grpo_step(model, problem, G=8):
    # 1. 采样 G 个不同的输出
    outputs = [model.generate(problem, temperature=0.8) for _ in range(G)]

    # 2. 计算每个输出的奖励
    rewards = [compute_reward(problem, output) for output in outputs]

    # 3. 计算组内相对优势(归一化)
    mean_r = sum(rewards) / G
    std_r  = std(rewards)
    advantages = [(r - mean_r) / (std_r + 1e-8) for r in rewards]

    # 4. PPO-style 策略梯度更新
    loss = compute_policy_loss(outputs, advantages)
    loss.backward()

# 奖励函数:只看结果,不看过程
def compute_reward(problem, output):
    answer = extract_answer(output)
    correct_answer = problem['answer']
    if is_correct(answer, correct_answer):
        return 1.0   # 正确
    else:
        return 0.0   # 错误(或 -1.0 惩罚格式错误)

Aha-Moment:推理行为的自发涌现

DeepSeek 团队在训练过程中观察到了一个令人惊叹的现象:在训练中期,模型自发地开始使用自我反思语言,没有被显式训练这样做:

训练初期的模型输出: 问:1+1+1+1+1... (共15个1)等于多少? 答:15 训练中期(Aha-Moment 出现后): 问:[同题] 答:让我重新数一数... 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 嗯,我的第一反应是正确的,答案是 15。 训练后期: 问:[复杂数学题] 答:<think> 我需要先处理括号内的部分... 等等,这里有个陷阱... 让我重新从基础开始... 现在我确定答案是 42。 </think> 答案是 42。
论文原文的描述 "We observe that the model initially tends to think in a shallow manner... After the emergence of aha moments, the model started exploring multiple solution strategies before settling on one... This emergent behavior is particularly inspiring as it shows the power of RL in unlocking new capabilities."

R1 的训练流程

Stage 1: Cold Start(冷启动) 问题:纯 RL 从基础模型训练不稳定 解决:先收集少量(数千条)高质量 CoT 数据做 SFT 目的:给 RL 一个好的起点 Stage 2: 推理导向 RL(GRPO) 奖励:答案正确性 + 格式合规性 训练数据:数学(MATH、AMC/AIME)+ 代码(竞赛题) 结果:推理能力显著提升,出现 Aha-Moment Stage 3: 拒绝采样 + SFT(混合训练) 从 RL 模型中采样高质量输出 与通用 SFT 数据混合,恢复通用能力 防止 RL 训练导致的"能力塌缩" Stage 4: 最终 RL(GRPO,含 RLHF) 加入人类偏好数据 最终对齐与安全调整

R1 蒸馏:小模型的推理能力

R1 的另一个重要贡献是证明了推理能力可以通过蒸馏传递给小模型

# R1 蒸馏:用 R1 生成推理轨迹,微调小模型

# 1. 用 R1 为每个训练问题生成完整推理轨迹
r1_outputs = []
for problem in training_problems:
    output = r1_model.generate(problem, include_thinking=True)
    r1_outputs.append({
        "input": problem,
        "thinking": output.thinking,
        "answer": output.answer
    })

# 2. 过滤:只保留答案正确的轨迹
quality_data = [x for x in r1_outputs if verify(x['answer'])]

# 3. 用过滤后的数据微调小模型(如 Qwen-7B)
# 结果:7B 小模型获得接近 R1-32B 的推理能力
本章小结 R1 的核心是 GRPO(只需结果奖励)+ 四阶段训练流程。推理行为自发涌现,无需人工标注推理链。蒸馏让小模型也能拥有强大推理能力。下一章进入 Claude 扩展思考 API 的工程实践。