9.4 DeepSeek-R1 与 DAPO——纯 RL 训练的新范式
上一节我们理解了 GRPO 的组内归一化机制——用组内均值和标准差替代 Critic,巧妙地省掉了一个完整的模型。这一节我们把视野拉大,看看 2025 年 RL 领域最令人兴奋的两个突破:DeepSeek-R1-Zero 证明了纯 RL 可以不需要 SFT,DAPO 进一步优化了 GRPO 的工程效率。
DeepSeek-R1-Zero
在 DeepSeek-R1 之前,大模型对齐领域有一个几乎没人质疑的铁律:Base 模型必须先做 SFT(学会说人话),然后才能做 RL。原因很简单——如果你让一个未经 SFT 的基础模型直接做 RL,它的输出可能是语言混杂、格式混乱的"乱码",RL 训练无从下手。
2025 年 1 月,DeepSeek 团队发表了一篇震动整个 AI 界的论文。他们发现:在拥有明确客观规则奖励(如数学答案匹配、代码编译通过)的领域,完全不需要 SFT 进行冷启动。直接让 Base 模型进行大规模 GRPO 训练是可行的。这个发现催生了 DeepSeek-R1-Zero——一个完全没有经过 SFT 的纯 RL 训练模型。
为什么这个发现如此重要?因为在 RLHF 的传统认知中,SFT 被认为是 RL 训练的前提条件。逻辑是这样的:Base 模型只会"续写文本",不会"回答问题"。如果你直接对 Base 模型做 RL,它生成的输出可能根本不像一个合理的回答,RM 也无从打分。所以必须先用 SFT 教会它基本的对话格式,然后再做 RL 优化回答质量。
但 DeepSeek-R1-Zero 打破了这个认知。当奖励是规则验证的(答对就给分,答错就不给分),模型不需要先学会"怎么回答"——它只需要通过大量试错,找到能拿高分的输出模式。即使初始输出很混乱,只要偶尔有一次答对了拿到奖励,RL 就会强化那条路径。经过足够的训练步数,模型会自己"摸索"出清晰的推理格式。
涌现与顿悟
R1-Zero 训练过程中最令人震惊的发现是涌现行为(Emergence)。模型在没有任何人类示范的情况下,自主发展出了以下能力:
- 长思维链(Chain-of-Thought):模型从最初的"直接给答案"逐渐演变成"先分析问题、列公式、一步步计算",没有人教它这样做
- 自我反思:当答案错误时,模型学会了回过头检查自己的推理过程,发现并纠正错误
- 策略切换:面对不同类型的题目,模型会自动选择不同的解题策略
这些能力不是人工设计的,而是模型为了拿到更高的规则奖励自己"领悟"出来的。DeepSeek 团队称之为 "Aha Moment"(顿悟时刻)——训练到某个阶段,模型突然"开窍"了,开始表现出之前从未展现过的推理能力。
更具体地说,DeepSeek 观察到以下涌现时间线:
- 训练早期(0-100 步):模型输出简短混乱,经常直接给一个错误的数字答案
- 训练中期(100-500 步):模型开始出现简单的计算步骤,但经常中途算错
- 顿悟时刻(约 500-1000 步):模型突然开始检查自己的计算,出现"等等,让我重新算一下"的行为
- 训练后期(1000+ 步):模型形成了稳定的"分析→计算→验证"三步推理模式
这种涌现行为引出了一个深层的科学问题:模型的推理能力是从哪里来的? 答案很可能是:预训练阶段已经赋予了模型推理的"原材料"(逻辑、数学、语言知识),RL 训练只是把这些原材料"组织"成可用的解题策略。这也解释了为什么 1-Shot RLVR 就能工作——模型本身就有推理能力,RL 只是"激活"了它。
开源复现实验:SimpleRL-reason
看到这里,学习者很自然会问:R1-Zero 这种现象,是不是只有 DeepSeek 的大规模模型和训练系统才能观察到?如果我们换成开源 base model,只用更小的数据和公开训练框架,还能不能看到"不用 SFT、只靠 RL 激活推理"?
SimpleRL-reason 和后续论文 SimpleRL-Zoo 正是在回答这个问题。它们不是提出一个全新的策略优化算法,而是把 R1-Zero 的关键假设缩小成一个更容易研究的实验场:从 base model 出发,不做 SFT,不训练 Reward Model,只用可验证数学题和规则奖励做强化学习。
先看它的训练闭环:
数学题 x
→ base model 生成解题过程 y
→ 从 y 中提取最终答案
→ 与标准答案比较
→ 得到 0/1 规则奖励
→ 用 PPO / RL 更新模型这和 R1-Zero 的精神是一致的:奖励不是来自人工偏好,也不是来自 RM,而是来自客观答案验证。SimpleRL-reason 的早期实现基于 OpenRLHF,使用 Ray 做分布式调度、vLLM 做高效采样;论文 SimpleRL-Zoo 进一步把观察范围扩展到多个模型家族和尺寸,例如 Llama、Mistral、DeepSeek-Math、Qwen2.5-Math 以及不同规模的 Qwen2.5 模型。
这个案例的教学价值在于,它把"纯 RL 是否可行"拆成了更具体的几个问题:
| 问题 | SimpleRL-Zoo 让我们观察什么 |
|---|---|
| base model 是否足够重要? | 不同模型家族的 zero RL 起点和上限差异很大 |
| 数据量是不是越多越好? | 少量高质量、可验证数学题也能产生明显训练信号 |
| 变长思维链是否等于推理变强? | 响应长度、正确率和自我验证行为需要分开看 |
| "简单配方"是否真的简单? | 奖励形式简单,但分布式采样、长度控制和评估仍然是工程关键 |
因此,SimpleRL-reason 更适合被理解为 R1-Zero 的开源参照实验,而不是一个独立的新章节。它告诉我们:zero RL 不是一句口号,也不是只能在闭源大系统里发生;只要 base model 已经有潜在能力,任务又能提供稳定的可验证奖励,RL 就有机会把这些潜在能力组织成更可靠的解题策略。
不过也要把边界说清楚。SimpleRL-reason 中的"simple"主要指训练信号和配方简单,不代表硬件成本可以忽略。公开复现实验仍然依赖多卡训练、并行 rollout 和标准评测集。换句话说,它证明的是 R1-Zero 思想可以被开源化、实验化,而不是说写一个答案匹配函数就能在个人电脑上复现完整推理涌现。
R1-Zero 的局限与工程妥协
虽然 R1-Zero 证明了纯 RL 的可行性,但它有一个明显的缺陷:语言质量差。因为没有经过 SFT,模型的回答经常语言混杂(中英混用)、格式混乱、可读性差。虽然推理能力很强,但回答看起来像"天才但不会表达的学渣"。
因此,最终发布的 DeepSeek-R1 采用了多阶段的工程妥协流程:
- 冷启动:少量高质量 SFT 数据(让模型学会基本的输出格式)
- 大规模 GRPO:强化推理能力(这是核心阶段)
- 拒绝采样:从 GRPO 训练后的模型中筛选高质量数据
- SFT 精调:用筛选出的数据进一步优化格式和语言质量
- 二次 RL:结合 RM 和 GRPO 做最终的对齐训练
DAPO
GRPO 已经证明了"不需要 Critic 也能做 RL",但它仍有几个工程痛点。DAPO(Decoupled Clip and Dynamic Sampling Policy Optimization)针对性地解决了这些问题,被 NeurIPS 2025 接收为 poster。
DAPO 的四大改进
| 改进 | GRPO 的问题 | DAPO 的解法 | 效果 |
|---|---|---|---|
| Clip-Higher | 上下对称裁剪,低概率动作被过度抑制 | 解耦裁剪范围,给低概率动作更多上升空间 | 更好的探索 |
| 动态采样 | 所有 prompt 都参与训练,浪费算力 | 过滤掉模型已经答对的 prompt | 训练效率提升 2-3x |
| Token 级损失 | 序列级 reward 归一化,忽略 token 间差异 | Token 级策略梯度,更精细的信用分配 | 更好的长序列训练 |
| Overlong Reward Shaping | 过长回答被直接截断惩罚,梯度信号不连续 | 平滑的长度惩罚函数 | 训练更稳定 |
Clip-Higher 的直觉是这样的:GRPO 对策略比率的上下界做对称裁剪(比如 ),这对于已经比较确定的高概率动作来说合理。但对于那些当前概率很低(比如 0.01)但有潜力的动作,0.8 的下限意味着它最多被降到 0.008——几乎被彻底压制了。DAPO 解耦了上下界的裁剪范围,给低概率动作更多的上升空间。
动态采样解决的是"毕业问题"。我们在上一节观察到,训练后期很多题目的组内方差接近零(模型已经全会了),这些题目不会提供任何梯度信号。DAPO 直接过滤掉这些"毕业题",只保留有梯度信号的 prompt。在 AIME 2024 数学竞赛上,DAPO 用 DeepSeek-R1 一半的训练步数就达到了 50 分。
Token 级损失则解决了 GRPO 的另一个盲区。标准的 GRPO 对整个序列做归一化:一个回答要么全被强化(答对了),要么全被抑制(答错了)。但实际上,一个答错的回答中,可能前 80% 的推理步骤是正确的,只是最后一步计算错误。Token 级损失让 GRPO 能够区分"哪些 token 是好的、哪些是坏的",实现更精细的信用分配。这和第 7 章 GAE讨论的信用分配问题直接对应——在长序列中,我们需要知道每个 token 对最终结果的贡献度。
Overlong Reward Shaping 解决的是 GRPO 训练中常见的一个工程问题:回答长度失控。模型可能学会"写得越多越好"(因为更长的回答更容易包含正确推理),导致生成 2000+ token 的冗长回答。GRPO 的原始做法是设定最大长度,超过就截断并给惩罚。但截断是硬边界——回答 499 token 没事,501 token 就被惩罚——梯度信号不连续。DAPO 用一个平滑的长度惩罚函数替代硬截断,让模型自然地学会控制回答长度。
# ==========================================
# DAPO 动态采样示意
# ==========================================
def dynamic_sampling(prompts, model, reward_fn, threshold=0.95):
"""
过滤掉模型已经掌握的 prompt
"""
useful_prompts = []
for prompt in prompts:
# 对每个 prompt 采样多次,计算正确率
correct_count = 0
num_samples = 8
for _ in range(num_samples):
response = model.generate(prompt)
reward = reward_fn(prompt, response)
if reward >= 1.0: # 答案正确
correct_count += 1
accuracy = correct_count / num_samples
# 只保留正确率低于阈值的 prompt(还没掌握的)
if accuracy < threshold:
useful_prompts.append(prompt)
print(f"过滤前: {len(prompts)} 题")
print(f"过滤后: {len(useful_prompts)} 题")
print(f"过滤掉: {len(prompts) - len(useful_prompts)} 题(已掌握)")
return useful_promptsDeepSeek-R1-Zero 和 DAPO 展示了纯 RL 训练的巨大潜力——不需要 SFT,不需要 Critic,只要奖励信号足够清晰。但这里有一个前提:奖励从哪里来? 下一节我们就来看 RLVR——如何用可验证奖励彻底取代 Reward Model。