(2504) VAPO (Seed)
- paper
非常solid的文章,基于PPO的改进优化。- 针对
价值偏差、长度不一、奖励稀疏3大问题 - 提出了
价值预训练、解耦GAE、长度自适应GAE、token-level loss、CLip-Higher、正样本LMLoss、分组采样等7大核心方法。 - 价值模型相比无价值模型,能
提高更细粒度的学习信号,性能更好、训练效率、稳定性更高。
问题背景
价值偏差问题
❓问题背景
LongCoT 推理任务 RL 在Value-based方法上,存在挑战。
1. 价值模型偏差
- 偏差来自
RM和Critic目标不一致,却用RM初始化Critic。- RM对完整句子打分,Critic预测中间状态的未来价值。
- RM对不完整句子打低分、对长句打高分,导致一开始就有一个
正向优势偏差。 - 详见VC-PPO
- GAE λ<1时 奖励信号衰减,加剧价值学习难度
- 最终环境奖励,传播到第t个token时,衰减因子为
, - T-t很大时,衰减因子几乎为0,无奖励信号
- 价值模型更新完全依赖自举,难以作为基线,使得训练过程非常不稳定。
- 最终环境奖励,传播到第t个token时,衰减因子为
训练长度不一问题
2. 训练过程序列长度不一
- 在推理任务中,模型生成答案长度差异巨大。普通GAE,
固定λ无法适应动态长度。 - GAE优势估计
- 对短序列:往往
方差很高,导致训练不稳定 - 对长序列:因为
过多自举,引入高偏差。- GAE递归计算,把
每一步的微小误差在长序列中不断累计放大,影响学习效果。
- GAE递归计算,把
- 对短序列:往往
- 根本原因:
GAE指数衰减特性,天然不适合处理长度变化范围极大的序列。
标准Seq-Loss 缺点
标准PPO是
Sequence-Level Policy Loss,即2步平均。序列内平均(inner average):对一个序列的所有token求平均,作为序列loss样本间平均(outer average):对所有序列的loss求平均
后果
- 模型
更关注学好短序列,忽略长序列中token的错误 学不好处理长序列问题,因为长序列权重被稀释。
- 模型
短序列/长序列token影响力不同
由于序列是平均对待,因此短序列token影响力比长序列token影响力
更强。- 短序列A:10个token,每个token对ALoss的贡献是
1/10。 - 长序列B:1000个token,每个token对BLoss的贡献是
1/1000。 - 短序列A Token
犯错带来的惩罚影响力是长序列B Token影响力的100倍。
- 短序列A:10个token,每个token对ALoss的贡献是
奖励被稀释
- 1k 高质量回答:里面有100个token特别好,优势值很高
- 但最终
被其他900个普通token平均,导致最终总贡献和50个token普通回答差不多。
惩罚被稀释
- 如1k 回答:前800好,后面200差,
但差的被前面好的平均稀释了,得不到足够的惩罚。 - 纵容了模型生成
更长、质量更差的回答。
奖励稀疏问题
3. 稀疏奖励信号
- Rule-based 通常只有0和1 Sparse奖励信号,不是dense信号。
长CoT会加剧稀疏性,采样到非0奖励的样本概率更低,大部分尝试都是错的。- 探索利用困境,
需要保持平衡。需要探索:保持不确定性去探索不同推理路径,找到正确答案。需要利用:需要利用艰苦探索得到的正确样本,提升学习效率。如果不平衡,可能陷入局部最优解、大量无效探索。
核心方法
📕核心方法
解决价值偏差问题(价值预训练+解耦GAE)
整体背景
- 解决
价值模型初始化不当和奖励衰减带来的偏差问题。
背景
- 解决
价值模型初始化偏差问题。
核心思想
- 不使用RM初始化,而是在PPO之前,使用
固定策略+MC采样回报,来预训练价值模型。 - 价值模型在初期就能对累计奖励有一个
更准确、偏差更低的估计。 - 为RL学习提供一个高质量起点,
避免训练初期崩溃。
价值预训练
- 使用固定策略
,生成大量数据;GAE使用 变成无偏MC回报。 - 使用生成数据+MC回报,来训练价值模型。直到收敛,看Value Loss和Explained Variance。
- 后续PPO使用Value预训练过的模型。
- 具体见 VC-PPO 价值预训练
背景
- 解决
长序列中奖励衰减导致价值更新不准确的问题。
核心思想
- 对Policy和Critic的GAE计算解耦,
使用不同的λ。 - 对Critic
λ=1,使用无偏MC回报来训练网络,消除自举带来的偏差让模型能学到长序列末端的真实奖励信号。
- 对Policy
λ<1(0.95),虽然引入一些偏差,但能有效降低方差。加速策略收敛和保持训练稳定。
- 更多见 VC-PPO Decoupled-GAE
解决长度不一问题 (Length-Adaptive GAE + Token-Level Policy Loss)
问题
- 解决固定GAE λ参数,
无法适应长短不同序列的问题。
目的
动态调整GAE的λ参数,适应不同长度。- 如果λ=0.95固定,则存在奖励衰减问题。
- 当步数很长l=100时,
,奖励信号权重接近0。
- 当步数很长l=100时,
核心思想
动态调整λ,与序列长度l做适应序列很长时:
λ变大, 接近1使最终奖励信号传播得更远,能看得越远,确保末端奖励信号不丢失,从而降低偏差。
序列很短时:
λ适当变小- 降低方差,使训练更稳定。
GAE 权重系数总和
- 未来所有奖励信号
对当前决策的总影响力,TD(λ) 权重理解
- 未来所有奖励信号
具体做法
总影响力应该与序列长度l成正比长度自适应
PPO Seq-Loss 缺点
标准PPO是Sequence-Level Policy Loss,即2步平均。
- 序列内平均(inner average):对一个序列的
所有token求平均,作为序列loss - 样本间平均(outer average):对
所有序列的loss求平均
- 序列内平均(inner average):对一个序列的
例子见上文问题
模型
更关注学好短序列,忽略长序列中token的错误,学不好处理长序列问题,因为长序列权重被稀释。
VAPO Token-Level Loss
- 不做序列内平均,
直接对所有token做平均,每个token权重相同,不论它来自短序列或长序列。
解决奖励稀疏问题(Clip-Higher,正样本LM-Loss,分组采样)
标准PPO-Clip问题
- 防止训练一步走太大而崩溃,把变化范围限制在
成为探索天花板,太低不利于探索 - 当偶然探索到
极好、但之前概率极低的策略时,很可能会被clip掉。 天花板会限制奖励程度,使得策略更新过于保守,不利于大胆探索
- 当偶然探索到
Clip-Higher:奖要重奖、罚要慎罚
把上下界解耦为非对称
提高上界
:奖要重奖 - 如0.2->0.28。
为奖励信号打开更高天花板;当探索到好路径时,策略可以进行大幅度更新。 - 为惊喜提供更大奖励空间。
- 如0.2->0.28。
保持下界
不变或较小:罚要慎罚 - 如果
太大,模型在 惩罚错误路径时可能过于激进 - 直接
把概率压到0,这样会扼杀多样性,导致熵崩溃。
- 如果
目的
最大化正样本生成概率
核心思想
- 采样到正样本时,在
强化学习策略更新基础上(正向奖励、PPO Loss、策略更新)。 - 额外增加
模仿学习,增加负对数似然,强迫模型去学习和复现整个正确推理过程。
NLL Loss
- 最终策略loss:增加一项NLL Loss。
- NLL Loss:
最大化正样本的生成概率。 - 压榨正样本,不仅告知模型做对,
且手把手教学如何做对的,记住这个过程。
目的
生成对比性数据来提升学习。- 同等资源情况下,两种策略
- 广度优先:在一个batch中,使用多个prompt,每个prompt rollout 1次。
- 深度优先:在一个batch中,使用较少的prompt,每个prompt rollout 多次。
VAPO 选择深度优先策略
- 对同1个问题,多次采样。可能得到一个混合成功、失败、部分正确的样本集。
- 为模型训练提供了丰富的对比信号,增强了学习效果。
实验结果
实验配置
✍️实验设置
模型
- Qwen-32B
数据
- 训练:数学
- 评测:AIME24
Baseline/基础算法
- PPO、AdamW
Base PPO 参数设置
- Policy 学习率1e-6,
Critic 学习率 2e-6。- Critic 必须跟上 Actor的速率,才能提供准确的优势估计。
- 如果更新太慢,提供的就是过时的估计。
- Batch Size:8192个prompt,每个prompt采样1次
- Mini-Batch Size:512
- Critic Model:由RM初始化。
- GAE:
- Clip:
- 使用Sample-Loss
VAPO 设置
- Critic:使用RM去做ValuePretrain,50个step。
- Decoupled-GAE:
,
- Clip-Higher:
, - Token-Level Loss
- 正样本 LM Loss
- bs=512个prompt,rollout 16次,mini-bs=512
关键结果
🍑关键结果
- 性能好,AIME达60分。VAPO 超过 Critic-Free方法 GRPO(47)、DAPO(50),超过PPO(5)。
- 训练效率和稳定性很高。
- 训练效率高:仅用5000步达sota,60%步数达DAPO性能。
- 稳定性高。训练曲线比DAPO更平滑,熵保持稳定。稳定复现60-61分成绩。
- 系统验证了7大组件消融实验
- 最重要:
价值预训练、解耦GAE。去掉后,分别暴跌49分、暴跌27分。 - 重要组件:
长度自适应GAE(贡献15p)、Clip-Higher、Token-Level Loss(贡献7p)、正样本LM Loss(贡献6p)、分组采样(贡献5p)。
- 最重要:
- 价值模型具有优越性。
- 相比Critic-Free(GRPO/DAPO)等,价值模型能提供
更细粒度的学习信号,使得模型更好扩展推理长度,泛化更强。
- 相比Critic-Free(GRPO/DAPO)等,价值模型能提供
VAPO 效果好

