DeepSeek-R1:用强化学习激发大语言模型的推理能力

笔记日期: 2026-05-23 笔记作者: Zhongzhu Zhou 论文标题: DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning 作者: DeepSeek-AI(核心作者:Daya Guo, Dejian Yang, Haowei Zhang, Junxiao Song, Peiyi Wang, Qihao Zhu, Runxin Xu 等) arXiv: 2501.12948 状态 / Venue: arXiv 预印本(2025 年 1 月发布,2026 年 1 月 v2),全部模型权重已在 HuggingFace 开源

一句话总结

DeepSeek-R1 证明了:大语言模型的复杂推理能力(自我反思、验证、探索替代方案)可以仅通过强化学习在结果奖励上涌现出来,完全不需要人类标注的推理轨迹——这改变了我们对后训练能做什么的认知。

前置知识:读懂这篇论文需要什么背景

1. 语言模型后训练(Post-Training)

预训练完成的 LLM 只能预测下一个 token,还不是一个有用的助手。后训练是指预训练结束之后用来把模型”调成能用状态”的一系列技术。经典流程如下:

预训练 LLM(next-token prediction)

SFT(Supervised Fine-Tuning,监督微调)
  — 用人工标注的(提示, 理想回答)对训练
  — 目标:让模型模仿优质人类回答的风格和内容

RLHF(Reinforcement Learning from Human Feedback,人类反馈强化学习)
  — 先训练一个奖励模型(RM)预测人类偏好
  — 再用 PPO 优化 LLM 策略,最大化 RM 奖励
  — 代表成果:InstructGPT, GPT-4, Claude

关键局限: SFT 的上限是训练数据的质量。如果人类标注者以某种方式推理,模型就会模仿那种方式——无法发现更好的策略。

2. 链式思维(Chain-of-Thought, CoT)

CoT 提示技术(Wei et al., 2022)要求模型在给出最终答案之前先生成中间推理步骤。直觉上,更长的输出可以表示更多的”计算”:

QCoTs1s2skreasoning traceA\underbrace{Q \xrightarrow{\text{CoT}} s_1 \to s_2 \to \cdots \to s_k}_{\text{reasoning trace}} \to A

(其中 QQ = 问题,sis_i = 第 ii 个中间推理步骤,AA = 最终答案)

OpenAI o1(2024年)把这个思路推向极致:训练时就让模型生成长达数万 token 的”内心独白”(internal monologue),大幅提升了数学和编程类 benchmark 的表现。

3. PPO(Proximal Policy Optimization)

PPO 是 RLHF 中最常用的 RL 算法。RL 的基本框架:策略 πθ\pi_\theta 在状态(已生成的 token 序列)中选择动作(下一个 token),最大化累积奖励。PPO 的裁剪目标:

LPPO(θ)=Et[min(rt(θ)A^t, clip(rt(θ),1ε,1+ε)A^t)]\mathcal{L}^{\text{PPO}}(\theta) = \mathbb{E}_t \left[ \min\left( r_t(\theta) \hat{A}_t,\ \text{clip}(r_t(\theta), 1-\varepsilon, 1+\varepsilon)\, \hat{A}_t \right) \right]

其中 rt(θ)=πθ(atst)πθold(atst)r_t(\theta) = \frac{\pi_\theta(a_t|s_t)}{\pi_{\theta_\text{old}}(a_t|s_t)} 是策略比,A^t\hat{A}_t 是优势估计。

优势需要一个价值模型(Value Model) Vϕ(st)V_\phi(s_t) 来预测从当前状态出发的期望未来奖励。通广义优势估计(GAE)计算:

A^tGAE=l=0T(γλ)lδt+l,δt=rt+γVϕ(st+1)Vϕ(st)\hat{A}_t^{\text{GAE}} = \sum_{l=0}^{T} (\gamma \lambda)^l \delta_{t+l}, \quad \delta_t = r_t + \gamma V_\phi(s_{t+1}) - V_\phi(s_t)

问题: 价值模型通常和策略模型一样大,导致显存占用翻倍。而且超参数 λ\lambda 极其敏感。

4. KL 散度约束

RLHF 中,策略不能偏离参考策略(通常是 SFT 后的模型)太远,否则会发生奖励黑客(Reward Hacking)——模型找到不合理但能骗过奖励模型的回答。

DKL(πθπref)=Eoπθ[logπθ(oq)πref(oq)]D_\text{KL}(\pi_\theta \| \pi_\text{ref}) = \mathbb{E}_{o \sim \pi_\theta} \left[ \log \frac{\pi_\theta(o|q)}{\pi_\text{ref}(o|q)} \right]

Schulman (2020) 提出的无偏估计器(不需要从 πref\pi_\text{ref} 采样):

DKLest=πref(oiq)πθ(oiq)logπref(oiq)πθ(oiq)10D_\text{KL}^{\text{est}} = \frac{\pi_\text{ref}(o_i|q)}{\pi_\theta(o_i|q)} - \log \frac{\pi_\text{ref}(o_i|q)}{\pi_\theta(o_i|q)} - 1 \geq 0

这个估计器恒非负,且仅在 πθ=πref\pi_\theta = \pi_\text{ref} 时取零,适合作为 loss 项。

核心贡献

DeepSeek-R1 的两个主要论断:

  1. 不需要标注就能涌现(R1-Zero): 一个大型 LM 可以仅靠 RL + 结果奖励发展出复杂的多步推理——包括自我反思、验证、探索替代方案。不需要 SFT,不需要人类写推理轨迹。推理行为从优化过程中自然涌现。

  2. 实用的前沿推理模型(R1): 一个四阶段的训练流水线,结合冷启动 SFT、两阶段 RL 和拒绝采样 SFT,可以产出与 OpenAI o1 竞争的开源推理模型。

