VAPO:面向长链推理的价值增强近端策略优化

笔记日期: 2026-06-09 笔记作者: Zhongzhu Zhou 论文标题: VAPO: Efficient and Reliable Reinforcement Learning for Advanced Reasoning Tasks 作者: Yu Yue, Yufeng Yuan, Qiying Yu, Xiaochen Zuo, Ruofei Zhu, Wenyuan Xu, Jiaze Chen, Chengyi Wang, TianTian Fan, et al.(ByteDance Seed) arXiv: 2504.05118 状态 / Venue: arXiv 预印本(2025 年 4 月 11 日)

一句话总结

VAPO 证明了只要正确解决价值模型偏差、异构序列长度和稀疏奖励三大工程难题,基于价值模型的 PPO 框架比无价值模型的 GRPO/DAPO 性能上限更高——在 Qwen2.5-32B 上将 AIME 2024 得分从 DAPO 的 ~50 提升到 60.4,仅用 5000 步,全程无训练崩溃。

前置知识:读这篇论文你需要先了解什么

1. 把语言模型生成看作强化学习问题

强化学习(RL)的核心是:一个智能体(agent)在与环境交互时,通过反复试错来学习能够最大化累积奖励的策略(policy)

把 LLM 的文本生成放到 RL 框架里,对应关系是这样的:

RL 概念LLM 生成的对应
状态 sts_t目前已生成的所有 token(提示词 + 回答前 tt 个 token)
动作 ata_tt+1t+1 个 token(从词表中选择)
策略 πθ\pi_\theta语言模型本身(输出下一个 token 的概率分布)
奖励 rTr_T最终回答的正确性(数学题对/错,代码能跑/不能)
Episode一次完整的回答生成过程

对于数学竞赛这类可验证任务,奖励是极度稀疏的:整个序列只有最后一个 token(<eos>)会得到 +1(正确)或 0(错误),其余每步奖励全为 0。这给学习信用分配带来了极大挑战——模型必须从一个数千 token 生成序列的最终结果来判断哪里做对了、哪里做错了。

正式写出 RL 的优化目标(KL 正则化形式):

π=argmaxπEπ,s0d0 ⁣[t=0H ⁣(R(st,at)βKL(π(st)πref(st)))](1)\pi^* = \arg\max_{\pi}\,\mathbb{E}_{\pi,\,s_0\sim d_0}\!\left[\sum_{t=0}^{H}\!\bigl(R(s_t,a_t) - \beta\,\mathrm{KL}(\pi(\cdot|s_t)\|\pi_\mathrm{ref}(\cdot|s_t))\bigr)\right] \tag{1}

其中 HH 是回答的 token 总数,β\beta 是 KL 惩罚系数(控制策略偏离参考策略多远),πref\pi_\mathrm{ref} 通常是 SFT 之后的初始策略。加 KL 惩罚是为了防止模型学出极端或乱码输出。

2. PPO:带裁剪的近端策略优化

PPO 是最经典的 RL 策略梯度算法,其核心思想是:每次更新不能让策略改变太多,否则训练会不稳定

设新策略 πθ\pi_\theta 和旧策略 πθold\pi_{\theta_\text{old}} 的概率比为 rt(θ)=πθ(atst)/πθold(atst)r_t(\theta) = \pi_\theta(a_t|s_t)/\pi_{\theta_\text{old}}(a_t|s_t),PPO 的裁剪目标为:

LCLIP(θ)=E^t ⁣[min ⁣(rt(θ)A^t,  clip(rt(θ),1ϵ,1+ϵ)A^t)](2)\mathcal{L}^\mathrm{CLIP}(\theta) = \hat{\mathbb{E}}_t\!\left[\min\!\left(r_t(\theta)\hat{A}_t,\;\mathrm{clip}(r_t(\theta),1-\epsilon,1+\epsilon)\hat{A}_t\right)\right] \tag{2}

这里 A^t\hat{A}_t优势估计,表示在状态 sts_t 时选择动作 ata_t 比平均策略”好多少”。ϵ\epsilon(通常取 0.2)限制了每次更新中策略比率的偏移范围。

直觉解释:如果某个 token 的优势为正(说明这步是好的),PPO 会提高该 token 的概率,但裁剪保证提升幅度不会太激进;如果优势为负,则降低概率,同样有上限。

3. 广义优势估计(GAE):如何计算 A^t\hat{A}_t

PPO 需要在每个 token 位置估计优势 A^t\hat{A}_t。这需要一个价值模型 Vϕ(st)V_\phi(s_t)(预测从状态 sts_t 出发能获得的期望累积奖励)。

TD 残差

δt=rt+γVϕ(st+1)Vϕ(st)(3)\delta_t = r_t + \gamma V_\phi(s_{t+1}) - V_\phi(s_t) \tag{3}

GAE 优势估计(将多步 TD 残差加权求和):

A^t=l=0Tt1(γλ)lδt+l(4)\hat{A}_t = \sum_{l=0}^{T-t-1}(\gamma\lambda)^l \delta_{t+l} \tag{4}

λ[0,1]\lambda \in [0,1] 是关键超参,控制偏差-方差权衡

  • λ=0\lambda = 0:仅用一步 TD,低方差但高偏差(完全依赖价值模型,如果模型不准就完全错)
  • λ=1\lambda = 1:完整蒙特卡洛回报,无偏差但高方差(每条轨迹的随机性全部累积)

价值模型的训练目标:用监督学习让 Vϕ(st)V_\phi(s_t) 拟合蒙特卡洛回报 Gt=ltγltrlG_t = \sum_{l\geq t}\gamma^{l-t}r_l

LV=E(st,Gt) ⁣[(Vϕ(st)Gt)2](5)\mathcal{L}_V = \mathbb{E}_{(s_t,G_t)}\!\left[(V_\phi(s_t) - G_t)^2\right] \tag{5}

4. 无价值模型方法:GRPO 和 DAPO

**GRPO(Group Relative Policy Optimization)**由 DeepSeekMath 引入,完全绕开了价值模型。做法是:对每个提示词采样 GG 条回答,用组内平均奖励作为基准:

A^i=riμGσG(6)\hat{A}_i = \frac{r_i - \mu_G}{\sigma_G} \tag{6}

其中 μG\mu_GσG\sigma_G 是这 GG 条回答的奖励均值和标准差。组内归一化后,奖励高于均值的回答获得正优势,低于的获得负优势。

GRPO 优点:简单稳定,不需要维护额外的价值模型。缺点:每条回答里所有 token 的优势完全相同,无法做精细的 token 级信用分配。