消融实验:

过程曲线

未来方向
⛳未来方向
- VAPO 扩展至其他领域
- 发展Value-Based RL。解决价值偏差、长序列等挑战,进一步优化价值模型的训练和使用。
- 构建通用和更鲁棒智能体。探索更复杂、 推理更长的任务,构建通用可靠agent。
(2503) VC-PPO (Seed)
- What’s Behind PPO’s Collapse in Long-CoT? Value Optimization Holds the Secret
- 首要提出
价值预训练、Decoupled-GAE两大方法,解决价值偏差问题。
问题背景
❓问题背景
PPO 在Long CoT上会训练崩溃。
- 表现:
回复长度急剧缩短、性能下降。 - 根本原因:
Critic 初始化偏差、奖励信号衰减。

RM初始化Critic带来优势偏差
标准PPO Critic 由 RM初始化
- Critic 通过 RewardModel 初始化
RM和Critic 目标存在差异
- RewardModel
- 对完整序列打分,在
<EOS>出现时做评估,<EOS>前面的token没被训过。 - 不会对中间序列(不完整序列/写了一半的句子)进行打分
- 对完整序列打分,在
- Critic Model
- 预测从当前位置(写了一半的句子)出发,未来能获得的总奖励期望是多少。
从RM初始化的Critic:打分/优势存在偏差
打分偏差
- 对
靠前的、更不完整的句子状态,打低分。 - 随着
句子变长、越来越完整,逐渐 打高分。 - 对任意时刻t,都有
- 对
优势偏差
- 初期训练阶段,几乎没有KL惩罚,奖励为0,TD Error 恒大于0,导致
优势恒大于0。
- 初期训练阶段,几乎没有KL惩罚,奖励为0,TD Error 恒大于0,导致
是后面多个TD Error的加权求和, 由于TD Error恒大于0Token越靠前,累加正项越多,其最终优势值就越大。
若TD大于0,越靠前的token,优势值越大,证明过程
- 优势值缓慢递减
令
从公式可以看出,
t越靠前,优势值越大。
如下图所示,前面的token价值小、后面的token价值大,TDError>0,最终导致前面的token优势大,最后导致模型回复长度急剧缩短。