第一部分:GRPO——组相对策略优化

为什么需要新算法?

PPO 在长 CoT 训练中有三个问题:

  1. 价值模型的代价高: 在 671B 规模下,再维护一个同等大小的价值模型,显存和计算代价不可承受。
  2. 长推理链的价值估计极难: 价值模型需要从部分序列预测最终奖励——但推理模型会在生成过程中修正早期步骤,使得中途预测极其不稳定。
  3. PPO 的 KL 惩罚隐式抑制长度: PPO 把 KL 罚项当作每 token 的密集奖励,等效于对响应长度的惩罚——这正是训练长推理模型时最不想要的效果。

GRPO 通过消除价值模型来一次性解决这三个问题。

GRPO 目标函数

图1:GRPO 与 PPO 的架构对比

PPO(需要价值模型):
  q → 策略模型 → o → 奖励模型 → r

           价值模型 → v → GAE → 优势 Â

GRPO(只需要策略模型):
  q → 策略模型 → {o₁, o₂, …, oG}(G 个输出)

        奖励函数 → {r₁, r₂, …, rG}

  组内统计:mean(r), std(r)

        Aᵢ = (rᵢ - mean) / std

对每个问题 qq,GRPO 从当前策略 πθold\pi_{\theta_\text{old}} 采样 一组 GG 个输出 {o1,o2,,oG}\{o_1, o_2, \ldots, o_G\},然后最大化:

JGRPO(θ)=E[1Gi=1Gmin(πθ(oiq)πθold(oiq)Ai, clip(πθ(oiq)πθold(oiq),1ε,1+ε)Ai)βDKL(πθπref)](1)\mathcal{J}_\text{GRPO}(\theta) = \mathbb{E}\left[ \frac{1}{G} \sum_{i=1}^G \min\left( \frac{\pi_\theta(o_i|q)}{\pi_{\theta_\text{old}}(o_i|q)} A_i,\ \text{clip}\left(\frac{\pi_\theta(o_i|q)}{\pi_{\theta_\text{old}}(o_i|q)}, 1-\varepsilon, 1+\varepsilon\right) A_i \right) - \beta\, D_\text{KL}(\pi_\theta \| \pi_\text{ref}) \right] \tag{1}

优势直接由组内分数计算:

Ai=rimean({r1,,rG})std({r1,,rG})(2)A_i = \frac{r_i - \text{mean}(\{r_1, \ldots, r_G\})}{\text{std}(\{r_1, \ldots, r_G\})} \tag{2}

KL 项使用无偏估计器(公式 3):

DKL(πθπref)=πref(oiq)πθ(oiq)logπref(oiq)πθ(oiq)1(3)D_\text{KL}(\pi_\theta \| \pi_\text{ref}) = \frac{\pi_\text{ref}(o_i|q)}{\pi_\theta(o_i|q)} - \log \frac{\pi_\text{ref}(o_i|q)}{\pi_\theta(o_i|q)} - 1 \tag{3}

逐步拆解一个 GRPO 训练步

让我把一个训练步完整走一遍:

步骤 1 — 采样一组回答。 对问题 qq,从 πθold\pi_{\theta_\text{old}} 采样 G=16G = 16 个回答 {o1,,o16}\{o_1, \ldots, o_{16}\},温度 1,最大长度 32,768 token(训练 8,200 步后改为 65,536)。

步骤 2 — 打分。 对每个 oio_i 用奖励函数评分:数学题用规则奖励(最终答案是否正确),代码题用编译器+测试用例,格式奖励检查是否包含 <think><answer> 标签。得到 {r1,,r16}\{r_1, \ldots, r_{16}\}

步骤 3 — 组内归一化。 计算 Ai=(rirˉ)/σrA_i = (r_i - \bar{r}) / \sigma_r,其中 rˉ\bar{r}σr\sigma_r 是这 16 个样本的均值和标准差。这相当于没有价值模型的”白化优势”。

步骤 4 — 计算梯度。 用公式 1 的 GRPO loss 计算梯度。裁剪比 ε=10\varepsilon = 10(注意:远大于 PPO 通常用的 0.2)。

步骤 5 — KL 正则化。 用公式 3 的估计器计算 KL 项,系数 β=0.001\beta = 0.001,加到 loss 中。每 400 步把参考策略同步到最新策略。

步骤 6 — 参数更新。πθ\pi_\theta 做梯度下降,保持 πθold\pi_{\theta_\text{old}} 固定。每个 rollout 生成 8,192 个输出,随机分成 16 个 mini-batch,只训练一轮(single inner epoch)。

为什么组内归一化有效?

组内归一化把奖励转成零均值、单位方差的信号。核心原因:

  • 不同题目的奖励幅度差异很大(全 0/1 二元 vs 部分分的奖励)。不归一化,策略会对高奖励幅度的题目更新更猛,导致不均匀的学习。
  • 均值作为基线,功能等同于价值函数——减去它可以降低方差,而且是零参数的。
  • 关键洞察:不需要用单独的模型预测基线。只要对同一个问题采样多个输出,经验均值就是很好的基线估计。

大裁剪比(ε = 10)的设计

标准 PPO 用 ε0.2\varepsilon \approx 0.2,意味着每步更新只允许 token 概率比变化 ±20%。DeepSeek-R1 把 ε\varepsilon 设为 10——看起来很极端,确实很极端。

