CVPO 阅读笔记:用价值方差驱动的课程式策略优化

笔记日期: 2026-08-11 作者: Zhongzhu Zhou 阅读论文: CVPO: Enhancing LLM Reinforcement Learning Reasoning via Value-Variance Adaptation and Dynamic Curriculum Learning 论文作者: Ziqi Jia, Yalu Ouyang, Bo Pang, Panpan Li, Hangfei Xu, Shengzhao Wen, Shiyong Li, Yanpeng Wang(百度 AI Cloud Group、清华大学、加州大学圣地亚哥分校) arXiv: 2608.03068 状态: 预印本(cs.CL),2026 年 8 月

1. 为什么一个已经带了价值模型的 RL 方法还不够用

如果你一直在关注面向推理能力的 RLHF 训练方法,大概率已经吸收了这样一条主线故事:GRPO(DeepSeek-R1 一系用的方法)彻底抛弃了价值网络,直接用同一组内多条采样轨迹的奖励做归一化,得到优势估计——便宜、稳定,效果还出奇地好。然后 VAPO 和 VC-PPO 又把风向拉了回来:只要修好经典 PPO 在价值模型上的几个老毛病(初始化偏差、长链条上的奖励信号衰减、GAE 在长时间跨度下的偏差-方差失配),一个训练得当的价值模型能给出比 GRPO 那种粗粒度组内均值更精细的信度分配,理论上限也明显更高。

CVPO 的出发点是:即便是训练得当的价值模型,也仍然被”用浅了”。价值模型给出的不只是每个 token 处的一个点估计 V(s)V(s)——如果你真去看这个估计值在同一条生成轨迹的各个 token 之间是怎么波动的,你会得到一个完全独立的第二信号:这条特定回答在生成过程中经历了多少内部的不确定性/探索。两条轨迹可能拿到完全相同的标量终局奖励(正确答案对应 +1),但它们各自的逐 token 价值走势可能天差地别——一条是自信地一路走向最终的方框答案,另一条则在磕磕绊绊地试探了半天之后才蒙对了结果。现有的基于价值的优势函数(比如 PPO/VAPO 里标准的 GAE 优势)一旦终局奖励确定,就会把这两条轨迹一视同仁。CVPO 方法论上最核心的一步,就是把它们一视同仁:它用轨迹内 token 级价值序列的方差作为二阶信号,对正确和错误轨迹分别、不对称地调节优势的大小。

在这个轨迹级机制之上,CVPO 还叠加了一个完全独立的问题:难度漂移(difficulty drift)。随着一个 RL 训练的策略在几千步的训练过程中不断进步,那些在训练早期”很难”(准确率接近零)的问题会逐渐变成”中等”甚至”简单”。一个在第 0 步就校准好的课程权重方案,到了第 1500 步早已过时。CVPO 用一个贝叶斯后验来动态追踪每道题的准确率,再配合一个人工设计的重加权函数:训练早期把注意力集中在”中等难度”问题上(这类题目单位样本携带的学习信号最多),一旦这些题目被攻克,就把注意力转向”依然没被攻克的难题”——同时明确把已经完全掌握的问题权重清零,避免浪费算力。

最终的 CVPO 方法,把这两个各自独立提出动机的修正项相乘,作用在一套本质上标准的、基于价值模型的 PPO 训练流程的优势函数上。在 Qwen2.5-7B 基座模型上,作者报告了相对于 VAPO 和一个经过特别调整的单步异步 GRPO 变体,在 AIME24/25、AMC23/24 和 MATH-500 上均有明显提升。

拿这篇论文和它引用的更广泛的课程学习-强化学习文献(Qu 等人的在线难度预测、Parashar 等人的从易到难课程、Shi 等人的自适应课程强化微调)对比一下会更清楚:以往大多数面向 LLM RL 的课程学习方法,要么把”难度”定义成数据集的一个静态、预先计算好的属性(比如人工标注的难度标签,或者用另一个模型事先算好的通过率),要么用一个粗粒度的全局调度表(按固定顺序训练由易到难的分桶)。CVPO 的贝叶斯逐题追踪器则是在线的相对当前策略的——难度被持续重新定义为”当前策略在这道题上表现如何”,这在原理上更合理,因为难度漂移的根本原因就是策略自身能力在变化,而不是题目本身有什么固定属性变了。这个区别在实践中很重要:一个针对更弱的参照模型算好的静态课程,到了训练进行了很多步之后,很可能已经完全判断错了哪些题目对当前策略而言算”中等难度”。

前置知识:理解方法之前要先弄清楚的几件事

把 LLM 推理的 RL 训练看成一个 token 级马尔可夫决策过程。 把文本生成看作一个序贯决策过程:“状态” st=(x0,,xm,y0,,yt)s_t = (x_0, \ldots, x_m, y_0, \ldots, y_t) 是提示词加上目前为止生成的所有内容,“动作” aa 是从固定词表里选出的下一个 token,转移是确定性的(把选中的 token 拼接到序列末尾)。一个训练中的策略 πθ\pi_\theta(也就是 LLM 本身)会给定状态下每个候选 next token 分配一个概率;训练的目标是调整 θ\theta,使得策略更倾向于生成能拿到更高奖励的轨迹。在数学推理 RL 里,奖励通常是终局稀疏的:最终的方框答案对了给 +1,错了给 -1(或 0)——中间没有任何逐步骤的奖励告诉你”这一步推导得不错”。

PPO 与优势函数。 最朴素的策略梯度说的是:把带来了”超出预期”回报的动作的对数概率往上提,反之往下压。“超出预期”这部分被形式化为优势 A(s,a)=Q(s,a)V(s)A(s,a) = Q(s,a) - V(s):在状态 ss 下选择动作 aa,比策略在该状态下的平均选择要好多少。PPO 用一个裁剪过的替代目标函数(下面的公式 1),保证单步更新不会让策略偏离太远;用广义优势估计(GAE,公式 2)来估计优势,它是若干单步 TD 残差 δt=rt+γV(st+1)V(st)\delta_t = r_t + \gamma V(s_{t+1}) - V(s_t) 的加权和,用参数 λ\lambda 在偏差和方差之间做权衡。

L(θ)=Et[min(rt(θ)A^t, clip(rt(θ),1ϵ,1+ϵ)A^t)](1)L(\theta) = \mathbb{E}_t\Big[\min\big(r_t(\theta)\hat{A}_t,\ \mathrm{clip}(r_t(\theta), 1-\epsilon, 1+\epsilon)\hat{A}_t\big)\Big] \tag{1} A^t=k=0Tt1(γλ)kδt+k,δt=rt+γV(st+1)V(st)(2)\hat{A}_t = \sum_{k=0}^{T-t-1} (\gamma\lambda)^k \delta_{t+k}, \qquad \delta_t = r_t + \gamma V(s_{t+1}) - V(s_t) \tag{2}

这里 rt(θ)=πθ(atst)πθold(atst)r_t(\theta) = \frac{\pi_\theta(a_t \mid s_t)}{\pi_{\theta_{\text{old}}}(a_t \mid s_t)} 是新旧策略之间的重要性采样比值,ϵ\epsilon 限制了这个比值单步能移动多远,γ\gamma 是折扣因子,V(s)V(s) 是一个训练出来的价值函数(通常是接在同等或相近规模模型上的一个小头,用来回归经验回报)。

GRPO:干脆不要价值模型。 GRPO(用于 DeepSeek-Math 和 DeepSeek-R1)绕开了训练价值模型的需求:对同一个提示词采样一 GG 条轨迹,算出每条轨迹的标量终局奖励,然后在组内做归一化——Ai=rimean(r1:G)std(r1:G)A_i = \frac{r_i - \text{mean}(r_{1:G})}{\text{std}(r_{1:G})}——把这个组内相对分数当作该轨迹所有 token 的优势。这很便宜(不用训练价值网络),也很稳定,但很粗糙:一条轨迹里所有 token 拿到的优势都一样,跟这个 token 具体贡献了什么无关;而且如果对同一个提示词采样的 GG 条轨迹恰好全对或全错,组内方差为零,完全没有学习信号——这种”同质性”失效模式正是价值方法的动机所在。

VAPO/VC-PPO:让基于价值的 PPO 能撑住长链条推理。 朴素地把 PPO 和一个从头训练的价值网络结合起来,在长推理链条上是出了名的不稳定:价值网络在训练早期校准很差(初始化偏差),它在公式 2 里的自举目标会在很长的轨迹上累积误差(奖励信号衰减)。VC-PPO 用一个价值模型预训练阶段外加为价值更新和策略更新解耦 GAE 参数来修复这个问题。VAPO 又加上了长度自适应 GAE(公式 2 里用的 λ\lambda 会根据轨迹长度做调整,因为更长的链条需要不同的偏差-方差权衡)以及 token 级而非序列级的损失。CVPO 明确是建立在一套 VAPO 式的价值训练流水线之上——它继承了 VAPO 的解耦 GAE 和长度自适应机制,再在此基础上加上下面要讲的两个机制。