GAE 奖励信号衰减
更多详细推导见 GAE 奖励信号衰减
背景
- 在LLM中,中间token奖励为0、
仅最后1个token有环境奖励信号。 - 当
真实外部信号传递回第t个token时,会乘以权重, 权重容易变成0。
奖励衰减缺陷
- 当λ<1 且 T-t 很大时,
前面token收不到任何有效奖励信号,权重接近0了。Critic模型无法学习到他们的真正贡献。
当λ<1时,奖励信号衰减权重在后面的token衰减很快,接近1时衰减较慢。

LLM as Token-Level MDP过程
符号定义
- Prompt:
- Response:
- 词表:
Token-Level MDP
状态空间:在时间步t,状态定义如下: 动作空间:从词表 选择一个词token,比如选择动作 论文里常用符号,q代表x,o代表y输出。也有用c代表当前状态
状态转移矩阵
:状态转移概率为1 - 给定
、 执行动作,得到新状态 。
- 给定
终止条件:达到EOS或最大长度。奖励函数:在状态s执行动作a的奖励。 - 通常
仅在序列结束后,环境才会给一个序列级信号。 - GRPO和PPO有不同策略。
- 通常
初始状态分布
:prompt x的概率分布, 优化目标
核心方法
ValuePretrain/价值预训练
📕核心方法
解决问题
- RM初始化Critic带来的价值偏差、λ<1时带来的奖励信号衰减问题。
核心思想
- 在正式PPO之前,固定策略,使用
,对Critic做一次预训练。 - 通过
固定策略+MC回报,把价值模型的学习从不稳定的RL过程变成稳定的监督学习过程。
具体做法
固定策略模型(如),使用 GAE+λ=1退成MC采样,得到稳定梯度信号。单独训练Critic模型,使其准确预测回报,直到收敛,看2个指标Value Loss:
预测价值和真实奖励之间的差距Explained Variance/解释方差:衡量
预测趋势和真实趋势的匹配程度。预测误差的方差除以真实方差。预测误差的方差:还剩下多少无法解释的波动性。
- 接近1:最好情况,模型几乎解释了所有的数据波动。
- 接近0:模型和简单预测所有结果的平均值差不多。
- 负数:模型还不如直接预测平均值,预测甚至是有害的,预测趋势是相反的。
正式PPO时,
使用预训练过的Critic模型,而不再使用RM做随机初始化。
价值预训练以后,advantage不再有偏差,模型输出长度也正常了。

