NLP——LLM对齐微调-VC-PPO

注:本文包含 AI 辅助创作


整体总结

  • 本文提出一种改进的 PPO 方法, VC-PPO(Value-Calibrated PPO)
  • 核心贡献:
    • Pretrained value:开始 RL 前先预训练价值网络
    • Decoupled-GAE:计算 Advantage (for Actor 损失)时和 计算 Target Reward(for Critic 损失)时使用不同的 \(\lambda\)

Motivation

  • LLM 在复杂推理任务(如数学、编程)中表现出色,尤其是通过生成长链思维(Long-CoT)来逐步推导答案
  • OpenAI的o1、DeepSeek-R1等模型都采用了这种“推理时扩展”策略
  • 一个发现:在Long-CoT任务中,PPO经常失效 ,表现为:
    • 模型输出长度迅速下降(注:通常是训练初期即开始大幅下降)
    • 验证集性能大幅退化
    • 无法有效利用长链思维
  • 注:这些现象与 PPO 在传统 RL 任务中的成功形成鲜明对比

问题诊断:PPO 失效的两大原因简单描述

  • 作者通过实验和分析,识别出 PPO 在 Long-CoT 任务中失效的两大根本原因
  • 注:导致模型输出长度迅速下降的直接原因是:前置 Advantage 被高估,详情见本文后面补充的附录

Value/Critic Initialization Bias

  • 在 RLHF 中,常用做法是用训练好的 奖励模型来初始化Value/Critic 模型
    • 注:这种做法则源于奖励模型和价值模型之间的表面相似性,因为两个模型都旨在预测关于响应的标量信息
  • 但奖励模型只在 <EOS> 处提供评分,对前面的 token 没有监督信号,导致它对前置 token 的打分偏低
  • 这种偏差在 GAE 中会被放大,导致前置 token 的 Advantage 被高估,进而促使模型倾向于生成短回答

奖励信号衰减(Reward Signal Decay)

  • 在 GAE 中,当 \(\lambda < 1\) 时,来自 <EOS> 的奖励信号会随传播距离指数衰减
  • 在 Long-CoT 任务中,序列长度可达数千 token,前置 token 几乎接收不到任何奖励信号
  • 这导致值模型无法有效学习,进而影响策略优化
  • 注:传统 RLHF 中常常使用 \(\lambda = 0.95\)
    • 这种做法源于传统的 RL 文献,其中 PPO 已在像 Mujoco 和 Atari 这样的环境中得到广泛测试
    • 在这些环境中,奖励会在轨迹上累积,导致高方差的回报,因此,使用 \(\lambda < 1\) 方差降低是必要的
    • 但这种方式会导致模型收敛缓慢
奖励信号衰减的数学推导
  • 定义:
    • \(V\):值函数
    • \(r_t\):即时奖励
    • \(\lambda\):GAE 平滑因子
  • 在标准 GAE 中,优势估计为:
    $$
    \hat{A}_t = \sum_{l=0}^{T-t-1} \lambda^l \delta_{t+l}, \quad \delta_t = r_t + V(s_{t+1}) - V(s_t)
    $$
  • Critic 目标为回报的估值:
    $$ R \approx V^{\text{target} }(s_t) = V_{old}(s_t) + A^{GAE}_t$$
  • 展开即可得到:
    $$
    V^{\text{target} }(s_t) =
    \begin{cases}
    \sum_{l=0}^{T-t-1} \lambda^l (r_{t+l} + V(s_{t+l+1}) - V(s_{t+l})) + V(s_t), & \lambda < 1 \\
    \sum_{l=0}^{T-t-1} r_{t+l}, & \lambda = 1
    \end{cases}
    $$
    • 上面式子的详细推导见:RL——强化学习中的方差与偏差 的 GAE 部分
    • 当 \(\lambda=1\) 时, Critic 目标即为累积奖励,无偏且稳定
    • 当 \(\lambda<1\) 时, Critic 目标引入了值函数自身的估计,可能不稳定
      • 当长度太大时,可以看到最终的奖励 \(r_T\) 几乎被淹没了,需要逐步透传到 Critic,所以 Critic 收敛性本身也会变慢