2. 机制一的理论基础——为什么价值方差能约束策略梯度

论文的第一个贡献是一段简洁的推导,说明优势函数的方差直接约束着策略梯度的幅度。这一段值得完整走一遍,因为它是把”方差”当作一等训练信号(而不是需要被平均掉的噪声)的理论依据。

从标准的策略梯度出发(每一次 RL 更新都在试图估计这个量):

θJ(θ)=Es,aπθ[θlogπθ(as)A(s,a)](3)\nabla_\theta J(\theta) = \mathbb{E}_{s,a\sim\pi_\theta}\big[\nabla_\theta \log \pi_\theta(a\mid s)\cdot A(s,a)\big] \tag{3}

其中 A(s,a)=Q(s,a)V(s)A(s,a) = Q(s,a) - V(s),和前面一样。假设对数策略的梯度在 L2L_2 范数意义下有界,界为常数 CC(这是一个标准的正则性假设——在实践中,公式 1 里的裁剪操作以及优化过程中的梯度裁剪大致保证了这一点):

θlogπθ(as)2C.(4)\lVert \nabla_\theta \log\pi_\theta(a\mid s) \rVert_2 \le C. \tag{4}

第一步——用 Cauchy-Schwarz 不等式把两个因子拆开。 公式 3 中的梯度是两个随机量(对数策略的分数函数梯度和优势)乘积的期望。在期望内部用 Cauchy-Schwarz 不等式(把乘积的范数用范数的乘积来界定),再代入公式 4 的假设:

θJ(θ)2E[θlogπθ(as)2A(s,a)]CE[A(s,a)].(5)\lVert \nabla_\theta J(\theta) \rVert_2 \le \mathbb{E}\big[\lVert \nabla_\theta \log\pi_\theta(a\mid s)\rVert_2 \cdot |A(s,a)|\big] \le C\cdot \mathbb{E}[|A(s,a)|]. \tag{5}

这句话说的是:梯度范数受制于优势的典型绝对值大小——直观地说,一个动作的回报越”出乎意料”,它引发的参数更新就越大。

第二步——把 E[A]\mathbb{E}[|A|]Var(A)\mathrm{Var}(A) 联系起来。 我们没法直接从 PPO 已经在估计的量里算出 E[A]\mathbb{E}[|A|],但可以用 AA方差给它定一个上界,而这个方差恰恰是我们能从价值模型的输出里估计出来的量。由于优势按构造对生成它的策略是零均值的(E[A(s,a)]=0\mathbb{E}[A(s,a)] = 0——这正是减去一个基线的整个意义所在),它的方差可以简化为二阶矩:

Var(A)=E[A(s,a)2].(6)\mathrm{Var}(A) = \mathbb{E}[A(s,a)^2]. \tag{6}

对凸函数 xx2x \mapsto x^2 应用 Jensen 不等式,得到 (E[A])2E[A2](\mathbb{E}[|A|])^2 \le \mathbb{E}[A^2],即:

(E[A(s,a)])2E[A(s,a)2]=Var(A)    E[A(s,a)]Var(A).(7-8)(\mathbb{E}[|A(s,a)|])^2 \le \mathbb{E}[A(s,a)^2] = \mathrm{Var}(A) \implies \mathbb{E}[|A(s,a)|] \le \sqrt{\mathrm{Var}(A)}. \tag{7-8}

第三步——把 Var(A)\mathrm{Var}(A)QQVV 展开。 由于 A=QVA = Q - V,基本的方差代数给出:

Var(A)=Var(Q)+Var(V)2Cov(Q,V).(9)\mathrm{Var}(A) = \mathrm{Var}(Q) + \mathrm{Var}(V) - 2\,\mathrm{Cov}(Q, V). \tag{9}

要把这个式子变成一个上界(我们要的是最坏情况的结论,所以要消掉协方差项——我们并不预先知道它的符号),对协方差用 Cauchy-Schwarz 不等式,Cov(Q,V)Var(Q)Var(V)|\mathrm{Cov}(Q,V)| \le \sqrt{\mathrm{Var}(Q)\mathrm{Var}(V)},取协方差最负的最坏情形(此时 Var(A)\mathrm{Var}(A) 最大):

Var(A)Var(Q)+Var(V)+2Var(Q)Var(V)=(σQ+Var(V))2,σQ:=Var(Q).(10-11)\mathrm{Var}(A) \le \mathrm{Var}(Q) + \mathrm{Var}(V) + 2\sqrt{\mathrm{Var}(Q)\mathrm{Var}(V)} = \big(\sigma_Q + \sqrt{\mathrm{Var}(V)}\big)^2, \qquad \sigma_Q := \sqrt{\mathrm{Var}(Q)}. \tag{10-11}

这一步只是识别出 (a+b)2=a2+b2+2ab(a+b)^2 = a^2 + b^2 + 2ab,其中 a=σQa = \sigma_Qb=Var(V)b=\sqrt{\mathrm{Var}(V)}——代数本身很初等,但收获是我们现在有了一个纯粹用两个独立方差表达的上界,不含交叉项。

第四步——把整条链串起来。 把公式 11 代入公式 8,再把公式 8 代入公式 5:

E[A(s,a)]σQ+Var(V)(12)\mathbb{E}[|A(s,a)|] \le \sigma_Q + \sqrt{\mathrm{Var}(V)} \tag{12} θJ(θ)2C(σQ+Var(V)).(13)\lVert \nabla_\theta J(\theta) \rVert_2 \le C\cdot\Big(\sigma_Q + \sqrt{\mathrm{Var}(V)}\Big). \tag{13}

一个具体的数字例子。 假设 C=1.0C=1.0(已归一化的梯度范数界),环境本身的 QQ 值波动 σQ=0.05\sigma_Q = 0.05,对于一条低探索的轨迹,价值估计的方差 Var(V)=0.0004\mathrm{Var}(V) = 0.0004(即 Var(V)=0.02\sqrt{\mathrm{Var}(V)}=0.02),代入公式 13:θJ(θ)21.0×(0.05+0.02)=0.07\lVert \nabla_\theta J(\theta) \rVert_2 \le 1.0\times(0.05+0.02) = 0.07。现在考虑 CVPO 人为提高该轨迹的有效方差到 Var(V)=0.0025\mathrm{Var}(V) = 0.0025(即 Var(V)=0.05\sqrt{\mathrm{Var}(V)}=0.05),上界变为 1.0×(0.05+0.05)=0.101.0\times(0.05+0.05)=0.10——允许的梯度范数上界提高了约 43%。这个例子具体化地展示了公式 15-16 里的乘法权重 WSW_S 在做什么:它相当于在控制这个 Var(V)\sqrt{\mathrm{Var}(V)} 项,从而直接在公式 13 的意义上控制允许的梯度范数上界——但需要再次强调,这只是一个上界,实际梯度可能远低于这个上界。

这个结论换来了什么。 公式 13 是一个真正的(虽然比较松)理论结论:策略更新的幅度受制于价值估计的方差 Var(V)\mathrm{Var}(V)(再加上一项来自环境/奖励本身内在随机性的 σQ\sigma_Q,训练算法没法直接操纵这一项)。如果你能在轨迹级别上测出 Var(V)\mathrm{Var}(V),并且刻意在希望更多探索的轨迹上把它推高(更大的更新)、在希望收敛的轨迹上把它压低(更小的更新),你就是在根据公式 13 直接操纵可实现的梯度幅度——这正是第 3 节设计的理论依据。也要老实说清楚这个定理没有说什么:它是一个上界,不是等式,所以高 Var(V)\mathrm{Var}(V) 只是”允许”更大的梯度,并不保证一定会出现;这个界也完全没说梯度的方向,只涉及它的幅度。论文自己也说得很明确,这是一种”有原则性”的动机说明,而不是紧的保证——这个区分在权衡理论部分和后面的实证消融实验时很重要。

3. 机制一落地——随机性感知的优势修正

理论告诉我们要”刻意调节 Var(V)\mathrm{Var}(V)“,但实践中的问题是:怎么调,往哪个方向调,对哪些轨迹调?CVPO 的答案建立在一个实证观察之上——论文的图 1 展示了训练出来的价值模型给出最高平均价值估计的那些 token 组成的词云。

图 1(论文 Fig.1):数学训练集中获得最高平均价值估计的 token 词云——"Calculate"、"substitute"、"remainder"、"log" 等推理/数学词汇明显占据主导地位。

直觉是这样的:真正处于推理核心的 token(运算符、关键数学术语、“Therefore”/“Next” 这类过渡词)会获得系统性不同于填充词的价值估计。如果你追踪价值估计在同一条生成回答内部逐 token 是怎么变化的——也就是它沿轨迹的方差——你就得到了一个衡量”生成这条回答时到底发生了多少真实探索/深思”的代理指标,而不是一段套路化、低波动的续写。轨迹内价值方差高,意味着模型确实在”权衡”不同的方向;方差低,意味着一个僵化、低探索的回答。

