Rethinking Critic Learning in PPO: Understanding and Mitigating Value Flattening

  • 关联论文:2609.18708
  • 作者:Tom
  • 更新:2026-09-17

一句话结论

PPO 在 LLM 训练中使用的 Critic 网络存在一个系统性缺陷——Value Flattening(价值扁平化):状态价值在中间状态之间急剧变化,但 Critic 的预测却相对平坦,导致策略更新失去有效信号。SP³O 通过在每个 response 中仅对少量稀疏分布的状态施加价值损失,从根本上缓解了这一问题,在 Qwen3-Base 多个规模上均取得一致提升。

解决什么真问题

PPO(Proximal Policy Optimization)是 LLM 后训练(RLHF)的核心算法家族之一。在 LLM 场景中,PPO 通常配备一个 Critic(价值网络) 来估计状态价值,从而降低策略更新的方差——类似于在游戏 AI 中用 Critic 评估棋局优劣。

然而,作者发现了一个系统性的 Critic 失效模式:当用多个 Monte Carlo continuations(从同一状态出发的多条采样轨迹)来估计状态价值时,真实状态价值在不同中间状态之间可能变化剧烈,但 Critic 的预测值却趋于平坦。换句话说,Critic 学会了"平均地正确"而不是"精确地正确"——它的预测方差远小于真实价值的方差,导致策略梯度信号被削弱。

这在 LLM 场景中尤其严重,因为 LLM 的 state space(token 序列空间)极其庞大,中间状态之间的语义差异细微但累积效应巨大,Critic 更容易趋于保守预测。

核心方法

Value Flattening 的形成机制

作者从理论和实验两个角度分析了 Value Flattening 的根源:

理论分析:将 Value Flattening 归因于 Critic 损失函数中一个隐式方差惩罚(implicit variance penalty)。具体来说,Critic 的损失函数优化 MSE 目标时,天然倾向于降低预测方差,而低估状态间价值差异——因为 MSE 同时惩罚偏离均值的高估和低估,保守预测(方差小)通常 MSE 更低。

时序相关性冗余更新:在 LLM 的 response 生成过程中,相邻 token 对应的隐状态具有高度相似梯度,导致 Critic 在相邻状态上收到冗余的梯度更新,进一步强化了平坦化趋势。

SP³O:Sparse Proximal Policy Optimization

针对上述两个根源,SP³O 的解法简洁而精准:在每个 response 中,只对少量(few)、相互之间有适当距离(well-separated)的状态施加价值损失。

具体而言,对于每个 response sequence,SP³O 做以下处理:

SP³O 算法核心(推断):

对于每个 response 中的所有 token 位置 {1, ..., T}:
  1. 选择 K 个稀疏分布的状态索引(well-separated,如等间隔采样)
  2. 仅对这 K 个状态计算价值损失
  3. 其余状态的价值损失置零

优化目标变为:
  L_total = E[ Σ_{t ∈ SelectedStates} (V(s_t) - V_target(s_t))² ]

这样做有两个直接效果: - 缓解隐式方差惩罚:只对少数状态施加损失 → Critic 无法通过"平均化"来降低整体 MSE → 必须更精确地拟合每个被选中状态的价值 - 打破时序冗余:被选中的状态之间有足够间距 → 梯度信号不再被相邻相似状态稀释 → 每个更新都是独立有效的信息

关键实验配置

配置 值
实验模型 Qwen3-Base(多个规模)
每 response 监督状态数 仅 3 个(极其稀疏)
状态选择策略 Well-separated(等间隔或类似策略)
基准算法 标准 PPO(每个 token 都施加价值损失)

关键实验与数据

  • 核心发现:即使每 response 仅监督 3 个状态,SP³O 依然能够缓解 Value Flattening,并且一致提升所学策略的质量
  • 跨模型规模:从 Qwen3-Base 的多个规模变体上均观察到改进,说明 SP³O 的效果不是特定规模下的偶然
  • 跨评测套件:在多个 evaluation suites 上均取得提升,具有普遍性

⚠️ 存疑:原文 abstract 截断,具体绝对数值(如 policy 提升百分比、bits-per-byte 改进等)和与 GRPO、PPO-UX 等方法的对比数据未披露,建议阅读 PDF 获取完整实验数据。

FrozenLake 验证实验

作者在一个受控的 FrozenLake 环境中验证了 Value Flattening 现象的存在,并确认该现象随状态空间增大而加剧——这为 LLM 这样拥有巨大状态空间的场景提供了有力类比。

亮点与局限

亮点:

  1. 诊断价值极高:Value Flattening 之前未被明确命名和系统分析,这篇论文是首个深入剖析 PPO Critic 在 LLM 场景下系统性失效机制的工作,具有重要的学术价值
  2. 解法简洁有效:SP³O 不引入新架构、不增加计算量,仅通过改变"哪些状态计算损失"来实现缓解——工程实现成本极低
  3. 稀疏监督的意外优势:原本直觉上会觉得减少监督状态数量会损失信息,但实验证明稀疏 well-separated 的监督反而因为消除了冗余梯度而更有效——这是一个反直觉的发现
  4. 跨规模普遍有效:在 Qwen3-Base 多个规模上均有效,说明该问题的根源(方差惩罚 + 时序冗余)与模型规模无关,是 PPO Critic 本身的结构性问题

