Overview of Policy Optimization Methods

Author

Published

2025-08-06 11:26:26+0800

Qwen 提出了 Group Sequence Policy Optimization (GSPO), 一个针对 GRPO 进行改进的 RL 算法。GSPO 在 sequence 层面计算 importance ratio, 避免了 token-level 计算带来的训练不稳定性。

Introduction

GRPO 的问题在于训练超大规模的 LLM 时,会出现 model collapse, Qwen3MiniMax-01 均对 GRPO 算法进行了改进。

在本文中,作者认为 GRPO 算法的问题在于 Importance sampling weight 的计算是有问题的,这导致了误差随生成回答长度累积,最后被 clipping 机制放大,从而导致模型崩溃。

为了解决这个问题,作者提出了 GSPO, 一个在 sequence 层面进行 Importance sampling 的 RL 算法,GSPO 还对 reward 进行 normalization 来保持训练的稳定性

Method

Preliminary

对于一个大语言模型 πθ\pi_{\theta}, 我们将 xx 记为 query, 将 yy 记为 πθ\pi_{\theta} 针对 xx 的 response, 即

πθ(yx)=t=1yπθ(ytx,y<t)\pi_{\theta}(y\mid x) = \prod_{t=1}^{|y|}\pi_{\theta}(y_t\mid x, y_{<t})

其中 y|y| 代表 response yy 的长度, 一般我们还有一个 reward model rr, 用于生成奖励 r(x,y)[0,1]r(x,y)\in[0, 1].

[!tip] Note 本文中没有提及 KL divergence, 作者认为这不是重点,所以没有在公式中标出。

PPO 算法包含四个模型:reference model, 也就是 πold\pi_{old}, policy model, 也就是 πθ\pi_{\theta}, value model, 用于计算 advantage, 以及 reward model, 用于计算奖励。 PPO 算法如下面公式所示

JPPO(θ)=E(x,y)D,ytπθold(q)[min(rt(θ)A^t,clip(rt(θ),1ϵ,1+ϵ)A^t)]\mathcal{J}_{\mathrm{PPO}}(\theta) = \mathbb{E}_{(x,y)\sim\mathcal{D},y_{\leq t}\sim \pi_{\theta_{old}}(\cdot\mid q)}\left[ \min\left(r_t(\theta)\hat{A}_t,\mathrm{clip}\left(r_t(\theta), 1-\epsilon, 1+\epsilon\right)\hat{A}_t\right) \right]

其中

rt(θ)=πθ(ytx,y<t)πθold(ytx,y<t)r_t(\theta) = \frac{\pi_{\theta}(y_t\mid x, y_{< t})}{\pi_{\theta_{old}}(y_t\mid x, y_{< t})}

是 token yty_t 的 importance ratio, A^t\hat{A}_tyty_t 的 advantage estimation.

PPO 算法的问题在于其严重依赖 value model, 一般 value model 与 policy model 的大小相当,以保持内存和算力的负载均衡。

为了解决 PPO 的这个问题,GRPO 通过多次采样然后计算 relative advantage 来避免使用 value model. 其目标函数为

JGRPO(θ)=E(x,y)D,{yi}i=1Gπθold(q)[1Gi=1G1yit=1yimin(ri,t(θ)A^i,t,clip(ri,t(θ),1ϵ,1+ϵ)A^i,t)]\mathcal{J}_{\mathrm{GRPO}}(\theta) = \mathbb{E}_{(x, y)\sim\mathcal{D},\{y_i\}_{i=1}^G\sim \pi_{\theta_{old}}(\cdot\mid q)}\left[ \frac{1}{G}\sum_{i=1}^G\frac{1}{|y_i|}\sum_{t=1}^{|y_i|}\min\left(r_{i,t}(\theta)\hat{A}_{i,t},\mathrm{clip}\left(r_{i,t}(\theta), 1-\epsilon, 1+\epsilon\right)\hat{A}_{i,t}\right) \right]

其中,GG 是针对 query xx 的多次采样 response,

ri,t(θ)=πθ(yi,tx,yi,<t)πθold(yi,tx,yi,<t)r_{i,t}(\theta) = \frac{\pi_{\theta}(y_{i,t}\mid x, y_{i,< t})}{\pi_{\theta_{old}}(y_{i,t}\mid x, y_{i,< t})}

是 importance ratio,

A^i,t=A^i=r(x,yi)mean({r(x,yi)}i=1G)std({r(x,yi)}i=1G)\hat{A}_{i,t} = \hat{A}_{i} = \frac{r(x,y_i) - \mathrm{mean}(\{r(x,y_i)\}_{i=1}^G)}{\mathrm{std}(\{r(x,y_i)\}_{i=1}^G)}

是使用 group response 估计得到的 advantage.

Motivation

在 Qwen3 中已经提到,对于稀疏的 MoE 模型,我们必须使用更大的 batch size 来最大化内存和算力使用效率。但是,更大的 batch 意味着有一些数据必须是 off-policy 的,因此 PPO 和 GRPO 就需要使用 clipping 来降低 off-policy sample 对模型表现产生过大影响。

基于 clipping 机制,作者认为 GRPO 的目标函数是 “ill-pose” 的,其原因在于 GRPO 计算的 Importance ratio 是与 RL 训练目标不匹配的。

通常,importance sampling 的公式如下:

Ezπtar[f(z)]=Ezπbeh[πtar(z)πbeh(z)f(z)]\mathbb{E}_{z\sim\pi_{\mathrm{tar}}}[f(z)] = \mathbb{E}_{z\sim\pi_{\mathrm{beh}}}\left[\frac{\pi_{\mathrm{tar}}(z)}{\pi_{\mathrm{beh}}(z)}f(z)\right]

其中 πtar\pi_{\mathrm{tar}} 是目标分布, πbeh\pi_{\mathrm{beh}} 是采样分布, importance ratio πtar(z)/πbeh(z)\pi_{\mathrm{tar}}(z)/\pi_{\mathrm{beh}}(z) 负责对采样进行修正。

对于 GRPO, 其 importance ratio 是在 token 层面定义的,而一次采样是在 sequence 层面定义的,因此这种区别就导致了 GRPO 存在 high-variance noise.

因此,作者认为,Importance ratio 的关键在于优化目标应该与 reward 的粒度是一致的

GSPO

基于上面的想法,作者就提出了 GSPO, 作者首先针对 LLM 改写了上面的 importance sampling 的公式

ExD,yπθ(x)[r(x,y)]=ExD,yπθold(x)[πθ(yx)πθold(yx)r(x,y)]\mathbb{E}_{x\sim \mathcal{D}, y\sim\pi_{\theta}(\cdot\mid x)}[r(x,y)] = \mathbb{E}_{x\sim\mathcal{D}, y\sim\pi_{\theta_{old}}(\cdot\mid x)}\left[\frac{\pi_{\theta}(y\mid x)}{\pi_{\theta_{old}}(y\mid x)}r(x,y)\right]