DAPO 在 GRPO 基础上加了两个改进:

  • Clip-Higher:将裁剪范围改为非对称(正方向更宽),鼓励从成功样本中更快学习
  • Token-level Loss:按总 token 数归一化梯度,而非按序列数

DAPO 在 Qwen2.5-32B 上 AIME 2024 得分约为 50。

5. 自我模仿学习(SIL)

SIL(Self-Imitation Learning)是一种离线 RL 技术:将历史上获得高奖励的轨迹保存在重放缓冲区 B\mathcal{B} 中,定期把这些”成功经验”以监督学习的方式回放给策略,确保模型不会遗忘曾经探索到的正确路径。

论文做了什么

VAPO 的核心主张:基于价值模型的 RL 具有比无价值模型方法更高的性能上限,前提是解决三个关键工程问题:

挑战问题现象VAPO 的解法
价值模型偏差价值网络在长轨迹上冷启动偏差大,导致优势估计错误价值预训练 + 解耦 GAE
异构序列长度短/长回答需要不同的偏差-方差权衡,固定 λ\lambda 两头都不优长度自适应 GAE(论文核心贡献)
稀疏奖励仅终端奖励,探索效率极低Clip-Higher + SIL + 分组采样

最终结果:Qwen2.5-32B 上 AIME 2024 得分 60.4,比 DAPO 高出超过 10 分,仅需 5000 步,且多次独立运行从未出现训练崩溃

flowchart TD
    A["预训练 LLM\nQwen2.5-32B"] --> B["阶段0:价值模型预训练\n用 SFT 策略的轨迹\n初始化价值头"]
    B --> C["VAPO RL 循环"]
    C --> D["分组采样\n每个提示词生成 G=8 条回答"]
    D --> E["验证器打分\n二元奖励 0/1"]
    E --> F["解耦 GAE 优势估计\nK_v 步单独更新价值模型"]
    F --> G["长度自适应 GAE\nλ 随序列长度动态调整"]
    G --> H["Clip-Higher 损失\n非对称裁剪 ε_high > ε_low"]
    H --> I["Token 级策略更新"]
    I --> J[["SIL 重放\n从高奖励缓冲区\n定期回放成功轨迹"]]
    J --> C
    C --> K["更新后的策略模型"]

图 1:VAPO 系统架构 — 从预训练基础模型开始,经过价值预训练暖机,进入在线 RL 循环:分组采样 → 验证器打分 → 解耦 GAE + 长度自适应 GAE 计算优势 → Clip-Higher Token 级策略更新 → SIL 重放高奖励轨迹。

挑战一:价值模型偏差

问题深挖

在标准 PPO 里,价值网络和策略网络共享预训练参数,在 RL 中共同更新。这在长链推理场景下产生两个叠加问题:

冷启动偏差:RL 开始时,价值头从未见过 RL 轨迹,预测的 Vϕ(st)V_\phi(s_t) 几乎完全是随机的。基于这些随机预测计算出的 TD 残差 δt\delta_t 必然是错误的。由于 GAE 把多步 TD 残差加权求和,早期每个位置的优势估计都被污染,策略在错误的方向上更新,引发训练崩溃。

长轨迹自举误差积累:即使价值模型已经部分收敛,对于一个 4000 token 的推理链,VϕV_\phi 在每个中间状态 sts_t 必须预测该状态之后 3000+ 步内能否得到正确答案。这是极难的回归任务,预测误差在 GAE 的求和中层层叠加。

数值示例:假设真实价值是 0.6(60% 最终正确),但 VϕV_\phi 估计为 0.1。那么 TD 残差会系统性偏高,导致前期所有 token 的优势被夸大,策略往”似乎很好”但实际是错误的方向更新。

解法:价值预训练 + 解耦 GAE

价值预训练(Value Pretraining):在 RL 开始之前,冻结策略,用 SFT 策略的采样轨迹对价值头做监督学习:

LV=E(st,Gt) ⁣[(Vϕ(st)Gt)2](5)\mathcal{L}_V = \mathbb{E}_{(s_t,\,G_t)}\!\left[(V_\phi(s_t) - G_t)^2\right] \tag{5}

这让价值模型在接触 RL 梯度之前,已经对”在当前策略的分布下哪些状态好、哪些状态差”有了基本认知,大幅降低冷启动偏差。

解耦 GAE(Decoupled-GAE):VC-PPO 提出的方案,VAPO 继承。核心思想:把价值模型更新和策略更新解耦成两个独立阶段——先用新轨迹更新价值模型(Kv=4K_v = 4 步),再用最新价值模型估计优势,最后才更新策略。

算法 1:解耦 GAE 更新(伪代码)
──────────────────────────────────────────────
输入:策略 π_θ,价值模型 V_φ,轨迹缓冲区 B

步骤 1:采集轨迹
  对批次中每个提示词 x:
    从 π_θ 采样 G 条回答 {y_1,...,y_G}
    用验证器得奖励 {r_1,...,r_G} ∈ {0,1}
    保存 (x, y_i, r_i) 入缓冲区 B
    把 r_i=1 的最优轨迹存入 SIL 缓冲区

步骤 2:价值模型更新(先做,K_v 步)
  重复 K_v 次:
    计算蒙特卡洛目标 G_t ← r_{terminal}
    最小化 L_V = E[(V_φ(s_t) - G_t)^2]     [式 5]
    更新 φ ← φ - α_v · ∇_φ L_V

步骤 3:优势估计(用刚更新好的 V_φ)
  对缓冲区中每个 (s_t, a_t, r_t):
    L = 此轨迹的序列长度
    λ_t = 长度自适应公式 [式 7]
    δ_t = r_t + γ·V_φ(s_{t+1}) - V_φ(s_t)    [TD 残差]
    Â_t = Σ_{l≥0} (γλ_t)^l · δ_{t+l}         [自适应 GAE]

步骤 4:策略更新(K_π 步)
  最小化 L_CLIP(Clip-Higher + Token 级归一化)[式 9-10]
  更新 θ ← θ - α_π · ∇_θ L

步骤 5(每 N_sil 步):SIL 重放
  从 SIL 缓冲区采样批次
  最小化 L_SIL = -E[log π_θ(y*|x)]        [式 11]
──────────────────────────────────────────────

关键洞察:步骤 4 的策略梯度用的是步骤 2 刚刚更新过的价值模型,而非上一轮 RL 步骤遗留的旧版本。这一时序上的解耦直接减少了因价值模型滞后导致的优势偏差。

