章节导航 第 16 章 / 共 23 章
推理模型的 RL 数据——新范式
DeepSeek-R1 启示、可验证奖励与推理数据构造
“The most exciting phrase to hear in science, the one that heralds new discoveries, is not ‘Eureka!’ but ‘That’s funny…’” ——Isaac Asimov
DeepSeek-R1 的”aha moment”——模型自发地学会了反思和自我纠正——正是这样一个”That’s funny”时刻。
16.1 DeepSeek-R1 的启示
纯 RL 训练出推理能力的里程碑
2025 年 1 月,DeepSeek 发布了 R1 系列模型,其中 DeepSeek-R1-Zero 是一个里程碑:它仅通过强化学习(无 SFT warm-start)就获得了强大的推理能力。
DeepSeek-R1-Zero 的训练过程:
基座模型(DeepSeek-V3-Base)
↓
直接进入 RL 训练
├── 算法:GRPO(Group Relative Policy Optimization)
├── 数据:数学+代码推理题(含可验证答案)
├── 奖励:基于答案正确性的规则奖励
└── 无 SFT 数据、无人类偏好数据
训练过程中出现的"涌现"行为:
1. 模型自发地学会了"chain of thought"推理
2. 出现了自我反思:生成 "wait, let me reconsider..."
3. 出现了"aha moment":模型发现自己之前的错误并修正
GRPO 算法对数据的要求
GRPO 的核心是不需要独立的奖励模型,而是用”组内相对排名”来提供学习信号:
"""
GRPO 的数据流程(简化)
"""
def grpo_data_pipeline(
prompt: str, # 推理问题
model, # 当前策略模型
reward_fn, # 奖励函数(如答案正确性)
group_size: int = 16, # 每组采样数量
) -> dict:
"""
GRPO 的一次数据生成循环
"""
# Step 1: 对同一个 prompt,采样 group_size 个回复
responses = []
for _ in range(group_size):
response = model.generate(prompt, temperature=1.0)
responses.append(response)
# Step 2: 对每个回复计算奖励
rewards = [reward_fn(prompt, r) for r in responses]
# Step 3: 计算组内相对优势
mean_reward = sum(rewards) / len(rewards)
std_reward = max(np.std(rewards), 1e-8)
advantages = [(r - mean_reward) / std_reward for r in rewards]
# Step 4: 高于平均的回复被"鼓励",低于平均的被"抑制"
training_pairs = []
for response, advantage in zip(responses, advantages):
training_pairs.append({
"prompt": prompt,
"response": response,
"advantage": advantage,
})
return {
"prompt": prompt,
"pairs": training_pairs,
"group_stats": {
"mean_reward": mean_reward,
"max_reward": max(rewards),
"min_reward": min(rewards),
"solve_rate": sum(1 for r in rewards if r > 0) / group_size,
},
}
从 GRPO 到 DAPO:四大技术跃迁
GRPO 奠定了”无需独立 Critic 模型”的基础,但它在实际大规模训练中暴露了若干瓶颈——熵坍缩(策略过早收敛到少数模式)、长序列梯度稀释、以及对无效 batch 的计算浪费。2025 年 3 月,字节跳动与清华联合提出的 DAPO(NeurIPS 2025)在 GRPO 之上做了四项关键改进:
| 技术 | 解决的问题 | 核心思路 | 数据层面的意义 |
|---|---|---|---|
| Clip-Higher | 熵坍缩 | 对概率提升方向设置更高的裁剪上界,保持策略多样性 | 允许模型在更多元的推理路径上探索,间接扩大了有效数据空间 |
| Dynamic Sampling | 无信息量 batch | 自动过滤全对/全错的 prompt(solve rate 为 0% 或 100%),只保留有梯度信号的 batch | 隐式实现了 16.3 节所描述的”最佳 solve rate”课程调度——无需人工设定难度梯度 |
| Token-level PG Loss | 长 CoT 梯度稀释 | 将策略梯度从回复级改为 token 级,每个 token 都获得梯度信号 | 长推理链(数百步)的每一步都参与学习,数据利用率大幅提升 |
| Overlong Reward Shaping | 超长响应 | 对超出长度限制的响应施加软惩罚(而非截断),引导模型学会在有限长度内完成推理 | 减少因截断产生的无效样本,提高数据效率 |
实验结果:DAPO 将 Qwen2.5-32B 在 AIME 2024 上训练至 50 分,训练步数比 R1-Zero 方案减少约 50%。目前 Qwen、Nemotron 等生产模型已采用类似技术。
DAPO 最重要的工程启示是 Dynamic Sampling——它让难度控制从一个需要预先设计的静态参数(配比 20/45/30/5%)变成了训练过程中的自适应行为。后续 16.3 节会回到这个话题。
DAPO 的 Dynamic Sampling 通过丢弃退化组解决方差坍缩。DBB 奖励估计(KAIST, 2026)提供了一种互补方案——不丢弃 prompt,而是用折扣 Beta-Bernoulli 估计改进优势计算的统计质量,使更多 prompt 产生有效训练信号。两者可叠加:DBB 减少需要丢弃的 prompt 数量,Dynamic Sampling 兜底处理 DBB 也救不了的极端情况。GRPO+DBB 在 1.7B/8B 模型上的 Acc@8 平均提升为:in-distribution 3.43/2.32 点,out-of-distribution 10.05/8.34 点。⚠️ 该组数字取自论文 v2(2026-05-23);v1(2026-03-19)报告的是 3.22/2.42 与 12.49/6.92,v2 对实验结果做了修订,且 arXiv 摘要页的元数据仍显示 v1 数字,引用时须以正文为准。
16.2 可验证奖励与 RLVR 范式
什么是可验证奖励
可验证奖励是指可以通过规则或程序自动判断正确性的奖励信号,不需要人类标注或奖励模型。
| 任务类型 | 验证方法 | 奖励信号 | 可靠性 |
|---|---|---|---|
| 数学题 | 比较最终答案 | 答案正确 +1,错误 -1 | 高 |
| 代码题 | 运行测试用例 | 全部通过 +1,部分 +0.5 | 极高 |
| 逻辑推理 | 形式化验证器 | 证明有效 +1 | 极高 |
| 翻译 | BLEU/参考答案 | 连续分数 | 中 |
| 问答 | 字符串匹配 | 匹配 +1 | 中 |
关键认知:可验证奖励消除了人类偏好标注的瓶颈。在数学和代码领域,你可以生成几乎无限量的训练信号——只需要有足够的题目和正确答案。
RLVR:从”奖励类型”到”独立范式”
可验证奖励最初只是奖励信号的一种选择,但到 2026 年,围绕它构建的训练范式——RLVR(Reinforcement Learning with Verifiable Rewards)——已经成为与 RLHF 并列的独立技术路线。所有主要实验室(DeepSeek、NVIDIA、Google、OpenAI)都将 RLVR 作为推理能力训练的标准方案。
| 维度 | RLHF | RLVR |
|---|---|---|
| 奖励来源 | 人类标注 → 奖励模型 | 规则/程序自动验证 |
| 标注成本 | 高(每轮迭代都需要新标注) | 零(验证器是确定性的) |
| 信号质量 | 受标注者噪声和偏差影响 | 无噪声(对/错是确定的) |
| 可扩展性 | 受限于标注产能 | 受限于算力 |
| 适用范围 | 所有任务(含主观任务) | 有明确正确答案的任务 |
| 数据瓶颈 | 偏好标注 | 高质量题库 |
| 典型代表 | InstructGPT, Claude | DeepSeek-R1, DAPO |
RLVR 的端到端数据流程:题库 → 在线采样 → 规则验证 → 梯度更新。整个循环中没有任何人类参与,数据瓶颈从”标注产能”完全转化为”算力和题库规模”。
适用范围与局限
可验证奖励适用的场景:
✅ 数学推理(有标准答案)
✅ 代码生成(有测试用例)
✅ 逻辑推理(可形式化验证)
✅ 棋类/游戏(有明确胜负)
正在拓展的场景:
🔄 通用推理(Apriel-Reasoner, 2026.04——多任务可验证奖励设计)
🔄 多步 Agent 任务(环境反馈作为验证信号)
仍不适用的场景:
❌ 创意写作(什么是"好"的创意?)
❌ 对话质量("有帮助"很难量化)
❌ 安全对齐("无害"的边界模糊)
→ 实际的 RL 训练通常混合使用:
- 可验证任务用 RLVR
- 主观任务用 RLHF
DeepSeek-R1 的完整训练正是这一混合策略
验证器本身的局限
RLVR 假设验证器是完美的,但现实中并非如此:
- 数学边界情况:等价但形式不同的答案(如 与 )可能被误判
- 代码测试覆盖不完整:测试用例无法覆盖所有 edge case,模型可能学会”通过测试但逻辑有缺陷”的捷径
- 回吐验证器漏洞:模型可能发现验证器的假阳性模式,产生 reward hacking
针对噪声验证器的去偏校正已成为一个活跃的研究方向。核心思路是:在 RL 训练中显式建模验证器的错误率,并在梯度更新中做相应补偿——类似于带噪声标签学习中的 loss correction 技术。
16.3 推理数据的构造
数学推理数据的难度梯度
难度级别设计:
Level 1: 基础运算和简单应用
- GSM8K 级别(小学数学)
- 只需 2-4 步推理
- 用途:warm-up,建立基础推理习惯
Level 2: 中等数学
- MATH 数据集中的中低难度
- 需要 4-8 步推理
- 涉及代数、几何基础
- 用途:主体训练数据
Level 3: 竞赛预备
- AMC/AIME 级别
- 需要 8-15 步推理
- 需要组合不同数学工具
- 用途:提升上限
Level 4: 竞赛级
- IMO/Putnam 级别
- 需要深度证明和创造性思考
- 用途:少量使用,推动极限
推荐配比:
Level 1: 20% | Level 2: 45% | Level 3: 30% | Level 4: 5%
代码推理数据的粒度
函数级 → 文件级 → 项目级
函数级:
"实现一个函数,判断一棵二叉树是否是 BST"
验证:10-20 个测试用例
适用:基础代码能力
文件级:
"实现一个 LRU 缓存类,支持 get/put/delete,线程安全"
验证:完整的单元测试套件
适用:模块设计能力
项目级:
"实现一个简单的 key-value 数据库,支持持久化和并发访问"
验证:集成测试 + 性能测试
适用:系统设计能力(当前最难)
难度控制
RL 训练对难度非常敏感:
太简单(模型 solve rate > 90%):
→ 梯度信号太弱,学不到东西
→ 浪费计算资源
太难(模型 solve rate < 5%):
→ 几乎所有采样都是失败的
→ 无法产生有效的正向信号
→ 可能导致训练不稳定
最佳难度(solve rate 20-50%):
→ 足够的正向信号来学习
→ 足够的挑战来提升能力
→ 组内差异大,GRPO 梯度信号强
启动方案——静态配比:如果你刚开始搭建 RL 训练管线,Level 1-4 按 20/45/30/5% 配比是合理的起点。它足够简单,且在多数场景下表现不差。
进阶方案——自适应机制:静态配比的问题在于,随着模型能力提升,固定难度分布会逐渐偏离”最佳学习区”。DAPO 的 Dynamic Sampling 提供了一个优雅的解决方案:直接过滤掉 solve rate 为 0% 或 100% 的 prompt,让训练自动聚焦在有信息量的数据上。 实验表明,这种自适应机制比任何人工设定的固定配比都更高效——DAPO 的训练步数比 R1-Zero 减少约 50%。
2026 年的 ICLR 研究进一步量化了数据效率:通过课程策略和数据选择的组合,RLVR 训练可以在使用显著更少的题目的情况下达到相当甚至更好的性能。这意味着 RL 数据的瓶颈不在量,而在”信息密度”——每道题在当前模型能力边界上能提供多少梯度信号。
RLVR 奖励信号的有效性危机
上述讨论隐含一个关键假设:奖励信号的质量决定 RLVR 的训练效果。但 2025 年的 Spurious Rewards 研究严重动摇了这一根基。
在 Qwen2.5-Math 模型上,研究者使用完全随机奖励、错误奖励(将正确答案标为错误)甚至恒定奖励进行 RLVR 训练,仍然在 MATH-500 上获得 21-25% 的显著提升。这不是微小的统计波动——随机奖励的效果竟然接近精心设计的一致性奖励。
Spurious Rewards 实验结果:
奖励类型 MATH-500 提升
正确奖励(标准 RLVR) +27%
随机奖励(均匀随机) +25%
错误奖励(正确标为错误) +21%
恒定奖励(所有样本相同) +18%
→ 即使奖励信号完全错误,RLVR 仍然显著提升推理能力
两种解释假说:
- 策略正则化假说:RLVR 训练的主要作用是防止策略坍塌——类似于探索正则化。奖励信号仅作为”训练信号存在”的标记而非质量信号,防止模型在 SFT 后的分布上过度自信地收敛
- 探索激励假说:RLVR 训练增加了输出多样性,让模型接触到更多推理路径。模型不是通过奖励选择最优路径,而是通过更广泛的探索”碰巧”发现了更好的推理方式
对推理 RL 数据工程的影响:
- 数据质量投入的边际收益需重新评估——在强基座模型上,随机奖励都能起正则化作用
- 可能需要将重心从”奖励信号质量”转向”训练动态设计”(如探索策略/正则化强度)
- Spurious Rewards 不意味着奖励质量无关——在弱基座上仍需质量信号,且随机奖励的效果仍低于正确奖励
奖励粒度:与奖励质量正交的关键维度
Spurious Rewards 揭示了奖励质量(正确 vs 随机)的边际收益可能低于预期。最新研究(2026-07)从另一个正交维度——奖励粒度(过程 vs 结果)——给出了不同的图景:
实验设计:Qwen2.5-0.5B + GSM8K + GRPO,5 种奖励配置
| 配置 | Test Accuracy | 差距 |
|---|---|---|
| 纯过程奖励 | 63.73% | — |
| 纯结果奖励 | 53.75% | -9.98pp |
| 混合 (λ=0.9 过程) | 61.03% | -2.70pp |
| 混合 (λ=0.5) | 58.23% | -5.50pp |
| 混合 (λ=0.1 过程) | 50.12% | -13.61pp ⚠️ |
| 无 RL 基线 | ~48% | — |
三个关键发现:
-
粒度是比质量更强的一阶效应。Spurious Rewards 中正确 vs 随机奖励差距仅 2pp(+27% vs +25%),而过程 vs 结果差距达 10pp——粒度的影响是质量的 5 倍。
-
混合权重存在”危险区”。λ=0.1(少量过程+大量结果)的配置劣于纯结果奖励。两种奖励信号在优化方向上存在冲突:过程奖励鼓励”一步一步来”,结果奖励鼓励”快速到答案”。低过程权重时模型接收到矛盾信号。
-
错误模式质性不同。过程模型犯的是”结构不一致但算术正确”的错误,结果模型犯的是”简洁但推导错误多”的错误。前者更容易通过增加推理预算修复,后者需要根本性的推理能力提升。
对数据工程的影响:
- RLVR 数据工程需要同时考虑”奖励准确性”和”奖励粒度”两个维度
- 如果预算有限:优先投入过程级奖励信号(如中间步骤验证),而非追求完美奖励质量
- 混合奖励需要谨慎调参——存在性能坍塌的”危险区”
程序化无限环境:从静态数据集到环境设计
上述难度控制讨论都基于静态数据集(AIME/MATH/GSM8K 等),但静态数据集有两个根本局限:(1) 数量有限,RLVR 训练很快过拟合;(2) 难度分布固定,无法跟随模型能力自适应调整。
Reasoning Gym引入了”程序化无限环境”范式——每个训练环境都是程序化生成的,可调整难度和分布,从根本上解决了过拟合和难度适配问题。
静态数据集 vs 程序化无限环境:
静态数据集(AIME/MATH/GSM8K):
数量:有限(数千至数万题)
难度:固定分布
过拟合风险:高(尤其 RLVR 多轮训练后)
课程学习:需人工配比或 Dynamic Sampling
程序化无限环境(Reasoning Gym):
数量:无限(程序化生成)
难度:可调(参数化控制)
过拟合风险:极低(每道题都是新的)
课程学习:天然支持(逐步调整生成参数)
覆盖领域:数学/逻辑/代码/物理等多领域
这对数据工程范式的改变是根本性的:从”筛选固定数据集”转向”设计生成规则”。数据工程师的角色从数据策展人转变为环境设计师——核心技能不再是”如何从有限数据中选出最优子集”,而是”如何设计生成规则使产出的数据持续处于模型能力边界上”。
16.4 RL 数据的在线生成与迭代
On-policy vs Off-policy
Off-policy 数据:
用旧版本的模型(或其他模型)生成的数据
优点:可以提前准备,不阻塞训练
缺点:与当前模型的分布不匹配,效果有折扣
On-policy 数据:
用当前版本的模型实时生成的数据
优点:分布完全匹配,学习效率最高
缺点:需要实时推理,增加训练复杂度
当前的共识:On-policy 数据显著优于 off-policy,特别是在 RL 训练的后期。DeepSeek-R1 采用的就是完全 on-policy 的方式。
数据新鲜度的重要性
"""
RL 训练中的数据新鲜度管理
"""
def rl_data_freshness_check(
model_version: int,
data_generated_at_version: int,
max_stale_versions: int = 3,
) -> dict:
"""
检查 RL 数据的新鲜度
"""
staleness = model_version - data_generated_at_version
status = (
"fresh" if staleness == 0 else
"acceptable" if staleness <= max_stale_versions else
"stale"
)
return {
"model_version": model_version,
"data_version": data_generated_at_version,
"staleness": staleness,
"status": status,
"recommendation": {
"fresh": "直接使用",
"acceptable": "可以使用但建议混入新数据",
"stale": "丢弃,重新生成",
}[status],
}
动态难度调整
一个高级的 RL 训练系统应该能够动态调整题目难度:
自适应难度调整:
每 N 步 → 评估当前模型在各难度级别的 solve rate
↓
Level 1 solve rate > 90%? → 降低 Level 1 比例
Level 3 solve rate < 10%? → 降低 Level 3 比例
↓
重新平衡难度分布,确保"最佳学习区"
↓
继续训练
16.5 自验证与自博弈:走向完全自主的训练循环
RLVR 解决了”谁来评判答案”,但仍然依赖人类设计的题库。2025-2026 年的两个前沿方向正在消除最后的人类依赖。
自验证(RISE)
RLVR 训练的模型会”做对题”,但不一定会”检查自己的推理”——即使最终答案正确,中间步骤可能包含逻辑跳跃或隐含错误。RISE 在同一个 RL 过程中同时训练问题求解和自我验证能力:模型不仅要生成解答,还要学会在推理过程中捕捉自身的错误。
这对数据的要求是:训练题目需要同时提供答案级验证(最终结果对不对)和过程级验证(中间步骤有没有逻辑缺陷)的信号。数学和代码领域比较容易构造这种双层验证——数学可以检查每一步推导的合理性,代码可以在中间状态插入断言。
合成自博弈(SPICE)
SPICE 框架引入了一个”Challenger-Reasoner”双角色结构:
- Challenger 从已有文档中挖掘生成推理任务(而非人工设计题目)
- Reasoner 求解这些任务
- 文档锚定防止幻觉放大——每道题都可以追溯到源文档
实验结果:数学推理 +8.9%,通用推理 +9.8%。
SPICE + RLVR 构成了一个完全无人参与的自适应训练循环:模型自己出题 → 自己解题 → 规则验证 → 梯度更新。16.4 节描述的 on-policy 数据生成是”用当前模型生成回答”,SPICE 更进一步,连题目本身也由模型生成。这是否会导致训练分布的退化(类似 Model Collapse)?目前的证据表明,文档锚定和可验证奖励的双重约束提供了足够的接地力,但长期效果仍需观察。
16.6 认知演变
推理模型 RL 数据的认知演变——五代去依赖
时间 认知 去掉了什么 2023 ”推理能力需要 CoT 数据 + SFT” — 2024.01 ”o1 证明 RL 可以产生强大的推理——但方法未公开” — 2025.01 ”DeepSeek-R1 开源证明纯 RL 也能训练出推理。关键:可验证奖励 + GRPO” 去掉 SFT warm-start 2025.03 ”DAPO 四大技术超越 GRPO。Dynamic Sampling 让难度控制全自动化” 去掉独立 Critic 模型 + 人工难度设定 2025-2026 ”RLVR 成为独立范式,与 RLHF 并列。数据瓶颈从标注转为算力” 去掉人类偏好标注 2026 ”SPICE 自博弈 + RISE 自验证 → 完全自主训练循环。模型自己出题、解题、验证” 去掉人工设计的静态题库 2026 ”Absolute Zero 零外部数据自博弈 + INTUITOR 内部置信度替代外部奖励” 去掉外部数据 + 外部信号 五代演进的主线清晰:每一代去掉一个外部依赖,从 SFT 数据、Critic 模型、人类标注、静态数据集,到最后连题目设计都交给模型自己。第六代将这一演进推向极致——不仅去掉外部数据,连外部奖励信号都去掉了。
Absolute Zero Reasoner让模型完全不需要外部训练数据(无人工标注、无预置问题),通过自博弈同时扮演”出题者”和”解题者”,在可验证域(数学/代码)的自动验证中实现自监督训练。
INTUITOR则走了另一条路:不减少外部数据,而是消除外部信号依赖——用模型自身的内部置信度作为训练信号,完全不需要外部奖励模型或验证器。它把 GRPO 中的可验证奖励直接替换为 self-certainty(模型输出分布与均匀分布之间的平均 KL 散度),其余训练流程不变。关键发现:这个纯内在信号在域内数学基准上追平了 GRPO,但在域外任务上泛化得更好——Qwen2.5-3B 在 MATH 上训练后,LiveCodeBench 相对提升 65%(GRPO 为 0),CRUXEval-O 提升 76%(GRPO 为 44%)。
两条路径的互补:Absolute Zero 消除数据依赖 + INTUITOR 消除信号依赖,两者结合可实现完全自监督推理训练。如果推理能力可以无数据、无信号地习得,“推理 RL 数据工程”的角色需从”提供训练数据”转向”设计训练环境和动态”——这与 Reasoning Gym 的”环境设计”范式完全吻合。
本章要点回顾
- DeepSeek-R1 证明了纯 RL 可以训练出推理能力——这是范式级的转变
- GRPO 消除了单独奖励模型的需求,用组内相对排名提供信号
- DAPO 四大技术(Clip-Higher / Dynamic Sampling / Token-level PG / Overlong Shaping)全面超越 GRPO,训练效率提升约 50%
- RLVR 已从”奖励类型”升级为”独立范式”——与 RLHF 并列,适用于所有有明确正确答案的任务
- 可验证奖励是关键突破——在数学/代码上可以生成无限训练信号,瓶颈从标注转为算力
- 验证器并非完美——边界情况误判、测试覆盖不完整、reward hacking 都需要去偏校正
- 难度控制至关重要:solve rate 20-50% 是最佳学习区,Dynamic Sampling 让这一控制自动化
- On-policy 数据远优于 off-policy——RL 训练的数据必须”新鲜”
- RISE 自验证 + SPICE 自博弈正在构建完全无人参与的自适应训练循环
- 五代演进的主线:每一代去掉一个外部依赖——SFT → Critic → 人类标注 → 静态题库
🛠 动手环节
练习 1:构造可验证奖励
为 GSM8K 中的 10 道题设计奖励函数:
- 支持数值答案和分数答案
- 处理等价表示(如 1/2 = 0.5 = 50%)
练习 2:分析 GRPO 的采样效率
对同一道题采样 16 次,记录:
- 有多少次正确?(solve rate)
- 正确和错误回复之间的差异在哪里?
- 这个 solve rate 是否在”最佳学习区”内?