为什么? 在长推理链中,一个正确回答里大量 token 是”mundane”的——它们本身不携带”为什么这条回答正确”的信息。紧的裁剪让梯度完全被截断在这些 token 上,使得结果奖励的信号无法有效传播回 10K–30K token 的推理链。把 ε\varepsilon 放大到 10,策略可以做更大的更新,让来自结果奖励的梯度信号更有效地传播。

风险:训练不稳定。 作者验证了大裁剪比在实践中不会导致不稳定,可能原因是 KL 正则化和大多数 token 的比值仍然较小提供了隐式稳定性。

第二部分:DeepSeek-R1-Zero——纯强化学习,无 SFT

实验设置

  • 基础模型: DeepSeek-V3-Base(671B MoE,每个 token 激活 37B 参数)
  • 无 SFT: 直接从 base checkpoint 开始 RL 训练
  • 奖励: 仅规则奖励。数学题:最终答案正确?代码题:测试用例通过?格式奖励:是否包含 <think>...</think><answer>...</answer> 标签?
Rrule=Racc+Rformat(4)R_\text{rule} = R_\text{acc} + R_\text{format} \tag{4}

训练提示词刻意极简:

用户:{问题}
助手:<think> {推理过程} </think> <answer> {答案} </answer>

完全不指导如何推理,只规定输出的结构格式。

训练动态

图2:DeepSeek-R1-Zero 训练曲线

AIME 2024 准确率                    平均回答长度(token 数)
  1.0 |              ....cons@16   |  20K |                     .....
  0.8 |           ...             |  15K |                  ....
  0.6 |        ...                |  10K |              ....
  0.4 |     ...  人类参赛者平均    |   5K |          ....
  0.2 |  ...                      |      |    .......
  0.0 |...____________________    |    0 |...__________________
      0       5K步      10K         0       5K步      10K

两个令人印象深刻的现象:

  1. 准确率单调上升,从 15.6%(pass@1)上升到 77.9%,多数投票后达到 86.7%,超过人类参赛者平均水平。
  2. 回答长度自发增长,从约 3,000 token 增长到约 17,000 token。模型自主地”买”更多思考时间——RL 目标从未显式奖励长度。

“灵光一现”现象(Aha Moment)

约在训练步 5,000 左右,模型开始在 <think> 块内用 “wait” 作为自我纠错的信号:

<think>
... [初始方案] ...

Wait, wait. Wait. 这里有个灵光一现的时刻我可以标记一下。
让我重新一步步评估这个问题...

[修正方案]
</think>
<answer> ... </answer>

这不是学来的——没有任何训练数据包含这个模式。模型自行发现:在推理中途暂停并重新检查自己的工作可以获得更高奖励,然后收敛到用 “wait” 作为这种自我纠错的语言标记。

“wait” 在反思性上下文中出现的频率随训练步数的变化图(论文 Figure 9b)显示了一个清晰的相变,出现在第 4,000–5,000 步附近——与 AIME 准确率的跳升精确对应。

为什么 SFT 会”伤害”推理?

这是论文最有挑战性的理论主张:

  1. SFT 训练模型去复现人类写的推理轨迹。
  2. 人类有偏见:倾向于用特定长度、特定词汇、特定方式写推理。
  3. 这”约束了策略的探索空间”——模型学会了用人类方式推理,但上限是人类质量。
  4. 纯 RL 中,模型可以发现超越人类的推理策略,因为 RL 目标只关心最终结果,不管过程是否”像人”。

这个论点的边界条件: 纯 RL 只在有可验证结果的任务上有效。数学、代码、逻辑——答案对错可以规则判断。写作、开放问答——没有绝对正确答案,无法用规则奖励。

第三部分:DeepSeek-R1——完整四阶段训练流水线

流水线总览

图3:DeepSeek-R1 四阶段训练流水线

graph LR
    A[DeepSeek-V3-Base] --> B[阶段1\n冷启动 SFT]
    B --> C[R1-Dev1]
    C --> D[阶段2\nRL 第一阶段\n仅推理奖励]
    D --> E[R1-Dev2]
    E --> F[阶段3\n拒绝采样 + SFT\n混合数据]
    F --> G[R1-Dev3]
    G --> H[阶段4\nRL 第二阶段\n多样奖励 + 偏好奖励]
    H --> I[DeepSeek-R1]

阶段1:冷启动 SFT

问题: 纯 RL from base 的输出有时混合中英文、格式混乱、可读性差——即使内容正确。

方案: 收集”少量”(thousands of)展示了自然对话推理过程的长 CoT 样本做 SFT。这些样本:

  • 有自然的思维过程(不只是最终答案)
  • 语言一致
  • 正确使用 <think> 标签
  • 包含思考后的总结

效果(Dev1 vs R1-Zero):

  • IF-Eval:71.7% vs 46.6%——冷启动大幅改善指令跟随。
  • AIME 2024:59.0% vs 77.9%——R1-Zero 在纯数学上仍更强。
  • 解读:冷启动 SFT 用部分探索自由(数学稍弱)换来了更好的沟通质量(指令跟随更强)。

阶段2:第一阶段 RL(推理聚焦)

与 R1-Zero 相同的 GRPO 设置,两点变化:

  • 从 Dev1 初始化(不是原始 base)
  • 额外奖励: 语言一致性奖励(公式 5):
Rlanguage=NtargetNtotal(5)R_\text{language} = \frac{N_\text{target}}{N_\text{total}} \tag{5}

(其中 NtargetN_\text{target} = 目标语言词汇数,NtotalN_\text{total} = 总词汇数)

对 CoT 中混用语言的输出施加惩罚,直接加到最终奖励中:R=Rrule+RlanguageR = R_\text{rule} + R_\text{language}