# 从SFT模型生成响应
responses = generate_responses(sft_model, prompts)
# 计算完整响应的奖励
rewards = reward_model(responses)
# 训练价值模型以预测每个token位置的奖励
for token_pos in range(len(response)):
# 价值目标是序列的最终奖励
value_target = rewards[response_idx]
# 训练价值模型以预测每个位置的这个目标
value_loss = (value_model(token_pos) - value_target)^2
optimize(value_loss)Decoupled-GAE/解耦GAE
解决问题
Critic偏好无偏估计,λ=1,追求准确性。Actor偏好低方差,λ<1,需要平衡偏差和方差。如果方差太大,会导致训练不稳定。- 训练RL的时候,成本很高,必须要降低方差、保证收敛。
核心思想
Critic和Actor使用不同的λ。Critic:λ=1,确保奖励信号在长序列中无衰减地传播,更好地学习价值模型。Actor:λ<1(0.95),有效降低优势估计的方差,使策略更新过程更稳定、收敛更快。
# 解耦GAE
critic_lambda = 1.0 # 确保价值学习的强信号传播
actor_lambda = 0.95 # 控制策略更新中的方差
# 使用 critic_lambda 计算价值模型更新的优势
critic_advantages = calculate_gae(rewards, values, critic_lambda)
value_loss = (values - (rewards + gamma * next_values))^2
# 使用 actor_lambda 计算策略模型更新的优势
actor_advantages = calculate_gae(rewards, values, actor_lambda)
policy_loss = -log_probs * actor_advantages实验结果
实验设置
✍️实验设置
实验数据
- 数学数据
- 训练:AIME(历史数据);评测:AIME(近2年)
- 通用数据,验证泛化性,是否只在数学上生效
- GPQA:问答
- CodeForces:编程
模型
- Qwen2.5-32B
训练策略/算法
- 冷启动:使用一些推理数据,来冷启动训练模型,使得按照
<think></think>格式输出 - Value Pretraining:λ=1,Freeze Policy,其他参数同标准PPO。
- Decoupled-GAE:
, 。作者也研究了0.9-1.0参数。
Reward
- Rule-Based:1 正确、-1错误
Baseline
- 标准PPO
- λ=0.95
- 学习率
Policy 1e-6,Critic 2e-6, KL惩罚系数 0:因为是rule-based reward,没有hacking- 上下文长度:8k、16k
关键结果
🍑关键结果
- VC-PPO 有效果,解决了PPO 训练崩溃问题
- 标准PPO在AIME崩溃,VC-PPO pass@1 从5.6 -> 41.9(8k) -> 48.8(16k)
- Value-Pretrain和Decoupled-GAE 两者
都很重要。- 不解耦,性能会下降10个点(AIME)。
- 价值预训练注入了知识,但并非训练的越久越好。50-100步有提升,但150步开始下降。
- 价值和策略在方差-偏差平衡上偏好不同。
- Critic:偏好λ=1,低偏差、高方差
- Actor:偏好λ<1,偏好低方差、哪怕有一些偏差。
AIME 有提升,非常优雅的提升曲线,并且超过GRPO。