挑战二:异构序列长度

问题深挖

长链推理训练数据中,不同题目的回答长度差异极大:简单计算题可能只需 200 个 token,而 AIME 难题的完整推导过程可能超过 8000 个 token。

固定 λ\lambda 为什么不够用?

对于短回答(200 token),自举步数少,VϕV_\phi 预测误差累积有限。此时用较低的 λ\lambda(如 0.3)——更倾向单步 TD——既低方差又偏差可控。

对于长回答(8000 token),VϕV_\phi 要预测 7999 步后的结果,估计误差极大。若用低 λ\lambda,每个 token 的优势估计几乎完全依赖 VϕV_\phi(一个不准确的模型),结果充满噪音。此时应用高 λ\lambda(如 0.95)——让优势估计更多依赖真实奖励的蒙特卡洛累积,减少对不可信价值模型的依赖。

用同一个固定 λ\lambda 既要适应 200 token 的短回答,又要适应 8000 token 的长回答,是一个无解的折衷。

解法:长度自适应 GAE(VAPO 的核心创新)

长度自适应 GAEλ\lambda 成为序列长度 LL 的函数:

λ(L)=λmin+(λmaxλmin)σ ⁣(LμLσL)(7)\lambda(L) = \lambda_{\min} + (\lambda_{\max} - \lambda_{\min}) \cdot \sigma\!\left(\frac{L - \mu_L}{\sigma_L}\right) \tag{7}

其中 σ()\sigma(\cdot) 是 Sigmoid 函数,μL\mu_LσL\sigma_L 是当前批次中所有序列长度的均值和标准差,λmin=0.3\lambda_{\min} = 0.3λmax=0.95\lambda_{\max} = 0.95

graph LR
    A["序列长度 L"] --> B["标准化\n(L - μ_L) / σ_L"]
    B --> C["Sigmoid 映射\nσ(·) ∈ (0,1)"]
    C --> D["λ(L) = 0.3 + 0.65·σ(·)"]
    D --> E["短回答 L≪μ_L\n→ λ ≈ 0.3\n低偏差低方差"]
    D --> F["长回答 L≫μ_L\n→ λ ≈ 0.95\n减少对 V_φ 的依赖"]

图 2:长度自适应 GAE 映射 — Sigmoid 函数保证从短到长的平滑连续过渡,批次统计量 (μL,σL)(\mu_L, \sigma_L) 提供自动归一化,避免手工调整阈值。

为什么选 Sigmoid?

  1. 输出自然落在 (0,1)(0,1),无需额外截断,λ(L)\lambda(L) 始终合法
  2. 单调递增,长序列始终映射到更高 λ\lambda,保证方向一致
  3. 光滑可微,不会在损失曲面产生间断点
  4. 拐点恰好在 L=μLL = \mu_L(批均值),天然以平均序列长度为分界

数学展开:为什么高 λ\lambda 对长序列有帮助

GAE 的方差可以近似表示为:

Var[A^t]l=0Tt1(γλ)2lVar[δt+l](8)\mathrm{Var}[\hat{A}_t] \approx \sum_{l=0}^{T-t-1}(\gamma\lambda)^{2l}\,\mathrm{Var}[\delta_{t+l}] \tag{8}

λ\lambda 较小时,只有前几项 δt+l\delta_{t+l}ll 小)对方差有显著贡献。这些项中 Vϕ(st+l)V_\phi(s_{t+l}) 是对近期状态的估计——对于长回答的早期 token,这些”近期”中间状态的价值函数也很难准确估计(距终端奖励仍有数千步),导致 Var[δt+l]\mathrm{Var}[\delta_{t+l}] 依然很大。

λ\lambda 较高时,更多项参与求和,但每一项的权重 (γλ)2l(\gamma\lambda)^{2l} 更均匀分布。对于可验证任务(奖励为确定性的验证器给出),真实奖励的方差为 0,蒙特卡洛积累项的方差主要来自轨迹的随机性(探索),而非价值模型噪声。高 λ\lambda 让优势估计更多来自真实奖励信号,减少对高噪声 VϕV_\phi 中间估计的依赖。

挑战三:稀疏奖励

问题深挖

数学竞赛任务的奖励只在最后一个 token 给出(对/错),中间每步奖励全为 0。这导致:

  1. 梯度信号极弱:4000 token 的回答只在最后才知道对不对,早期 token 的梯度几乎全靠价值模型的自举,而价值模型本身就不准
  2. 探索陷阱:一旦策略找到某种能偶尔做对题的模式,稀疏奖励没有梯度引导它改进中间推理步骤
  3. 崩溃风险:如果全部回答都是 0 奖励,梯度信号消失,策略无法进化

解法一:Clip-Higher(来自 DAPO)

标准 PPO 对概率比对称裁剪:[1ϵ,1+ϵ][1-\epsilon, 1+\epsilon],即增大/减小某个 token 的概率,上限相同。

Clip-Higher 改为非对称裁剪:

LCH(θ)=E^t ⁣[min ⁣(rt(θ)A^t,  clip(rt(θ),1ϵlow,1+ϵhigh)A^t)](9)\mathcal{L}^\mathrm{CH}(\theta) = \hat{\mathbb{E}}_t\!\left[\min\!\left(r_t(\theta)\hat{A}_t,\;\mathrm{clip}(r_t(\theta),\,1-\epsilon_\mathrm{low},\,1+\epsilon_\mathrm{high})\hat{A}_t\right)\right] \tag{9}

其中 ϵhigh>ϵlow\epsilon_\mathrm{high} > \epsilon_\mathrm{low}(VAPO 取 ϵlow=0.2\epsilon_\mathrm{low}=0.2ϵhigh=0.28\epsilon_\mathrm{high}=0.28)。

graph LR
    A["Token 优势 > 0\n(这步是对的)"] --> B["上界放宽到 1+0.28\n每步可以更大幅度\n提高此 token 概率"]
    C["Token 优势 < 0\n(这步是错的)"] --> D["下界保持 1-0.2\n降低概率时仍保守"]
    B --> E["稀疏正奖励下\n成功样本的学习信号更强"]
    D --> E

图 3:Clip-Higher 非对称裁剪 — 正优势 token(成功的步骤)获得更大的概率提升空间,在稀疏奖励场景中最大化从少数成功轨迹中提取的梯度信号。

