RLVR
程序化 verifier 提供可扩展 proxy,但 coverage 决定可靠性上限
CS336 · 第 16 课
当数学答案、代码执行或形式证明可以被程序重复检查时,policy optimization 可以直接使用 verifier reward。RLVR 降低了逐条人工偏好标注的依赖,但 verifier 仍是有覆盖边界、可被利用的 proxy。
Spring 2026 官方来源:Lecture 16 PDF · 课程日程
本页是中文学习导读;讲次主题、教师与材料版本以 Stanford 官方页面和讲义为准。
本讲问题:当任务答案可以被程序、测试或形式规则验证时,奖励不必依赖主观偏好模型;新的问题转为怎样采样、比较和更新,同时避免模型利用 verifier 漏洞。
可验证任务 → rollout sampling → verifier reward → group-relative advantage → policy update → 分析 exploration、reward hacking 与泛化。
Policy 给完整 response 一个概率;rollout 是从 policy 采样的一条轨迹;verifier 把结果映射为 reward;advantage 衡量“比 baseline 好多少”。RLVR 的关键不是奖励绝对客观,而是某类结果可以低成本、可重复检查。
prompt
↓ current policy samples G responses
responses → verifier → rewards
↓ group baseline / normalization
advantages
↓ clipped / KL-regularized objective
updated policy
verifiable outcome ≠ verified reasoning path
group-relative advantage ≠ correctness probability奖励为 [1,1,0,0],均值 0.5;简单中心化 advantage 为 [0.5,0.5,-0.5,-0.5](实际实现还可除标准差)。正 advantage 提高对应采样序列的相对概率,负 advantage 降低。若四条奖励全相同,组内信号为零:不是 loss 出 bug,而是当前 group 没有提供可比较 variation。
数学 final answer 正确可能来自猜测、格式 exploit 或 verifier 漏洞;代码通过公开 tests 也可能 hard-code cases。RL 会放大 reward 能区分的行为,不会自动优化 verifier 看不见的 honesty、readability 或 robustness。因此需要 hidden tests、格式隔离、难度 curriculum 与独立评估。
第 15 课学习的 RLHF 是 alignment 的主流方法,但有几个根本性局限:
| 局限 | 表现 | 影响 |
|---|---|---|
| 主观性 | 不同标注者有不同偏好 | Reward model 有噪声 |
| 成本高 | 需要大量人类偏好数据 | 难以规模化 |
| Reward hacking | 模型学会欺骗 reward model | 实际质量未提高 |
| 不可验证 | 无法自动检查 reward 是否正确 | 难以调试 |
| 规模瓶颈 | 高质量偏好标注与 reward model 迭代 | rollout inference、verifier coverage 与可验证任务供给 |
核心洞察:如果结果能被低成本、可重复地程序化检查,就可以把这个检查器直接放进 rollout→reward→update 闭环。数学 final answer、代码 tests 与 proof checker 是常见例子;它们只保证各自检查到的属性。
RLVR = Reinforcement Learning from Verifiable Rewards。它使用可由程序重复检查的结果属性构造奖励,而不是依赖逐条人类主观判断;“可验证”只覆盖 verifier 实际检查的属性。
| 领域 | 任务 | 验证方式 |
|---|---|---|
| 数学 | 解方程 | 检查最终答案是否匹配 ground truth |
| 代码 | 写函数 | 运行单元测试 |
| 逻辑 | 推理谜题 | 检查推理链条是否符合逻辑规则 |
| 形式化证明 | 证明定理 | Lean/Coq 验证器检查证明 |
| 算法 | 实现算法 | 测试输出是否正确 |
# RLVR 的核心循环:
for prompt in batch:
# 1. 模型生成 response(可能包含推理过程 + 答案)
response = model.generate(prompt)
# 2. 从 response 中提取答案
answer = extract_answer(response)
# 3. 用验证器检查答案
reward = verifier.check(answer, ground_truth)
# reward = 1 if correct, 0 if wrong
# 4. 构造相对信号;baseline/normalization 是 estimator 的一部分
advantage = reward - baseline
loss = -log_prob(response) * advantage # 仅为单样本 policy-gradient 示意
loss.backward()
真实 GRPO 会对同一 prompt 的多条 rollout 构造 group-relative advantage,并按 handout 指定的 token/sequence aggregation、ratio、clipping 与 regularization 更新;上面只展示 verifier signal 如何进入 policy gradient,不是可提交实现。
| 维度 | RLHF | RLVR |
|---|---|---|
| 奖励来源 | 人类偏好或由其训练的 reward model | 程序、tests、答案检查器或形式 verifier |
| 奖励性质 | 常为学习得到的连续 proxy | 常为离散或规则化 proxy,不等于完整真值 |
| 可扩展性 | 受限于标注人力 | 可自动化、规模化 |
| 适用任务 | 开放式(写作、对话) | 封闭式(数学、代码) |
| Reward hacking | 可能利用 reward model 偏差 | 可能利用 parser、公开 tests 或 verifier coverage 漏洞 |
| 主要边界 | 标注质量、偏好分布与 reward model 泛化 | 任务是否可验证,以及 verifier 实际覆盖什么 |
RLVR 的局限:不是所有任务都有可验证的奖励。开放式任务(创意写作、对话、主观问答)仍然需要 RLHF 或其他方法。RLVR 和 RLHF 是互补的,不是替代关系。
GRPO (Group Relative Policy Optimization) 是 DeepSeek-R1 使用的算法,是 PPO 的简化版本:
PPO 的 advantage 估计需要 value model:
A(s, a) = R(s, a) - V(s)
其中 V(s) 需要额外训练一个 critic network
GRPO 的 insight:
对同一个 prompt,生成 G 个 responses
用这 G 个 responses 的平均 reward 作为 baseline
例: prompt = "Solve x + 3 = 7"
response 1: "x = 4" → reward = 1 (正确)
response 2: "x = 5" → reward = 0 (错误)
response 3: "x = 4" → reward = 1 (正确)
response 4: "x = 3" → reward = 0 (错误)
baseline = mean(rewards) = (1 + 0 + 1 + 0) / 4 = 0.5
advantages = rewards - baseline = [0.5, -0.5, 0.5, -0.5]
直觉: 比平均好的 response 被强化,比平均差的被抑制
GRPO 的 loss 函数:
对每个 prompt q:
1. 用旧 policy π_old 生成 G 个 responses: {o_1, o_2, ..., o_G}
2. 计算每个 response 的 reward: {r_1, r_2, ..., r_G}
3. 计算 baseline: b = mean(r_1, ..., r_G)
4. 计算 advantage: A_i = (r_i - b) / std(r)
5. 计算 policy ratio: ρ_i = π_θ(o_i|q) / π_old(o_i|q)
6. 计算 clipped loss:
L = -1/G × Σ_i min(ρ_i × A_i, clip(ρ_i, 1-ε, 1+ε) × A_i)
+ β × KL(π_θ || π_ref)
注意:
- 与 PPO 类似,但 baseline 来自组内均值而非 value model
- KL 惩罚仍然需要 reference model (π_ref)
| 优势 | 说明 |
|---|---|
| 无需 Critic | 减少一个模型的计算和内存 |
| 组内相对信号 | 同一 prompt 的 rollouts 直接形成相对比较;标准差归一化会改变题目权重,并非保持无偏性的任意 baseline |
| 工程简化 | 移除 critic 的训练与存储;稳定性仍要由 group diversity、loss aggregation、learning rate 与 rollout policy 实测 |
| 易于实现 | 比 PPO 代码更简洁 |
从 policy-gradient identity 看,可以减去不依赖当前 action 的 state-dependent baseline 而保持期望梯度;但 vanilla GRPO 还除以组内标准差。这个除法会按 group difficulty/variance 重新加权问题,官方 Lecture 16 明确提醒它不保持一般意义下的 unbiased gradient。Dr. GRPO、leave-one-out/RFT 与不同 length normalizer 正是在修正或研究这些隐含权重。
| 对象 | On-policy | Off-policy / reused rollout |
|---|---|---|
| Behavior policy | 产生 rollout 后立即用于当前更新,接近 current policy | rollout 来自旧 policy 或另一 behavior policy |
| 主要收益 | distribution mismatch 较小,目标更直接 | 复用昂贵的生成结果,提高 sample/compute reuse |
| 新问题 | 生成慢、训练与 serving framework 切换、长 CoT 造成 batch 不均 | 需要 importance ratio / clipping 等修正,并管理 bias、variance 与 policy lag |
官方 Lecture 16 的系统重点是 on-policy rollout 很昂贵;off-policy estimator 的实现细节在 Assignment 5 v2.0.1 中进一步展开。本页只建立两者的对象边界。
DeepSeek-R1 是 RLVR 的里程碑工作,展示了纯强化学习可以让模型自发学会推理能力:
DeepSeek-R1-Zero 的训练流程:
1. 从 DeepSeek-V3-Base 开始(纯预训练模型)
2. 使用 GRPO 算法
3. 奖励信号:
- 数学: 检查最终答案是否正确
- 代码: 运行测试用例
- 推理: 格式正确性 + 答案正确性
4. RL 训练中观察到更明显的行为:
- Chain-of-thought(链式推理)
- Self-verification(自我验证)
- Reflection(反思和纠错)
关键发现:
R1-Zero 没有先用针对这些行为的 cold-start SFT;论文报告它们在可验证奖励驱动的 RL 过程中得到强化。这个观察不等于证明预训练模型从未见过相似文本模式。
在 RL 训练过程中,研究人员观察到模型自发发展出高级推理策略:
| 行为 | 描述 | 涌现时间 |
|---|---|---|
| CoT | 生成中间推理步骤 | 早期 |
| Self-verification | 检查自己的推理过程 | 中期 |
| Reflection | 发现错误后重新推理 | 中期 |
| Aha moment | "Wait, let me reconsider..." | 后期 |
"Aha Moment":论文展示了一个中间 checkpoint 在 RL 训练中出现更长反思段落的案例,例如停下来重新检查推理。更稳妥的结论是:R1-Zero 没有用 cold-start SFT 直接示范这类行为,而 RL 过程强化了它们;这不是对全部预训练数据来源的排除性证明。
DeepSeek-R1 (非 Zero) 的训练流程:
Stage 1: Cold Start
- 收集数千个高质量 CoT 样本
- SFT DeepSeek-V3-Base
- 目的: 给 RL 一个好的初始化
Stage 2: RL (推理导向)
- 用 GRPO 训练
- 奖励: 答案正确性 + 格式正确性
- 专注数学、代码、推理
Stage 3: Rejection Sampling + SFT
- 用 Stage 2 的模型生成大量样本
- 过滤(只保留正确的 + 格式好的)
- 混合通用数据做 SFT
- 目的: 恢复通用能力
Stage 4: RL (全场景)
- 再次 RL,但奖励包括:
- 推理任务的正确性
- 通用任务的有用性 (reward model)
- 目的: 同时提升推理和通用能力
# DeepSeek-R1 的奖励函数:
def compute_reward(response, ground_truth, task_type):
if task_type == "math":
# 1. 答案正确性
answer = extract_answer(response)
correctness = (answer == ground_truth)
# 2. 格式正确性(是否使用了规定的格式)
format_ok = check_format(response) # e.g., "Answer: XXX"
reward = float(correctness) + 0.1 * float(format_ok)
elif task_type == "code":
# 运行测试用例
code = extract_code(response)
tests_pass = run_tests(code, test_cases)
reward = float(tests_pass)
return reward
R1-Zero 没有先做 cold-start reasoning SFT;论文观察到更长的推理、检查与反思行为在 RL 过程中被强化。但这不证明 base model 的预训练数据从未包含 CoT,也不意味着所有 reasoning recipe 都不需要 SFT:
训练初期:
Q: "Solve x + 3 = 7"
A: "4" (直接回答,无推理)
训练中期:
Q: "Solve x + 3 = 7"
A: "x + 3 = 7, so x = 7 - 3 = 4" (开始出现推理)
训练后期:
Q: "Solve x + 3 = 7"
A: "Let me solve this step by step.
We have x + 3 = 7.
Subtract 3 from both sides: x = 7 - 3 = 4.
Let me verify: 4 + 3 = 7. Yes!
Answer: 4" (完整的 CoT + 验证)
准确边界:可验证奖励能够选择和强化有助于得分的长程行为;行为可能来自预训练已有能力、prompt elicitation 与 RL exploration 的共同作用。观察到 CoT 变长不等价于过程更忠实或泛化更强。
在很多任务中,只有最终答案是对/错,中间步骤没有奖励:
问题: 数学题只有最终答案有奖励
模型可能通过"猜"得到正确答案
或者推理过程全错但答案碰巧对
缓解:
- 加入格式奖励(要求特定格式)
- 加入过程奖励(检查中间步骤)
- 多次采样取一致答案
设计一个好的奖励函数并不容易:
RL 训练可能让模型偏离预训练分布:
RL 训练比 SFT 昂贵得多:
问题 1:RLVR 相比 RLHF 的主要优势是什么?
问题 2:GRPO 相比 PPO 的主要简化是什么?
问题 3:关于 DeepSeek-R1-Zero 中的推理行为,哪种表述最准确?
问题 4:RLVR 能完全替代 RLHF 吗?
同一 prompt 的 4 条 rollout reward 都是 1,简单 group-centered advantage 是什么?这是否表示任务“学得最好”?
答案:全为 0;组内没有相对更新信号。它可能表示题太容易,而非继续提供强学习信号。
若答 advantage=1,你把 raw reward 当成了相对 baseline 后的 advantage。
到这里模型目标主要在文本 token 空间;下一课加入视觉输入,重新解决 representation、alignment、position 与 token budget 问题。
程序化 verifier 提供可扩展 proxy,但 coverage 决定可靠性上限
组内均值作为 baseline,去掉 value model
R1-Zero 无 cold-start reasoning SFT;RL 强化行为不证明其来源唯一
只适用于封闭式任务,奖励设计有挑战