设计选择——为什么用价值方差而不是奖励方差或动作分布的熵? 显而易见的替代方案是:(a)策略的逐 token 熵,这在大多数 RL 流水线里已经作为探索代理被追踪;或者(b)一次 rollout 组内的奖励方差(本质上就是 GRPO 已经在做归一化用的那个量)。论文两个都没用。熵衡量的是单步动作分布的不确定性,这很容易带噪声,也没法区分”正在认真斟酌一个难的子问题”和”这个 token 本身就天然模棱两可”(比如在两个同义词之间选一个)。相比之下,价值方差是一个由价值模型中转出来的信号,而价值模型本身已经被训练成去追踪一个状态的长期后果,而不只是下一个 token 的分布——所以价值方差的一个峰值,比熵的一个峰值更接近于”这是一个真正影响最终答案的岔路口”。论文没有讨论的边界条件是:这套论证只有在价值模型本身校准良好时才成立(别忘了 VAPO 的整个出发点就是价值模型默认并不校准良好)——一个校准很差的价值模型给出的价值方差信号,很可能只是包装成有意义探索代理的噪声。

3.1 逐步拆解这个机制

给定一批 BB 条采样轨迹 B={(vi,ri,idxi)}i=1B\mathcal{B} = \{(v_i, r_i, \mathrm{idx}_i)\}_{i=1}^{B},其中 viRTiv_i \in \mathbb{R}^{T_i} 是轨迹 ii 的逐 token 价值估计序列,idxi\mathrm{idx}_i 标识这条轨迹来自哪个提示词(回想一下,跟 GRPO 的组内采样一样,每个提示词会采样多条轨迹):

第一步——每条轨迹的方差信号。 计算每条轨迹内价值序列的标准差:

σi=std(vi).(sig-i)\sigma_i = \mathrm{std}(v_i). \tag{sig-i}

第二步——组内相对归一化。 原始的 σi\sigma_i 在不同提示词之间不好直接比较(一道本身就难的题,无论探索质量如何,可能自始至终诱发更高的价值方差)。所以论文把每条轨迹的方差,相对于同一个提示词采样出来的其他轨迹做归一化——设 Gk={iidxi=k}\mathcal{G}_k = \{i \mid \mathrm{idx}_i = k\} 为提示词 kk 对应的轨迹集合:

μk=1GkiGkσi.(14)\mu_k = \frac{1}{|\mathcal{G}_k|}\sum_{i \in \mathcal{G}_k} \sigma_i. \tag{14}

μk\mu_k 现在是一个同题参照点:“相对于为同一道题采样出的其他兄弟轨迹,这一条轨迹的探索水平是偏高还是偏低?“这跟 GRPO 在组内而非整批内归一化奖励是同一种设计模式,只是用在了不同的统计量上。

第三步——按轨迹结果做不对称加权。 这是整个机制的核心,直接编码了论文的中心启发式:正确的轨迹应该收敛(惩罚高方差 = 惩罚”运气好、绕了一大圈才对”的正确答案),错误的轨迹应该继续探索(惩罚低方差 = 惩罚”僵化地答错”)

对正确的轨迹(R(τ)=1R(\tau)=1):

WS(Var(τ),1)=1.0+αPsigmoid(λP(Var(τ)μk)).(15)W_S(\mathrm{Var}(\tau), 1) = 1.0 + \alpha_P \cdot \mathrm{sigmoid}\big(\lambda_P(\mathrm{Var}(\tau) - \mu_k)\big). \tag{15}

对错误的轨迹(R(τ)=0R(\tau)=0):

WS(Var(τ),0)=1.0αNsigmoid(λN(μkVar(τ))).(16)W_S(\mathrm{Var}(\tau), 0) = 1.0 - \alpha_N \cdot \mathrm{sigmoid}\big(\lambda_N(\mu_k - \mathrm{Var}(\tau))\big). \tag{16}

读公式 15:如果一条正确轨迹的方差超过了组均值(Var(τ)μk>0\mathrm{Var}(\tau) - \mu_k > 0),sigmoid 会趋近饱和到 1,权重趋向 1+αP1+\alpha_P——这是一个惩罚性乘子,因为在 CVPO 实际的优势符号约定下(见 3.3 节),对一条正确轨迹施加更大的 WSW_S,意味着更强地把模型往低方差、“锁定”的策略方向推,抑制在已经找到正确路径之后继续绕弯子。如果方差低于组均值,sigmoid 趋向 0,WS1.0W_S \to 1.0——不施加惩罚,“高效、自信、正确”的轨迹被原样保留。

读公式 16:如果一条错误轨迹的方差低于组均值(μkVar(τ)>0\mu_k - \mathrm{Var}(\tau) > 0,即这个错误答案是僵化地给出的,没怎么经过内部斟酌),sigmoid 饱和,WS1αNW_S \to 1 - \alpha_N——一个减弱的惩罚,意思是在这种情况下对模型的答错”网开一面”,因为真正的问题是探索不足,如果继续用力惩罚一次低探索的失败,只会进一步强化僵化。如果方差高于组均值(这个错误答案至少经过了积极的探索,只是碰巧走错了方向),WS1.0W_S \to 1.0——全力惩罚,因为光有探索并不能为最终答案的错误开脱。

设计选择——为什么用 sigmoid 门控而不是硬阈值? 一个硬阈值方案(Var>μk\mathrm{Var}>\mu_kWS=1+αPW_S = 1+\alpha_P,否则 1.01.0)会在恰好处于组均值附近的轨迹上产生破坏训练稳定性的不连续跳变——Var(τ)\mathrm{Var}(\tau) 估计本身就是一个带噪声的量(是从单条 rollout 的价值序列算出来的),微小的随机波动就会让权重发生突变。sigmoid 提供了平滑插值,代价是引入了两个需要额外调的超参数(控制陡峭程度的 λP,λN\lambda_P, \lambda_N)。论文没有针对这两个陡峭程度参数单独做敏感性分析(它确实对整体方差系数做了,见后文),这是消融覆盖上的一个缺口。

第四步——编号伪代码。 把上面四步整合成伪代码:

算法 1:随机性感知的优势修正
输入:一批轨迹 B = {(v_i, r_i, idx_i)}_{i=1..B},参数 alpha_P, alpha_N, lambda_P, lambda_N
输出:每条轨迹的权重 W_S,i

1:  对 B 中每条轨迹 i:
2:      sigma_i <- std(v_i)                      # 公式 (sig-i):轨迹内价值方差
3:  按 idx_i 对轨迹分组(对每个提示词 k):
4:      G_k <- { i : idx_i = k }
5:      mu_k <- mean( sigma_i for i in G_k )      # 公式 (14):组内相对参考方差
6:  对 B 中每条轨迹 i:
7:      k <- idx_i
8:      如果 r_i == 1(正确轨迹):
9:          W_S,i <- 1.0 + alpha_P * sigmoid( lambda_P * (sigma_i - mu_k) )   # 公式 (15)
10:     否则(错误轨迹):
11:         W_S,i <- 1.0 - alpha_N * sigmoid( lambda_N * (mu_k - sigma_i) )   # 公式 (16)
12: 返回 { W_S,i }

这段算法每个训练批次运行一次,发生在 rollout 生成和价值模型打分之后、优势最终组装之前——它是对已经算好的价值估计做的一次廉价后处理,不涉及额外的前向/反向传播,这是一个重要的实践性质:这个机制给训练循环带来的额外计算开销基本为零。

3.2 一个数值例子

比起纯符号地推理公式 15-16,直接过一遍具体数字会更直观。假设提示词 kk 对应 4 条采样轨迹,其价值序列标准差为 σ=[0.008, 0.015, 0.006, 0.020]\sigma = [0.008,\ 0.015,\ 0.006,\ 0.020],正确性标签为 R=[1, 1, 0, 0]R = [1,\ 1,\ 0,\ 0],调好的超参数为 αP=αN=0.5\alpha_P = \alpha_N = 0.5λP=λN=50\lambda_P = \lambda_N = 50(比较陡的 sigmoid,一旦 σiμk|\sigma_i - \mu_k| 超过约 0.020.02,权重就接近饱和)。