为什么有效:在数学竞赛任务中,模型训练初期正确回答极少(可能 G=8 条里只有 0-1 条对),正优势 token 非常稀缺。放宽正方向的裁剪让这少数成功信号能更快改变策略,相当于”用足”每一次成功的学习机会。

替代方案对比:完全不裁剪( ϵ=1\epsilon = 1)会导致策略在单次更新中大幅偏移,引发训练不稳定。保持对称裁剪(如标准 PPO)则学习速度慢。Clip-Higher 是一个有理论依据的折衷。

解法二:Token 级损失(来自 DAPO)

标准 PPO 按序列数归一化损失:

Lseq=1Ni=1N1Lit=1LiLi,t\mathcal{L}^\mathrm{seq} = \frac{1}{N}\sum_{i=1}^{N}\frac{1}{L_i}\sum_{t=1}^{L_i}\mathcal{L}_{i,t}

问题:一条 200 token 的短回答和一条 8000 token 的长回答,各占总梯度的 1/N1/N,但后者携带的推理信息远多于前者。

Token 级损失改为按总 token 数归一化:

LTL=1iLiit=1LiLi,t(10)\mathcal{L}^\mathrm{TL} = \frac{1}{\sum_i L_i}\sum_i\sum_{t=1}^{L_i}\mathcal{L}_{i,t} \tag{10}

每个 token 对梯度的贡献完全相等,长回答不再被稀释,短回答不会被过度放大。

解法三:自我模仿学习(SIL)

VAPO 维护一个重放缓冲区 B\mathcal{B},存储训练过程中奖励最高的 top-kk 条轨迹。每隔 NsilN_\mathrm{sil} 步,从 B\mathcal{B} 中采样一批轨迹,计算模仿损失:

LSIL=E(x,y)B ⁣[tlogπθ(ytst)](11)\mathcal{L}^\mathrm{SIL} = -\mathbb{E}_{(x,y^*)\sim\mathcal{B}}\!\left[\sum_t \log\pi_\theta(y_t^*|s_t)\right] \tag{11}

这本质上是对历史最优轨迹的监督学习。当在线 RL 因稀疏奖励陷入低梯度区时,SIL 提供了额外的正梯度信号,推动策略往”曾经成功过的推理路径”方向移动。

与直接 SFT 的区别:SIL 缓冲区中的轨迹是模型自己探索出来的成功路径,而非人工标注的参考答案。这保留了 RL 探索发现新解法的能力,同时防止策略忘记已有的成功经验。

完整算法

将以上所有组件整合:

算法 2:VAPO 完整训练流程
──────────────────────────────────────────────────────────────
初始化:
  π_θ    ← Qwen2.5-32B(实验中不使用 SFT 数据)
  V_φ    ← π_θ 的副本 + 价值头(线性层:hidden → scalar)
  B      ← SIL 重放缓冲区(容量 K 条轨迹)
  数据集 D ← MATH 竞赛题(AIME/AMC/MATH-500 类型)

阶段 0:价值预训练(Phase 0)
  重复 T_pre 步:
    从 D 采样一批提示词 X
    用冻结的 π_θ 生成回答,验证器打分
    计算每个 token 的蒙特卡洛回报 G_t ← r_terminal
    更新 V_φ:最小化 L_V = E[(V_φ(s_t) - G_t)^2]

阶段 1:VAPO RL 循环(Phase 1)
  重复 T_rl 步(论文实验 5000 步):
  
  ── 轨迹采集 ──────────────────────────────────────
    从 D 采样批次提示词 X
    对每个 x ∈ X:
      分组采样 G=8 条回答 {y_1,...,y_G} ← π_θ(概率采样,温度>0)
      验证器给奖励 {r_1,...,r_G} ∈ {0,1}
      若 r_i=1 则将 (x, y_i) 加入 SIL 缓冲区 B
  
  ── 价值模型更新(解耦 GAE 第一步)──────────────
    重复 K_v=4 次:
      从轨迹缓冲区计算回报目标 G_t
      更新 V_φ:最小化 L_V [式 5]
  
  ── 优势估计(解耦 GAE 第二步)────────────────
    对缓冲区每条轨迹:
      L = 序列长度;计算批次统计量 μ_L,σ_L
      λ = 0.3 + 0.65·σ((L - μ_L)/σ_L)     [式 7,自适应]
      δ_t = r_t + γ·V_φ(s_{t+1}) - V_φ(s_t)
      Â_t = Σ_{l≥0} (γλ)^l · δ_{t+l}
  
  ── 策略更新 ──────────────────────────────────────
    重复 K_π 次:
      计算 Clip-Higher 损失 L^CH [式 9]
      按总 token 数归一化 → L^TL [式 10]
      更新 θ ← θ - α_π · ∇_θ L^TL
  
  ── SIL 回放(每 N_sil 步) ──────────────────────
    从 B 采样批次 {(x, y*)}
    更新 θ:最小化 L^SIL [式 11]

输出:更新后的策略 π_θ
──────────────────────────────────────────────────────────────

实验与结果

实验设置

  • 基础模型:Qwen2.5-32B(无 SFT 冷启动,保持与 DAPO 的对比公平性)
  • 训练数据:MATH 竞赛类题目,不引入 SFT 数据
  • 评估基准:AIME 2024(30 道题,average@16 通过率)、AMC 2023、MATH-500
  • 关键超参G=8G=8ϵlow=0.2\epsilon_\mathrm{low}=0.2ϵhigh=0.28\epsilon_\mathrm{high}=0.28λmin=0.3\lambda_\mathrm{min}=0.3λmax=0.95\lambda_\mathrm{max}=0.95Kv=4K_v=4

主要结果对比

方法框架类型AIME 2024训练步数
原版 PPO基于价值模型~5
GRPO无价值模型~40
DeepSeek-R1-Zero(Qwen32B)无价值模型~50~10000+
DAPO无价值模型~50~10000
VAPO(本文)基于价值模型60.45000

亮点解读:

  1. +10 分的绝对提升:VAPO 比此前 SOTA 的无价值模型方法 DAPO 高出 10 分以上,对于 30 道题的 AIME 来说,这意味着多答对了 3 道题。

  2. 更快收敛:5000 步 vs. DAPO 的约 10000 步,训练预算减半。

  3. 训练稳定性:多次独立运行无崩溃,曲线高度可复现。相比之下,原版 PPO 训练极易发散(得分仅 ~5),说明价值模型工程的改进是核心。

  4. 从 5 到 60 的飞跃:PPO + VAPO 全套改进让 Qwen2.5-32B 在 AIME 上从 ~5 分跃升到 60.4 分,证明了工程改进的巨大潜力,而非仅靠更大的模型或更多数据。