消融实验(附录 B.6)显示:加这个奖励损失约 1–2 个百分点的推理准确率,但显著改善了可读性。作者接受这个权衡。

第一阶段 RL 配置:

  • 学习率:3e-6
  • KL 系数 β\beta:0.001
  • 裁剪比 ε\varepsilon:10
  • 组大小 GG:16
  • 最大序列长度:32,768(步骤 8,200 后改为 65,536)
  • 批大小:每步 32 道题 × 16 个输出 = 512
  • 参考模型更新频率:每 400 步

阶段3:拒绝采样 + SFT

第一阶段 RL 结束后,Dev2 可以生成高质量推理链。现在从 Dev2 采样并过滤:

算法:拒绝采样数据构建

1. 对训练集中的每道推理题 q:
2.   从 Dev2 采样 N 个回答 {o_1, ..., o_N}
3.   保留答案正确的回答(规则验证)
4.   丢弃答案错误的回答

5. 合并保留的回答 + 非推理数据(来自 DeepSeek-V3 SFT 数据)
   = D_mixed = D_reasoning ∪ D_non-reasoning

6. 用 D_mixed 对 Dev2 做标准 SFT:
   loss = CrossEntropy(π(o*|q), o*)
7. 得到 Dev3

为什么要加非推理数据?

  • Dev2 在写作、问答、代码工程等任务上能力退化(只做了推理 RL)。
  • 这些任务无法用规则奖励验证,不能直接做 RL。
  • 用 DeepSeek-V3 SFT 数据做监督,恢复通用能力。

Dev3 vs Dev2 的改进: AlpacaEval 2.0 +7 个百分点,Aider-Polyglot +19 个百分点。通用能力大幅恢复,数学和代码基本保持不变。

阶段4:第二阶段 RL(多样性 + 偏好奖励)

对 Dev3 做最终 RL。与阶段2的两个关键区别:

  1. 多样化数据: 混合推理题和通用指令。
  2. 混合奖励: 推理任务用规则奖励;通用任务用奖励模型。
R=Rreasoning+Rgeneral+Rlanguage(6)R = R_\text{reasoning} + R_\text{general} + R_\text{language} \tag{6} Rgeneral=Rreward_model+Rformat(7)R_\text{general} = R_\text{reward\_model} + R_\text{format} \tag{7}

奖励模型单独训练:

有用性奖励模型:

  • 数据:66,000 对偏好对。用 DeepSeek-V3 在 arena-hard 格式下生成两个候选回答。
  • 每对随机分配 A/B 打分四次消除位置偏差,取平均分。保留分差 Δ>1\Delta > 1 的对提高数据质量。
  • 架构:DeepSeek-R1 本体 + 一个标量奖励头。
  • 训练:256 batch size,6e-6 学习率,1 epoch,最大长度 8,192 token。
Rhelpful=RMhelpful(ResponseA,ResponseB)(8)R_\text{helpful} = \text{RM}_\text{helpful}(\text{Response}_A, \text{Response}_B) \tag{8}

安全性奖励模型:

  • 数据:106,000 个提示,逐点(pointwise)标注为”安全/不安全”。
  • 整个回答打分,包括推理过程——检测推理中途出现的有害内容。
Rsafety=RMsafety(Response)(9)R_\text{safety} = \text{RM}_\text{safety}(\text{Response}) \tag{9}

阶段4 配置:

  • 温度:0.7(从 1.0 降低——这个阶段高温度会导致不连贯的输出)
  • 总步数:1,700 步;偏好奖励只在最后 400 步引入
  • 重要观察:偏好奖励训练超过 400 步就会出现奖励黑客(reward hacking),因此严格限制步数

为什么降温度? 阶段3 之后模型已经有很强的先验。高温度是鼓励探索的——但现在我们需要的是利用(exploitation)和对齐,不是探索。低温度产生更稳定的输出。

第四部分:蒸馏到小模型

方法

DeepSeek-R1 更强的推理能力可以通过知识蒸馏迁移到小模型——但这里的蒸馏不是传统的中间层匹配,而是用大模型生成的高质量轨迹做 SFT

图4:蒸馏流水线

DeepSeek-R1 (671B)
       |
       | 生成 80 万条长 CoT 推理轨迹
       | (数学、代码、科学题)

  过滤:只保留最终答案正确的

  SFT 训练小模型

  DeepSeek-R1-Distill-{Qwen, Llama}-{1.5B, 7B, 8B, 14B, 32B, 70B}

数据构成:60 万道推理题 + 20 万道非推理题,从 R1 生成轨迹。

伪代码:蒸馏训练循环

算法:知识蒸馏 SFT

输入:
  M = 目标小模型(如 Qwen-7B)
  D_distill = {(q, o*)} — R1 生成并被验证正确的推理轨迹

初始化 π = M

对每个 (q, o*) ∈ D_distill:
  计算 SFT loss = CrossEntropy(π(o*|q), o*)
  梯度下降更新 π

在 AIME, MATH-500, LiveCodeBench 上评估

关键发现: 直接在 R1 轨迹上做 SFT 显著优于直接对小模型做 GRPO RL。蒸馏自 R1 也优于蒸馏自 V3——说明 R1 的轨迹确实编码了更好的推理模式。

蒸馏结果

图5:蒸馏模型性能 vs 规模

模型AIME 2024MATH-500LiveCodeBench
R1-Distill-Qwen-1.5B28.9%83.9%34.1%
R1-Distill-Qwen-7B55.5%92.8%54.9%
R1-Distill-Qwen-14B69.7%93.9%64.7%
R1-Distill-Qwen-32B72.6%94.3%69.4%
R1-Distill-Llama-8B50.4%89.1%48.9%
R1-Distill-Llama-70B70.0%94.5%65.7%
DeepSeek-R1(671B)79.8%97.3%65.9%
OpenAI o1-mini63.6%90.0%53.8%
OpenAI o174.3%96.4%63.4%