首先算组内参考值:μk=mean(0.008,0.015,0.006,0.020)=0.01225\mu_k = \mathrm{mean}(0.008, 0.015, 0.006, 0.020) = 0.01225

  • 轨迹 1(正确,σ1=0.008<μk\sigma_1=0.008 < \mu_k):σ1μk=0.0043\sigma_1 - \mu_k = -0.0043sigmoid(50×(0.0043))=sigmoid(0.213)0.447\mathrm{sigmoid}(50\times(-0.0043)) = \mathrm{sigmoid}(-0.213) \approx 0.447WS=1.0+0.5×0.4471.22W_S = 1.0 + 0.5\times 0.447 \approx 1.22——一个较温和的惩罚,因为这条正确轨迹已经是低方差/高效的,不太需要被抑制。
  • 轨迹 2(正确,σ2=0.015>μk\sigma_2 = 0.015 > \mu_k):σ2μk=0.0028\sigma_2-\mu_k = 0.0028sigmoid(50×0.0028)=sigmoid(0.138)0.534\mathrm{sigmoid}(50\times 0.0028)=\mathrm{sigmoid}(0.138)\approx 0.534WS1.0+0.5×0.5341.27W_S \approx 1.0+0.5\times 0.534 \approx 1.27——尽管绝对方差更高,但和轨迹 1 的权重非常接近,因为两者都离组均值不远;只有当一条轨迹的方差明显高于或低于 μk\mu_k 时,修正才会变得显著不对称。
  • 轨迹 3(错误,σ3=0.006μk\sigma_3 = 0.006 \ll \mu_k,一个僵化的错误答案):μkσ3=0.0063\mu_k - \sigma_3 = 0.0063sigmoid(50×0.0063)=sigmoid(0.313)0.578\mathrm{sigmoid}(50\times 0.0063) = \mathrm{sigmoid}(0.313)\approx 0.578WS=1.00.5×0.5780.71W_S = 1.0 - 0.5\times 0.578 \approx 0.71——一个明显减弱了的惩罚(比未加权时弱了 29%),符合”对僵化的错误答案网开一面”的设计意图。
  • 轨迹 4(错误,σ4=0.020μk\sigma_4 = 0.020 \gg \mu_k,一个经过探索的错误答案):μkσ4=0.0078\mu_k - \sigma_4 = -0.0078sigmoid(0.388)0.404\mathrm{sigmoid}(-0.388)\approx 0.404WS1.00.5×0.4040.80W_S \approx 1.0 - 0.5\times 0.404 \approx 0.80——比未加权时略弱,但明显比轨迹 3 的权重更接近全力惩罚,因为这条轨迹至少在答错之前进行过探索。

这一组 4 条轨迹的整体效果:两条正确轨迹的优势被放大了大约 22%-27%(温和的收敛压力),两条错误轨迹的(负)优势被缩小到原始幅度的 71%-80%(惩罚被软化,越僵化的失败软化得越多)。这个具体数值例子中没有哪个权重被推到极端——这直接是 λP=λN=50\lambda_P=\lambda_N=50 加上四个 σi\sigma_i 都落在 μk\mu_k 附近约 ±0.008\pm0.008 范围内共同导致的结果;一批方差分布更分散的轨迹会产生分化更明显的权重。

4. 机制二——难度引导的优势加权(对抗难度漂移)

第二个机制解决的是一个跟价值方差完全无关的正交问题:随着训练推进,数据集里每道题的有效难度都在变化,因为”难度”本身是由模型自身能力定义的,而不是题目的某个固定属性。一道基座模型只能解对 5% 的题,训练 1000 步之后可能能解对 60%。一个不追踪这种漂移的课程学习方案,会一直根据过时的难度估计来分配训练权重。

4.1 用贝叶斯后验追踪逐题准确率

比起简单的滑动平均(窗口短就噪声大,窗口长就适应慢),论文用一个 Beta-二项后验来维护每道题的成功率——这是教科书式的贝叶斯做法,能在”相信先验”(早期、样本少)和”相信数据”(后期、样本多)之间自然插值,由已经累积的成功/失败次数决定倾向哪一边。

第一步——先验。 每道题 τ\tau 一开始设一个均匀先验:

γτ0Beta(ατ0,βτ0),ατ0=βτ0=1.(17)\gamma_\tau^0 \sim \mathrm{Beta}(\alpha_\tau^0, \beta_\tau^0), \qquad \alpha_\tau^0 = \beta_\tau^0 = 1. \tag{17}

Beta(1,1)\mathrm{Beta}(1,1) 就是 [0,1][0,1] 上的均匀分布——“目前完全不知道这道题对当前策略是简单还是难”,在还没观察到任何该题 rollout 之前,这是合理的先验。

第二步——观察 rollout,统计成功次数。 策略对题目 τ\tau 生成 kk 条回答之后,统计其中判为正确的数量:

sτ0=j=1krτ0,j,rτ0,j{0,1}.(18)s_\tau^0 = \sum_{j=1}^{k} r_\tau^{0,j}, \qquad r_\tau^{0,j}\in\{0,1\}. \tag{18}

第三步——共轭后验更新。 因为 Beta 是二项似然的共轭先验,观察到 kk 次试验里 sτ0s_\tau^0 次成功之后的后验依然是一个 Beta 分布,用简单的加法就能得到——这个闭式更新正是 Beta-二项之所以是这类流式成功率追踪问题的标准选择的原因(跟多臂老虎机里 Thompson 采样背后的数学一模一样):

γτ0H0Beta(ατ0,βτ0),ατ0=ατ0+sτ0,βτ0=βτ0+ksτ0.(19-21)\gamma_\tau^0 \mid \mathcal{H}^0 \sim \mathrm{Beta}(\alpha_\tau^{0\prime}, \beta_\tau^{0\prime}), \qquad \alpha_\tau^{0\prime} = \alpha_\tau^0 + s_\tau^0, \quad \beta_\tau^{0\prime} = \beta_\tau^0 + k - s_\tau^0. \tag{19-21}

对训练轮次 t=0,1,2,t = 0, 1, 2, \ldots 重复这个过程(每一轮贡献本轮的 sτts_\tau^t 次新成功,除以本轮的 rollout 数),就得到每道题一个滚动更新的后验 Beta(ατt,βτt)\mathrm{Beta}(\alpha_\tau^{t\prime}, \beta_\tau^{t\prime}),其均值 γˉτt=ατtατt+βτt\bar\gamma_\tau^t = \frac{\alpha_\tau^{t\prime}}{\alpha_\tau^{t\prime}+\beta_\tau^{t\prime}} 就是下面用到的滚动准确率估计 ρq\rho_q

第四步——用趋势指标检测停滞。 为了决定何时切换课程策略(而不仅仅是被动追踪准确率),论文定义了一个相对变化指标:

Δτt=γˉτtγˉτt1γˉτt1.(22)\Delta_\tau^t = \frac{\bar\gamma_\tau^t - \bar\gamma_\tau^{t-1}}{\bar\gamma_\tau^{t-1}}. \tag{22}

两个联合检验的停滞条件,用来判断模型是否遇到了需要切换策略的”学习瓶颈”:

Tlow={τγˉτt0.3},若 Δτt0.05(对 τTlow)则判定为低准确率区间停滞;(23)\mathcal{T}_{\text{low}} = \{\tau \mid \bar\gamma_\tau^t \le 0.3\}, \quad \text{若 } |\Delta_\tau^t|\le 0.05 \text{(对 } \tau\in\mathcal{T}_{\text{low}}\text{)则判定为低准确率区间停滞}; \tag{23} Thigh={τγˉτt0.8},若 Δτt0.03(对 τThigh)则判定为高准确率区间提升放缓.(24)\mathcal{T}_{\text{high}} = \{\tau \mid \bar\gamma_\tau^t \ge 0.8\}, \quad \text{若 } \Delta_\tau^t \le 0.03 \text{(对 } \tau\in\mathcal{T}_{\text{high}}\text{)则判定为高准确率区间提升放缓}. \tag{24}

当低准确率停滞条件和高准确率放缓条件同时满足时,才判定模型已经进入瓶颈,触发课程加权函数从”训练早期”形式切换到”瓶颈期”形式(下文给出)。

设计选择——为什么用两组分开、手工设定的阈值(0.3/0.05 和 0.8/0.03),而不是一个自适应检测器? 论文除了给出这些具体数值之外没有进一步论证;从表述上看,这些是针对这一具体实验配置(Qwen2.5-7B、DAPO-Math-17k、这个奖励量级)经验调好的常数。显而易见的替代方案——对整体准确率曲线用一个单一的自适应变点检测器——在跨模型/跨数据集时理论上会有更好的泛化性,不需要重新调参,但实现和调试起来在一个已经很复杂的 RL 流水线里会更麻烦。边界条件在于:如果某个模型/数据集组合的准确率轨迹,并不像本文的数学基准那样自然聚成”大量简单已停滞”和”大量困难已停滞”两类,这些固定阈值就可能根本触发不了,悄悄地让课程机制的第二阶段一直不生效。

4.2 两阶段课程加权函数

阶段一(训练早期)——偏向中等难度问题。 在检测到瓶颈之前,训练权重集中在模型准确率大约 50% 的题目上——这是课程学习里的经典直觉:一道成功率处于中间水平的题目,相对每个样本携带的学习信号最多(奖励方差最高,梯度最有用),相比之下模型总是能解对/总是解不对的题目奖励方差接近零,rollout 几乎白费:

WD(ρq)=21+ek1(ρqc1)11+ek2(ρqc2),(25)W_D(\rho_q) = \frac{2}{1+e^{-k_1(\rho_q - c_1)}}\cdot\frac{1}{1+e^{k_2(\rho_q - c_2)}}, \tag{25}

其中 k1=1.6, c1=0.2, k2=2, c2=1.2k_1=1.6,\ c_1=-0.2,\ k_2=2,\ c_2=1.2。这是两个 sigmoid 的乘积——一个随 ρq\rho_q 增大(抑制那些准确率极低、模型还无法有效切入的题目),一个随 ρq\rho_q 减小(抑制那些已经被解决的高准确率题目)——两者相乘得到一个在 [0,1][0,1] 准确率区间中部达到峰值的”隆起”函数。给定不对称的中心 c1=0.2c_1=-0.2c2=1.2c_2=1.2,这个峰值大致落在 ρq0.5\rho_q\approx 0.50.60.6 附近。

阶段二(瓶颈之后)——把注意力左移到困难、尚未解决的题目。 一旦检测到瓶颈,加权函数会改变形状(换一套常数,并且给第一个 sigmoid 乘上一个新的 (1ρq2)(1-\rho_q^2) 因子),把有效峰值向更低——也就是更难——的准确率区间偏移,同时通过这个 (1ρq2)(1-\rho_q^2) 因子把 ρq=1\rho_q = 1(完全掌握)的题目权重显式清零:

WD(ρq)=2(1ρq2)1+ek1(ρqc1)11+ek2(ρqc2),(26)W_D(\rho_q) = \frac{2(1-\rho_q^2)}{1+e^{-k_1'(\rho_q - c_1')}}\cdot\frac{1}{1+e^{k_2'(\rho_q - c_2')}}, \tag{26}

其中 k1=4.1, c1=0.1, k2=2, c2=0.9k_1'=4.1,\ c_1'=-0.1,\ k_2'=2,\ c_2'=0.9。注意在 ρq=1\rho_q=1 处,分子中的 (1ρq2)=0(1-\rho_q^2)=0,无论 sigmoid 项如何,都强制 WD=0W_D=0——这正是论文明确说的”停止在完全解决的题目上训练”这一条款。

设计选择——为什么用手工设计的 sigmoid 乘积隆起函数,而不是一个学出来的加权网络? 一个学出来的加权函数(比如一个把准确率历史映射到标量权重的小 MLP,端到端训练或用元学习训练)原则上能让权重形状自适应真实的训练动态,而不是假定一个固定的隆起函数形式。论文选择了闭式、可解释、计算廉价的函数——考虑到课程权重要在每个训练步、对整批数据都计算一遍(一个学出来的加权网络会引入一个不小的额外模型去训练,本身也可能成为不稳定性的来源),这个选择是可以理解的,但代价是那些具体的数值常数(k1,c1,k_1, c_1, \ldots)实际上成了针对这一具体模型/数据集组合调出来的额外超参数,没有任何保证能迁移到比如一个 70B 模型或者代码生成的奖励设定上。

4.3 课程机制的编号伪代码

算法 2:难度感知的动态课程加权
输入:训练轮次流 t=0,1,2,...;每轮每道题的 rollout 结果
状态:每道题的 Beta 后验参数 (alpha_q, beta_q);阶段标志 P ∈ {early, bottleneck}
输出:每道题的课程权重 W_D(rho_q),用于缩放当轮的优势

1:  初始化所有题目 alpha_q = beta_q = 1(均匀先验,公式 17)
2:  初始化 P <- early
3:  对每个训练轮次 t:
4:      对本轮采样到的每道题 q:
5:          观察 k 条 rollout,统计成功次数 s_q            # 公式 (18)
6:          alpha_q <- alpha_q + s_q; beta_q <- beta_q + (k - s_q)   # 公式 (19-21) 共轭更新
7:          rho_q <- alpha_q / (alpha_q + beta_q)               # 后验均值 = 准确率估计
8:      用公式 (22) 及 rho_q 历史,对所有 q 计算 Delta_q^t
9:      T_low  <- { q : rho_q <= 0.3 };  T_high <- { q : rho_q >= 0.8 }
10:     如果 T_low 中所有 q 都满足 |Delta_q| <= 0.05  且  T_high 中所有 q 都满足 Delta_q <= 0.03:
11:         P <- bottleneck                                          # 公式 (23-24) 同时满足
12:     对本轮采样到的每道题 q:
13:         如果 P == early:
14:             W_D(rho_q) <- 用 (k1, c1, k2, c2) 计算公式 (25)
15:         否则:
16:             W_D(rho_q) <- 用 (k1', c1', k2', c2') 计算公式 (26)      # rho_q = 1 处显式清零
17: 返回本轮每道被采样题目对应的 W_D(rho_q),作用到该题所有轨迹的优势上

注意第 9-11 行的设计细节:瓶颈条件要求同时满足低准确率集合停滞并且高准确率集合放缓——是一个合取,不是析取。这是一个保守的触发条件:只有在”简单题目已经被彻底扫平”和”困难题目已经卡住不动”这两条证据同时出现时,阶段切换才会触发,而不是任何一个信号单独出现就仓促切换。

4.4 一个数值例子:两阶段权重函数的具体取值

为了更直观地理解公式 25 和 26 这两个隆起函数的形状,不妨代入几个具体的 ρq\rho_q(准确率)值算一算。

阶段一(早期,公式 25,k1=1.6,c1=0.2,k2=2,c2=1.2k_1=1.6, c_1=-0.2, k_2=2, c_2=1.2):

  • ρq=0.1\rho_q = 0.1(很难的题):WD=21+e1.6(0.3)11+e2(1.1)=21+e0.4811+e2.221.619×11.1111.235×0.9001.11W_D = \frac{2}{1+e^{-1.6(0.3)}}\cdot\frac{1}{1+e^{2(-1.1)}} = \frac{2}{1+e^{-0.48}}\cdot\frac{1}{1+e^{-2.2}} \approx \frac{2}{1.619}\times\frac{1}{1.111} \approx 1.235\times0.900 \approx 1.11
  • ρq=0.5\rho_q = 0.5(中等难度):WD=21+e1.6(0.7)11+e2(0.7)=21+e1.1211+e1.421.326×11.2471.508×0.8021.21W_D = \frac{2}{1+e^{-1.6(0.7)}}\cdot\frac{1}{1+e^{2(-0.7)}} = \frac{2}{1+e^{-1.12}}\cdot\frac{1}{1+e^{-1.4}} \approx \frac{2}{1.326}\times\frac{1}{1.247} \approx 1.508\times0.802 \approx 1.21——这是这个区间里权重最高的一档,符合论文“早期偏向中等难度题目”的设计意图。
  • ρq=0.9\rho_q = 0.9(已接近掌握):WD=21+e1.6(1.1)11+e2(0.3)=21+e1.7611+e0.621.172×11.5491.706×0.6461.10W_D = \frac{2}{1+e^{-1.6(1.1)}}\cdot\frac{1}{1+e^{2(-0.3)}} = \frac{2}{1+e^{-1.76}}\cdot\frac{1}{1+e^{-0.6}} \approx \frac{2}{1.172}\times\frac{1}{1.549} \approx 1.706\times0.646 \approx 1.10

可以看到,阶段一的权重在 ρq0.5\rho_q\approx 0.5 附近最高(1.21\approx 1.21),向两侧(很难或很简单)衰减但不会归零——早期阶段即使对很难或很简单的题目,仍保留了一定的基础训练权重,只是相对削弱。

阶段二(瑞颈期后,公式 26,k1=4.1,c1=0.1,k2=2,c2=0.9k_1'=4.1, c_1'=-0.1, k_2'=2, c_2'=0.9):

  • ρq=0.1\rho_q = 0.1(仍未解决的难题):(1ρq2)=0.99(1-\rho_q^2)=0.99WD=2×0.991+e4.1(0.2)11+e2(0.8)=1.981+e0.82×11+e1.61.981.440×11.2021.375×0.8321.14W_D = \frac{2\times0.99}{1+e^{-4.1(0.2)}}\cdot\frac{1}{1+e^{2(-0.8)}} = \frac{1.98}{1+e^{-0.82}}\times\frac{1}{1+e^{-1.6}} \approx \frac{1.98}{1.440}\times\frac{1}{1.202} \approx 1.375\times0.832 \approx 1.14
  • ρq=0.5\rho_q = 0.5(中等难度):(1ρq2)=0.75(1-\rho_q^2)=0.75WD=2×0.751+e4.1(0.6)11+e2(0.4)=1.51+e2.46×11+e0.81.51.0855×11.4491.382×0.6900.95W_D = \frac{2\times0.75}{1+e^{-4.1(0.6)}}\cdot\frac{1}{1+e^{2(-0.4)}} = \frac{1.5}{1+e^{-2.46}}\times\frac{1}{1+e^{-0.8}} \approx \frac{1.5}{1.0855}\times\frac{1}{1.449} \approx 1.382\times0.690 \approx 0.95
  • ρq=1.0\rho_q = 1.0(完全掌握):(1ρq2)=0(1-\rho_q^2)=0,无论后面两个 sigmoid 项取值如何,WD=0W_D = 0——完全停止在这些题目上分配任何训练权重。