xychart-beta
    title "AIME 2024 得分 vs. 训练步数(示意)"
    x-axis ["0", "1000", "2000", "3000", "4000", "5000"]
    y-axis "AIME 2024 得分" 0 --> 65
    line [5, 20, 35, 47, 55, 60.4]
    line [5, 14, 24, 34, 43, 50]

图 4:VAPO vs. DAPO 训练曲线(示意图) — VAPO(上曲线)在约 5000 步达到 60.4,DAPO(下曲线)约需 10000 步达到 50。两者均使用 Qwen2.5-32B,不使用 SFT 数据。

消融实验

配置AIME 2024相对 Full VAPO
完整 VAPO60.4
- 长度自适应 GAE(改为固定 λ)~54-6.4
- 价值预训练(冷启动价值头)~53-7.4
- 解耦 GAE(联合更新)~56-4.4
- Clip-Higher(改对称裁剪)~57-3.4
- Token 级损失(改序列级)~56-4.4
- SIL(去掉重放缓冲区)~58-2.4
全部去掉(= 原版 PPO)~5-55.4

(注:绝对数字为根据论文相对贡献描述的估算值,原文以相对 delta 形式报告。)

消融分析

  • 价值预训练 是单项贡献最大的改进。没有它,价值网络冷启动偏差过大,训练等同于退化的 PPO。
  • 长度自适应 GAE 是第二大贡献。验证了异构序列长度假说的正确性。
  • 所有组件缺一不可:每去掉一项都有明显下降,说明各组件之间是互补而非冗余的关系。

架构细节

价值头设计

graph LR
    A["输入 tokens\ns_t = (提示词, y_0...y_t)"] --> B["Transformer 共享主干\nQwen2.5-32B\n(32B 参数)"]
    B --> C["策略头\n输出:P(a|s_t)\n词汇表分布"]
    B --> D["价值头\n线性层 hidden→1\n输出:V_φ(s_t) 标量"]
    C --> E["token 采样\n策略梯度更新"]
    D --> F["GAE 优势估计\n价值损失更新"]

图 5:共享主干 + 双头架构 — 策略头和价值头共用同一个 Qwen2.5-32B Transformer 提取特征,解耦更新确保价值优化不干扰策略梯度,反之亦然。

价值头是一个简单的线性映射,接受最后一个 token 的隐层状态(代表整个序列的上下文),输出单个标量。在价值预训练阶段,主干参数冻结,只训练价值头;在 RL 阶段,整个网络共同更新,但按解耦 GAE 的时序分离价值更新和策略更新。

与已有方法的对比谱系

graph TD
    A["PPO, 2017\n基于价值模型\nCLIP + GAE"] --> B["InstructGPT, 2022\nPPO 用于 RLHF 对齐"]
    A --> C["VC-PPO\n价值预训练 + 解耦 GAE"]
    A --> D["GRPO, 2024(DeepSeekMath)\n无价值模型\n组内奖励均值作基准"]
    D --> E["DeepSeek-R1-Zero\n纯 GRPO 大规模训练"]
    D --> F["DAPO\nClip-Higher + Token 级损失"]
    C --> G["VAPO(本文)\nVC-PPO + DAPO 技术 +\n长度自适应 GAE + SIL +\n分组采样"]
    F --> G
    D --> G

图 6:VAPO 的技术谱系 — VAPO 综合了 PPO 的价值模型框架、VC-PPO 的价值校准方法、GRPO 的分组采样机制、以及 DAPO 的 Clip-Higher 和 Token 级损失,并在此基础上加入了原创的长度自适应 GAE。

局限与边界条件

论文明确指出或隐含的几个局限:

  1. 单一模型规模:所有实验仅用 Qwen2.5-32B。对于 7B 以下小模型(价值学习可能更困难)或 70B+ 大模型(训练成本更高)是否适用,没有实验支撑。

  2. 任务域局限:仅在数学竞赛题(清晰的二元验证奖励)上测试。对代码生成、工具调用、多轮对话等场景的推广性未经验证。

  3. 纯 RL(无 SFT 热启动):为与 DAPO 对比公平,实验没有使用 SFT 数据。实际生产流程通常从 SFT 检查点开始 RL,VAPO 在此设置下的优势幅度可能有所不同。

  4. 价值模型的额外开销:每个 RL 步需要多跑 Kv=4K_v=4 次价值梯度更新,plus 两套参数的内存占用。论文未提供与 DAPO 的 GPU 小时对比,“更高效”的说法仅基于步数。

  5. SIL 缓冲区策略未充分说明:如何选择保存哪些轨迹、缓冲区满了如何替换、旧策略生成的轨迹是否会产生分布偏移——这些问题在论文中讨论不足。

批判性分析:不足与可改进之处

不好的地方 / 不足之处

1. 缺少 VC-PPO 作为直接基线。 VAPO 明确继承了 VC-PPO 的价值预训练和解耦 GAE,但主结果表中没有 VC-PPO 的对比数据。读者无法从论文中直接判断:在 VC-PPO 之上,VAPO 新引入的长度自适应 GAE + SIL 贡献了多少分?是 5 分?还是 2 分?消融表只去掉各个组件,没有一个对应 VC-PPO 完整框架的基准行。

2. 评测样本量过小,统计显著性存疑。 AIME 2024 只有 30 道题。10 分的差异意味着多答对了约 3 道题。论文没有报告多次 seed 运行的标准差,也没有给出置信区间。3 道题的波动完全可以来自随机种子差异,而非算法本质优势。仅 AIME 结论缺乏统计说服力。

3. 声称”高效”但缺乏 wall-clock 数据。 论文以”5000 步”作为效率证据,但 VAPO 每步比 DAPO 开销更大(额外价值模型前向/反向传播、Kv=4K_v=4 次额外梯度更新)。若每步慢 50%,那实际训练时间可能相差不大甚至更慢。不提供小时/GPU 小时的数据,声称”高效”有失严谨。

4. 消融设计存在混淆变量。 消融实验去掉”价值预训练”时,相当于退回到存在冷启动偏差的状态;但去掉的同时是否还保留解耦 GAE?若不保留,则同时去掉了两个组件,无法分离价值预训练本身的贡献。消融矩阵的设计需要更系统。

5. SIL 机制描述不完整。 SIL 缓冲区的容量 KK、更新频率 NsilN_\mathrm{sil}、轨迹替换策略(FIFO?最高奖励优先?)均未明确报告,无法复现。

