笔记日期: 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)要求模型在给出最终答案之前先生成中间推理步骤。直觉上,更长的输出可以表示更多的”计算”:
(其中 = 问题, = 第 个中间推理步骤, = 最终答案)
OpenAI o1(2024年)把这个思路推向极致:训练时就让模型生成长达数万 token 的”内心独白”(internal monologue),大幅提升了数学和编程类 benchmark 的表现。
3. PPO(Proximal Policy Optimization)
PPO 是 RLHF 中最常用的 RL 算法。RL 的基本框架:策略 在状态(已生成的 token 序列)中选择动作(下一个 token),最大化累积奖励。PPO 的裁剪目标:
其中 是策略比, 是优势估计。
优势需要一个价值模型(Value Model) 来预测从当前状态出发的期望未来奖励。通广义优势估计(GAE)计算:
问题: 价值模型通常和策略模型一样大,导致显存占用翻倍。而且超参数 极其敏感。
4. KL 散度约束
RLHF 中,策略不能偏离参考策略(通常是 SFT 后的模型)太远,否则会发生奖励黑客(Reward Hacking)——模型找到不合理但能骗过奖励模型的回答。
Schulman (2020) 提出的无偏估计器(不需要从 采样):
这个估计器恒非负,且仅在 时取零,适合作为 loss 项。
核心贡献
DeepSeek-R1 的两个主要论断:
-
不需要标注就能涌现(R1-Zero): 一个大型 LM 可以仅靠 RL + 结果奖励发展出复杂的多步推理——包括自我反思、验证、探索替代方案。不需要 SFT,不需要人类写推理轨迹。推理行为从优化过程中自然涌现。
-
实用的前沿推理模型(R1): 一个四阶段的训练流水线,结合冷启动 SFT、两阶段 RL 和拒绝采样 SFT,可以产出与 OpenAI o1 竞争的开源推理模型。
第一部分:GRPO——组相对策略优化
为什么需要新算法?
PPO 在长 CoT 训练中有三个问题:
- 价值模型的代价高: 在 671B 规模下,再维护一个同等大小的价值模型,显存和计算代价不可承受。
- 长推理链的价值估计极难: 价值模型需要从部分序列预测最终奖励——但推理模型会在生成过程中修正早期步骤,使得中途预测极其不稳定。
- 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
对每个问题 ,GRPO 从当前策略 采样 一组 个输出 ,然后最大化:
优势直接由组内分数计算:
KL 项使用无偏估计器(公式 3):
逐步拆解一个 GRPO 训练步
让我把一个训练步完整走一遍:
步骤 1 — 采样一组回答。 对问题 ,从 采样 个回答 ,温度 1,最大长度 32,768 token(训练 8,200 步后改为 65,536)。
步骤 2 — 打分。 对每个 用奖励函数评分:数学题用规则奖励(最终答案是否正确),代码题用编译器+测试用例,格式奖励检查是否包含 <think> 和 <answer> 标签。得到 。
步骤 3 — 组内归一化。 计算 ,其中 和 是这 16 个样本的均值和标准差。这相当于没有价值模型的”白化优势”。
步骤 4 — 计算梯度。 用公式 1 的 GRPO loss 计算梯度。裁剪比 (注意:远大于 PPO 通常用的 0.2)。
步骤 5 — KL 正则化。 用公式 3 的估计器计算 KL 项,系数 ,加到 loss 中。每 400 步把参考策略同步到最新策略。
步骤 6 — 参数更新。 对 做梯度下降,保持 固定。每个 rollout 生成 8,192 个输出,随机分成 16 个 mini-batch,只训练一轮(single inner epoch)。
为什么组内归一化有效?
组内归一化把奖励转成零均值、单位方差的信号。核心原因:
- 不同题目的奖励幅度差异很大(全 0/1 二元 vs 部分分的奖励)。不归一化,策略会对高奖励幅度的题目更新更猛,导致不均匀的学习。
- 均值作为基线,功能等同于价值函数——减去它可以降低方差,而且是零参数的。
- 关键洞察:不需要用单独的模型预测基线。只要对同一个问题采样多个输出,经验均值就是很好的基线估计。
大裁剪比(ε = 10)的设计
标准 PPO 用 ,意味着每步更新只允许 token 概率比变化 ±20%。DeepSeek-R1 把 设为 10——看起来很极端,确实很极端。
为什么? 在长推理链中,一个正确回答里大量 token 是”mundane”的——它们本身不携带”为什么这条回答正确”的信息。紧的裁剪让梯度完全被截断在这些 token 上,使得结果奖励的信号无法有效传播回 10K–30K token 的推理链。把 放大到 10,策略可以做更大的更新,让来自结果奖励的梯度信号更有效地传播。
风险:训练不稳定。 作者验证了大裁剪比在实践中不会导致不稳定,可能原因是 KL 正则化和大多数 token 的比值仍然较小提供了隐式稳定性。
第二部分:DeepSeek-R1-Zero——纯强化学习,无 SFT
实验设置
- 基础模型: DeepSeek-V3-Base(671B MoE,每个 token 激活 37B 参数)
- 无 SFT: 直接从 base checkpoint 开始 RL 训练
- 奖励: 仅规则奖励。数学题:最终答案正确?代码题:测试用例通过?格式奖励:是否包含
<think>...</think><answer>...</answer>标签?
训练提示词刻意极简:
用户:{问题}
助手:<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
两个令人印象深刻的现象:
- 准确率单调上升,从 15.6%(pass@1)上升到 77.9%,多数投票后达到 86.7%,超过人类参赛者平均水平。
- 回答长度自发增长,从约 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 会”伤害”推理?
这是论文最有挑战性的理论主张:
- SFT 训练模型去复现人类写的推理轨迹。
- 人类有偏见:倾向于用特定长度、特定词汇、特定方式写推理。
- 这”约束了策略的探索空间”——模型学会了用人类方式推理,但上限是人类质量。
- 纯 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):
(其中 = 目标语言词汇数, = 总词汇数)
对 CoT 中混用语言的输出施加惩罚,直接加到最终奖励中:。
消融实验(附录 B.6)显示:加这个奖励损失约 1–2 个百分点的推理准确率,但显著改善了可读性。作者接受这个权衡。
第一阶段 RL 配置:
- 学习率:3e-6
- KL 系数 :0.001
- 裁剪比 :10
- 组大小 :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的两个关键区别:
- 多样化数据: 混合推理题和通用指令。
- 混合奖励: 推理任务用规则奖励;通用任务用奖励模型。
奖励模型单独训练:
有用性奖励模型:
- 数据:66,000 对偏好对。用 DeepSeek-V3 在 arena-hard 格式下生成两个候选回答。
- 每对随机分配 A/B 打分四次消除位置偏差,取平均分。保留分差 的对提高数据质量。
- 架构:DeepSeek-R1 本体 + 一个标量奖励头。
- 训练:256 batch size,6e-6 学习率,1 epoch,最大长度 8,192 token。
安全性奖励模型:
- 数据:106,000 个提示,逐点(pointwise)标注为”安全/不安全”。
- 对整个回答打分,包括推理过程——检测推理中途出现的有害内容。
阶段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 2024 | MATH-500 | LiveCodeBench |
|---|---|---|---|
| R1-Distill-Qwen-1.5B | 28.9% | 83.9% | 34.1% |
| R1-Distill-Qwen-7B | 55.5% | 92.8% | 54.9% |
| R1-Distill-Qwen-14B | 69.7% | 93.9% | 64.7% |
| R1-Distill-Qwen-32B | 72.6% | 94.3% | 69.4% |
| R1-Distill-Llama-8B | 50.4% | 89.1% | 48.9% |
| R1-Distill-Llama-70B | 70.0% | 94.5% | 65.7% |
| DeepSeek-R1(671B) | 79.8% | 97.3% | 65.9% |
| OpenAI o1-mini | 63.6% | 90.0% | 53.8% |
| OpenAI o1 | 74.3% | 96.4% | 63.4% |
1.5B 模型在多个任务上已经匹敌 QwQ-32B(专用 32B 推理模型)。70B 模型与 OpenAI o1 竞争,参数量仅是 R1 的约 1/10。
为什么蒸馏优于小模型直接 RL?
对 7B 模型直接用 GRPO 从头训练,效果远不如在 R1 轨迹上做 SFT。原因:
- 容量瓶颈: 小模型可能没有足够的参数容量从头发现新的推理策略,大模型已经完成了探索。
- 训练信号稀疏: 7B 模型解 AIME 题早期几乎不会成功,正奖励信号极其稀疏,RL 无从推进。R1 的轨迹提供了密集的监督信号。
- 长 CoT 能力门槛: 生成连贯的万 token 推理链需要一定的基础能力,没有引导的小模型做不到。
第五部分:实验结果与分析
主要 Benchmark
图6:DeepSeek-R1 与 SOTA 对比(主要 benchmark)
| Benchmark | R1-Zero | R1 | o1-0912 | o1-mini | GPT-4o |
|---|---|---|---|---|---|
| AIME 2024 (Pass@1) | 77.9 | 79.8 | 74.3 | 63.6 | 9.3 |
| MATH-500 (Pass@1) | 95.9 | 97.3 | 96.4 | 90.0 | 76.6 |
| GPQA Diamond | 75.8 | 71.5 | 77.3 | 60.0 | 53.6 |
| LiveCodeBench | 50.0 | 65.9 | 63.4 | 53.8 | 33.4 |
| Codeforces Rating | 1444 | 2029 | 1891 | 1820 | 759 |
| MMLU | 88.8 | 90.8 | 92.3 | 85.2 | 87.2 |
| AlpacaEval2 (LC) | 24.7 | 87.6 | — | — | 57.5 |
关键观察:
- R1-Zero 已经很强,但通用任务(AlpacaEval 24.7%)偏弱。
- R1 的四阶段流水线在不损失数学和代码能力的同时,大幅修复了通用任务(AlpacaEval 87.6%)。
- R1 在 Codeforces 上达到 ELO 2029——超过人类前 3% 参赛者。
阶段间消融
各阶段提升的贡献(对比 Dev1 vs Dev2 vs Dev3 vs R1):
表:各中间 checkpoint 的关键指标
| R1-Zero | Dev1 | Dev2 | Dev3 | R1 | |
|---|---|---|---|---|---|
| AIME 2024 | 77.9 | 59.0 | 74.0 | 78.1 | 79.8 |
| IF-Eval | 46.6 | 71.7 | 72.0 | 78.1 | 83.3 |
| AlpacaEval2 | 24.7 | 50.1 | 55.8 | 62.1 | 87.6 |
| Aider-Polyglot | 12.2 | 6.7 | 25.6 | 44.8 | 53.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 支持:
- 多数投票(cons@N): 生成 N 个回答,取多数答案。从 N=1 到 N=16,AIME 2024 从 79.8% 提升到 87.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)显示,默认 的 PPO 表现显著差于 GRPO。仔细调参()可以接近 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 所展示的能力上限。
第七部分:局限性与开放问题
论文对局限性的诚实程度令人印象深刻:
-
结构化输出和工具调用: R1 目前无法在推理过程中可靠调用外部工具,这是与智能体系统相比的主要差距。
-
Token 效率/”过度思考”: R1 对简单问题有时也会生成远多于必要的 token。RL 目标对长度没有惩罚(正确就有满分奖励),模型没有激励去”想简洁”。
-
语言混合: 模型针对中文和英文优化,其他语言可能触发混用。
-
提示敏感性: Few-shot 提示一致性地降低性能。R1 针对零样本使用设计。
-
软件工程任务: 运行代码测试套件的漫长评估时间使大规模 RL 不切实际,R1 在软件工程 benchmark 上相对 DeepSeek-V3 提升有限。
-
奖励黑客: 需要分阶段管理,偏好 RM 阶段4 超过 400 步就发生黑客攻击。
-
安全性: 不加风险控制层的情况下,安全性处于”中等水平”(与 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 中,优势函数定义为:
其中 是动作价值函数(在状态 下采取动作 的期望回报), 是状态价值函数(基线)。
在 LLM 设置中,“状态”是问题 和部分输出,“动作”是整个输出 (因为奖励只在结尾获得)。于是:
其中 是只依赖问题的基线(不依赖具体输出)。我们需要 ,使得优势在期望意义下为零均值。
GRPO 的选择: — 组内经验均值。
无偏性:
其中 是问题 的期望奖励。
除以 是方差归一化——不改变梯度方向,只标准化幅度,使不同问题之间的有效学习率一致。
方差分析: 组均值估计器的方差是 。 时方差降低 16 倍,GRPO 显著比 REINFORCE 更稳定。
A.2 KL 散度估计器的非负性证明
GRPO 使用的估计器:
令 ,则 。
设 ,则 ,唯一驻点 。
对所有 成立,故 是全局极小值。。
因此 ,等号当且仅当 时成立。∎
为什么用这个估计器而不是标准 KL? 标准 KL 需要从 采样或计算重要性权重。Schulman 估计器只需要在 的样本上评估 ,计算代价低。
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 要求:
对于 (第一个 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):
- 用人类示范做 SFT
- 用人类偏好对比对训练奖励模型
- 用 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 上同样有效。 的大裁剪比让奖励信号能跨越数万 token 的推理链传播。
训练方案层面(四阶段流水线): 冷启动 SFT → RL 阶段1(推理聚焦)→ 拒绝采样 SFT(混合数据)→ RL 阶段2(多样性 + 偏好)。每个阶段解决上一个阶段的遗留问题(可读性 → 推理能力 → 通用能力 → 人类对齐)。
系统洞察(蒸馏效率): 大模型生成轨迹 + 过滤 + 小模型 SFT,比对小模型直接做 RL 高效得多。1.5B 蒸馏模型可以匹敌 QwQ-32B;70B 蒸馏模型与 o1 竞争。
最深层的贡献:证明了 RL 可以发现真正新颖的推理策略——“灵光一现”现象和有机增长的回答长度是实证证据,说明 RL 在做新事情,不只是精炼 SFT 已经提供的内容。