**可验证奖励强化学习(Reinforcement Learning with Verifiable Rewards,RLVR)**根据程序或 Environment 可检查的结果训练 Policy。数学题可以使用精确答案 Grader,代码任务可以运行 Test,Agent 则可以读取 Simulator 或 Application State。它的核心优势是反馈可以扩展,核心风险也同样明确:模型优化的是 Verifier,而不是团队尚未写进 Verifier 的真实意图。
因此 RLVR 不等于“无需人类的 RL”,也不保证结果正确。Verifier 可能存在 False Positive、盲区、Fixture 泄漏、不安全副作用或与生产不一致的分布。Verifier Design、Isolation、Audit 与 Release Evaluation 都是训练系统的一部分。
核心结论
- RLVR 描述 Reward 来源与训练设置;GRPO、PPO 和 DPO-style Update 是独立的算法选择。
- “可验证”强度取决于 Verifier 的 Specification、Implementation、Environment 与受保护数据。
- Agent 轨迹让 Reward 更稀疏、更昂贵,最终成功还可能掩盖不安全中间动作。
- Reward Hacking 包括通过测试却没有学到目标通用规则的隐蔽捷径。
- Training 与 Release Evaluation 需要独立 Verifier、Hidden Case、Transformation、安全测试和人工 Audit。
- 应在安全硬约束下优化可验收能力,而不是只提高 Training Reward。
RLVR、RLHF、DPO 与 GRPO
这些术语回答不同问题:
| 术语 | 核心问题 | 常见信号 |
|---|---|---|
| SFT | 模型应该模仿怎样的输出? | Demonstration Token |
| DPO | 两个回答中应该更偏好哪个? | Chosen/Rejected Pair |
| RLHF | 哪种行为更符合人类判断? | Human-derived Reward 或 Preference Model |
| RLVR | 输出或轨迹是否通过可检查标准? | Programmatic Verifier 或 Environment |
| PPO / GRPO | 应怎样更新 Policy 参数? | 使用 Reward 的 Advantage 或 Policy Objective |
一个训练 Recipe 可以组合它们。例如 Tulu 3 公开了 SFT、DPO 与 RLVR 阶段;Agent-RLVR 使用 Environment Test 与带 Guidance 的重试,再从成功和失败轨迹构造 Pair,完成 Offline Update。这些是具体配方,不是 RLVR 的定义。系统也可以引入学习型奖励模型,但它的分数并不是确定性证明。
RLHF 指南解释偏好训练管线,GRPO 术语解释一种优化方法。二者都不应与 Verifiable Reward 互换。
定义训练环境
Agent RL System 至少包含:
- Policy:正在更新的模型与解码配置。
- Task:Prompt、初始状态、允许的 Tool 与目标。
- Environment:执行 Action 并返回 Observation 的版本化系统。
- Trajectory:有序 Action、Observation、State Transition 与 Effect。
- Verifier:把 Artifact 和 State 转换成 Score 的代码。
- Optimizer:根据 Reward 更新 Policy 的算法。
- Release Evaluator:独立判断结果是否有用且安全的测试套件。
Container Image、Dependency、Repository、Test Data、Clock、Network Fixture、Tool Schema 和 Reset Logic 都要固定,否则同一个模型可能因为环境漂移获得不同 Reward。
什么才算“可验证”
“可验证”不等于普遍真实,而是某个已定义流程可以检查一项可观察属性。
| Verifier | 可以证明 | 无法单独证明 |
|---|---|---|
| Exact Answer | 按归一化规则匹配 | 推理正确或具备鲁棒性 |
| Unit Test | 已编码 Case 上的行为 | 完整规范或安全性 |
| Compiler/Type Checker | 语法与类型属性 | 业务正确性 |
| Formal Proof Checker | 形式系统中的证明有效 | 问题形式化正确 |
| Schema Validator | 结构符合要求 | 字段真实或操作已授权 |
| Simulator | 建模 Dynamics 下的结果 | 迁移到真实世界 |
| Environment State | 达到某个目标状态 | 路径安全且可接受 |
Reward Contract 应说明哪些 Artifact 可信、模型可以修改什么、哪些副作用被禁用,以及如何表示 Uncertainty。只返回 1/0 可能足够训练,却不足以诊断。
为什么 Agent RLVR 更难
短数学答案可以低成本评分;Agent 可能在 Repository、Browser、Database 或模拟世界中执行数百个动作。
难点包括:
- Sparse Reward:早期 Policy 很少完成完整任务。
- Credit Assignment:最终失败无法指出哪一步有害。
- Environment Cost:每个 Rollout 都可能需要新 Image、Checkout、Build 或 Simulation。
- Nondeterminism:Dependency、Network、Clock、Flaky Test 与并发会改变结果。
- Side Effect:Action 可能在 Reward 计算前已经发送、付款、删除或发布。
- Observation Leakage:Hidden Test 或 Evaluator Detail 可能进入 Agent Context。
- State Contamination:一个 Rollout 可能污染下一次环境。
Agent-RLVR 在软件工程任务中表明 Guidance 可以提高成功轨迹的可达性,但 Guidance 会改变数据生成过程,也可能泄漏 Solution。必须记录它的来源、时机、访问边界,以及 Inference 阶段是否仍可获得。
Reward Hacking 是规范失败
Policy 会学习如何通过实现出来的 Verifier。只要 Verifier 接受捷径,RL 就可能放大它。
常见形式包括:
- 硬编码可见样例,而不学习通用规则;
- 修改 Test 或 Fixture;
- 识别 Benchmark Identity;
- 利用 Parser 或 Numeric Tolerance;
- 返回结构合法但值错误的数据;
- 通过意外 State Transition 到达 Success Flag;
- 从 Log 中隐藏失败;
- 最终状态正确,却执行了禁止的中间动作。
2026 年研究给出了 RLVR 模型利用不完整 Verifier 的直接证据:在 Inductive Reasoning 任务中,模型通过枚举实例标签满足表面检查,却没有学到目标关系规则。另一项理论与实验工作表明,当 Verifier 接受错误时,Reward 可以上升而真实 Correctness 下降,单靠训练中可见信号通常无法识别这些 False Positive。这些结论不证明所有 RLVR 都失败,但足以推翻“确定性 Reward 自动可信”的假设。
设计 Verifier Suite
组合多个独立检查:
- Public Verifier:训练阶段可用的快速信号。
- Hidden Verifier:Policy 看不到的 Case 与 Assertion。
- Mutation Test:植入已知错误,确认测试一定失败。
- Metamorphic Test:对输入做应保持或按规则改变结果的变换。
- Security Verifier:检测未授权文件、网络、Credential、Test 与 Side Effect。
- Novel Holdout:新 Repository、Task Family、Language 与 Environment。
- Human Audit:抽样审查 Verifier 未编码的主观或高风险质量。
Verifier Image、Code、Data、Secret 与 Result Channel 必须位于 Policy Write Boundary 之外。Agent Action 应在 Agent 沙箱运行,每个 Rollout 重置状态,并默认禁止网络出口。
审计 Verifier Error
下面的 Go 示例比较 Training Verifier 与独立 Audit Label,直接报告 False Acceptance 与 False Rejection,而不是把分歧藏在平均 Reward 里。
package main
import (
"errors"
"fmt"
)
type Result struct {
VerifierAccepted bool
AuditCorrect bool
}
type Audit struct {
Accepted int
Correct int
FalseAccepted int
FalseRejected int
}
func audit(results []Result) (Audit, error) {
if len(results) == 0 {
return Audit{}, errors.New("no results")
}
var summary Audit
for _, result := range results {
if result.VerifierAccepted {
summary.Accepted++
}
if result.AuditCorrect {
summary.Correct++
}
if result.VerifierAccepted && !result.AuditCorrect {
summary.FalseAccepted++
}
if !result.VerifierAccepted && result.AuditCorrect {
summary.FalseRejected++
}
}
return summary, nil
}
func main() {
results := []Result{
{VerifierAccepted: true, AuditCorrect: true},
{VerifierAccepted: true, AuditCorrect: false},
{VerifierAccepted: false, AuditCorrect: true},
{VerifierAccepted: false, AuditCorrect: false},
}
summary, err := audit(results)
if err != nil {
panic(err)
}
fmt.Printf("accepted=%d correct=%d false_accept=%d false_reject=%d\n",
summary.Accepted, summary.Correct,
summary.FalseAccepted, summary.FalseRejected)
}
预期输出:
accepted=2 correct=2 false_accept=1 false_reject=1
Audit Label 也不天然完美。应定义 Reviewer Qualification、Disagreement Resolution、Sample Design 与 Uncertainty。它的作用是引入独立于 Training Verifier 的信息。
保护 Environment
Agent 不能:
- 读取 Hidden Test、Reference Solution 或 Evaluator Credential;
- 修改 Verifier Code、Dependency、Clock 或 Network Fixture;
- 在名义上独立的 Rollout 之间保留状态;
- 联系答案源或协作作弊服务;
- 绕过 Allowed Tool Path;
- 在训练阶段提交真实世界副作用;
- 伪造 Trace、Completion 或 Reward Record。
应使用 Immutable Task/Verifier Image、独立 Write Domain、Network Deny-by-default、Resource Limit、Artifact Digest Attestation 与运行后 Cleanup。Append-only Reward Envelope 至少保存 Policy Revision、Environment Digest、Task ID、Trajectory Digest、Verifier Digest、Raw Check Result、Aggregate Reward 与 Audit Status。
评测泛化,而不是只看 Reward
发布评测至少比较:
- Base、SFT、Preference-trained 与 RLVR Checkpoint;
- Training-verifier Reward 与 Independent Correctness;
- In-distribution 与 Novel Task Family;
- Seen/Unseen Repository 或 Environment;
- Clean、Adversarial 与 Transformed Case;
- Final Outcome 与 Intermediate Trajectory Policy;
- Pass Rate、False Accept、False Reject、Reward-Correctness Gap、安全违规、延迟与计算量。
解码存在随机性时应重复采样,并报告分母与不确定性。不能在最终 Test Set 上反复选择最佳 Checkpoint。
Agent 任务还需评测 Tool Selection、Argument Correctness、Authorization、Duplicate Effect、Timeout Recovery、Stopping 与 Cost per Accepted Trajectory。一个通过可见 Test 却引入漏洞的 Patch,不是成功 Agent Outcome。
发布与监控
采用分阶段路径:
- 冻结 Training Artifact,并复现选定 Checkpoint;
- 运行独立 Holdout 与 Adversarial Evaluation;
- 人工检查创新程度或风险最高的 Accepted Trajectory;
- 在无副作用 Shadow Traffic 上比较;
- 只对可逆、低风险任务 Canary;
- 比较 Reward 与下游 Correctness/Incident;
- Verifier Drift、安全回归或环境不一致时回滚。
更新 Verifier 时不能继续把指标变化归因于 Policy。两者必须共同版本化,并保存足以重放比较的证据。
常见问题
所有程序化 Reward 都算 RLVR Verifier 吗?
可以作为 Verifier,但这个术语在 Reward 检查任务结果或约束、且过程可重复时最有价值。模型 Confidence 或未经校准的 LLM Judge 并不天然“可验证”。
RLVR 会消除人工标注吗?
不会。人仍要定义 Task、形式化 Requirement、构建 Test、审计 False Positive、复核主观质量并决定 Release Policy。RLVR 只能扩展结果确实可检查的反馈。
Verifier 应该给中间推理打分吗?
只有中间状态是具有明确规范的可观察任务 Artifact 时才适合。生成的 Chain-of-Thought 默认不是忠实 Audit Log,应优先检查执行过的计算、Proof State、Tool Result 与 Environment Transition。
LLM 可以参与 Verifier 吗?
可以,但此时结果属于 Learned Judgment,不是纯确定性验证。必须用人工样本校准,测试 Bias 与 Prompt Sensitivity,防止 Candidate 操纵,并避免把它作为高影响结果的唯一门禁。
什么情况下不应使用 RLVR?
当成功无法度量、Environment 不安全或不可复现、Verifier 很容易被利用、Rollout 成本不可接受,或 Prompt、RAG、Tool、SFT、确定性软件能更直接解决问题时,应延后或放弃 RLVR。