作者淡化或回避的局限

1. 价值模型对极长序列的本质困难未被正视。 论文指出长度自适应 GAE 通过提高 λ\lambda 来减少对价值模型的依赖,这暗示了价值模型在长序列上本质上不可信。但如果我们无法信任价值模型,用它做任何程度的自举都是有问题的——论文没有直接分析 8000+ token 序列上的价值估计误差实际有多大。

2. 二元奖励假设的脆弱性。 全论文假设奖励是确定性的 {0,1} 验证器输出。现实中即使对数学题,评判规则(等价形式、格式问题、中间步骤的部分分)也会引入噪声。论文没有讨论 VAPO 在非完美验证器下的鲁棒性。

3. 训练分布与评估分布的差距。 训练数据是”MATH 竞赛题”,评估在 AIME 2024 上。AIME 与竞赛训练集有重叠可能,论文没有明确排除数据污染的可能性。

可以改进的地方

1. 补充 VC-PPO 基准行。 在主结果表中添加 VC-PPO 的 AIME 2024 得分,明确量化 VAPO 创新点的独立贡献。

2. 报告 wall-clock 效率数据。 添加一张表:{方法, AIME@50 所需步数, AIME@50 所需 GPU 小时, 总计算成本}。这才是真正有意义的效率比较。

3. 扩大评测覆盖面。 在至少 200 道 MATH 竞赛题(含不同难度)上报告结果,并给出置信区间。补充 HumanEval 或 LiveCodeBench 等代码推理基准验证泛化性。

4. 添加跨模型实验。 用 Llama-3-70B 或 Mistral-Large 复现关键消融,验证”价值模型优于无价值模型”的结论是否依赖 Qwen2.5 的特定架构。

5. 系统化 SIL 超参研究。 实验比较不同缓冲区大小(K=100,500,2000K = 100, 500, 2000)、不同更新频率 NsilN_\mathrm{sil}、不同替换策略,给出实践建议。

6. 面向非数学任务的适应性分析。 探讨如何将长度自适应 GAE 扩展到密集奖励场景(如代码生成中每行代码都有部分奖励),以及 λmin\lambda_\mathrm{min}λmax\lambda_\mathrm{max} 的选择如何随奖励密度变化。

可复现性说明

VAPO 是 ByteDance Seed 内部系统,没有开源代码或检查点。但论文给出了足够的算法细节用于复现:

  • 长度自适应 GAE(Eq. 7)可在任何支持 PPO 的框架(TRL、OpenRLHF、veRL)上用约 20 行代码实现
  • 价值预训练和解耦 GAE 来自 VC-PPO(也是内部工作,但有详细描述)
  • 已公开的超参:G=8G=8ϵlow=0.2\epsilon_\mathrm{low}=0.2ϵhigh=0.28\epsilon_\mathrm{high}=0.28λmin=0.3\lambda_\mathrm{min}=0.3λmax=0.95\lambda_\mathrm{max}=0.95Kv=4K_v=4
  • 未公开的:SIL 缓冲区容量 KK,SIL 更新频率 NsilN_\mathrm{sil},训练数据精确来源

考虑到论文的强烈结果和清晰描述,社区复现版本(如 OpenRLHF 或 veRL 的 VAPO 实现)预期会相对快速出现。

深入展开:GAE 偏差-方差的数学推导

这一节更仔细地把 GAE 的偏差和方差拆开来看,为理解长度自适应 GAE 的数学合理性提供完整推导。

展开 GAE 公式

将式 (4) 展开,代入 δl=rl+γVϕ(sl+1)Vϕ(sl)\delta_l = r_l + \gamma V_\phi(s_{l+1}) - V_\phi(s_l)

A^t=l=0Tt1(γλ)l[rt+l+γVϕ(st+l+1)Vϕ(st+l)](12)\hat{A}_t = \sum_{l=0}^{T-t-1}(\gamma\lambda)^l\bigl[r_{t+l} + \gamma V_\phi(s_{t+l+1}) - V_\phi(s_{t+l})\bigr] \tag{12}

VϕV_\phi 项做望远镜化简(相邻步的 VϕV_\phi 项正好相消),得到:

A^t=Vϕ(st)+l=0Tt1γlrt+l+(γλ)TtVϕ(sT)(13)\hat{A}_t = -V_\phi(s_t) + \sum_{l=0}^{T-t-1}\gamma^l r_{t+l} + (\gamma\lambda)^{T-t}V_\phi(s_T) \tag{13}

两个极端:

λ=0\lambda = 0:式 (13) 退化为 A^t=rt+γVϕ(st+1)Vϕ(st)\hat{A}_t = r_t + \gamma V_\phi(s_{t+1}) - V_\phi(s_t),即单步 TD 优势。完全依赖价值模型的即时估计,误差直接来自 VϕV_\phi 的当前偏差。

λ=1\lambda = 1:最后一项 (γλ)TtVϕ(sT)=γTtVϕ(sT)(\gamma\lambda)^{T-t}V_\phi(s_T) = \gamma^{T-t}V_\phi(s_T)。对于回合制任务 Vϕ(sT)=0V_\phi(s_T)=0,式 (13) 退化为 A^t=GtVϕ(st)\hat{A}_t = G_t - V_\phi(s_t),即完整蒙特卡洛优势。此时优势估计不依赖中间步骤的价值估计,方差来自 GtG_t 的随机性(轨迹采样),而非价值模型噪声。

价值模型误差如何传播

设价值模型在每个中间状态存在系统偏差 bl=Vϕ(st+l)V(st+l)b_l = V_\phi(s_{t+l}) - V^*(s_{t+l})VV^* 是真实价值),则 GAE 的偏差为:

Bias[A^t]=b0+γ(1λ)l=1Tt1(γλ)l1bl+(γλ)TtbTt(14)\mathrm{Bias}[\hat{A}_t] = -b_0 + \gamma(1-\lambda)\sum_{l=1}^{T-t-1}(\gamma\lambda)^{l-1}b_l + (\gamma\lambda)^{T-t}b_{T-t} \tag{14}

如果偏差在所有步均为常数 bb(最简化假设),则:

Bias[A^t]b[1+γ(1λ)1(γλ)Tt1γλ+(γλ)Tt](15)\mathrm{Bias}[\hat{A}_t] \approx b\cdot\Bigl[-1 + \gamma(1-\lambda)\cdot\frac{1 - (\gamma\lambda)^{T-t}}{1-\gamma\lambda} + (\gamma\lambda)^{T-t}\Bigr] \tag{15}