1.5B 模型在多个任务上已经匹敌 QwQ-32B(专用 32B 推理模型)。70B 模型与 OpenAI o1 竞争,参数量仅是 R1 的约 1/10。

为什么蒸馏优于小模型直接 RL?

对 7B 模型直接用 GRPO 从头训练,效果远不如在 R1 轨迹上做 SFT。原因:

  1. 容量瓶颈: 小模型可能没有足够的参数容量从头发现新的推理策略,大模型已经完成了探索。
  2. 训练信号稀疏: 7B 模型解 AIME 题早期几乎不会成功,正奖励信号极其稀疏,RL 无从推进。R1 的轨迹提供了密集的监督信号。
  3. 长 CoT 能力门槛: 生成连贯的万 token 推理链需要一定的基础能力,没有引导的小模型做不到。

第五部分:实验结果与分析

主要 Benchmark

图6:DeepSeek-R1 与 SOTA 对比(主要 benchmark)

BenchmarkR1-ZeroR1o1-0912o1-miniGPT-4o
AIME 2024 (Pass@1)77.979.874.363.69.3
MATH-500 (Pass@1)95.997.396.490.076.6
GPQA Diamond75.871.577.360.053.6
LiveCodeBench50.065.963.453.833.4
Codeforces Rating1444202918911820759
MMLU88.890.892.385.287.2
AlpacaEval2 (LC)24.787.657.5

关键观察:

  • R1-Zero 已经很强,但通用任务(AlpacaEval 24.7%)偏弱。
  • R1 的四阶段流水线在不损失数学和代码能力的同时,大幅修复了通用任务(AlpacaEval 87.6%)。
  • R1 在 Codeforces 上达到 ELO 2029——超过人类前 3% 参赛者。

阶段间消融

各阶段提升的贡献(对比 Dev1 vs Dev2 vs Dev3 vs R1):

表:各中间 checkpoint 的关键指标

R1-ZeroDev1Dev2Dev3R1
AIME 202477.959.074.078.179.8
IF-Eval46.671.772.078.183.3
AlpacaEval224.750.155.862.187.6
Aider-Polyglot12.26.725.644.853.3

解读:

  • 冷启动 SFT(→Dev1)大幅提升指令跟随,但数学下降(从 77.9 → 59.0)。
  • RL 阶段1(→Dev2)恢复数学(74.0),保持指令跟随。
  • 拒绝采样 SFT(→Dev3)再次提升通用能力(AlpacaEval +6, Aider +19)。
  • RL 阶段2(→R1)最终对齐,AlpacaEval 再跳升至 87.6%。

测试时计算扩展

链式思维推理模型的优势:可以在推理时用更多计算换更高准确率。DeepSeek-R1 支持:

  1. 多数投票(cons@N): 生成 N 个回答,取多数答案。从 N=1 到 N=16,AIME 2024 从 79.8% 提升到 87.2%。
  2. 自适应响应长度: 与 MCTS 或束搜索不同,R1 在单次生成中自然地为更难的问题分配更多 token,不需要外部计算调度。

第六部分:关键设计选择的取舍分析

选择1:规则奖励 vs 神经奖励(用于推理任务)

他们做了什么: 对数学、代码、逻辑题用规则奖励(检查答案、编译代码),不用神经奖励模型。

为什么: 神经奖励模型在大规模 RL 中容易被奖励黑客攻击。策略偏离 SFT 模型后,会发现能高分骗过奖励模型但实际不正确的输出方式。对数学,真实答案是明确的——规则验证是 100% 可靠的。

如果用神经奖励会怎样: 策略最终会学会生成在 RM 上得高分但实际不正确的回答。附录 B.5 记录了阶段4 使用偏好 RM 超过 400 步就会出现奖励黑客。

边界条件: 这只有在任务有可验证答案时才有效。对于写作、指令跟随、开放问答——没有真值——神经奖励模型是不可避免的。这就是为什么阶段4 的神经 RM 只用于通用数据,且严格限制在 400 步以内。

选择2:GRPO 而非 PPO

他们做了什么: 消除价值模型,从组内统计计算优势。

为什么: 671B 规模下避免 671B 价值模型的显存和计算开销。另外,对长推理链,价值函数极难学准。

PPO 能达到同等效果吗: 对比图(论文 Figure 4)显示,默认 λ=0.95\lambda=0.95 的 PPO 表现显著差于 GRPO。仔细调参(λ=1.0\lambda=1.0)可以接近 GRPO,但需要额外的超参搜索。在规模上,价值模型的内存开销让 PPO 不切实际。

边界条件: GRPO 要求对同一问题的多个采样的奖励具有可比性。对于所有输出都接近 0 或 1 的任务(极难或极易),组内方差接近 0,梯度信号消失。题目难度的选择(有挑战性但非不可能)至关重要。

选择3:多阶段流水线 vs 端到端 RL

他们做了什么: 四个独立阶段,各有不同数据、奖励和目标。

为什么: 从 base 做端到端 RL 会(a)产生语言混合的不可读输出,(b)在推理任务上过专化而忽视通用任务,(c)缺少对人类沟通方式的基本定锚。

纯 RL(R1-Zero)的失败模式: 强推理,但 AlpacaEval 只有 24.7%——对普通用户几乎没有实用价值。多阶段流水线把 R1-Zero 式的强推理和通用有用性统一起来。