价值预训练和Decoupled-GAE 都很有用。

未来方向
⛳未来方向
- Actor和Critic偏好不同,不应该视为一个整体进行优化,可以分开。
- 根据回归loss和策略梯度两种不同的数学特性,为Actor和Critic设置更加差异化的优化策略,而不仅仅是调整λ。
(2501) REINFORCE++
问题背景
❓问题背景
局部归一化存在问题
现有RLHF方法存在一些问题
- PPO:由于Critic,导致开销大、C不好训练
- REINFORCE:简单,但方差大
- GRPO:新的复杂性、不稳定性等。
GRPO/RLOO Prompt/Local-Level Normalization 存在问题
存在理论偏差:- 数学公式证明,
分子(reward)和分母(local std)不是独立的,存在理论偏差。
- 数学公式证明,
实际不稳定- 采样数量很小时,k=4/8,回复差不多,
标准差为0,优势值爆炸,训练不稳定。
- 采样数量很小时,k=4/8,回复差不多,
任务过拟合- 局部归一化:旨在激励模型战胜组内其他样本,而不是追求全局最优奖励。
- 在
简单任务上过拟合,复杂任务上难以提升。 - GRPO里的难度和长度偏差
核心方法
📕核心方法

REINFORCE++ (k>=1)
三个原则
- 简单:基于REINFORCE开发优化
- 训练稳定性:Token-Level KL 惩罚,PPO-Clip Loss,归一化优势
- 效率:critic-free,高效
整体目标
和PPO一样,只是修改了优势估计每次采样1个回答,G=1
优势估计:Token-Level KL 惩罚直接加入Reward
奖励=真实轨迹线奖励-KL惩罚KL惩罚:累加t时刻后每一个token的KL惩罚,因是对未来产生影响。
全局归一化
使用
batch-level 归一化- LitePPO 归一化策略 研究笔记:
group mean+batch std比较好。
- LitePPO 归一化策略 研究笔记:
REINFORCE++ w/baseline (k>1)
背景
- 多步RL场景
核心思想
轨迹奖励 + Token-Level KL 惩罚
局部基线:Local/Group Baseline/Mean全局归一化Loss
KL散度使用K2: 低方差,更稳健
算法实验
实验配置
✍️实验设置
任务
- 通用RLHF
- 2w 多样化Prompt数据集
- 推理任务
- 小规模数学数据:30 AIME 训练集
- 逻辑推理:Knights and Knaves
- 多步RL:python解决数学问题
模型
- LLaMA3-8B、Qwen2.5-7B
算法
- 核心:REINFORCE++、REINFORCE++ w/Baseline
- 比较:GRPO、PPO、RLOO、ReMAX
关键结果
🍑关键结果
引入PPO技巧的REINFORCE算法,大量实验表明REINFORCE++在人类对齐上有优势通用RLHF任务
- REINFORCE++ 单样本和4样本的GRPO分数相当,回答更短token效率更高
- KL散度更低、训练更稳定
推理任务
- 小规模数据集上REINFROCE++泛化性更好,GRPO则出现过拟合。
- 逻辑推理任务上,随难度增加,GRPO性能急剧下降,REINFORCE++较为稳定
Agent 任务
- 多步工具使用,REINFORCE++ w/Baseline 高于GRPO 高于PPO。24.1 > 22.58 > 21.85
全局归一化:被LitePPO、ScaleRL、DLER等相继验证
通用RLHF