对比两个阶段在 ρq=0.1\rho_q=0.1 处的权重(1.11 对比 1.14,基本相当)和 ρq=0.5\rho_q=0.5 处的权重(1.21 对比 0.95,瑞颈期后明显下降),可以直观看到公式 26 确实把权重从中等难度题目向左(更难的题目)转移,同时在 ρq=1.0\rho_q=1.0 处彻底清零。

这两个各自独立提出动机的修正项,通过简单相乘的方式组合成最终用于策略梯度更新的优势:

At=WS(Var(τ),R(τ))WD(ρq,tc)At,(27)A'_{t} = W_S(\mathrm{Var}(\tau), R(\tau)) \cdot W_D(\rho_q, t_c) \cdot A_t, \tag{27}

其中 AtA_t 是公式 2 给出的基础 GAE 优势,WSW_S 是第 3 节的随机性修正项(一个轨迹级标量,广播到该轨迹的所有 token 上),WDW_D 是第 4 节的课程权重(一个题目级标量,同样广播到该题在当前课程阶段 tct_c 下所有采样轨迹上)。由于两个因子都是严格正的乘性修正,这保证了基础优势的符号始终被保留——CVPO 永远不会翻转某个 token 的梯度到底是把概率质量往上推还是往下压,它只会重新缩放批次内不同轨迹相对被更新的力度。这是一种相当保守的组合方式:即便 WSW_SWDW_D 调得不太对,也能保证组合机制不会引入病态的符号翻转,代价是没法表达两个信号之间超出简单乘积的交互(比如”专门为低方差的失败案例加大困难题的权重”这种更复杂的组合需求,用纯乘积是表达不出来的)。

5.1 与相关方法的设计对比总览

把 CVPO 与前文提到的几个代表性方法放在一起对比,有助于看清楚它在设计空间中的位置:

方法优势估计方式是否利用轨迹内方差难度课程主要弱点
GRPO组内奖励归一化,无价值模型组内同质时无学习信号;所有 token 同一优势
VC-PPO/VAPOGAE + 长度自适应 + 解耦参数价值估计本身精确但未利用其波动信息
Qu 等人的在线难度预测需额外预测模型有(静态预测)预测模型本身需要额外训练与校准
Parashar 等人的从易到难课程预先分档,固定顺序有(预先固定)无法追踪策略自身能力变化导致的难度漂移
CVPO(本文)GAE + 轨迹内方差不对称加权有(在线贝叶斯追踪)许多手工常数,无算力开销核算,单一模型规模验证

这张表最直接地突出了 CVPO 两个真正新颖的地方:第一,它是这一排方法中唱一个真正利用了轨迹内部方差(而不仅仅是点估计)的;第二,它的难度课程是在线、相对当前策略的,而不是依赖一个预先训练好的预测器或预先固定的分档。代价是它引入了明显更多的手工调参环节(αP,αN,λP,λN\alpha_P, \alpha_N, \lambda_P, \lambda_N 以及两套共 8 个 sigmoid 形状常数),而这些常数的敏感性在论文中并没有得到充分的消融验证(详见第 7 节)。

6. 实验设置与结果

设置。 基座模型是 Qwen2.5-7B,价值模型从同一个 checkpoint 初始化训练。训练数据是 DAPO-Math-17k,一个精心构建的数学推理 RL 数据集;评测用 avg@32 准确率(每道题采样 32 次取平均,这类文献里标准的降方差评测协议),在 AIME 2024、AIME 2025、AMC 2023、AMC 2024 和 MATH-500 上测。奖励纯粹基于规则:最终答案必须出现在 \boxed{} 标签里,或者紧跟在 Answer: 之后另起一行,与标准答案完全匹配得 +1 分,否则 -1 分——没有部分分,没有对推理过程本身的奖励。训练在 64 块 A800(8 个节点,每节点 8 卡)上跑,批大小 256、每个提示词 16 条 rollout、最大回答长度 6144 token,用 AdamW,actor 学习率 1×1061\times10^{-6},critic 学习率 2×1062\times10^{-6},GAE λcritic=0.1\lambda_{\text{critic}}=0.1,长度自适应 GAE 因子 α=0.17\alpha=0.17,折扣因子 γ=1.0\gamma=1.0,非对称 PPO 裁剪范围 ϵlower=0.2, ϵhigher=0.28\epsilon_{\text{lower}}=0.2,\ \epsilon_{\text{higher}}=0.28。值得注意的是,这里没有用对参考策略的 KL 惩罚——作者报告说 KL 约束在回答变长之后会限制有用的策略更新,这和近期其他长链推理 RL 论文放弃 KL 正则化的趋势是一致的。

关于基线方法值得留意的一点。 论文报告说,他们为了给出一个公平的对比,不得不修改了原版 GRPO:普通的 GRPO 在他们的实验设置下出现了”极端的回答长度坍缩”,因此换用了一个”单步异步 GRPO(ASYN)“变体来比较。这一点论文交代得很坦诚,但也意味着表 1 里的 GRPO 基线数字并不是原版 DeepSeek-R1 那种标准 GRPO——在解读 CVPO 相对于”GRPO”的提升幅度时,这一点值得留意。

表 1(论文 Table 1):五个数学基准上的 avg@32 准确率。完整版 CVPO(方差系数 0.3)在每一列都是最好的一行;两个消融变体(只用随机性修正、只用课程学习)都在每一列上超过 VAPO,证明两个组件各自独立地起作用。

核心数字:CVPO 完整配置相对当列次优方法(有时是 VAPO,有时是”只用随机性修正”的 CVPO 变体)分别提升了 9.3%(AIME24)、3.1%(AIME25)、25.2%(AMC23)、12.9%(AMC24)、13.7%(MATH500)。两个单独机制的消融(只用随机性修正、只用动态课程)都在每个基准上单独超过 VAPO 基线,这是论文用来证明两个机制各自独立起作用(而不是一个机制在扛,另一个是摆设)的证据。有意思的是,只用随机性修正的版本在两个单独机制里效果更强——论文的解释是它”扩大了模型探索的上限”,但这个说法没有进一步拆解(如果能进一步分解一下”只用随机性修正”和 VAPO 之间的差距,有多少来自正确轨迹的抑制项、多少来自错误轨迹的鼓励项,会更有说服力)。

图 2(论文 Fig.2):CVPO 对比 VAPO 和 GRPO(ASYN) 在 AIME24 上 2000 多步训练过程中的准确率曲线。CVPO 从训练早期就领先于两个基线,而且值得注意的是,在第 1500 步之后仍在继续提升,此时两个基线早已进入平台期。

图 2 的曲线形状,是论文对课程机制最有力的定性证据:VAPO 和 GRPO(ASYN)(图中的虚线参考线)在 500 步之前就已经进入平台期,而 CVPO 的实线曲线一路爬升到 1500-2000 步。论文的解释是,CVPO 训练早期对中等难度题目的关注带来了快速的初期提升,而在基线曲线趋于平坦的那个时间点附近切换到关注困难题目,正是维持后期持续提升的原因——这个解释和表 1 里的”只用课程学习”消融结果是一致的,但没有被完全独立地证实。

图 3(论文 Fig.3):训练集上轨迹级价值方差的分布,比较了基座模型、VAPO、GRPO(ASYN) 和 CVPO 四条曲线。CVPO 的分布(紫色)明显向右偏移,而另外三条曲线几乎完全重叠。

图 3 是对第 2 节理论主张最直接的实证印证:如果 CVPO 的机制真的在按理论预期发挥作用,那么训练出来的模型应该表现出系统性更高的轨迹级价值方差——图中呈现的正是这个模式:基座模型、VAPO 和 GRPO(ASYN) 三条曲线几乎无法区分(峰值都在方差 0.005\approx 0.0050.010.01 附近),而 CVPO 的分布有明显更肥的右尾和更靠后的峰值(0.01\approx 0.010.0150.015),与公式 15-16 系统性地把那些”要紧”的轨迹(主要是被推动去更多探索的、低方差的错误轨迹)的方差往上推的预期效果一致。论文没有回答的一个合理问题是:这是一个训练后事后测量的训练集分布——展示的是一个已训练好的策略最终呈现出什么样的方差模式,而不是一个有控制的反事实实验,证明方差本身是提升准确率的原因而不仅仅是相关关系。

图 4(论文 Fig.4):CVPO 在三个不同价值方差系数(0.1、0.3、0.5)下,五个基准上的准确率。AMC 系列分数随系数单调提升,但 AIME 分数在 0.3 达到峰值,0.5 时反而下降。

