9.4 DeepSeek-R1 与 DAPO——纯 RL 训练的新范式
上一节我们理解了 GRPO 的组内归一化机制——用组内均值和标准差替代 Critic,巧妙地省掉了一个完整的模型。这一节我们把视野拉大,看看 2025 年 RL 领域最令人兴奋的两个突破:DeepSeek-R1-Zero 证明了纯 RL 可以不需要 SFT,DAPO 进一步优化了 GRPO 的工程效率。
DeepSeek-R1-Zero:打破"SFT 是必须的"铁律
在 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 只是"激活"了它。
R1-Zero 的局限与工程妥协
虽然 R1-Zero 证明了纯 RL 的可行性,但它有一个明显的缺陷:语言质量差。因为没有经过 SFT,模型的回答经常语言混杂(中英混用)、格式混乱、可读性差。虽然推理能力很强,但回答看起来像"天才但不会表达的学渣"。
因此,最终发布的 DeepSeek-R1 采用了多阶段的工程妥协流程:
- 冷启动:少量高质量 SFT 数据(让模型学会基本的输出格式)
- 大规模 GRPO:强化推理能力(这是核心阶段)
- 拒绝采样:从 GRPO 训练后的模型中筛选高质量数据
- SFT 精调:用筛选出的数据进一步优化格式和语言质量
- 二次 RL:结合 RM 和 GRPO 做最终的对齐训练
DAPO:GRPO 的下一代演进
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 是好的、哪些是坏的",实现更精细的信用分配。这和第 6 章讨论的信用分配问题直接对应——在长序列中,我们需要知道每个 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。