第 16 章 第四部分:RL 数据

推理模型的 RL 数据——新范式

DeepSeek-R1 启示、可验证奖励与推理数据构造

推理模型 R1 可验证奖励 GRPO

“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 作为推理能力训练的标准方案。

维度RLHFRLVR
奖励来源人类标注 → 奖励模型规则/程序自动验证
标注成本高(每轮迭代都需要新标注)零(验证器是确定性的)
信号质量受标注者噪声和偏差影响无噪声(对/错是确定的)
可扩展性受限于标注产能受限于算力
适用范围所有任务(含主观任务)有明确正确答案的任务
数据瓶颈偏好标注高质量题库
典型代表InstructGPT, ClaudeDeepSeek-R1, DAPO

RLVR 的端到端数据流程:题库 → 在线采样 → 规则验证 → 梯度更新。整个循环中没有任何人类参与,数据瓶颈从”标注产能”完全转化为”算力和题库规模”。

适用范围与局限

可验证奖励适用的场景:
  ✅ 数学推理(有标准答案)
  ✅ 代码生成(有测试用例)
  ✅ 逻辑推理(可形式化验证)
  ✅ 棋类/游戏(有明确胜负)

正在拓展的场景:
  🔄 通用推理(Apriel-Reasoner, 2026.04——多任务可验证奖励设计)
  🔄 多步 Agent 任务(环境反馈作为验证信号)

仍不适用的场景:
  ❌ 创意写作(什么是"好"的创意?)
  ❌ 对话质量("有帮助"很难量化)
  ❌ 安全对齐("无害"的边界模糊)

→ 实际的 RL 训练通常混合使用:
   - 可验证任务用 RLVR
   - 主观任务用 RLHF
   DeepSeek-R1 的完整训练正是这一混合策略

验证器本身的局限

RLVR 假设验证器是完美的,但现实中并非如此:

  • 数学边界情况:等价但形式不同的答案(如 2/2\sqrt{2}/2 与 1/21/\sqrt{2})可能被误判
  • 代码测试覆盖不完整:测试用例无法覆盖所有 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 仍然显著提升推理能力

两种解释假说:

  1. 策略正则化假说:RLVR 训练的主要作用是防止策略坍塌——类似于探索正则化。奖励信号仅作为”训练信号存在”的标记而非质量信号,防止模型在 SFT 后的分布上过度自信地收敛
  2. 探索激励假说: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%—

三个关键发现:

  1. 粒度是比质量更强的一阶效应。Spurious Rewards 中正确 vs 随机奖励差距仅 2pp(+27% vs +25%),而过程 vs 结果差距达 10pp——粒度的影响是质量的 5 倍。

  2. 混合权重存在”危险区”。λ=0.1(少量过程+大量结果)的配置劣于纯结果奖励。两种奖励信号在优化方向上存在冲突:过程奖励鼓励”一步一步来”,结果奖励鼓励”快速到答案”。低过程权重时模型接收到矛盾信号。

  3. 错误模式质性不同。过程模型犯的是”结构不一致但算术正确”的错误,结果模型犯的是”简洁但推导错误多”的错误。前者更容易通过增加推理预算修复,后者需要根本性的推理能力提升。

对数据工程的影响:

  • 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 的”环境设计”范式完全吻合。


本章要点回顾

  1. DeepSeek-R1 证明了纯 RL 可以训练出推理能力——这是范式级的转变
  2. GRPO 消除了单独奖励模型的需求,用组内相对排名提供信号
  3. DAPO 四大技术(Clip-Higher / Dynamic Sampling / Token-level PG / Overlong Shaping)全面超越 GRPO,训练效率提升约 50%
  4. RLVR 已从”奖励类型”升级为”独立范式”——与 RLHF 并列,适用于所有有明确正确答案的任务
  5. 可验证奖励是关键突破——在数学/代码上可以生成无限训练信号,瓶颈从标注转为算力
  6. 验证器并非完美——边界情况误判、测试覆盖不完整、reward hacking 都需要去偏校正
  7. 难度控制至关重要:solve rate 20-50% 是最佳学习区,Dynamic Sampling 让这一控制自动化
  8. On-policy 数据远优于 off-policy——RL 训练的数据必须”新鲜”
  9. RISE 自验证 + SPICE 自博弈正在构建完全无人参与的自适应训练循环
  10. 五代演进的主线:每一代去掉一个外部依赖——SFT → Critic → 人类标注 → 静态题库

🛠 动手环节

练习 1:构造可验证奖励

为 GSM8K 中的 10 道题设计奖励函数:

  • 支持数值答案和分数答案
  • 处理等价表示(如 1/2 = 0.5 = 50%)

练习 2:分析 GRPO 的采样效率

对同一道题采样 16 次,记录:

  • 有多少次正确?(solve rate)
  • 正确和错误回复之间的差异在哪里?
  • 这个 solve rate 是否在”最佳学习区”内?