图 4 是论文对整体修正强度(同时缩放 αP,αN\alpha_P, \alpha_N 的单一”系数”)做的敏感性/消融研究。这个模式呈现得很有代表性,也很诚实:把系数调高(更激进的方差修正)在较简单的 AMC 系列基准上单调有帮助(AMC23 从系数 0.1 → 0.3 → 0.5 依次是 65.8% → 72.0% → 76.7%),但在更难的 AIME 系列基准上,过了 0.3 反而变差(AIME24:16.9% → 22.0% → 16.7%;AIME25:8.2% → 13.3% → 11.7%)。论文的解释——系数越大,有效优势幅度越大,导致策略更新幅度越大,从而破坏了困难题目真正需要的更精细的优化过程——听起来是合理的,也和公式 13 的界一致(对 Var(V)\mathrm{Var}(V) 操纵得越猛,允许的梯度范数上限就越大,在那些”正确”更新方向本身就更难估准的困难题目上,越容易矫枉过正)。这是这个机制一个真实的、被披露出来的局限:在这个实验里,不存在一个同时对所有难度都最优的系数值,也就是说表 1 里”CVPO(0.3 方差系数)“这一行头条数字,反映的是这个类似帕累托权衡曲线上一个具体的折中点,而不是一个严格占优的配置。

图 5(论文 Fig.5):训练批次中各准确率区间题目占比的热力图,比较了有(右)无(左)动态课程机制两种情况随训练步数的变化。没有该机制时,题目一直堆积在最低准确率区间(论文的表述是"简单题目陷阱",其实更准确说是困难题目陷阱——题目一直没被解决);有该机制时,后期能明显看到质量转移到最高准确率区间。

图 5 直接可视化了课程机制的预期效果:面板(a),没有动态加权时,最下面一行(ρq0.1\rho_q \approx 0.1 的极低准确率题目)持续存在一条绿/青色的带,1500 步内始终没有清空——这些就是固定权重方案永远没有足够优先级去真正解决的”被落下”的困难题目。面板(b),有该机制时,同一条底部的带在大约第 1000-1100 步左右开始逐渐清空,与此同时最上面一行开始出现明亮的黄色(高占比)区域——意味着此前卡住的低准确率题目,在瓶颈触发的重加权机制生效之后,被成功推到了高准确率区间。这是机制确实按预期起作用的良好定性证据,不过论文自己对面板(a)用”简单题目陷阱”这个描述略有点让人困惑——图中展示的这个失效模式其实是对困难题目训练不足,而不是对简单题目过度训练,两种表述描述的是同一种失效模式的不同侧面,但并不完全等价。

6.1 把图 4 的权衡现象放回到理论上界里理解

回到第 2 节的公式 13,可以把图 4 里观察到的现象用一个具体数字化的方式重新表述一遍。假设方差系数从 0.1 提到 0.5,大致相当于把 αP,αN\alpha_P, \alpha_N 整体放大了 5 倍,进而把 WSW_S 能达到的最大偏离量也放大了大致同样的倍数。根据公式 13,这直接意味着允许的梯度范数上界也随之提高。对于 AMC 这类相对简单、正确方向比较容易估计准的题目,更大的允许更新幅度意味着更快地收敛到正确策略,所以分数单调提升;而对于 AIME 这类推理链条长、正确更新方向本身就难估准的题目,更大的允许更新幅度反而更容易让策略往错误方向迈出大步,所以过了阈值反而下降。这个解释与公式 13 的预测方向一致,但需要注意的是,公式 13 本身并不能推导出“存在一个最优系数”这个结论,因为它只是一个上界,不是关于性能与系数关系的精确建模——图 4 里的最优点完全是实验观察到的,而非从理论推导出来的。

7. 论文自己说了的局限——以及一些没说的

论文本身对一个局限说得比较坦诚:图 4 展示的价值方差系数权衡(帮助 AMC、损害 AIME)是直接呈现出来的,没有粉饰。这是值得肯定的科研态度。

论文表述得不那么直接、或者留给读者自己去发现的局限:

  • 只在单一模型规模、单一领域上做了实验。 所有实验都用 Qwen2.5-7B 在数学推理基准上进行。论文没有任何证据表明该机制在更大规模(比如 70B 以上,那里价值模型训练和校准的成本都更高,也可能改变价值方差信号的可靠性)上是否依然有效,也没有在奖励不是干净二值的非数学推理领域(部分测试用例通过的代码生成、开放式的智能体任务、多轮对话)上验证——公式 15-16 所依赖的”对/错”二元划分,在这些场景里根本不干净地存在。
  • 没有给出实际的计算开销核算。 论文声称这个机制”便宜”(在计算意义上确实如此——算法 1 和算法 2 里的 Beta 后验更新都是 O(批大小)O(\text{批大小}) 的操作,不涉及额外的前向/反向传播),但从没报告过相对 VAPO/GRPO(ASYN) 的实际墙钟时间或 GPU 小时对比来支撑这个说法。考虑到 CVPO 要训练到 2000 步以上才达到报告的效果(图 2),而基线早早就进入了平台期,一个按算力对齐(而不是按步数对齐)的比较(在匹配的 GPU 小时下比准确率,而不是在匹配的步数下比准确率)会是更公平的效率论证——目前还不清楚,如果让 VAPO 用同样的墙钟时间预算持续训练,而不是在它的平台期就掐点比较,CVPO 的优势是否还会一样明显。
  • 课程阈值(0.3/0.05、0.8/0.03)以及 sigmoid 形状常数(k1,c1,k2,c2k_1, c_1, k_2, c_2 及瓶颈阶段带撇号的对应版本)从未被测试敏感性。 正如第 4.1 节讨论的,这些都是作为固定常数给出的,没有像方差系数那样做消融,来展示结果对它们的依赖程度。这种”该消融的没消融、该消融的却做了”的不对称,让人很难判断课程机制本身对它众多手工调好的常数究竟有多脆弱。
  • 理论上界(公式 13)只涉及一个不等式,把方差和梯度的幅度联系起来。 它完全没说梯度的方向,也没说为特定轨迹子集(正如 CVPO 所做的那样)提高 Var(V)\mathrm{Var}(V),是否真的会提升最终更新的质量,而不只是提升它们的大小。实证结果(表 1、图 3)和机制按预期起作用的假设是一致的,但理论本身并不能保证这个结果——它是必要但不充分的支撑,而论文有时候没有清楚地区分”这是证明了的”和”这是实证观察到的”这两件事。
  • 围绕方差信号可能出现的奖励欺骗/退化解的问题没有被讨论。 因为 WSW_S 直接按一个统计量(Var(V)\mathrm{Var}(V))来缩放梯度幅度,而这个统计量本身来自正在被训练的那个价值模型,这里存在一个可能出现的失效模式:价值模型学会产生一些人为的高方差或低方差模式,去”迎合”这个加权函数,而不是真实地反映探索情况——一种 Goodhart 定律式的风险,论文既没有讨论也没有用实验排除(比如可以在训练过程中追踪 Var(V)\mathrm{Var}(V) 与某个独立探索代理——比如逐 token 熵,或者一个 LLM 评判”考虑了多少种不同解题策略”的评分——之间的相关性,看它是否随训练推进而衰减,从而区分”价值模型的方差信号始终是真实探索的忠实代理”和”价值模型已经调整了自己的方差输出,去迎合它所反哺的加权函数”这两种情况)。

另外值得一提的是,图 2 中 CVPO 相对 GRPO(ASYN) 和 VAPO 的领先优势在训练初期就已经建立了起来——大约在第 100-200 步左右,CVPO 的准确率已经追上并超过两个基线的最终平台期水平。这个现象值得特别注意:因为这个阶段还远未达到第 4.1 节定义的“瑞颈”标准(需要两组条件同时满足),这时候应当还处于“早期阶段”,也就是说公式 25 那个偏向中等难度题目的课程权重已经在发挥作用了。这与论文的叙事相一致:CVPO 早期的快速提升主要来自课程机制对中等难度题目的偏重,而不是随机性修正机制(后者的主要作用体现在第 1500 步之后的持续提升上,即瑞颈后转向难题的阶段)。

8. 批判性分析

这篇论文特有的弱点和瑕疵。 全文最强、最新颖的贡献——公式 13 中把 Var(V)\mathrm{Var}(V) 和梯度幅度联系起来的理论上界——确实是一段有用的推理,但它是建立在两次 Cauchy-Schwarz 应用和一个最坏情形协方差假设之上的、相当松的界,所以它的角色更接近”尝试基于方差加权的动机说明”,而不是”证明了这一具体加权方案是正确的”。论文在行文中偶尔会模糊这个区分(比如 6.1 节里那句”理论分析证明合理利用这个方差能提升模型性能的上限”——这句话高估了公式 13 实际证明的东西,它证明的是关于梯度范数的一个界,而不是关于性能上限本身的论断)。一个只看摘要或结论的读者,可能会误以为论文对最终效果提升有一个紧的理论保证,而实际上论文有的是一个合理性论证加上过硬的实证结果。

