这一篇对应视频 06:“DeepSeekMath-v2, 自我验证, verifier & meta verifier,验证&微调迭代”(BV1AaSTBEEeS)。
我会把它按“论文精度”的方式拆开讲清楚:为什么 verifier 必须升级成 verifier + meta-verifier,以及如何把“外部验证能力”逐步迁移到 generator(自我验证 / self-verification)上,从而降低 RL4LLM 中最典型的 reward hacking。
系列导航:
0. 资料对齐(视频 + GitHub)
- 视频 06:
BV1AaSTBEEeS - 配套 notebook(视频简介里直接给了路径):
agentic_rl/reasoning/math/deepseekmath-v2.ipynb- 你本地路径:
/Users/wangpeng/Downloads/modern_genai_bilibili-main/agentic_rl/reasoning/math/deepseekmath-v2.ipynb
本文会以该 notebook 的符号与公式为主,补上视频里强调的工程直觉:rollout case 分析 -> 发现 hacking -> 改 reward/rubric -> 再训练。
1. 先把问题说清楚:reward hacking 不是“模型坏”,是 reward 不够 faithful
RL4LLM/Agentic RL 里最危险的失败模式不是“优化不收敛”,而是:
- policy 学会了“骗判卷人”(reward model / verifier),reward 曲线很好看,但答案是错的。
从视频的表述来看,核心原则只有一句:
external reward signal 必须足够 faithful:正确要高分,错误要低分。
但现实里你很难一步到位写出完全 faithful 的 reward。最常见的工作流是:
- identify:看你的 rollouts(模型输出样例)里出现了哪些“投机取巧”的模式。
- solve:在 reward function / rubrics 里加约束项,专门打击这些 hack。
- 重新训练,继续循环。
DeepSeekMath-v2 的 verifier + meta-verifier 本质上就是这个循环的“系统化版本”:它试图让判卷人自己也更难被 hack。
2. Generator + Verifier:为什么这是一个稳健的 agentic workflow
把它抽象成最简单的两角色系统:
- generator:产出解题过程/证明(proof)
- verifier:检查 proof,指出问题并打分
这个“生成 -> 验证 -> 改写/精炼”的闭环,本质上就是 agentic loop,只不过工具不是检索/代码执行,而是“数学验证”。
重要直觉(视频强调):iterative verification & refinement 本身就是提升 generation 质量的过程。
3. Initial Verifier:输入/输出长什么样,怎么训练
3.1 Verifier 的输入与输出
用 notebook 的符号:
- 高层 rubrics:$I_v$(文本 prompt 驱动)
- verifier policy:$\pi_\varphi(\cdot\mid X,Y,I_v)$
- 输出包含两部分:
- $V$:先总结识别到的问题(analysis)
- $s’$:再给一个分数(论文里用三档离散分:$s’\in{0,0.5,1}$)
这里的关键不是“有打分”,而是 verifier 必须把“为什么这么判”说出来,这给后续的 refinement 提供了可操作的 feedback。
3.2 Verifier 的训练数据
数据集形式:
- $\mathcal D_v={(X_i,Y_i,s_i)}$
- $Y_i$:generator 产生的 proof
- $s_i$:数学专家给的标注分数
3.3 为什么 verifier 也用 RL(而不是只做 SFT)
notebook 给的训练目标是一个 RL 结构(它把“格式正确”和“打分正确”拆成两个 reward):
$$\max_{\pi_\varphi}\ \mathbb{E}_{(X_i,Y_i,s_i)\sim\mathcal D_v,\ (V’_i,s’_i)\sim\pi_\varphi(\cdot\mid X_i,Y_i,I_v)}[R_{\text{format}}(V’_i)\cdot R_{\text{score}}(s’_i,s_i)]$$
直觉:
- $R_{format}$:保证输出结构可解析(例如必须先列问题再给分数)
- $R_{score}$:保证分数和专家标注一致
这点对“工程可控”非常重要:你的 verifier 如果输出格式漂了,整个 pipeline 会直接崩。
4. 为什么必须引入 Meta-Verifier:verifier 也会“判错”
视频里给了一个非常关键的 failure case:
- verifier 指出了某些问题,但这些“问题本身是错的”。
也就是说,verifier 可能在“自信地胡说”。如果你把它当 reward model 去训 generator,generator 会被强行推向错误偏好。
因此 DeepSeekMath-v2 再加一层:
- meta-verifier:专门判“verifier 的分析是否靠谱”。
5. Meta-Verifier:它判什么,怎么训练
5.1 Meta-Verifier 的输入与输出
符号对齐 notebook:
- rubrics:$I_{mv}$(文本 prompt 驱动)
- 数据集:$\mathcal D_{mv}={(X_i,Y_i,V_i,ms_i)}$
- $ms_i$:数学专家对 verifier 分析 $V_i$ 的打分标注(meta score)
- meta-verifier policy:$\pi_\eta(\cdot\mid X_i,Y_i,V_i,I_{mv})$
- 输出包含:
- 对 verifier 分析“本身的问题”的总结
- 一个质量分(衡量 verifier 的分析是否准确、是否有充分依据)
5.2 训练目标
notebook 里写得很直接:meta-verifier 的 RL objective 结构和 verifier 训练相同,也是 format + score 的组合(只不过 score 的对齐对象变成了 $ms_i$)。
6. Final Verifier:把三件事乘在一起,才叫“更难被 hack 的 reward”
notebook 给了 final verifier 的组合方式:
$$R_v = R_{\text{format}}\cdot R_{\text{score}}\cdot R_{\text{meta}}$$
你可以把它理解成“三道闸门”:
- format 过关:输出结构必须可用
- score 过关:判分必须接近专家标注
- meta 过关:判卷人的分析必须也被“更强的判卷人”认可
这一步的核心作用是:把 reward hacking 的空间压缩。generator 想“骗分”,得同时骗过 verifier 和 meta-verifier,这会显著提高作弊成本。
6.1 乘法组合不是银弹:它会让 reward 变稀疏,训练更依赖 curriculum
把多个 reward “相乘”相当于设置了多个硬闸门:任何一个环节失败,整体 reward 就会被压到接近 0。它确实能显著减少“只骗过其中一项”的漏洞,但也带来一个很现实的工程副作用:
- 早期训练很容易全是 0 分:generator 还不够强时,format/score/meta 任意一项失败都会把信号切断,导致学习信号稀疏。
- 你会更依赖 curriculum:先把 format 训稳(让输出可解析),再逐步提高 score/meta 的要求;否则你可能会误以为“RL 不 work”,其实只是 reward 太硬。
- 错误归因更难:reward 变成 0 之后,你需要额外的日志把三项分别打出来,否则很难知道到底是格式挂了、判分挂了,还是 meta-verifier 在否决分析。
如果你要把这套思想迁移到 deep research agent,建议你一开始就把 reward 拆开记录(哪怕最终训练用乘法),让 case analysis 可定位。
7. Proof Generator 的训练:把 verifier 当成 reward model
generator policy:$\pi_\theta(\cdot\mid X)$,目标是最大化 verifier 给出的 reward:
$$\max_{\pi_\theta}\ \mathbb{E}_{X_i\sim\mathcal D_p,\ Y_i\sim\pi_\theta(\cdot\mid X_i)}[R_Y]$$
其中 $R_Y$ 来自 verifier(对齐 notebook:$R_Y=\pi_\phi(\cdot\mid X_i,Y_i,I_v)$,可理解为“final verifier 对 proof 的打分/奖励”)。
这里你应该马上联想到 RLHF:只是 RM 从“偏好模型”换成了“数学 verifier 系统”。
8. Toward Self-Verification:把验证能力迁移回 generator
视频里用“学生 vs 外部检查员”的直觉解释得很好:
- generator(学生)往往“有能力改正错误”(能根据外部反馈 refine)
- 但它缺乏自己发现自己错误的能力,尤其当它既当作者又当检查员时,很难像外部 verifier 一样严厉客观
所以论文做的是:让 generator 不只输出 proof $Y$,还输出一段自我分析/自我验证 $Z$。
notebook 给出的组合 reward(我把 align 改成单行,避免 Hexo 渲染问题):
$$R = R_{\text{format}}(Y,Z)\cdot(\alpha\cdot R_Y + \beta\cdot R_Z)$$
其中:
$$R_Z = R_{\text{score}}(s’,s)\cdot R_{\text{meta}}(Z)$$
解释:
- $R_Y$:对 proof 本身的奖励(外部 verifier)
- $R_Z$:对自我分析/自我验证的奖励(用 meta-verifier 判“分析质量”)
- $\alpha,\beta$:权衡“答案质量”和“自我验证质量”
这一步非常关键:它让 generator 学到的不只是“把题做对”,还包括“把自己为什么做对/哪里可能错讲清楚”,从而逐步拥有 genuine verification capabilities。
9. 迭代验证 + 迭代微调:你应该从这篇论文学到的工程方法
我把视频里强调的做法总结成一个可复用模板(不只适用于数学):
- 先把 task 变成“可验证”或“伪可验证”
- 数学题天然可验证;开放领域任务需要你设计 proxy verifier(引用一致性、可执行性、事实核查、结构约束)。
- 先别急着训 generator
- 先把 verifier 做到“基本 faithful”,否则 RL 一定会把 generator 训歪。
- verifier 一定要有结构化输出
- 否则你没法把它接入 refinement loop,更没法做 case analysis。
- 用 meta-verifier 约束 verifier
- 判卷人也会被 hack;对判卷人做“二次判卷”是降风险的关键。
- 不断循环 case 分析
- rollout -> 找 hack -> 改 rubrics/加惩罚 -> 继续训练。
9.1 我会如何做评测与 ablation(防“判卷系统”自嗨)
把 verifier/meta-verifier 引入训练闭环之后,一个常见风险是:系统内部的分数变得越来越高,但它只是学会了“更好地说服判卷人”,而不是更正确。为了避免这种自嗨,我会强制做几类评测与消融:
- 相关性与校准(calibration)
- 在 holdout 数据上测 verifier 分数和真实 correctness 的相关性(AUC/accuracy/分桶统计)。
- 重点看“高分但错”的比例:这是 reward hacking 的温床。
- 对抗样本
- 专门构造“格式完美但逻辑错误”的 proof,测试 format reward 是否掩盖了 correctness。
- 对 open-domain 任务,加 prompt injection / citation hallucination / tool-output 篡改,测试 judge 是否会被带偏。
- 组件消融
- 去掉 meta-verifier、去掉 format gate、把乘法改加法、只训 score 不训 analysis,分别观察:
- generator 的正确率、分布多样性、训练稳定性(是否更容易崩/更容易 hack)。
- 去掉 meta-verifier、去掉 format gate、把乘法改加法、只训 score 不训 analysis,分别观察:
- 训练外泛化
- 用完全不同分布的题目/任务做评测(例如题型变化、难度变化、模板变化),看 verifier 是否只是记住了训练分布的“判卷套路”。
把这些评测固定成周期性报告,你才能放心把 verifier 当成 reward 去做 RL,而不是把 pipeline 变成“自我说服机器”。
如果你最终要做 deep research agentic RL,这篇的价值不在“数学”,而在“评测闭环”:
- 你需要 verifier(引用/事实/覆盖/结构/成本)
- 你也需要 meta-verifier(判卷质量,防止 judge 被 prompt injection 或投机输出骗过)
- 然后才能谈得上用 RL 去做稳定迭代