边界条件: 多阶段流水线更复杂,每个阶段都有超参数。阶段4 需要仔细监控奖励黑客。这条流水线若没有相应基础设施,复现难度很高。

选择4:SFT 蒸馏而非 RL 直接迁移

他们做了什么: 生成 80 万条 R1 轨迹,过滤正确的,对小模型做 SFT。

为什么: 对小模型直接 RL 时奖励信号太稀疏——小模型解难题很少成功,早期几乎无正奖励,RL 无法起步。SFT 在正确轨迹上提供密集的监督。

直接 RL 的效果对比: 附录 F 显示,对 7B 模型用 GRPO 直接从头训练,远不如在 R1 轨迹上做 SFT。能力迁移比独立发现更高效。

边界条件: 蒸馏模型继承了 R1 的推理风格,包括其冗长性。对延迟敏感的应用,这些模型可能太慢。蒸馏模型也无法超越 R1 所展示的能力上限。

第七部分:局限性与开放问题

论文对局限性的诚实程度令人印象深刻:

  1. 结构化输出和工具调用: R1 目前无法在推理过程中可靠调用外部工具,这是与智能体系统相比的主要差距。

  2. Token 效率/”过度思考”: R1 对简单问题有时也会生成远多于必要的 token。RL 目标对长度没有惩罚(正确就有满分奖励),模型没有激励去”想简洁”。

  3. 语言混合: 模型针对中文和英文优化,其他语言可能触发混用。

  4. 提示敏感性: Few-shot 提示一致性地降低性能。R1 针对零样本使用设计。

  5. 软件工程任务: 运行代码测试套件的漫长评估时间使大规模 RL 不切实际,R1 在软件工程 benchmark 上相对 DeepSeek-V3 提升有限。

  6. 奖励黑客: 需要分阶段管理,偏好 RM 阶段4 超过 400 步就发生黑客攻击。

  7. 安全性: 不加风险控制层的情况下,安全性处于”中等水平”(与 GPT-4o-2024-05-13 相当)。增强的推理能力可能让不安全的回答更具操作可行性。

第八部分:RL 训练基础设施

简要介绍(附录 B.1):

  • vLLM 做 rollout 生成(利用 PagedAttention 高效批量推理)
  • 流水线化执行: Rollout(推理)、奖励计算(代码执行、答案匹配、格式检查)、模型训练三个阶段重叠执行,避免 GPU 空转。
  • 参考模型动态更新: 每 400 步把参考模型同步到最新策略,让 KL 约束随策略演进而调整,而不是把策略约束在越来越远的参考点。

图7:RL 训练基础设施数据流

graph TD
    A[vLLM Workers\nRollout 生成] --> B[奖励计算\n答案匹配 / 代码执行 / 格式检查]
    B --> C[优势计算\n组内归一化 rᵢ → Aᵢ]
    C --> D[Actor Model 训练\nGRPO Loss + KL 项]
    D -->|每 400 步同步参考| E[Reference Model 更新]
    A -->|打包数据| D

关键洞察:bottleneck 在 rollout,不在训练。vLLM 正是因为 PagedAttention 能高效生成大批 rollout 而被选中。

第九部分:为什么这篇论文重要

DeepSeek-R1 在三个层面同时推进了领域:

算法层面: GRPO——更简单、更省内存的 PPO 替代,在长 CoT RL 上同等有效。

训练方案层面: 四阶段流水线——把冷启动 SFT、分阶段 RL 和拒绝采样 SFT 组合成可以产出通用推理模型的完整 recipe。

系统洞察: 蒸馏(SFT on model-generated traces)比小模型直接 RL 更高效——能力迁移比独立发现便宜很多。

最深层的贡献是证明了:基于奖励的 RL 可以发现真正新颖的推理策略——不是模仿人类示范,而是从优化压力中涌现出来的行为。“灵光一现”现象和回答长度的有机增长是 RL 在做新事情的实证证据,不只是在精炼 SFT 已经教过的内容。

论文同样设定了诚实的边界:奖励黑客、开放性任务、多语言支持、提示敏感性——这些都是未来 R2 的路线图。

复现关键结果需要什么

  • 基础模型: DeepSeek-V3-Base 已在 HuggingFace 开源(~640GB,bf16)。
  • RL 基础设施: vLLM + 自定义 GRPO 训练循环。OpenRLHF, verl, TRL 都提供了 GRPO 实现。
  • 计算量: 完整运行需要数千 GPU 天(H800)。阶段2 RL 单独就有 10,400 步 × 512 样本 × 30K token ≈ 1.6 × 10^8 token/步。
  • 奖励函数: 数学奖励(检查最终答案)和代码奖励(编译+测试)实现直接。数学数据集(MATH, AMC, AIME, 数学竞赛题)公开可获取。
  • 冷启动数据: 论文说”数千条样本”,未公开具体数据,但社区复现(DeepScaleR, STILL-3 等)已构建了类似的数据集。

多个社区复现(NovaSky Sky-T1, Eurus-2 等)在更小规模上部分复现了 DeepSeek-R1 的性能,验证了核心训练 recipe 的有效性。

附录A:关键数学推导详解

A.1 GRPO 优势估计器的无偏性证明

组内归一化为什么是无偏的优势估计器?让我推导一下。

在标准 RL 中,优势函数定义为:

A(s,a)=Q(s,a)V(s)A(s, a) = Q(s, a) - V(s)

其中 Q(s,a)Q(s,a) 是动作价值函数(在状态 ss 下采取动作 aa 的期望回报),V(s)=Ea[Q(s,a)]V(s) = \mathbb{E}_a[Q(s,a)] 是状态价值函数(基线)。