对于足够长的序列(TtT-t \to \infty)且 γλ<1\gamma\lambda < 1

Bias[A^t]b1+γ(1λ)/(1γλ)(16)\mathrm{Bias}[\hat{A}_t] \approx b\cdot\frac{-1 + \gamma(1-\lambda)/(1-\gamma\lambda)}{} \tag{16}

这说明:偏差并不简单随 λ\lambda 单调变化——偏差既受 Vϕ(st)V_\phi(s_t) 本身影响(贡献 b0-b_0),也受所有中间步价值估计的加权影响。当价值模型在所有位置都有相同方向偏差时,高 λ\lambda 会让远端偏差的影响更强(权重 (γλ)l(\gamma\lambda)^l 更慢衰减)。

这与论文的直觉略有矛盾:论文说高 λ\lambda 对长序列”减少对价值模型的依赖”,但从式 (14) 可以看出,高 λ\lambda 实际上让中间步价值估计贡献的偏差权重下降更慢。正确的理解是:高 λ\lambda 通过增加蒙特卡洛累积项的权重来降低总体估计对价值模型的依赖,但并不消除中间步偏差的影响。

方差分析

从另一个角度看:价值模型的估计方差(由训练数据有限和模型容量限制导致)通常在序列中间部分最大(距离终端奖励太远,难以准确预测)。对于长序列,“序列中间部分”占据了绝大多数 token。

λ\lambda 下,GAE 对每个位置 tt 大量使用 Vϕ(st+1)V_\phi(s_{t+1})Vϕ(st+2)V_\phi(s_{t+2}) 等中间估计,这些中间估计方差大,导致最终优势估计的方差反而很高。

λ\lambda 下,GAE 更多地使用真实奖励信号(通过积累真实 rlr_l),方差来源从”价值模型估计噪声”转移到”轨迹采样随机性”。对于确定性验证器(数学题判断),真实奖励 rlr_l 本身方差极小(验证结果稳定),因此高 λ\lambda 显著降低了总体方差。

这才是长度自适应 GAE 的核心物理图像:对长序列,通过提高 λ\lambda,把优势估计的方差来源从”不可靠的价值模型”切换到”可靠的验证器奖励”。

理解 VAPO 与相关工作的定位

无价值模型 vs. 有价值模型:一个更宏观的视角

VAPO 的深层论点是关于 RL for LLM 的两种范式:

无价值模型方法(GRPO、DAPO、REINFORCE++)

  • 优点:无需维护和训练第二个模型,实现简单,计算开销低,训练稳定
  • 缺点:信用分配只到轨迹级别,无法区分”同一个好的回答里,哪些 token 其实拖了后腿”;优势估计的基准依赖组内样本均值,若组内回答质量差异小,基准质量差

有价值模型方法(PPO、VAPO)

  • 优点:理论上能做到 token 级精细信用分配;通过价值网络的泛化能力,能从少量成功轨迹中提取更丰富的梯度信号
  • 缺点:价值模型训练困难,尤其在长轨迹和稀疏奖励下;计算开销更大;需要大量工程保障稳定性

VAPO 的贡献在于填补了”如何让有价值模型方法在实践中真正有效”这个空白。如果 VAPO 的每一个工程改进(价值预训练、解耦 GAE、长度自适应 GAE)都被后续工作标准化,那么未来的研究可以在更可靠的价值模型基础上探索更复杂的 RL 算法(如更复杂的探索策略、多步奖励建模等)。

2025 年 RL 后训练方法时间线

timeline
    title LLM 推理 RL 训练方法发展(2023-2025)
    2023 : InstructGPT——PPO + 人类反馈对齐
         : DPO——无奖励模型的离线偏好优化
    2024 : GRPO(DeepSeekMath)——无价值模型组内基准
         : VC-PPO——价值预训练 + 解耦 GAE
         : DeepSeek-R1-Zero——纯 GRPO 超大规模
         : DAPO——Clip-Higher + Token 级损失
    2025-Q1 : REINFORCE++——稳定化 REINFORCE
            : Dr. GRPO——修正 GRPO 统计偏差
            : KTO——无需成对偏好数据的对齐
    2025-Q2 : VAPO——价值自适应 GAE,32B AIME 60.4
            : GSPO——基于序列的 PPO 变体

图 7:LLM 推理 RL 训练发展时间线 — VAPO 在 2025 年 Q2 出现,是首个在 32B 规模上有价值模型方法显著超越无价值模型方法的公开记录。

实际应用场景与工程注意事项

什么时候应该用 VAPO?

VAPO 适合以下场景:

  1. 任务有清晰的可验证终端奖励:数学证明、代码测试通过/失败、逻辑谜题答案验证。验证器确定性越强,VAPO 的优势越大。

  2. 训练样本中存在大量长度变化:如果你的数据集既有短答案题(几百 token)也有长推理链题(几千 token),固定 λ\lambda 的问题会很显著,长度自适应 GAE 收益明显。

  3. 你有足够的计算资源支持价值模型开销:VAPO 需要额外的 KvK_v 步价值梯度更新,约增加 20-30% 的训练计算量(粗略估计,取决于具体实现)。

  4. 你需要高度训练稳定性:生产环境中训练崩溃代价极高,VAPO 的稳定性优势值得额外开销。

什么时候应该坚持 GRPO/DAPO?

如果任务奖励非常密集(每步都有反馈),序列长度相对均匀,或者计算预算极为有限,GRPO/DAPO 仍然是更简单有效的选择。价值模型的工程复杂度只有在”长度差异大 + 稀疏终端奖励”这个特定组合下才能带来超额收益。

实现 Length-Adaptive GAE 的关键代码逻辑

import torch
import torch.nn as nn

def compute_adaptive_lambda(lengths, lambda_min=0.3, lambda_max=0.95):
    """
    lengths: 形状 [B] 的 Tensor,每个元素是该条回答的 token 数
    返回:形状 [B] 的 Tensor,每条回答的自适应 λ 值
    """
    L = lengths.float()
    mu = L.mean()
    sigma = L.std().clamp(min=1.0)   # 防止标准差为 0
    z = (L - mu) / sigma             # Z-score 标准化
    weight = torch.sigmoid(z)        # 映射到 (0, 1)
    return lambda_min + (lambda_max - lambda_min) * weight