模型输出长度迅速下降 的原因详细分析

  • 现象描述:在标准的 PPO 训练中,模型本应生成长链思维(Long-CoT)来逐步推理答案
    • 但在实验中,训练刚开始不久,模型输出的平均长度急剧下降 ,随之而来的是验证集性能的崩溃(如图 1 所示)
  • 根据论文内容,可以得到一个清晰的因果链:
    • 1)初始阶段 :Critic 模型对前置 token 的估计偏低(来自奖励模型初始化)
    • 2)GAE 计算 :这种偏差被 GAE 放大,使前置 token 获得过高的优势值
    • 3)策略更新 :PPO 鼓励高优势值的动作,即鼓励模型多输出前置 token,少输出后置 token
    • 4)行为变化 :模型学会尽早结束生成,因为“早结束”意味着“多输出前置 token、少输出后置 token”
    • 5)恶性循环 :输出变短后,训练数据中的长序列减少,值模型更难学习长序列的价值,进一步强化短输出倾向

直接原因:前置 token 的优势被高估

  • 通过分析优势值(Advantage)与token位置的关联(如图 2 所示)发现:
  • 越靠前的 token,其优势值越高(正偏差越大);
    • 这种偏差导致模型倾向于更早结束生成 ,因为前置 token 被“鼓励”输出,而后置 token 被“惩罚”或忽略
    • 模型学会“尽早收尾”,从而输出长度急剧下降

根本原因之一:值初始化偏差

奖励模型的训练目标
  • 奖励模型只在 token 处给出评分(如正确=1,错误=-1);
  • 它对前面的 token 没有直接的监督信号;
  • 因此,奖励模型对前置 token 的评分偏低(因为信息不完整)
    • 理解:这里不够严谨
      • 其实需要看初始化值和大部分目标值的相对关系,本质应该是可能偏高也可能偏低才对
值模型从奖励模型初始化
  • 在 RLHF 中,常用做法是将训练好的奖励模型作为值模型的初始化
  • 这导致值模型在初始阶段也对前置token的预期回报估计偏低
偏差在 GAE 中被放大
  • GAE 的优势估计公式为:
    $$
    \hat{A}_t = \sum_{l=0}^{T-t-1} \lambda^l \delta_{t+l}, \quad \delta_t = r_t + V(s_{t+1}) - V(s_t)
    $$
  • 由于前置token的 \(V(s_t)\) 被低估,而 \(V(s_{t+1})\) 相对较高(因为更接近 <EOS>),导致:
    • \(\delta_t\) 为正;
    • 这些正偏差在累加过程中被放大,最终使前置token的优势值显著偏高

根本原因之二:奖励信号衰减

GAE 中的奖励传播机制
  • 当 \(\lambda < 1\) 时(如默认的 0.95),来自 <EOS> 的奖励信号会随传播距离指数衰减:
    $$
    \text{传播到第 } t \text{ 个 token 的奖励信号} = \lambda^{T-t} \cdot r_{}
    $$
Long-CoT 任务的特点
  • 序列长度 \(T\) 可能达到数千token;
  • 前置 token 的 \(T-t\) 很大,\(\lambda^{T-t} \approx 0\);
  • 前置 token 几乎接收不到任何来自最终答案的奖励信号
对 Critic 模型的影响
  • 值模型难以学习到前置 token 的真实价值;
  • 值估计进一步失真,加剧了前置 token 的优势偏差

解决方案:VC-PPO

  • VC-PPO(Value-Calibrated PPO) 同时解决上述两个问题

创新1:Value-Pretraining

  • 目的:解决值初始化偏差,使值模型在训练开始前就与初始策略对齐
  • 方法流程
    • Step 1: 固定策略模型 ,使用初始策略(如SFT后的模型)生成大量 Response
    • Step 2: 使用 Monte-Carlo 回报(即 GAE \(\lambda=1.0\)) 作为值模型的目标,进行离线训练
    • Step 3: 训练至值损失和解释方差(explained variance)收敛
    • Step 4: 将该值模型作为后续 PPO 训练的初始值模型
  • 实验效果
    • 消除了前置 token 的优势偏差
    • 保留了 Long-CoT 的模式,避免输出长度崩溃

创新2:Decoupled-GAE(解耦 GAE)

  • 这是本文的核心创新点,目的是在策略优化值函数优化中使用不同的 \(\lambda\) 值,以分别满足两者的不同需求
  • 注:使用不同的 \(\lambda\) 值更新时,需要证明其策略梯度还能准确,下文会证明这个事情
背景问题描述
  • 策略优化需要低方差 的梯度估计,因此希望使用较小的 \(\lambda\)(如 0.95);
  • 但值函数优化需要无偏的目标 ,因此希望使用 \(\lambda=1.0\),避免奖励信号衰减;
  • 传统 PPO 中,两者共用同一个 \(\lambda\),无法兼顾