在 LLM 设置中,“状态”是问题 qq 和部分输出,“动作”是整个输出 oio_i(因为奖励只在结尾获得)。于是:

Ai=R(oiq)B(q)A_i = R(o_i | q) - B(q)

其中 B(q)B(q) 是只依赖问题的基线(不依赖具体输出)。我们需要 E[B(q)]=E[R(oiq)]\mathbb{E}[B(q)] = \mathbb{E}[R(o_i|q)],使得优势在期望意义下为零均值。

GRPO 的选择: B(q)=1Gi=1GriB(q) = \frac{1}{G}\sum_{i=1}^G r_i — 组内经验均值。

无偏性:

E[1Gi=1Gri]=E[ri]=Q(q)\mathbb{E}\left[\frac{1}{G}\sum_{i=1}^G r_i\right] = \mathbb{E}[r_i] = Q(q)

其中 Q(q)=Eoπθ[R(oq)]Q(q) = \mathbb{E}_{o \sim \pi_\theta}[R(o|q)] 是问题 qq 的期望奖励。

除以 std\text{std} 是方差归一化——不改变梯度方向,只标准化幅度,使不同问题之间的有效学习率一致。

方差分析: 组均值估计器的方差是 Var[ri]/G\text{Var}[r_i] / GG=16G=16 时方差降低 16 倍,GRPO 显著比 REINFORCE 更稳定。

A.2 KL 散度估计器的非负性证明

GRPO 使用的估计器:

D^KL=πref(oq)πθ(oq)logπref(oq)πθ(oq)1\hat{D}_\text{KL} = \frac{\pi_\text{ref}(o|q)}{\pi_\theta(o|q)} - \log \frac{\pi_\text{ref}(o|q)}{\pi_\theta(o|q)} - 1

x=πref(oq)πθ(oq)x = \frac{\pi_\text{ref}(o|q)}{\pi_\theta(o|q)},则 D^KL=xlogx1\hat{D}_\text{KL} = x - \log x - 1

f(x)=xlogx1f(x) = x - \log x - 1,则 f(x)=11xf'(x) = 1 - \frac{1}{x},唯一驻点 x=1x=1

f(x)=1x2>0f''(x) = \frac{1}{x^2} > 0 对所有 x>0x>0 成立,故 x=1x=1 是全局极小值。f(1)=0f(1) = 0

因此 D^KL0\hat{D}_\text{KL} \geq 0,等号当且仅当 πθ=πref\pi_\theta = \pi_\text{ref} 时成立。∎

为什么用这个估计器而不是标准 KL? 标准 KL 需要从 πref\pi_\text{ref} 采样或计算重要性权重。Schulman 估计器只需要在 πθ\pi_\theta 的样本上评估 πref(oiq)\pi_\text{ref}(o_i|q),计算代价低。

A.3 为什么 GAE 对长 CoT 特别糟糕

让我用一个具体例子说明。假设一道数学题的正确解法是:

Token 1–500:    正确建立问题框架
Token 500–2000: 尝试第一种方法
Token 2000–2500: 发现方法错误,"Wait..."
Token 2500–8000: 用正确方法得到答案

价值函数在 token 1 处必须预测 token 8,000 时的期望奖励——也就是预测模型是否会在 token 2,000 发现错误并成功纠正。训练早期这接近于随机猜测。

GAE 要求:

Vϕ(st)E[k=tTγktrk]V_\phi(s_t) \approx \mathbb{E}\left[\sum_{k=t}^T \gamma^{k-t} r_k\right]

对于 t=1t=1(第一个 token),这需要预测 8,000 个 token 之后的结果。梯度信号极其噪声。

GRPO 完全绕过这个问题——组内均值直接告诉你这道题整体上趋向于解对还是解错,不需要任何位置特定的预测。

附录B:GRPO 完整算法伪代码

算法:GRPO 训练(用于 DeepSeek-R1-Zero)

超参数:
  G = 16          # 每组输出数量
  ε = 10          # 裁剪比(远大于 PPO 标准的 0.2)
  β = 0.001       # KL 系数
  lr = 3e-6       # 学习率
  T_ref = 400     # 参考模型更新间隔
  T_max = 10400   # 总训练步数
  n_rollout = 8192  # 每次 rollout 生成的输出数
  n_minibatch = 16  # 每次 rollout 分成的 mini-batch 数

初始化:
  π_θ ← DeepSeek-V3-Base
  π_ref ← DeepSeek-V3-Base(初始冻结)
  π_θ_old ← π_θ 的副本

For 步数 t = 1 to T_max:

  # === ROLLOUT 阶段 ===
  从训练集采样 n_rollout 道题 Q = {q_1, ..., q_{n_rollout}}

  For 每道题 q ∈ Q:
    从 π_θ_old(·|q) 采样 G 个输出 {o_1,...,o_G},温度=1
    对每个输出打分:r_i = reward(o_i, q)  # 答案正确 + 格式合规

  将所有 (q, o_i, r_i) 打包成数据集 D_rollout
  随机拆分成 n_minibatch 个 mini-batch

  # === 训练阶段(单轮迭代)===
  For 每个 mini-batch B ⊆ D_rollout:

    For 每组 (q, {(o_i, r_i)}) ∈ B:

      # 计算组内归一化优势
      r_mean = mean({r_i})
      r_std  = std({r_i}) + 1e-8   # 防止除零
      A_i    = (r_i - r_mean) / r_std  for 所有 i

      # 计算 GRPO loss
      L_GRPO = 0
      For i = 1 to G:
        ratio_i = π_θ(o_i|q) / π_θ_old(o_i|q)
        clipped = clip(ratio_i, 1-ε, 1+ε)
        L_GRPO += min(ratio_i * A_i, clipped * A_i)
      L_GRPO /= G

      # 计算 KL 惩罚
      KL_i = π_ref(o_i|q)/π_θ(o_i|q) - log(π_ref(o_i|q)/π_θ(o_i|q)) - 1
      L_KL = mean(KL_i for i=1,...,G)

      # 总损失(取负是因为我们最大化)
      loss = -(L_GRPO - β * L_KL)

    计算梯度,更新 π_θ

  # === 参考模型更新 ===
  If t % T_ref == 0:
    π_ref ← π_θ 的副本  # 防止 KL 约束变得无效

  更新 π_θ_old ← π_θ 的副本

