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 这样拥有巨大状态空间的场景提供了有力类比。
亮点与局限
亮点:
- 诊断价值极高:Value Flattening 之前未被明确命名和系统分析,这篇论文是首个深入剖析 PPO Critic 在 LLM 场景下系统性失效机制的工作,具有重要的学术价值
- 解法简洁有效:SP³O 不引入新架构、不增加计算量,仅通过改变"哪些状态计算损失"来实现缓解——工程实现成本极低
- 稀疏监督的意外优势:原本直觉上会觉得减少监督状态数量会损失信息,但实验证明稀疏 well-separated 的监督反而因为消除了冗余梯度而更有效——这是一个反直觉的发现
- 跨规模普遍有效:在 Qwen3-Base 多个规模上均有效,说明该问题的根源(方差惩罚 + 时序冗余)与模型规模无关,是 PPO Critic 本身的结构性问题
局限:
- 仅测试 Qwen3-Base:缺乏在 Llama、GPT 等其他 LLM 架构上的验证,泛化性待确认
- 状态选择策略细节未披露:具体的 well-separated 选择算法(等间隔?随机但有最小间距?)在 abstract 中未披露,实现时需要参考原文
- RLHF 整体效果未知:实验仅评估了"学到的策略质量",未披露最终 LLM 的 assistant 质量(如 Helpful/Harmless 分数),与 DPO、PPO 等方法的端到端对比数据缺失
- 理论分析尚浅:隐式方差惩罚的机制是理论推断,缺少像 GDBA(Gradient-Driven Critic Learning)那样严格的数学推导
对工程落地的启发
- LLM PPO 训练调优:在训练 LLM 的 PPO 阶段时,可以考虑将价值损失稀疏化——仅对 sequence 的关键位置(如 answer boundary tokens、decision tokens)计算价值损失,而非每个 token 都计算,可能获得更稳定的训练
- 减少 Critic 更新频率:如果实现 SP³O 有难度,一个简化策略是降低 Critic 的更新频率(即增加 PPO 的 critic_update_freq 间隔),让每次 Critic 更新之间有更多环境交互,减少时序冗余梯度
- 调试 PPO 训练不稳定:Value Flattening 提供了一个新的排查方向——当 PPO 训练 loss 震荡但 reward 不见涨时,可以检查 Critic 预测的方差是否过小
- 状态空间缩小的代理任务: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 前,建议先用以下诊断确认问题确实存在:
- Critic 预测方差检测:在 validation 集上跑 Critic,记录每条 response 内 token 级别预测的标准差。若 std(V) < 0.05(arbitrary threshold),说明 Critic 预测几乎平坦,Value Flattening 确实存在。
- KL(π || π_ref) vs Advantage 相关性:若 Critic 预测值与策略相对 ref 的 KL 散度几乎无相关性,说明 Critic 没有捕获策略变化的信号。
- 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 核验
- well-separated 具体算法:abstract 未披露,「等间隔」是工程假设而非论文指定方案。PDF 原文可能有更优方案(如基于梯度范数的信息密度选择)。
- Qwen3-Base 以外模型的泛化性:论文仅测 Qwen3,若要在 Llama / Mistral 上用,建议先做上述 Critic 方差诊断,确认 Value Flattening 存在后再迁移。
- RLHF 端到端质量:实验测的是「学到的策略质量」,但未披露最终 LLM assistant 的 Helpful/Harmless 分数——上线前需在目标任务的 reward model 上跑端到端评估。
- 稀疏监督与 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 层面未展开,文件中的对比表为解读推断,非原文直接表述。