谜题数据

未来方向
⛳未来方向
- 更高效的优势估计方法
- 自适应归一化策略
- 扩展到多模态模型
- 理论分析
(2402) RLOO
RLOO
REINFORCE+留一法计算优势,无需Critic和Ref模型。Trajector-Level:在整个序列做建模,而非单个token作为一个动作。On-Policy 算法。
在
2个RLHF任务上,RLOO效果都优于PPO、Vanila PG、DAFT、DPO等。
问题背景
PPO复杂可能不是最优选择
❓问题背景
人类对齐标准PPO阶段
- SFT:高质量prompt-answer数据集微调
- 训练RM:Pair、人类偏好
- RL阶段:SFT作为初始策略,RM作为环境反馈信号。优化模型使其获得更高奖励。
问题
PPO成本高、复杂。- RLHF场景下,是否真的需要PPO?
PPO 可能不是最优选择
低方差环境- 预训练+SFT后的模型,
方差低。 为降低方差,PPO引入Critic和优势估计,反而会带来偏差,得不偿失。
- 预训练+SFT后的模型,
PPO-Clip 可能不必要- clip 防止策略更新步子太大导致崩溃。
- 实际实验发现触发频率非常低,小于5%
建模方式可能不恰当- PPO:每个词作为动作,前面的词作为状态
- LLM:生成完整序列后才有奖励
- 可以把
生成整个序列看成一个单一动作,更自然和高效,可能更合适
核心方法
REINFORCE + 留一法计算基线
📕核心方法
REINOFRCE
- 朴素
REINFORCE+Baseline,REINFORCE 笔记
REINFORCE Leave-One-Out
对一个Prompt,采样K/G次。
计算优势时,基线使用其余k-1个的奖励平均值等同于减去平均回报基线
和GRPO很像,但是
不除以标准差。同策略算法,无需重要性权重修正偏差。
整体优化目标
Trajectory-Level,而非Token-Level。
算法实验
实验设置
✍️实验设置
任务
- 训练数据:2个公开rlhf数据集
- TL;DR Summarize(文本摘要)
- Anthropic Helpful and Harmless Dialogue(HH,对话)。
- 评测数据
模型
- Pythia-6.9B和Llama-7B
算法
- RLOO
- 对比:
- PPO、Vanilla PG(简化版本PPO,λ=1,仍在token层面建模)
- DPO、RAFT(生成多个样本,选择得分最高的进行SFT)
评估指标
关键结果
🍑关键结果
- 简单基础PG方法优于PPO
- 在所有数据集和模型上,Vanilla PG和REINFORCE的性能优于PPO。
- 在Llama+HH数据集上,PPO胜率32.0%,REINFORCE达55.3%。
- 在所有数据集和模型上,Vanilla PG和REINFORCE的性能优于PPO。
- RLOO性能最佳(奖励分数+GPT4胜率)
- 4个样本,摘要数据集胜率(
RLOO 77.9%>PPO 67.6%>RAFT 73.2%>DPO 66.6%)
- 4个样本,摘要数据集胜率(
- RLOO样本效率更高
- RLOO使用2个样本性能就能达到甚至超过RAFT使用4个样本水平水平。
- 建模完整序列是有效的
- 在完整序列上操作的REINFORCE,性能与在token级别的Vanilla PG相当或更好
- 同时实现更简单,计算开销更小。
- RLOO鲁棒性更强
- 更高KL惩罚或RM噪声时,RAFT下降明显,而
RLOO则更稳健。 - 因为:RLOO梯度更新,考虑所有样本奖励。RAFT仅依赖奖励最高样本,一旦排序错误,学习就受到严重影响。
- 更高KL惩罚或RM噪声时,RAFT下降明显,而

⛳未来方向
- 未研究奖励模型过优化/Reward Hacking问题。