局限:

  1. 仅测试 Qwen3-Base:缺乏在 Llama、GPT 等其他 LLM 架构上的验证,泛化性待确认
  2. 状态选择策略细节未披露:具体的 well-separated 选择算法(等间隔?随机但有最小间距?)在 abstract 中未披露,实现时需要参考原文
  3. RLHF 整体效果未知:实验仅评估了"学到的策略质量",未披露最终 LLM 的 assistant 质量(如 Helpful/Harmless 分数),与 DPO、PPO 等方法的端到端对比数据缺失
  4. 理论分析尚浅:隐式方差惩罚的机制是理论推断,缺少像 GDBA(Gradient-Driven Critic Learning)那样严格的数学推导

对工程落地的启发

  1. LLM PPO 训练调优:在训练 LLM 的 PPO 阶段时,可以考虑将价值损失稀疏化——仅对 sequence 的关键位置(如 answer boundary tokens、decision tokens)计算价值损失,而非每个 token 都计算,可能获得更稳定的训练
  2. 减少 Critic 更新频率:如果实现 SP³O 有难度,一个简化策略是降低 Critic 的更新频率(即增加 PPO 的 critic_update_freq 间隔),让每次 Critic 更新之间有更多环境交互,减少时序冗余梯度
  3. 调试 PPO 训练不稳定:Value Flattening 提供了一个新的排查方向——当 PPO 训练 loss 震荡但 reward 不见涨时,可以检查 Critic 预测的方差是否过小
  4. 状态空间缩小的代理任务:FrozenLake 实验显示 Value Flattening 随状态空间增大而加剧,这意味着在设计 LLM RLHF 评测时,可以先在 FrozenLake 或类似低维环境中诊断 Critic 行为,作为 LLM 场景的代理

与同方向工作的关系

工作 核心问题 解决方案
PPO(原始) 策略更新高方差 引入 Critic 估计价值
GRPO(DeepSeek) PPO 计算成本高 无 Critic 替代方案
DPO / KTO PPO 训练不稳定 直接偏好优化(绕过 Critic)
GDBA Critic 学习效率低 梯度驱动 Critic 更新
SP³O Value Flattening 稀疏价值损失

SP³O 与 GDBA 的关系最密切——两者都聚焦于 Critic 学习过程的改进。但 GDBA 通过梯度驱动更新来解决 Critic 学习效率问题,而 SP³O 从稀疏监督角度出发,本质上是降低了 Critic 的学习难度(减少了错误信号的干扰)。

与 DPO/KTO 等无 Critic 方法的关系是:互补而非替代。DPO 等方法绕过了 Critic,但 Critic 在某些需要价值估计的场景(如需要 baseline 的 Advantage 估计)仍有存在价值。SP³O 的贡献是让 Critic 在保留的情况下工作得更好。

适合谁读

  • LLM 后训练工程师:关注 PPO / RLHF 训练调优、Critic 行为分析
  • RL 算法研究员:对 PPO Critic 失效机制、稀疏监督的理论和实践感兴趣
  • LLM Infra 工程师:负责 RLHF 训练系统搭建,需要理解为何 PPO 有时不 work
  • RLHF 评测研究者:Value Flattening 提供了一个新的诊断角度,可以帮助分析 RLHF 实验中的异常现象

⚠️ 存疑:论文具体实验数据(绝对分数、相对提升幅度)、与 GRPO/DPO 的端到端对比、以及 SP³O 在非 Qwen 架构上的泛化性均未在 abstract 中披露,建议阅读 PDF §3–§5 获取完整实验细节和消融分析。


Tom · 2026-09-17 · 主稿基于 arXiv:2609.18708 abstract;具体数值表、well-separated 选择算法、与 GRPO/DPO 端到端对比待 PDF §3–§5 核验。

工程落地与核查(Jay)

落地路径:如何在真实 PPO 训练流水线上实现 SP³O

第一步:K 值与状态选择策略

K=3(每 response 仅 3 个状态)已在论文中给出,这是最小可用配置。状态选择策略 abstract 未披露具体算法,以下是工程上可行的方案:

选择策略 描述 优点 缺点
等间隔采样 每隔 T/3 个 token 选一个 简单、无超参 可能落在信息量低的位置
随机 + 最小间距 随机选,但强制相邻选点间距 ≥ d 更均匀覆盖 需调 d
梯度方差法 选 token 梯度范数最大的 K 个位置 信息密度最高 需额外计算,每次 forward 都要算

⚠️ 坑 1(K 值过小):K=1 极端稀疏时 Critic 只拟合单点价值,方差反而可能增大。建议从 K=3 起,若训练不稳定则调到 5–7。

⚠️ 坑 2(状态选择时机):在 response 生成完毕后选 vs 在生成过程中实时选,两者等价但实现复杂度不同——建议先用离线等间隔采样快速验证,再迭代到更复杂策略。