这里的 Importance ratio 表现了采样的回答 πold(yx)\pi_{old}(y\mid x) 与目标回答 πθ(yx)\pi_{\theta}(y\mid x) 之间的差距,这是从 sequence 层面上体现的。

因此,作者基于上面的式子,构建出了 GSPO 的目标函数

JGSPO(θ)=E(x,y)D,{yi}i=1Gπθold(q)[1Gi=1Gmin(si(θ)A^i,clip(si(θ),1ϵ,1+ϵ)A^i)]\mathcal{J}_{\mathrm{GSPO}}(\theta) = \mathbb{E}_{(x, y)\sim\mathcal{D},\{y_i\}_{i=1}^G\sim \pi_{\theta_{old}}(\cdot\mid q)}\left[ \frac{1}{G}\sum_{i=1}^G\min\left(s_{i}(\theta)\hat{A}_{i},\mathrm{clip}\left(s_{i}(\theta), 1-\epsilon, 1+\epsilon\right)\hat{A}_{i}\right) \right]

这里 A^i\hat{A}_{i} 与 GRPO 一致, si(θ)s_i(\theta) 是 normalize 之后的 importance ratio, 定义如下

si(θ)=(πθ(yix)πθold(yix))1yi=exp(1yii=1yiπθ(yi,tx,yi,<t)πθold(yi,tx,yi,<t))s_i(\theta) = \left(\frac{\pi_{\theta}(y_{i}\mid x)}{\pi_{\theta_{old}}(y_{i}\mid x)}\right)^{\frac{1}{|y_i|}} = \exp\left(\frac{1}{|y_i|}\sum_{i=1}^{|y_i|}\frac{\pi_{\theta}(y_{i,t}\mid x, y_{i,< t})}{\pi_{\theta_{old}}(y_{i,t}\mid x, y_{i,< t})}\right)

这里作者使用了 length normalization 来控制 variance.

作者对比了以下 GSPO 和 GRPO 两者的梯度,我们忽略期望的计算,直接写出内部的梯度,有

θJGSPO(θ)=1Gi=1G(πθ(yix)πθold(yix))1yiA^i1yit=1yiθlogπθ(yi,tx,y<t)θJGRPO(θ)=1Gi=1GA^i1yit=1yiπθ(yi,tx,yi,<t)πθold(yi,tx,yi,<t)θlogπθ(yi,tx,y<t)\begin{aligned} \nabla_\theta \mathcal{J}_{\mathrm{GSPO}}(\theta) &= \frac{1}{G}\sum_{i=1}^G\left(\frac{\pi_{\theta}(y_{i}\mid x)}{\pi_{\theta_{old}}(y_{i}\mid x)}\right)^{\frac{1}{|y_i|}}\hat{A}_i\cdot \frac{1}{|y_i|}\sum_{t=1}^{|y_i|} \nabla_{\theta} \log\pi_{\theta}(y_{i,t}\mid x, y_{<t})\\ \nabla_\theta \mathcal{J}_{\mathrm{GRPO}}(\theta) &= \frac{1}{G}\sum_{i=1}^G\hat{A}_i\cdot \frac{1}{|y_i|}\sum_{t=1}^{|y_i|} \frac{\pi_{\theta}(y_{i,t}\mid x, y_{i,< t})}{\pi_{\theta_{old}}(y_{i,t}\mid x, y_{i,< t})}\nabla_{\theta} \log\pi_{\theta}(y_{i,t}\mid x, y_{<t})\\ \end{aligned}

可以看到,两者不同的地方在于 token 的 reweight 方式,GRPO 中先加权再求和;而 GSPO 中则是先求和,然后在 sequence 层面进行加权

GSPO-token

为了支持 multi-turn RL 等需要细粒度 advantage 的场景,作者对 GSPO 的目标函数进行了改进,得到了 GSPO-token, 其目标函数为

JGSPOtoken(θ)=E(x,y)D,{yi}i=1Gπθold(q)[1Gi=1G1yit=1yimin(si,t(θ)A^i,clip(si,t(θ),1ϵ,1+ϵ)A^i)]\mathcal{J}_{\mathrm{GSPO-token}}(\theta) = \mathbb{E}_{(x, y)\sim\mathcal{D},\{y_i\}_{i=1}^G\sim \pi_{\theta_{old}}(\cdot\mid q)}\left[ \frac{1}{G}\sum_{i=1}^G\frac{1}{|y_i|}\sum_{t=1}^{|y_i|}\min\left(s_{i,t}(\theta)\hat{A}_{i},\mathrm{clip}\left(s_{i,t}(\theta), 1-\epsilon, 1+\epsilon\right)\hat{A}_{i}\right) \right]

其中,

si,t(θ)=sg[si(θ)]πθold(yi,tx,yi,<t)sg[πθold(yi,tx,yi,<t)]s_{i,t}(\theta) = \mathrm{sg}[s_i(\theta)]\frac{\pi_{\theta_{old}}(y_{i,t}\mid x, y_{i,< t})}{\mathrm{sg}[\pi_{\theta_{old}}(y_{i,t}\mid x, y_{i,< t})]}

这里 sg\mathrm{sg} 是 stop gradient operation. 通过这种改写方式,GSPO-token 与 GSPO 的优化目标一致,但是可以在更细粒度的 token 层面进行优化。

Evaluation

作者使用 Qwen3-30B-A3B 进行测试。对于 GRPO,作者发现必须使用 Routing Replay training strategy 才能提升 MoE RL 的收敛性, Routing Replay 的具体做法就是保留 πθold\pi_{\theta_{old}} 的激活专家,在 πθ\pi_{\theta} 中使用相同的专家来保持稳定性。但是,GSPO 则不需要这个技巧。

Routing Replay strategy for GRPO

实验结果如下图所示。

Comparison of GSPO and GRPO

从实验结果可以看到,GSPO 比 GRPO 更加高效,效果也更好。

作者带对比了 GSPO 与 GRPO 的 clipping 比例,结果发现,GSPO clipping 的 token 比例比 GRPO 高几个数量级,作者认为,尽管 GSPO clip 了更多 token, 但是 GSPO 更加高效,这也说明 GRPOtoken 层面的梯度估计是存在噪声的。

作者还介绍了以下 MoE 模型中 RL 训练的 expert-activation volatility 现象,也就是说,MoE 模型参数更新之后,对于同一个 response, 激活的专家可能飞铲个不同。作者举例说明,对于 Qwen3-30B-A3B, 更新一次梯度之后,有 10%10\% 左右的激活专家变得不一样了。

作者最后介绍了以下 GSPO 的两个优势,一个是解决了 GRPO 依赖于 Routing Replay 的问题;第二个是支持 SGLang 和 vLLM 等推理框架。

Conclusion