方法流程
  • Step 1: 策略优化使用 \(\lambda_{\text{actor} } < 1.0\)(如 0.95),以降低梯度方差
  • Step 2: 值函数优化使用 \(\lambda_{\text{critic} } = 1.0\),以确保 Critic 目标无偏
  • Step 3: 两者的 GAE 计算独立进行 ,互不干扰
  • Algorithm1:
策略梯度的无偏性证明(待详细推导和理解)
  • 作者进一步证明,即使值函数是用不同 \(\lambda\) 训练的,将其代入策略梯度中仍然无偏:
  • 定义 n-step 回报为:
    $$
    G_{t:t+h} =
    \begin{cases}
    \sum_{l=0}^{h-1} r_{t+l} + \bar{V}(s_{t+h}), & t+h < T \\
    \sum_{l=0}^{T-t-1} r_{t+l}, & t+h = T
    \end{cases}
    $$
  • 则优势可写为:
    $$
    \hat{A}_t = (1-\lambda) \sum_{l=1}^{T-t-1} \lambda^{l-1} G_{t:t+l} + \lambda^{T-t-1} G_{t:T} - \bar{V}(s_t)
    $$
  • 即,具有任意 \(\lambda\) 的策略梯度可以重写如下:
    $$\begin{aligned} \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_{l=0}^{T-t-1} \lambda^l (r_{t+l} + \bar{V}(s_{t+l+1}) - \bar{V}(s_{t+l})) \right] \\ &= \mathbb{E}_t \left[ \nabla_\theta \log \pi_\theta(a_t|s_t) \left( (1-\lambda) \sum_{l=1}^{T-t-1} \lambda^{l-1} G_{t:t+l} + \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_{l=1}^{T-t-1} \lambda^{l-1} G_{t:t+l} + \lambda^{T-t-1} G_{t:T} \right) \right] \end{aligned} \tag{8}$$
    • 根据公式 8,代入任意价值函数不会给策略梯度引入额外的偏差
    • 鉴于大型语言模型所需的大量时间和计算资源,使用较小的 \(\lambda\) 来加快策略的收敛是可取的
    • 一个候选配置可以是 \(\lambda_{\text{policy}} = 0.95\) 和 \(\lambda_{\text{value}} = 1.0\)
  • 论文中提到:使用任意值函数不会引入额外偏差
    • 问题:这里并不是说明使用 Decoupled-GAE 前后的梯度一致,因为 \(G_{t:t+l}\) 中也包含了 \(\bar{V}(s_{t+l})\)
      • 此时 Actor 更新时最大化的目标(Advantage)本身已经发生了改变,目标变成了 最大化新的 \(\lambda\) 下的 Critic 值
    • 这里仅仅是证明了这 Actor 和 Critic 解耦的 \(\lambda\) 下,也有一个可以学习的目标值(形式上与原始的 策略梯度法/PPO 的结果是一样的)
      • 注:这也就是说形式上本身是不冲突的,但没有说明两者的目标是完全等价的

实验

Setting

  • 主要任务 :AIME、GPQA、Codeforces
  • Base 模型型 :Qwen2.5 32B
  • 冷启动 :使用少量 Long-CoT 格式样本进行 SFT
  • 奖励 :规则驱动的答案匹配(正确=1,错误=-1)
  • Baselines :PPO(\(\lambda=0.95\))和 GRPO(DeepSeek-R1 中使用)

对照 GRPO

  • VC-PPO vs GRPO
    模型 AIME 2024 pass@1 GPQA pass@1 CodeForces pass@1
    GRPO 38.9 49.4 12.6
    VC-PPO 48.8 48.8 12.8
  • VC-PPO 在 AIME 上显著优于 GRPO,达到 Qwen-32B 模型在该任务上的 SOTA

消融实验

  • 移除 Value-Pretraining :AIME pass@1 从 41.9 降至29.4
  • 移除 Decoupled-GAE :AIME pass@1 降至 29.4
  • \(\lambda_{\text{actor} }\) 调优 :\(\lambda=0.99\) 效果最佳,\(\lambda=1.0\) 效果最差

关键 Insight

  • 值模型与策略的对齐至关重要 :尤其是在 Long-CoT 任务中,值模型必须充分理解策略的生成模式,否则会破坏 CoT 结构
  • 值预训练不仅是值热身,更是知识注入 :它帮助模型理解哪些 token 更有价值,是提升性能的关键
  • 值优化对噪声更鲁棒 :值模型可以使用 \(\lambda=1.0\) 的无偏目标,而策略需要 \(\lambda<1.0\) 来降低方差,二者解耦是合理的

附录:证明 score function 的梯度性质