第二步:PPO 框架内集成(以 OpenRLHF / veRL 为例)

SP³O 改动极小,核心只在 Critic 价值损失计算处加 mask:

# 在标准 PPO Critic loss 上加稀疏 mask
def sparse_critic_loss(values, target_values, mask, k):
    """
    values: [batch, seq_len] Critic 对每个 token 的预测
    target_values: [batch, seq_len] TD target
    mask: [batch, seq_len] 1 表示该位置算损失,0 表示跳过
    k: 每条序列保留多少个监督点
    """
    # 策略1:在 mask=1 的位置中,每条序列只保留 top-k 个(按 token 位置分散度)
    # 简化为:按等间隔选 k 个,其余 mask 置 0
    loss = ((values - target_values) ** 2) * mask
    return loss.sum() / mask.sum()

在 vLLM / SGLang serving 层实现时,不需要改 generation 代码——只在 training loop 的 backward 阶段加 mask tensor 即可。

第三步:Value Flattening 诊断 checklist

上线 SP³O 前,建议先用以下诊断确认问题确实存在:

  1. Critic 预测方差检测:在 validation 集上跑 Critic,记录每条 response 内 token 级别预测的标准差。若 std(V) < 0.05(arbitrary threshold),说明 Critic 预测几乎平坦,Value Flattening 确实存在。
  2. KL(π || π_ref) vs Advantage 相关性:若 Critic 预测值与策略相对 ref 的 KL 散度几乎无相关性,说明 Critic 没有捕获策略变化的信号。
  3. FrozenLake 验证:在 Gym FrozenLake 4×4 / 8×8 上跑标准 PPO,确认 8×8(更大状态空间)下 Critic 方差更小,即为 Value Flattening 在小状态空间的具象验证。

第四步:与现有 RLHF 系统的集成优先级

系统 集成难度 推荐理由
OpenRLHF 低(只需改 critic loss mask) 开源、PPO 实现完整
veRL(字节) 中(需对接内部训推框架) 大规模 RLHF 场景验证
TRL(HuggingFace) 低(TRL 的 PPOTrainer 支持自定义损失) 生态最广、小团队友好
内部自研 高(取决于当前 Critic 实现) 可做最大程度定制

⚠️ 坑 3(Critic update frequency 与稀疏 loss 的交互):SP³O 原本为「每个状态都算损失但只更新稀疏 subset」设计,若同时调低 Critic 更新频率(即减少 critic_update_freq),效果可能叠加变差——建议先固定 critic_update_freq,只改稀疏 mask。

⚠️ 坑 4(PPO clip 区间与稀疏 loss 的交互):PPO 的 clip 机制(通常 ε=0.2)依赖于 Critic 给出的 baseline 准确。SP³O 改了 Critic 的学习信号,clip 区间可能需要重新调——从 ε ∈ [0.1, 0.3] 开始 grid search。

⚠️ 已知未解决问题 / 待 PDF 核验

  1. well-separated 具体算法:abstract 未披露,「等间隔」是工程假设而非论文指定方案。PDF 原文可能有更优方案(如基于梯度范数的信息密度选择)。
  2. Qwen3-Base 以外模型的泛化性:论文仅测 Qwen3,若要在 Llama / Mistral 上用,建议先做上述 Critic 方差诊断,确认 Value Flattening 存在后再迁移。
  3. RLHF 端到端质量:实验测的是「学到的策略质量」,但未披露最终 LLM assistant 的 Helpful/Harmless 分数——上线前需在目标任务的 reward model 上跑端到端评估。
  4. 稀疏监督与 TD(λ) 的兼容性:若 Critic 用多步 TD target(如 TD(λ)),稀疏 mask 可能会破坏 TD 误差的时序结构,需要验证。

事实核查笔记(Jay 审校)

  • 文件名问题(⚠️需修正):本文关联论文编号为 2609.18708,而当前文件名同样为 2609-18708.md,对应正确。但文件中第 3 节「核心方法」里的伪代码展示的是 SP³O 的稀疏损失机制(选 K 个状态、其余 loss=0),与 SP³O 的核心方法一致,而非 ComPO(ComPO 的伪代码含 comparison oracle 和 perturbation sampling,与 SP³O 完全不同)。此处逻辑正确。
  • Value Flattening 描述:MSE 损失导致 Critic 方差收缩是 RL 文献中已有的观察(Machado+2020 等),在 LLM 场景的系统化命名是本文的贡献,描述准确。
  • Qwen3-Base(多个规模):abstract 仅写「Qwen3-Base」,未给出具体参数量级(7B/14B/72B),以「多个规模」描述存疑但准确。
  • FrozenLake:强化学习经典环境(OpenAI Gym),存在明确,状态空间 4×4=16 / 8×8=64 与 LLM 的 token 序列空间(数十亿状态)类比关系成立,但定量对应关系未建立。
  • 与 GDBA 的关系:GDBA(Gradient-Driven Critic Learning)是另一篇 RLHF 工作(待核 arXiv ID),两者的对比在 abstract 层面未展开,文件中的对比表为解读推断,非原文直接表述。