伪代码说明:

  • If t % T_ref == 0: π_ref ← copy(π_θ):这一步很关键。不更新的话,10,000 步后策略已经和原始 base 模型相距甚远,KL 永远很大,约束失效。每 400 步刷新可以保持 KL 惩罚的意义。
  • std(...) + 1e-8:防止所有 G 个输出奖励相同时除以零(比如全部答对或全部答错)。
  • 单轮迭代(single inner epoch):避免在 rollout 数据上过拟合。

附录C:相关工作对比

C.1 与 InstructGPT / 经典 RLHF 的区别

经典 RLHF(Ouyang et al., 2022 — InstructGPT):

  1. 用人类示范做 SFT
  2. 用人类偏好对比对训练奖励模型
  3. 用 PPO 最大化 RM 分数

DeepSeek-R1 的关键区别:

  • 无人类偏好对比: 奖励是基于规则的(答案是否正确),不从人类反馈中学习。
  • 无 SFT 前置(R1-Zero): 经典 RLHF 必须先做 SFT;R1-Zero 跳过了这步。
  • 结果奖励而非过程奖励: RL 信号只来自最终答案是否正确,不评估中间步骤。
  • 规模: 经典 RLHF 在 ~175B 模型上;R1 在 671B 上,上下文窗口也更长。

C.2 过程奖励模型(PRM)——未走的路

对结果奖励(ORM)的替代是过程奖励模型——对每个推理步骤打分。OpenAI 的”Let’s Verify Step by Step”(Lightman et al., 2023)表明步骤级别的反馈可以提升数学性能。

DeepSeek-R1 为什么不用 PRM?

  • PRM 需要在步骤级别的人工标注,成本高且难扩展。
  • PRM 可能被”看起来正确但实际错误”的中间步骤愚弄。
  • 对竞赛数学和代码任务,结果验证既便宜又可靠,PRM 不必要。

论文的洞察:对有可验证结果的任务,结果级别的奖励足以发展出复杂的多步推理——不需要告诉模型哪些中间步骤是正确的。

C.3 蒙特卡洛树搜索(MCTS)——另一条未走的路

某些前期工作使用 MCTS 在测试时对推理路径做树搜索。DeepSeek-R1 将 MCTS 明确列为”测试时计算扩展”的对比点。

R1 为什么不用 MCTS?

  • MCTS 需要已学习的价值函数——和 PPO 一样的问题。
  • MCTS 不是端到端可微的;需要独立的推理时搜索过程。
  • R1 的单次长 CoT 生成方式更简单、更易部署。

C.4 开源意义

R1 的意义不只在于 benchmark 数字,更在于提供了可复现的训练 recipe

  • 模型权重在 HuggingFace 完全开源
  • GRPO 算法已被多个框架(OpenRLHF, verl, TRL)实现
  • 训练方案激励了大量社区复现和改进工作(DeepScaleR, STILL-3, Sky-T1, Eurus-2, DAPO 等)

这为研究界研究 RL 驱动的推理能力涌现机制提供了宝贵资源。

附录D:图表索引

本笔记包含以下内嵌图表:

  • 图1: GRPO 与 PPO 的架构对比(ASCII 图)
  • 图2: DeepSeek-R1-Zero 训练轨迹——准确率和回答长度曲线(ASCII 图)
  • 图3: DeepSeek-R1 四阶段训练流水线(Mermaid)
  • 图4: 蒸馏流水线(ASCII 图)
  • 图5: 蒸馏模型性能 vs 规模(表格)
  • 图6: 主要 Benchmark 对比(表格)
  • 图7: RL 训练基础设施数据流(Mermaid)

原论文最重要的实验图(Figure 1)展示了 AIME 准确率和回答长度在 RL 训练过程中的单调增长——这是推理能力真实涌现而非记忆的最直接证据:模型从未被告知”答更长”,但发现了更长的思考过程会带来更高的奖励。

总结

DeepSeek-R1 在三个层面同时推进了领域:

算法层面(GRPO): 消除价值模型,用组内统计代替 GAE 计算优势。更简单、更省显存、在长 CoT RL 上同样有效。ε=10\varepsilon=10 的大裁剪比让奖励信号能跨越数万 token 的推理链传播。

训练方案层面(四阶段流水线): 冷启动 SFT → RL 阶段1(推理聚焦)→ 拒绝采样 SFT(混合数据)→ RL 阶段2(多样性 + 偏好)。每个阶段解决上一个阶段的遗留问题(可读性 → 推理能力 → 通用能力 → 人类对齐)。

系统洞察(蒸馏效率): 大模型生成轨迹 + 过滤 + 小模型 SFT,比对小模型直接做 RL 高效得多。1.5B 蒸馏模型可以匹敌 QwQ-32B;70B 蒸馏模型与 o1 竞争。

最深层的贡献:证明了 RL 可以发现真正新颖的推理策略——“灵光一现”现象和有机增长的回答长度是实证证据,说明 RL 在做新事情,不只是精炼 SFT 已经提供的内容。