def length_adaptive_gae(rewards, values, lengths,
                        lambda_min=0.3, lambda_max=0.95, gamma=1.0):
    """
    rewards: [B, T] -- 稀疏奖励,仅最后一步非零
    values:  [B, T+1] -- 价值估计,含终端自举值
    lengths: [B] -- 各序列实际长度

    返回:advantages [B, T]
    """
    B, T = rewards.shape
    lambdas = compute_adaptive_lambda(lengths, lambda_min, lambda_max)  # [B]
    advantages = torch.zeros_like(rewards)

    for b in range(B):
        lam = lambdas[b].item()
        L = int(lengths[b].item())
        gae = 0.0
        for t in reversed(range(L)):
            # TD 残差
            delta = rewards[b, t] + gamma * values[b, t + 1] - values[b, t]
            # 反向累积 GAE
            gae = delta + gamma * lam * gae
            advantages[b, t] = gae
    return advantages

上述实现在 Python 循环中完成,可以用向量化操作加速(通过累积乘积和 torch.cumsum 的逆向操作)。实际生产代码会用更高效的张量操作版本,但逻辑与上面完全等价。

解耦更新调度的实现要点

解耦 GAE 中,价值模型先更新 Kv=4K_v=4 步,再更新策略。这在实际实现时有两个细节需要注意:

1. 价值更新时不能让策略参数改变。 在步骤 2(价值更新)期间,策略头的参数必须冻结(通过 requires_grad=False 或只给价值优化器传入价值相关参数),否则价值梯度会污染策略权重。

2. 优势估计必须在价值更新完成后重新计算。 每次调用 compute_length_adaptive_gae 都应使用步骤 2 完成后的最新 VϕV_\phi,而不是上一轮 RL 步开始时的旧版本。一个常见的错误是把优势估计放在轨迹采集阶段(用旧价值模型),而不是放在价值更新之后(用新价值模型)。

# 正确的更新顺序:
for rl_step in range(total_rl_steps):
    rollouts = collect_rollouts(policy, prompts, G=8)

    # 1. 先更新价值模型(冻结策略参数)
    freeze(policy_head)
    for _ in range(K_v):
        v_loss = mse_loss(value_model(rollouts.states), rollouts.mc_returns)
        value_opt.step(v_loss)
    unfreeze(policy_head)

    # 2. 用更新后的价值模型重新计算优势
    with torch.no_grad():
        new_values = value_model(rollouts.states)
    advantages = length_adaptive_gae(
        rollouts.rewards, new_values, rollouts.lengths
    )

    # 3. 再更新策略
    for _ in range(K_pi):
        policy_loss = clip_higher_token_level_loss(
            policy, rollouts, advantages
        )
        policy_opt.step(policy_loss)

关于分组采样的数量选择

VAPO 使用 G=8G=8 的分组采样,比标准 GRPO 实现有时使用的 G=4G=4 更大。分组越大的好处是:

  • SIL 缓冲区更快积累高奖励轨迹(每批提示词采样 8 条,至少碰到一条正确的概率更高)
  • 批次内奖励统计量(均值、标准差)更稳定

但代价是显而易见的:每个训练步的推理开销是单样本的 8 倍。在 32B 模型上,这意味着每个 RL 步的推理阶段约需 8× 的 GPU 内存或 8× 的推理时间(取决于是并行还是串行采样)。对于资源受限的场景,G=4G=4G=6G=6 可能是更合理的折衷。

总结

VAPO 说服力十足地证明了:在长链推理任务上,只要工程做对,基于价值模型的 PPO 可以超越无价值模型的 GRPO/DAPO。论文的核心创新——长度自适应 GAE——直觉清晰,数学上有据可查,消融实验验证充分。集成了价值预训练、解耦 GAE、Clip-Higher、Token 级损失、SIL 和分组采样的完整系统,在 AIME 2024 上取得了 60.4 的 SOTA 成绩,比 DAPO 高出 10 分,训练步数减半,稳定性大幅提升。

主要不足:评测域单一(单一模型、单一基准族、二元奖励)、缺少 VC-PPO 直接基准、计算效率数据缺失。但作为一篇”把价值模型工程做对就能赢”的系统性论文,VAPO 是 2025 年上半年 RL 后训练领域值得重点关注的工作。

从这篇笔记出发,可以自然延伸到以下方向:

  • VC-PPO:理解 VAPO 所继承的价值校准基础
  • DAPO:理解 Clip-Higher 和 Token 级损失的完整动机
  • REINFORCE++:另一种稳定化的无价值模型方法,与 VAPO 形成有趣对比
  • Dr. GRPO:修正 GRPO 中的统计偏差,与 VAPO 的价值模型思路互补
  • GSPO:基于序列级别的策略优化,处理与 VAPO 类似的长度问题

附:VAPO 各组件贡献速查表

组件来源解决的问题关键公式/超参
价值预训练VC-PPO价值模型冷启动偏差式 (5),SFT 策略轨迹上监督
解耦 GAEVC-PPO价值估计滞后导致优势偏差Kv=4K_v=4 步先于策略更新
长度自适应 GAEVAPO 原创异构序列长度下固定 λ 失效式 (7),Sigmoid 映射
Clip-HigherDAPO稀疏奖励下正信号学习效率低ϵlow=0.2\epsilon_\text{low}=0.2ϵhigh=0.28\epsilon_\text{high}=0.28
Token 级损失DAPO序列级归一化稀释长回答梯度式 (10),按总 token 数归一化
SIL 重放SIL稀疏奖励期间梯度信号消失式 (11),高奖励轨迹重放
分组采样GRPO提高每个提示词的轨迹多样性G=8G=8 条/提示词

最终系统效果(AIME 2024,Qwen2.5-32B):

5vanilla PPO+value pretrain+decoupled GAE+adaptive GAE+Clip-Higher + TL+SIL60.4VAPO\underbrace{5}_{\text{vanilla PPO}} \xrightarrow{+\text{value pretrain}} \xrightarrow{+\text{decoupled GAE}} \xrightarrow{+\text{adaptive GAE}} \xrightarrow{+\text{Clip-Higher + TL}} \xrightarrow{+\text{SIL}} \underbrace{60.4}_{\text{VAPO}}

七个工程改进的协同效应,而非某一个单独突破,造就了最终的性能跃升。

这也是 VAPO 最重要的工程学教训之一:在 RL for LLM 领域,单个算法创新的价值往往不如一套精心搭配的系统性改进。识别问题所在(偏差、长度不均、稀疏奖励),针对每个问题找到有实证支撑的解法,保证各组件不冲突地协同工作——这种系统工程思维比提出一个全新算法更难,也往往更有价值。