作者理解得不够充分或者干脆没提的局限。 如前所述,计算开销的核算基本是缺失的——一篇面向昂贵 LLM RL 训练流程(64 块 A800、2000 步以上)提出新训练配方的论文,理应报告墙钟时间或 GPU 小时的对比,而不只是按步数对齐的准确率曲线,尤其是对比基线早早就已经进入平台期的情况下。这里还有一个没被处理的循环性风险:用来度量 Var(V)\mathrm{Var}(V) 的那个价值模型,本身正是被公式 27 中那个又反过来使用了 Var(V)\mathrm{Var}(V) 的训练信号所塑造的模型,论文从来没有研究过这是否会在长时间训练中产生某种反馈回路,从而降低方差信号的可靠性——图 3 里方差分布的偏移与”机制在起作用”这一解释是一致的,但同样也可能只是价值模型本身在一个自指的训练信号下发生了原始校准漂移,论文没有区分这两种可能性。

具体、可操作的改进建议。

  1. 报告按 GPU 小时对齐(而不只是按步数对齐)的准确率曲线,对比 VAPO 和 GRPO(ASYN),同时给出计算 σi\sigma_iμk\mu_k 以及 Beta 后验记账所带来的(如果有的话)额外开销,用具体数字而不是断言来支撑”便宜”这个说法。
  2. 对 sigmoid 陡峭程度参数 λP,λN\lambda_P, \lambda_N,以及四个课程形状常数(k1,c1,k2,c2k_1,c_1,k_2,c_2 以及瓶颈阶段对应的带撇号版本)做一次类似图 4 里方差系数消融那样的敏感性分析——目前这八个数字都只是被断言出来,没有敏感性分析,而这个机制对它们的依赖程度其实并不亚于对那个已经做了消融的系数。
  3. 测试这个机制能否迁移到连续/部分给分的奖励场景(比如按测试用例通过率给分的代码生成,而不是二元的数学正确性判断)——公式 15-16 里整套不对称加权设计都依赖一个干净的二元 R(τ){0,1}R(\tau)\in\{0,1\} 划分,怎么优雅地扩展到非二元奖励,并不显而易见。
  4. 增加一个直接针对循环性担忧的诊断指标:比如在训练过程中追踪 Var(V)\mathrm{Var}(V) 与一个独立的探索代理(比如逐 token 熵,或者一个 LLM 评判者对”考虑了多少种不同解题策略”的评分)之间的相关性,用来区分”价值模型的方差信号在整个训练过程中始终是探索质量的忠实代理”和”价值模型已经适应性地调整了它的方差输出,来迎合它所反哺的加权函数”这两种情况。

8.1 对未来工作的建议优先级

如果要对上述四条改进建议排个优先级,第 2 条(对课程常数做敏感性分析)可能性价比最高——它仅需要在已有训练代码上重新跑几组实验,不需要重新设计评估协议或新增数据集,而且能直接回答读者最关心的问题:这个方法到底有多依赖这些手工调好的常数?相比之下,第 1 条(GPU 小时对齐)和第 3 条(跨领域泛化)需要更多额外的实验资源投入,优先级可以排在靠后。

9. 可复现性说明

论文报告了复现主实验(5.1 节)所需的完整超参数:基座模型(Qwen2.5-7B)、训练数据(DAPO-Math-17k)、奖励规则(\boxed{}Answer: 之后精确匹配,+1/-1)、优化器(AdamW,actor 学习率 1×1061\times10^{-6},critic 学习率 2×1062\times10^{-6})、批次构成(批大小 256,每个提示词 16 条 rollout,最大回答 6144 token)、GAE 设置(λcritic=0.1\lambda_{\text{critic}}=0.1,长度自适应因子 α=0.17\alpha=0.17γ=1.0\gamma=1.0)、裁剪范围(ϵlower=0.2\epsilon_{\text{lower}}=0.2ϵhigher=0.28\epsilon_{\text{higher}}=0.28)、正向 LM 损失系数 μ=0.1\mu=0.1、价值模型预热步数(21 步)、硬件配置(64 块 A800)。就复现训练运行的宏观配置而言,这已经是一份相当完整的清单。

没有被完全给出、无法精确复现的部分:公式 15-16 中的增益参数 αP,αN\alpha_P, \alpha_N 的具体数值,正文中从未直接给出——只报告了图 4 消融中用到的整体”方差系数”(0.1/0.3/0.5),也没有明确说明这个单一系数是怎么映射到 αP\alpha_PαN\alpha_N 各自的数值上的(是同等缩放的,还是保留了某种隐含的不对称?)。类似地,λP\lambda_PλN\lambda_N(sigmoid 陡峭程度)被描述为”固定的”,但没有给出具体数值。论文里也没有提供代码仓库链接。要认真复现这个方法,要么联系作者索要缺失的常数,要么以表 1 报告的数字为目标反推做网格搜索来估计合理值——考虑到完整方法涉及的相互作用超参数之多(方差系数、课程阈值、sigmoid 形状常数),这都不是一件轻松的事。

9.1 超参数清单一览(已报告 vs. 未报告)

为了让想要复现这个方法的读者一目了然,把论文中报告过和没报告的超参数汇总到一张表里:

超参数是否在论文中给出具体数值备注
actor/critic 学习率1×1061\times10^{-6} / 2×1062\times10^{-6}
批大小、rollout 数、最大回答长度256 / 16 / 6144
GAE λcritic\lambda_{\text{critic}}、长度自适应因子 α\alphaγ\gamma0.1 / 0.17 / 1.0
PPO 裁剪范围 ϵlower,ϵhigher\epsilon_{\text{lower}}, \epsilon_{\text{higher}}0.2 / 0.28
正向 LM 损失系数 μ\mu0.1
价值模型预热步数21 步
方差系数(整体缩放 αP,αN\alpha_P, \alpha_N部分(仅消融值)0.1 / 0.3 / 0.5,但 αP,αN\alpha_P, \alpha_N 各自的具体数值未给出
sigmoid 陡岭程度 λP,λN\lambda_P, \lambda_N只说“固定”,无具体数值
课程阶段一 sigmoid 常数 k1,c1,k2,c2k_1, c_1, k_2, c_21.6 / -0.2 / 2 / 1.2
课程阶段二 sigmoid 常数 k1,c1,k2,c2k_1', c_1', k_2', c_2'4.1 / -0.1 / 2 / 0.9
停滞检测阈值(0.3/0.05、0.8/0.03)但无敏感性分析
代码仓库链接论文中未提供

这张表格外直观地显示了一个不对称性:课程机制的具体常数给得比较完整(四个 sigmoid 参数都给了具体数值),但它们的敏感性从未被消融验证;而随机性修正机制的关键常数(λP,λN\lambda_P, \lambda_N)则连具体数值都没有给出,只能依靠那个整体缩放的“方差系数”去推测。对于一个想要完全精确复现该方法的团队来说,这意味着必须自己对 λP,λN\lambda_P, \lambda_N 做网格搜索,并以表 1 中报告的最终准确率作为目标来验证自己的选择是否合理。

10. 结语

CVPO 提出了一个真正有意思的观察——一个价值模型在一条轨迹内部的方差,而不只是它的点估计,携带着关于实际发生了多少探索的有用信号——并且用一段简洁(虽然偏松)的理论推导,把方差和策略梯度幅度联系了起来。再叠加一个能随着模型自身能力变化持续调整难度判断的贝叶斯难度追踪器,最终得到的方法在标准数学推理基准上、用一个 7B 模型,相对 VAPO 和一个经过强化处理的 GRPO 基线,展现出一致且可观的提升——而且,很难得的是,论文对至少一个真实存在的权衡(方差系数在较易基准上有帮助、但过了阈值会损害较难基准)是坦诚披露的。这项工作最能进一步加强的几个方向,恰恰是那种通常留给后续论文去补的类型:按算力对齐的对比、对课程机制里众多手工调参常数的消融、以及证明这个机制能超越单一规模、纯数学、二元奖励的设定而泛化开来的证据。对于今天正在搭建面向推理能力的 RL 训练流水线的团队来说,最值得带走的,可能不是”照搬 CVPO 的具体配置”,而是背后这个更通用的想法:一个训练出来的价值模型,本身已经蕴含着一个值得挖掘的二阶探索信号,而且从你已经在计算的统计量里,就能几乎零成本地把它提取出来。

最后再补充一句:这篇论文可以看作 VAPO/VC-PPO 这一支基于价值的 RL 路线,在与纯 GRPO 路线的竞争中继续深化自身优势的一次尝试——它的核心赌注是,既然已经为了训练价值模型付出了额外的计算和工程成本,就应该把这个价值模型能提供的信息用到极致,而不只是当作一个单纯的基线减器。这个赌注本身是合理的,但能否在更大规模、更广领域的训练中持续回报,仍然是一个开放问题。