作者提出了 GSPO,一个在 sequence 层面计算 importance ratio 的 RL 算法,解决了 GRPO 在训练大规模 MoE LLM 时出现的训练不稳定性以及 mode collapse 现象。

    Magistral 是 Mistral 提出的一个 reasoning model 系列,主要针对 math 和 code 两个 domain

    Introduction

    Mistral 在 2025 年 6 月 12 日发布了 Magistral ,一个 reasoning model, 包含两个模型,一个是由纯 RL 训练得到的 Magistral Medium, 另一个是由 SFT 和蒸馏 Magistral Medium 得到的 Magistral Small

    作者首先介绍了一下本文的贡献:

    1. 介绍了如何仅使用 RL (而不是用蒸馏) 来训练 Magistral Medium
    2. infra 上的改进,主要使用最新的权重来更新 generator
    3. 多语种能力,支持多种语言
    4. 系统性探究了 RLVR 的能力边界
    5. 开源了 Magistral small (24B)

    Method

    RL

    RL 算法基于 GRPO 改进,主要有以下几点:

    1. 去掉了 KL Divergence loss, 这一点跟 DAPO 是一致的,提升模型的探索能力
    2. Loss Normalization,在 sample 层面做平均,还是跟 DAPO 一致,减少不同长度输出对训练造成的影响
    3. Advantage Normalization, 作者首先将每个 token 的 Advantage 定义为 A^i=Riμ\hat{A}_i=R_i-\mu, 其中 μ\mu 是每个 group 的 reward 均值, 然后在每个 mini-batch 里对 advantage 进行 Normalization (这里 A^mean\hat{A}_{mean}A^std\hat{A}_{std} 分别为 mini-batch advantage 的均值和方差):
    A^i,tnorm=A^iA^meanA^std \hat{A}_{i,t}^{norm}=\frac{\hat{A}_i-\hat{A}_{mean}}{\hat{A}_{std}}
    1. CLIP-Higher, 跟 DAPO 一致,提高稀有 token 的被采样概率
    2. Eliminating non-divsere groups, 跟 DAPO 一致,去掉过于简单和过于难的题目

    最终 RL 阶段训练的损失函数为:

    L(θ)=EqP(Q),{oi}i=1Gπold(q)1i=1Goii=1Gt=1oimin[ri,t(θ)A^i,tnorm,clip(ri,t(θ),1ϵlow,1+ϵhigh)A^i,tnorm],s.t.,1m<nG,rmrn.\mathcal{L}(\theta) = \mathbb{E}_{q\sim P(Q),\{o_i\}_{i=1}^G\sim \pi_{old}(\cdot\mid q)}\frac{1}{\sum_{i=1}^G|o_i|}\sum_{i=1}^G\sum_{t=1}^{|o_i|}\min\left[r_{i,t}(\theta)\hat{A}_{i,t}^{norm}, \mathrm{clip}(r_{i,t}(\theta), 1-\epsilon_{low}, 1+\epsilon_{high})\hat{A}_{i,t}^{norm}\right], \mathrm{s.t.}, \exists 1\leq m < n \leq G, r_m\neq r_n.

    其中

    ri,t(θ)=πθ(oi,tq,oi,<t)πold(oi,tq,oi,<t)r_{i,t}(\theta) = \frac{\pi_{\theta}(o_{i,t}\mid q, o_{i,<t})}{\pi_{old}(o_{i,t}\mid q, o_{i,<t})}

    Reward Shaping

    作者还基于四个维度来构建 reward: formatting, correctness, length, 以及 language consistency

    Formatting 针对数学和代码问题,作者要求模型输出符合特定的格式

    [!tip] Future 最新的 GLM-4.1V-Thinking 认为,不应该在 RL 训练阶段加入 format reward

    correctness 基于答案的正确性分配奖励

    Length penalty 与 DAPO 一致,使用 Length penalty 来惩罚过长的回答。

    Language consistency 减少模型混合语言输出的问题。作者的做法是将 10% 的问题从英语转化为其他语种,然后使用 fastText 进行分类,确保内容都是一个语言。作者发现,通过这个简单的修改,就提高了模型的语言跟随能力。

    [!tip] Recall MiMo 中也遇到了混合语言输出的问题,但是其并没有给出解决办法。

    作者还在 system prompt 中规定了输出的格式以及语言。

    [!tip] Observation 作者发现,RL 的训练对于 system prompt 非常的敏感,因为 system prompt 会提高 model 的 entropy, 然后提高模型的探索能力。

    Data

    数据包括 math problems 以及 code problems

    Math

    作者首先收集了 700K 样本,然后作者通过预处理以及过滤来保证数据的质量:

    format filtering 要求问题完整,答案准确且可验证;去掉证明题和 multi-part 的问题;改写多项选择题为解答题,提高难度防止 reward hacking

    difficulty filtering 使用两阶段的过滤策略。

    1. 第一阶段使用 LLM 进行多次采样,然后去除掉比较简单或者比较复杂的
    2. 第二阶段使用 RL checkpoint 进行多次采样,去除掉标准答案可能会存在问题的题目

    最终一共得到 38K 的样本

    Code

    首先去掉没有 solution 和 test 的问题;然后去除掉标准答案不能通过所有 test 的问题。最终一共得到 35K 的样本,包含 Python 和 C++ 两种语言

    Training

    训练框架如下图所示

    Magistral_data_training

    对于两个模型,作者采用了不同的方式进行训练

    Magistral Medium 训练时满足的要求:

    1. dataset is not too easy: 太简单的题目对模型提升没有帮助
    2. Generation length does not stop growing: 逐步提升模型的最大输出长度
    3. KV-cache memory burden is not too large: 降低 batch size 来减少 KV-cache 的内存占用

    Magistral small 训练

    SFT 数据集包括两部分,一部分是 Magistral Medium 回答正确的这部分数据,第二部分是公开数据集,包括 [[OpenThoughts]] 和 [[OpenR1]] 两个数据集,作者使用 Magistral Medium 来生成回答。作者还加入了 10% 的 instruction tuning 数据来保持模型的通用能力。

    RL RL 的训练与 Magistral Medium 一致。

    Infra

    作者首先介绍了一下 RL 训练的 infra, infra 主要包括三个模块:

    分布式 RL 训练的主要问题在于,不同长度的 roll-out 花费的时间不一致,作者发现,最长的 roll-out 和最短的 roll-out 的时间相差超过 5 倍以上。

    因此,作者就提出了异步生成这个方法。具体的做法就是

    1. 首先由 Generator 生成多条 roll-out
    2. 当 roll-out 完成之后,立马用 Verifiers 对轨迹进行打分
    3. 收集 roll-out 以及对应的 reward, 直到达到给定的 batch 大小
    4. 使用 Trainer 更新 Generator 的权重, 将更新后的权重同步给 Generator,这样其他 generator 在生成新的 token 时用的就是新的权重

    Magistral_infra

    [!tip] Recall MiMo 里的做法是,当我们收集到给定数量的 roll-out 之后,我们就基于这些 roll-out 更新权重,然后进行下一次采样

    训练时,对于每个 rank, 只要其收集到足够的 roll-out, 就会进行一次梯度更新。

    Evaluation

    Performance of Magistral Medium

    Ablation

    RL 的泛化性 作者探究了 RL 的 cross-domain generalization 能力,实验结果如下

    ModelAIME’24LiveCodeBench v5
    Starting Checkpoint32.222.7
    RL (Math only)62.538.3 (+15.6)
    RL (Code only)49.7 (+17.5)42.7

    可以看到,不管是使用 math 还是 code 数据单独进行训练,模型在另一个 domain 上的表现都有所提升。

    [!tip] Future 这个结论与最新的 GLM-4.1V-Thinking 结论一致

    Distillation v.s. RL for small models 作者探究了对于小语言模型,使用 RL 进行训练的效果更好,还是使用蒸馏的效果更好。

    Performance of RL v.s. distillation

    [!tip] Observation 实验结果发现,仅使用 RL 的效果与蒸馏差不多,甚至更好

    Batch size 作者还探究了 batch size nbatchn_{batch} 以及 mini-batch size nminin_{mini} 的影响。这里 batch size 指的是用于更新梯度的 roll-out 数量,mini-batch size 指的是计算梯度的 roll-out 数量,作者还定义了并行生成 roll-out 的数量 nasyncn_{async}. 当 nasyncnbatchn_{async} \gg n_{batch} 时,生成的 sequence 就很可能是 off-policy 的。作者固定 nasync=4096n_{async}=4096, 然后对比了不同的 nbatchn_{batch}nminin_{mini} 对模型表现的影响,结果如下:

    Ablation study on batch size

    ![tip] Observation 当 nbatch=nminin_{batch}=n_{mini} 时,模型表现差不太多(左图);当 nbatchn_{batch} 为常数,而 nminin_{mini} 逐渐减小时,模型表现会逐渐变差。

    Advantage normalization 作者对比了三种针对 advantage 的 normalization 方式:

    实验结果如下

    Ablation study on normalization

    作者发现,三种方式的区别并不是很大。

    Analysis

    length dimension 作者首先保存模型的 weight, 然后使用 PCA 进行降维,并在 2 维上进行可视化,作者对权重进行扰动,然后记录模型的 reward 以及输出长度。结果发现,模型存在一个 length dimension. 可视化结果如下图所示

    Magistral length dimension visualization

    multimodal extension 由于 Magistral medium 和 Magistral small 都是基于 MLLM 中的 LLM 开发得到的,作者还探究了更换 LLM 的 checkpoint 之后,原始 MLLM 的表现,结果发现,模型在多模态 reasoning 相关任务上的表现也得到了提升,结果如下图所示:

    Magistral multimodal performance

    Impact on other capabilities 作者还探究了 RL 训练对模型其他表现的影响,结果发现,RL 训练可以提高模型的 tool calling 和指令跟随能力,实验结果如下表所示

    CategoryBenchmarkMistral Medium 3Magistral Medium
    Function callingInternal bench87.287.4
    Instruction followingIFEval86.887.4

    failed approaches 作者还介绍了一些尝试失败的做法:

    1. partial Reward: 对于 coding 任务,作者使用 test 的通过率作为奖励,结果发现效果并不好,这是因为一些错误的解法的 test 通过率也很高
    2. entropy bonus loss: 作者发现在损失函数中加入 entropy bonus loss 之后,模型的训练变得不稳定,而且效果不如使用更高的 ϵhigh\epsilon_{high}
    3. 作者还进一步验证在 PPO loss 中加入 KL divergence loss, 结果发现效果并不好,这与 DAPO 的结论一致
    4. 作者还尝试先 SFT Magistral Medium, 再进行 RL, 结果发现 RL 可以大幅度提高 SFT checkpoint 的表现。

    Conclusion

    本文中,作者提出了 Magistral, 一个针对 math 和 code 的 reasoning model, 作者介绍了训练细节。但是,从方法层面来看,和 DAPO 区别不是很大。关键点应该是作者详细介绍了各种消融实验,为后来相关探索提供了经验。

      Introduction

      相关工作包括 GRPO 以及 GSPO

      SAPO 的关键思想有两点:

      1. tokne-level soft trust region 可以保证 sequence-level coherence
      2. 非对称的 temperature 可以针对 postive token 和 negative token 进行不同的优化

      Method

      作者首先给出了 SAPO 的目标函数如下:

      JSAPO(θ)=E(x,y)D,{yi}i=1Gπθold(x)[1Gi=1G1yit=1yifi,t(ri,t(θ))A^i,t],\mathcal{J}_{\mathrm{SAPO}}(\theta) = \mathbb{E}_{(x, y)\sim\mathcal{D},\{y_i\}_{i=1}^G\sim \pi_{\theta_{old}}(\cdot\mid x)}\left[ \frac{1}{G}\sum_{i=1}^G\frac{1}{|y_i|}\sum_{t=1}^{|y_i|}f_{i,t}(r_{i,t}(\theta))\hat{A}_{i,t} \right],

      其中,

      fi,t(x)=σ(τi,t(x1))4τi,t,τi,t={τpos,if A^i,t>0τneg,otherwisef_{i,t}(x) = \sigma(\tau_{i,t}(x-1))\cdot \frac{4}{\tau_{i,t}}, \tau_{i,t} = \begin{cases} \tau_{pos}, & \text{if }\hat{A}_{i,t}>0\\ \tau_{neg}, &\text{otherwise} \end{cases}

      这里

      A^i,t=A^i=r(x,yi)mean({r(x,yi)}i=1G)std({r(x,yi)}i=1G),ri,t(θ)=πθ(yi,tx,yi,<t)πθold(yi,tx,yi,<t)\hat{A}_{i,t} = \hat{A}_{i} = \frac{r(x,y_i) - \mathrm{mean}(\{r(x,y_i)\}_{i=1}^G)}{\mathrm{std}(\{r(x,y_i)\}_{i=1}^G)},\quad r_{i,t}(\theta) = \frac{\pi_{\theta}(y_{i,t}\mid x, y_{i,< t})}{\pi_{\theta_{old}}(y_{i,t}\mid x, y_{i,< t})}

      τpos\tau_{pos}τneg\tau_{neg} 分别是 positive token 以及 negative token 对应的温度, σ(x)=1/(1+ex)\sigma(x)=1/(1+e^{-x}) 是 sigmoid function.

      JSAPO(θ)\mathcal{J}_{\mathrm{SAPO}}(\theta) 求导得到

      θJSAPO(θ)=E(x,y)D,{yi}i=1Gπθold(q)[1Gi=1G1yit=1yiwi,t(θ)ri,t(θ)θlogπθ(yi,tq,yi,<t)]\nabla_\theta \mathcal{J}_{\mathrm{SAPO}}(\theta) = \mathbb{E}_{(x, y)\sim\mathcal{D},\{y_i\}_{i=1}^G\sim \pi_{\theta_{old}}(\cdot\mid q)}\left[ \frac{1}{G}\sum_{i=1}^G\frac{1}{|y_i|}\sum_{t=1}^{|y_i|}w_{i,t}(\theta)r_{i,t}(\theta)\nabla_\theta \log \pi_\theta(y_{i,t}\mid q, y_{i, <t}) \right]

      其中

      wi,t(θ)=4pi,t(θ)(1pi,t(θ)),pi,t(θ)=σ(τi,t(ri,t(θ)1)),w_{i,t}(\theta) = 4p_{i,t}(\theta)(1-p_{i,t}(\theta)),\quad p_{i,t}(\theta) = \sigma(\tau_{i,t} (r_{i,t}(\theta)-1)),

      JSAPO(θ)\mathcal{J}_{\mathrm{SAPO}}(\theta)wi,t(θ)w_{i,t}(\theta)ri,t(θ)r_{i,t}(\theta) 的关系如下图所示

      illustration of gating mechanism

      为了保证当 ri,t(θ)=1r_{i,t}(\theta)=1 时,SAPO 等价于 ri,t(θ)A^i,tr_{i,t}(\theta)\hat{A}_{i,t} 而与 τi,t\tau_{i,t} 无关,作者在 fi,t(x)f_{i,t}(x) 加入了系数 4/τi,t4/\tau_{i,t}.

      Comparison

      作者接下来对比了 GSPO 以及 GRPO 两个算法

      首先作者使用了一下统一的目标函数公式来表示三个算法

      J(θ)=E(x,y)D,{yi}i=1Gπθold(x)[1Gi=1G1yit=1yifi,t(ri,t(θ))A^i,t],\mathcal{J}(\theta) = \mathbb{E}_{(x, y)\sim\mathcal{D},\{y_i\}_{i=1}^G\sim \pi_{\theta_{old}}(\cdot\mid x)}\left[ \frac{1}{G}\sum_{i=1}^G\frac{1}{|y_i|}\sum_{t=1}^{|y_i|}f_{i,t}(r_{i,t}(\theta))\hat{A}_{i,t} \right],

      其中不同算法的 fi,t()f_{i,t}(\cdot) 不一样,三种算法的定义如下

      SAPO:fi,tSAPO(ri,t(θ))=σ(τi,t(x1))4τi,t,τi,t={τpos,if A^i,t>0τneg,otherwiseGRPO:fi,tGRPO(ri,t(θ),A^i,t)={min(ri,t(θ),1+ϵ)A^i,t>0max(ri,t(θ),1ϵ)A^i,t0GSPO:fi,tGSPO(ri,t(θ),A^i,t)=fi,tseq(ri,t(θ),A^i,t)={min(si,t(θ),1+ϵ)A^i,t>0max(si,t(θ),1ϵ)A^i,t0\begin{aligned} \mathrm{SAPO}&:f_{i,t}^{\mathrm{SAPO}}(r_{i,t}(\theta))=\sigma(\tau_{i,t}(x-1))\cdot \frac{4}{\tau_{i,t}}, \tau_{i,t} = \begin{cases} \tau_{pos}, & \text{if }\hat{A}_{i,t}>0\\ \tau_{neg}, &\text{otherwise} \end{cases}\\ \mathrm{GRPO}&:f_{i,t}^{\mathrm{GRPO}}(r_{i,t}(\theta), \hat{A}_{i,t})=\begin{cases} \min(r_{i,t}(\theta), 1+\epsilon) & \hat{A}_{i,t}>0\\ \max(r_{i,t}(\theta), 1-\epsilon) & \hat{A}_{i,t}\leq0 \end{cases}\\ \mathrm{GSPO}&:f_{i,t}^{\mathrm{GSPO}}(r_{i,t}(\theta), \hat{A}_{i,t})=f_{i,t}^{\mathrm{seq}}(r_{i,t}(\theta), \hat{A}_{i,t})=\begin{cases} \min(s_{i,t}(\theta), 1+\epsilon) & \hat{A}_{i,t}>0\\ \max(s_{i,t}(\theta), 1-\epsilon) & \hat{A}_{i,t}\leq0 \end{cases} \end{aligned}

      其中

      si(θ)=(πθ(yix)πθold(yix))1yi,si,t(θ)=sg[si(θ)]πθ(yi,tx,yi,<t)sg[πθ(yi,tx,yi,<t)]s_i(\theta) = \left(\frac{\pi_{\theta}(y_{i}\mid x)}{\pi_{\theta_{old}}(y_{i}\mid x)}\right)^{\frac{1}{|y_i|}}, s_{i,t}(\theta) = \mathrm{sg}[s_i(\theta)]\frac{\pi_{\theta}(y_{i,t}\mid x, y_{i,< t})}{\mathrm{sg}[\pi_{\theta}(y_{i,t}\mid x, y_{i,< t})]}

      首先是与 GSPO 的对比,通过一些假设和简化,我们得到

      θJSAPO(θ)=E[1Gi=1Ggτi(logsi(θ))θlogsi(θ)A^i]θJGSPO(θ)=E[1Gi=1Gsi(θ)θlogsi(θ)A^i]\begin{aligned} \nabla_\theta \mathcal{J}_{\mathrm{SAPO}}(\theta) &=\mathbb{E}\left[\frac1G\sum_{i=1}^G g_{\tau_i}(\log s_i(\theta))\nabla_\theta \log s_i(\theta)\hat{A}_i\right]\\ \nabla_\theta \mathcal{J}_{\mathrm{GSPO}}(\theta) &=\mathbb{E}\left[\frac1G\sum_{i=1}^G s_i(\theta)\nabla_\theta \log s_i(\theta)\hat{A}_i\right] \end{aligned}

      其中 gτi(logsi(θ))=sech2(τi/2logsi(θ))g_{\tau_i}(\log s_i(\theta)) = \mathrm{sech}^2\left(\tau_i/2\log s_i(\theta)\right). 相比于 GSPO, SAPO 有两个优势:

      1. smoothness and stability, soft gate 避免了 hard clipping 带来的不连续性
      2. token-level adaptivity with sequence-level coherence. 当假设不成立的时候,SAPO 退化为 token-level gating, 这样可以降低 outliers 的权重

      GRPO 的函数可以进一步简化为

      fi,tGRPO(ri,t(θ),A^i,t)={1,if A^i,t>0 and ri,t(θ)1+ϵ0,if A^i,t>0 and ri,t(θ)>1+ϵ1,if A^i,t0 and ri,t(θ)1ϵ0,if A^i,t0 and ri,t(θ)<1ϵf_{i,t}^{\mathrm{GRPO}}(r_{i,t}(\theta), \hat{A}_{i,t})= \begin{cases} 1, & \text{if }\hat{A}_{i,t}>0\text{ and }r_{i,t}(\theta)\leq 1+ \epsilon\\ 0, & \text{if }\hat{A}_{i,t}>0\text{ and }r_{i,t}(\theta)> 1+ \epsilon\\ 1, & \text{if }\hat{A}_{i,t}\leq0\text{ and }r_{i,t}(\theta)\geq 1- \epsilon\\ 0, & \text{if }\hat{A}_{i,t}\leq0\text{ and }r_{i,t}(\theta)< 1- \epsilon \end{cases}\\

      可以看到,GRPO 对应一个 binary trust region. 与 GRPO 相比,SAPO 将对应的 hard indicator 替换未来一个 smooth kernel fi,tSAPO(ri,t(θ))=sech2(τi/2ri,t(θ)1)f_{i,t}^{\mathrm{SAPO}}(r_{i,t}(\theta))=\mathrm{sech}^2\left(\tau_i/2r_{i,t}(\theta)-1\right), 这样可以避免 gradient vanishing 以及提高训练的稳定性。

      最终结论为:

      Experiments

      作者对比了 SAPO, GSPO 以及 GRPO-R2(GRPO with routing replay) 三种方法,实验结果如下图所示

      Performance of SAPO

      实验结果显示,SAPO 的表现超过了 GSPO 以及 GRPO

      作者还探究了超参数 τpos\tau_{pos}τneg\tau_{neg} 的影响,结果如下图所示

      Ablation study on temperature

      实验结果显示,当 τneg>τpos\tau_{neg}>\tau_{pos} 时,模型训练最稳定,这说明了 negative token 是导致训练不稳定的主要原因。

      作者还在 Qwen3-VL 上进行了验证,结果如下图所示

      Performance of SAPO on Qwen3-VL

      实验结果显示,SAPO 的表现超过了 GSPO 以及 GRPO-R2

      Conclusion

      在本文中,作者提出了 SAPO, 一个解决 hard-clipping 训练不稳定性以及低效率的策略优化算法,作者使用了基于温度的 soft gate 来代替 clipping, 以及对于 positive token 和 negative token 使用了不同的 temperature 这两点改进。结果验证了 SAPO 的有效性,作者认为使用 smooth 以及 adaptive gating 机制可以有效提高 RL 训练的稳健性以及有效性。

        Abstract

        字节Seed团队提出了 Value-based Augmented Proximal Policy Optimization (VAPO), 用于提高 reasoning model 的表现。 VAPO 通过集成 DAPO 和 VC-PPO 的优点,进一步提高了 value-based 方法的表现。

        Introduction

        现有的RL 训练方法可以分为 value-free 和 value-based 两大类。 其中 value-free 方法不需要使用 value model, 比如 GRPO 和 GRPO 的变体 DAPO, 这类方法通过多次采样,然后使用 leave-one-out estimate 来代替 value model. 这类方法的优点是不需要训练value model, 但是缺点是在复杂的任务中表现不是很稳定。

        另一方面,value-based 方法需要训练一个 value model, 比如 VC-PPO, 这类方法的优点是:

        1. 提供更细粒度的奖励信号
        2. 提供lower-varaince value estimation, 从而提高训练的稳定性
        3. 拥有更好的泛化能力

        但是,value-based 方法在训练过程中存在一些问题:

        1. 训练一个low-bias 的 value model 比较困难, 尤其是在long trajectory 上,因为 bias 会随着 trajectory 的长度增加而增加
        2. 在heterogeneous sequence lengths during training 中表现不佳,对于短文本和长文本,我们需要考虑 bias-variance 的trade-off
        3. 在sparse reward signal 中表现不佳

        为了解决这些问题,字节Seed团队提出了 VAPO, 一个基于value-based 的 RL 训练方法,VAPO 通过结合 DAPO 和 VC-PPO 的优点,进一步提高了 value-based 方法的表现。

        Preliminary

        Preliminary包括 token-level MDP, RLHF, PPO 三个部分,这部分请参考 VC-PPO. 这里不做重复。

        VAPO

        作者针对value-based 方法在训练过程中存在的三个问题,在VAPO中分别进行了解决。

        Mitigating Value Model Bias over Long Sequences

        VC-PPO 中,作者提到了 value model 和 reward model 的不一致性,这种不一致性会导致 bias, 尤其是在long sequences上。 在VAPO中,作者就直接使用了 VC-PPO的做法,包括value pretraining 和 decoupled GAE 来解决这个问题。

        Managing Heterogeneous Sequence Lengths during Training

        针对heterogeneous sequence的问题,作者提出了 Length-Adaptive GAE. 在VC-PPO中, λpolicy\lambda_{\mathrm{policy}} 被设置为 0.950.95. 但是当 sequence 非常长时, TD-error会迅速下降,导致GAE被一部分TD-error所主导,从而不利于模型的训练。

        为了解决这个问题,作者将 λpolicy\lambda_{\mathrm{policy}} 与 sequence 的长度 \ell 联系起来,具体来说, 两者的关系如下:

        t=0λpolicyt=11λpolicy:=α\sum_{t=0}^{\infty}\lambda_{\mathrm{policy}}^t = \frac{1}{1-\lambda_{\mathrm{policy}}} := \alpha\ell

        其中 α\alpha 是一个超参数,用来控制 bias-variance 的trade-off. 给定 \ell, λpolicy\lambda_{\mathrm{policy}} 可以被计算为:

        λpolicy=11α\lambda_{\mathrm{policy}} = 1 - \frac{1}{\alpha\ell}

        同时,为了平衡短文本和长文本的贡献,基于 DAPO, 作者构建了 token-level policy gradient loss, 其具体形式如下:

        LPPO(θ)=1t=1Goii=1Gt=1oimin(ri,t(θ)A^i,t,clip(ri,t(θ),1ϵ,1+ϵ)A^i,t)\mathcal{L}_{\mathrm{PPO}}(\theta) = \frac{1}{\sum_{t=1}^G|o_i|}\sum_{i=1}^G\sum_{t=1}^{|o_i|}\min\left(r_{i,t}(\theta)\hat{A}_{i,t},\mathrm{clip}\left(r_{i,t}(\theta), 1-\epsilon, 1+\epsilon\right)\hat{A}_{i,t}\right)

        Dealing with Sparsity of Reward Signal in Verifier-based Tasks

        与DAPO一致,为了解决reward signal的稀疏性问题,作者提出了Clip-Higher, 来让更小概率的输出也能获得较大的更新概率。其更新公式如下:

        LPPO(θ)=1t=1Goii=1Gt=1oimin(ri,t(θ)A^i,t,clip(ri,t(θ),1ϵlow,1+ϵhigh)A^i,t)\mathcal{L}_{\mathrm{PPO}}(\theta) = \frac{1}{\sum_{t=1}^G|o_i|}\sum_{i=1}^G\sum_{t=1}^{|o_i|}\min\left(r_{i,t}(\theta)\hat{A}_{i,t},\mathrm{clip}\left(r_{i,t}(\theta), 1-\epsilon_{low}, 1+\epsilon_{high}\right)\hat{A}_{i,t}\right)

        Clip-Higher的介绍见DAPO

        然后,作者还将next-token prediction loss 和 PPO loss 结合起来,来降低奖励的稀疏程度。

        LNTP(θ)=1NoiTt=1oilogπθ(ai,tsi,t)\mathcal{L}_{\mathrm{NTP}}(\theta) = -\frac{1}{N}\sum_{o_i\in\mathcal{T}}\sum_{t=1}^{|o_i|}\log \pi_{\theta}(a_{i,t}|s_{i,t})

        其中 T\mathcal{T} 是正确答案的集合。 最终的loss为:

        LVAPO(θ)=LPPO(θ)+μLNTP(θ)\mathcal{L}_{\mathrm{VAPO}}(\theta) = \mathcal{L}_{\mathrm{PPO}}(\theta) +\mu \mathcal{L}_{\mathrm{NTP}}(\theta)

        其中 μ\mu 是一个超参数,用来平衡PPO loss和NTP loss。

        Experiments

        模型使用Qwen-32B来进行训练, 大部分细节与VC-PPO和DAPO一致,这里不再赘述。最后与DAPO以及R1的对比结果如下:

        performance

        Ablation study

        针对本文使用的模块,作者进行了消融实验,结果如下:

        ablation study

        从实验结果可以看到:

        1. value pretraining 和 decoupled GAE 可以显著提高模型的表现
        2. clip-higer 可以提升模型的探索能力
        3. length-adaptive GAE 可以平衡模型在短文本和长文本上的表现

        Training Dynamics

        与DAPO类似,作者也分析了VAPO的训练动态,结果如下:

        Mean Response Length

        reward score

        generation entropy

        从上面三张图可以看到:

        1. VAPO相比于DAPO来说,其训练更加稳定
        2. 从response length来看,VAPO的response length更长,说明VAPO的length scaling更强
        3. 从reward score来看,VAPO的reward score更高,说明VAPO的reward signal提供的指导信息更多
        4. 从generation entropy来看,在训练末期,VAPO的generation entropy更低,说明VAPO的生成多样性要更低一些,但这也说明了VAPO的生成更加稳定。 作者认为这个时候稳定性更重要。

        Conclusion

        作者在DAPO和VC-PPO的基础上,提出了VAPO,一个基于value-based 的 RL 训练方法,VAPO 通过结合 DAPO 和 VC-PPO 的优点,进一步提高了 value-based 方法的表现。 后续,作者又提出了Seed-thiking-1.5的技术报告。可以说,这一系列论文的连贯性是非常高的。

        Reference

        1. Arxiv VAPO: Efficient and Reliable Reinforcement Learning for Advanced Reasoning Tasks
        2. Notes onDAPO
        3. Notes on VC-PPO

        Abstract

        字节Seed团队提出了 Value-Calibrated PPO (VC-PPO), 用于解决PPO的value initialization bias 以及 reward signal decay 问题. 具体来讲:

        1. VC-PPO增加了 value pretraining 来解决 value initialization bias 的问题
        2. VC-PPO分离了 actor 和 critic 的GAE的计算,避免了 reward signal decay 的问题

        Introduction

        已有的reasoning model的训练方法,主要包括两个个stage:

        1. SFT: 这个阶段主要使用了一些标注好的long CoT数据,初步激活模型的reasoning能力(参考KImi-VL)
        2. RL: 这个阶段使用收集到的数据使用RL算法进行训练,任务包括math, code, logic reasoning等

        已有PPO算法在处理Long CoT任务时,存在的问题在 DAPO 中已经介绍过了,GRPO的解决方式为 使用leave-one-out estimate来替换value model. 但是GRPO相比于PPO能够提供token级别的奖励来说,只能提供response level的奖励,因此限制了模型的性能。

        Preliminary

        Preliminary包括MDP, RLHF, PPO三个部分,RLHF和PPO我们在 DAPO 中已经介绍过了,这里不再赘述。

        Token-level MDP

        给定prompt xx 和 response yy, 我们可以将 xxyy 分解为 token 序列,比如 y=y1,y2,,yny = y_1, y_2, \cdots, y_n, 其中 yiAy_i\in\mathcal{A}, A\mathcal{A} 是我们的词表。

        我们将 token-level MDP定义为:

        M=S,A,P,r,d0,ω\mathcal{M} = \langle \mathcal{S}, \mathcal{A}, P, r, d_0, \omega \rangle

        其中:

        方法

        首先作者分析了一下为什么 PPO 在处理 long CoT 任务时效果不佳。

        PPO的传统设置为:

        一方面,作者认为,λ=0.95\lambda=0.95 是为了减少模型在 Mujoco 以及 Atari 等环境中的variance,但是对于Long CoT任务,这个设置会导致模型缺乏足够的探索能力。

        另一方面,作者认为 reward model 和 value model 虽然都是提供关于 response 的信息,但是他们之间还是存在一些差距的。作者给出了使用PPO来进行 long CoT 任务相关的实验结果

        failue_PPO

        可以看到,随着训练的进行,模型的context length以及在AIME benchmark上的表现都出现了下降。

        在本文中,作者主要是在 verifiable tasks 上进行实验,答案的正确性与 response length 长度关系不大,因此, response length 可以反应模型的训练情况。 作者绘制了训练过程中, value 和 advantage 与 token position 的关系图

        value_advantage_position

        从上图可以看到,value 和 advantage 更倾向与给最初的 token 更高的 bias, 作者认为出现这个情况的原因是 value model 和 reward model 的目标并不匹配。 reward model 的目标是给 ω\omega 也就是 <eos> token reward, 对于一开始的 token, reward model会给出比较低的奖励;而 value model 的目标是给整个 response 一个奖励,因此,value model 会倾向于给最初的 token 更高的奖励。我们对 GAE 进行改写得到:

        A^t=i=tTt1λi(rt+i+V(st+i+1)V(st+i))\hat{A}_t = \sum_{i=t}^{T-t-1} \lambda^{i} \left( r_{t+i} + V(s_{t+i+1}) - V(s_{t+i}) \right)

        从上式可以看到,一开始 rt+ir_{t+i} 的值会比较小,而 V(st+i)V(s_{t+i}) 的变化比较大,因此,一开始的 token 的 advantage 会比较大,这个 bias 会持续影响整个 trajectory。

        为了解决这个问题,作者提出了 value-pretraining, 也就是对value model 进行离线与训练,直到其收敛到一个具体的 policy 上。具体训练步骤为:

        1. 基于一个policy, 如 πsft\pi_{\mathrm{sft}} 进行采样,然后更新value model (λ=1.0\lambda=1.0)
        2. 基于收集到的数据训练 value model, 直到 value loss 或者 explain variance 收敛

        接下来,在训练 value model 时,我们还需要考虑 variance reduction 的问题。作者首先改写了 GAE 的公式:

        A^t={i=0Tt1λi(rt+i+V(st+i+1)V(st+i))+V(st)if λ<1.0i=0Tt1rt+iif λ=1.0\hat{A}_t = \begin{cases} \sum_{i=0}^{T-t-1} \lambda^{i} \left( r_{t+i} + V(s_{t+i+1}) - V(s_{t+i}) \right)+V(s_t) & \text{if } \lambda < 1.0 \\ \sum_{i=0}^{T-t-1} r_{t+i} & \text{if } \lambda=1.0 \end{cases}

        可以看到,当 λ<1.0\lambda < 1.0 并且 Tt1T-t-1 比较大时,<eos> token 的reward就非常接近于0了,作者通过实验验证了这一点。

        reward_signal_decay

        可以看到,当我们降低 λ\lambda 时,reward signal 的稀疏性会显著增加,从而提高了模型的训练难度。

        但是,我们又不能不使用 variance reduction, 因为这会导致训练的不稳定性。 作者从 TD error 的角度分析了 variance:

        Var[Atλ]=Var[i=0Tt1λiδt+i]=i=1Tt1λ2iVar[δt+i]+2i=1Tt1j=0i1λi+jCov[δt+i,δt+j]\begin{aligned} \mathrm{Var}[A_{t}^{\lambda}] &= \mathrm{Var}\left[\sum_{i=0}^{T-t-1} \lambda^{i}\delta_{t+i}\right] \\ &= \sum_{i=1}^{T-t-1} \lambda^{2i} \mathrm{Var}[\delta_{t+i}] + 2\sum_{i=1}^{T-t-1}\sum_{j=0}^{i-1} \lambda^{i+j} \mathrm{Cov}[\delta_{t+i}, \delta_{t+j}] \end{aligned}

        因为 λ[0,1]\lambda\in[0,1], 因此未来的 TD error 会衰减的更快,因此就降低了 advantage 的 variance.

        那么如何在降低variance的同时,又不至于使得 reward signal 过于稀疏呢?作者的解决方案是分离GAE的计算,也就是将 GAE 的计算分为两部分:

        Gt:t+h={i=0h1rt+i+Vˉ(st+h)if t+h<Ti=0Thrt+iif t+h=TG_{t:t+h} = \begin{cases} \sum_{i=0}^{h-1} r_{t+i} + \bar{V}(s_{t+h}) & \text{if } t+h<T \\ \sum_{i=0}^{T-h} r_{t+i} & \text{if } t+h=T \end{cases}

        基于这个公式,我们可以写出policy gradient的公式:

        θJ(θ)=Et[θlogπθ(atst)At]=Et[θlogπθ(atst)i=0Tt1λi(rt+i+Vˉ(st+i+1)Vˉ(st+i))]=Et[θlogπθ(atst)((1λ)i=1Tt1λi1Gt:t+i+λTt1Gt:TVˉ(st))]=Et[θlogπθ(atst)((1λ)i=1Tt1λi1Gt:t+i+λTt1Gt:T)]\begin{aligned} \nabla_{\theta} J(\theta) &= \mathbb{E}_{t}[\nabla_{\theta} \log \pi_{\theta}(a_t|s_t)A_t] \\ &= \mathbb{E}_{t}\left[\nabla_{\theta} \log \pi_{\theta}(a_t|s_t) \sum_{i=0}^{T-t-1} \lambda^{i}\left( r_{t+i} + \bar{V}(s_{t+i+1}) - \bar{V}(s_{t+i}) \right)\right] \\ &= \mathbb{E}_{t}\left[\nabla_{\theta} \log \pi_{\theta}(a_t|s_t) \left((1-\lambda) \sum_{i=1}^{T-t-1} \lambda^{i-1}G_{t:t+i}+\lambda^{T-t-1}G_{t:T}- \bar{V}(s_{t})\right)\right] \\ &= \mathbb{E}_{t}\left[\nabla_{\theta} \log \pi_{\theta}(a_t|s_t) \left((1-\lambda) \sum_{i=1}^{T-t-1} \lambda^{i-1}G_{t:t+i}+\lambda^{T-t-1}G_{t:T}\right)\right] \end{aligned}

        通过这种方式,我们就可以避免 value function 对 policy gradient 的影响,因而我们可以对 value model 和 policy model 使用不同的 λ\lambda 进行训练。

        最终,我们就可以得到 VC-PPO 的算法:

        vc_ppo

        实验

        setup

        1. 作者在AIME, GPQA 以及Codeforces三个数据集上进行评测
        2. 作者首先进行了code-start,作者构建了一批样本然后要求模型在 <thinking></thinking> 之间生成推理过程,然后使用Verifier来针对答案部分提供奖励,正确则奖励为1,错误则奖励为-1
        3. RL的Baseline使用的是PPO
        4. value pretraining 时,作者将 GAE的 λ\lambda 设置为 1.0, 其他参数与PPO一致
        5. 对于decoupled GAE,作者使用 λcritic=1.0\lambda_{\text{critic}}=1.0, λactor=0.95\lambda_{\text{actor}}=0.95

        实验结果

        实验结果如下图所示

        results

        作者还分析了以下模型在AIME数据集上随着训练步数增加准确率的变化情况

        results_aime

        Ablation Study

        作者首先探究了 value pretraining 以及 decoupled GAE 对于模型性能的影响

        ablation_study

        从上图可以看到,直接使用PPO并不能提升模型的表现,而使用value pretraining 以及 decoupled GAE 能够显著提升模型的表现。

        作者接下来探究了不同的value pretraining steps对模型的影响,结果如下图

        ablation_study_2

        从上表可以看到,value pretraining 的训练步数并不是越多越好,随着训练步数的增加,模型可能会出现过拟合的现象。

        最后作者还分析了以下 λactor\lambda_{\text{actor}} 对于模型性能的影响,结果如下图

        ablation_study_3

        可以看到, λactor=1.0\lambda_{\text{actor}} =1.0 的效果是最差的,但是 λactor\lambda_{\text{actor}} 也不是越小越好,实验发现当 λactor[0.95,1.0)\lambda_{\text{actor}} \in [0.95, 1.0) 时结果比较好

        Findings

        作者还提供了一些发现。

        1. 作者认为,在LLM中进行RL的训练与传统的RL训练不同,我们不再是从一个随机policy开始,而是从一个SFT之后的policy开始,因此,这就会引入 prior,我们需要将 value model 与 policy model 进行对齐,才能使得训练更加稳定。
        2. 作者认为,value pretraining 可以王value model 中注入先验知识,作者通过实验发现,value pretraining 的过程可以分为两个阶段,第一个阶段是random alignment,这个和传统的RL训练类似,第二个阶段是knowledge injection,这个阶段,value model 开始学习如何给重要的token 更高的权重。 value-pretraining
        3. 作者发现, value model 倾向于更大的 λ\lambda, 因此结果会导致更小的 bias 和 更大的 variance. 而 policy model 倾向于更小的 λ\lambda. 这种差异启发我们需要使用一些基于policy gradient 的目标来训练 value model.

        结论

        本文提出了VC-PPO,一个通过使用value-pretraining 以及 decoupled GAE 来解决PPO 的 value initialization bias 以及 reward signal decay 问题的算法。

        参考文献