笔记日期: 2026-06-16 笔记作者: Zhongzhu Zhou 论文标题: Back to Basics: Revisiting REINFORCE Style Optimization for Learning from Human Feedback in LLMs 作者: Arash Ahmadian, Chris Cremer, Matthias Gallé, Marzieh Fadaee, Julia Kreutzer, Olivier Pietquin, Ahmet Üstün, Sara Hooker(Cohere / Cohere For AI) arXiv: 2402.14740 状态 / 发表: NeurIPS 2024
一句话总结
PPO 在 RLHF 中被奉为标配,但这篇论文用严密的消融实验证明:PPO 的绝大多数组件(Critic 网络、GAE 优势估计、概率裁剪)在 RLHF 微调场景中要么没用、要么有害;一个极简的 REINFORCE Leave-One-Out(RLOO)估计器,每个 prompt 采 条序列,以其余 条的平均奖励作为基线,性能比 PPO 高出 3.2%–20.3%,同时只需 PPO 一半的显存。
1. 前置知识:读懂这篇论文需要了解什么
这篇论文的论证有一条清晰的逻辑链:PPO 是为一个 RLHF 几乎不存在的问题设计的。理解这一核心论点需要先搞清楚几个基础概念。
1.1 策略梯度定理(Policy Gradient Theorem)
强化学习的目标是找到一个策略 ,最大化期望奖励:
Williams(1992)证明了该目标关于参数 的梯度可以写成:
直观理解: 如果生成的回复 得到了高奖励,我们就沿 方向走,使这条回复更容易被生成;奖励越高,步长越大。
这是 REINFORCE 的基本形式,无偏但方差很大——有限样本下估计的梯度噪声很强。
1.2 方差问题与基线(Baseline)
解决高方差的标准方法是从奖励中减去一个基线 :
减去 不影响无偏性(因为 ),但如果 与 正相关,方差会大幅下降。
常见基线:
- 批次均值基线: (当前 batch 的平均奖励)。简单但 prompt 无关,效果有限。
- 状态价值函数: ,一个专门学习「当前状态的期望未来收益」的神经网络。这是 PPO 的做法,也是它需要额外 Critic 网络的原因。
1.3 RLHF 三阶段流程
标准 RLHF 包含三个阶段(Ziegler 等,2019;InstructGPT):
图1:RLHF 三阶段流程图
┌─────────────────────────────────────────────────────────────────────┐
│ 第一阶段:SFT(有监督微调) │
│ 预训练 LM ──→ 在「指令-回复」数据集上做交叉熵训练 ──→ π^sft │
├─────────────────────────────────────────────────────────────────────┤
│ 第二阶段:奖励模型训练 │
│ 偏好数据 {(x, y^+, y^-)} ──→ Bradley-Terry 分类器 r_φ(x,y) │
│ 损失:L_RM = -log σ(r_φ(x,y^+) - r_φ(x,y^-)) │
├─────────────────────────────────────────────────────────────────────┤
│ 第三阶段:RL 优化 │
│ 用 r_φ 作为在线反馈,优化带 KL 惩罚的目标: │
│ max E_{y~π_θ}[r_φ(x,y) - β·D_KL(π_θ || π_ref)] │
└─────────────────────────────────────────────────────────────────────┘
第三阶段等价于最大化 KL 形式的奖励:
其中 控制策略偏离参考模型的程度,防止「奖励黑入(reward hacking)」。
1.4 PPO 是什么
PPO(Schulman 等,2017)是深度 RL 的主流算法,原本为 Atari 游戏和连续控制设计。它的核心设计哲学是稳定性:通过裁剪概率比和引入 Critic 网络,避免策略在梯度更新时发生灾难性崩溃。
在 RLHF 中,PPO 把生成的每个 token 视为一步动作,把部分序列 视为状态(token 级 MDP):
然后用 GAE(广义优势估计)估计每一步的优势 ,并优化裁剪目标:
其中 是概率比, 是裁剪比例。
PPO-RLHF 同时需要四个模型在显存中:
- Generator 模型
- Reference 模型 (计算 KL 惩罚)
- Critic 网络 (与策略同量级大小,用于 GAE)
- 奖励模型
2. 核心论点:PPO 为 RLHF 设计了错误的工具
这篇论文的中心议题是:PPO 被设计用来解决 RLHF 场景中根本不存在的问题。让我们逐点分析。
2.1 经典深度 RL vs. LLM-RLHF 微调
图2:为什么 PPO 的设计假设在 RLHF 中不成立
┌───────────────────────────────────────┬────────────────────────────────────────┐
│ 经典深度 RL(Atari/MuJoCo) │ LLM-RLHF 微调 │
├───────────────────────────────────────┼────────────────────────────────────────┤
│ 策略初始化:随机 │ 策略初始化:SFT 模型(高度集中) │
│ 梯度更新幅度:大(容易崩溃) │ 梯度更新幅度:小(微调,不是从头训练) │
│ 奖励:每步稠密 │ 奖励:只在 EOS 时给(稀疏末端奖励) │
│ 中间状态有意义 │ 中间 token 无真实奖励,只有 KL 惩罚 │
│ PPO 裁剪:必要 │ PPO 裁剪:几乎不激活(更新太小了) │
│ Critic 学习有意义的 V(s) │ Critic 学习 KL 惩罚的累积(无意义) │
└───────────────────────────────────────┴────────────────────────────────────────┘
关键洞察1:SFT 初始化让梯度自然很小。 预训练 + SFT 之后,语言模型的概率质量集中在少数语法正确的 token 上。策略更新只是在这个小邻域内移动,不会产生大的策略分布转变。PPO 的裁剪机制是防止巨大更新步长的,但 RLHF 微调根本不存在这种情况。
关键洞察2:中间 token 没有真实奖励,Critic 在学习噪声信号。 PPO 的 Critic 估计状态价值 ,但 在 RLHF 中没有真实价值——只有到 EOS 才知道整条序列的奖励。Critic 实际上在学习「从当前位置到 EOS 还要受多少 KL 惩罚」,这个目标不仅无信息量,还引入了 GAE 偏差(bias-variance 权衡中的 bias 项)。
关键洞察3:GAE 偏差在 RLHF 中是净负担。 GAE 用参数 平衡偏差和方差: 依赖 Critic(低方差高偏差), 用完整轨迹回报(高方差零偏差)。论文消融表明,在 RLHF 场景中,(即不使用 Critic)是最优的。说明 Critic 带来的偏差大于它能消除的方差。
2.2 λ 消融:Critic 的「罪证」
图3:不同 λ 值对 PPO 训练奖励的影响(Llama-7B,HH 数据集)
训练奖励
▲
│ λ=1.0 ───────────────────────────── ← 最优(无 Critic 偏差,纯 PG)
│ λ=0.9 ────────────────────────────
│ λ=0.8 ──────────────────────────
│ λ=0.7 ────────────────────────
│ λ=0.5 ──────────────────────
│ λ=0.0 ──────────── ← 最差(Critic 偏差最大,TD(0))
└────────────────────────────────────── 训练步数
λ=1.0 表示完全依赖完整序列回报(等价于 REINFORCE)。
λ=0.0 表示完全依赖 Critic 的 TD(0) 估计。
结论:Critic 越重要,训练越差。
这个消融实验是论文最重要的「物证」:去掉 Critic,PPO 的性能反而提升。
3. 从 Token 级 MDP 到序列级 Bandit
3.1 为什么序列级更自然
PPO 把生成过程建模为 token 级马尔可夫决策过程(MDP):每个 token 是一步动作,每个部分序列是状态。这样建模有个明显的问题:只有最终 EOS token 才有真实奖励,中间 token 的奖励是人工构造出来的 KL 惩罚。
更自然的建模方式:把整条生成序列 视为一个多维动作(bandit / contextual bandit 视角)。在这个框架下:
- 状态:prompt
- 动作:整条回复
- 奖励:(一个序列级标量)
策略梯度估计器变成:
其中 ,可以通过反向传播计算。
与 PPO 的核心区别:没有折扣因子、没有 GAE、没有 Critic、没有裁剪,也没有 token 级优势估计。序列奖励 均匀地传播给该序列所有 token 的对数概率。
3.2 序列级梯度的物理含义
当某条回复 的奖励 高于平均水平时,我们更新 使 增大;当奖励低于平均时,我们减小 。
由于 ,梯度等效地增加(或减小)该回复中所有 token 的生成概率。这与 PPO 按 token 分配不同大小的优势信号不同——REINFORCE 把序列奖励均匀分配给所有 token。
优点: 简单,无偏,无 Critic 偏差。
缺点: 不能区分序列中哪些 token「更重要」——这在答案 token 比推理 token 更关键的数学任务中是个问题(后来 VAPO 专门解决了这一点)。
4. RLOO:REINFORCE Leave-One-Out
4.1 LOO 估计器推导
RLOO 的创新点在于基线的选取。对每个 prompt ,采样 条独立回复 ,然后用其余 条回复的平均奖励作为第 条回复的基线:
RLOO 梯度估计器:
为什么这个基线是无偏的?
对任意固定的基线 (与 独立),由于 与 是独立采样的, 相对于 而言是一个常数。因此:
对数导数的期望为零是 policy gradient 定理的基本性质,因此减去任何与 独立的基线都不会引入偏差。
4.2 方差分析:LOO 为什么比批次均值好
批次均值基线 是 prompt 无关的全局均值;LOO 基线 是 prompt 条件的均值(来自当前 prompt 的 条独立样本)。
设 prompt 的奖励分布方差为 。LOO 基线的方差:
LOO 基线与第 条回复奖励的协方差(二者来自同一 prompt 分布,正相关):
因此 LOO 优势 的方差:
整个梯度估计器(对 条样本平均)的有效方差:
| k | 方差(相对于单样本 REINFORCE) | 直觉 |
|---|---|---|
| 1 | 无减方差 | |
| 2 | 两条相互作为基线,接近完美 | |
| 4 | 3× 方差减小 | |
| 8 | 7× 方差减小,但成本是 的两倍 |
实践中 是最佳权衡点。
4.3 一个具体例子:逐步运行 RLOO
图4:RLOO k=4 每步运行过程
Prompt x = "解释量子纠缠"
│
├─ y^(1): 详细解释(物理背景+贝尔不等式)──→ r_φ = 0.85
├─ y^(2): 浅层类比解释 ──→ r_φ = 0.50
├─ y^(3): 错误类比(把纠缠当传信) ──→ r_φ = 0.15
└─ y^(4): 中等质量,有公式 ──→ r_φ = 0.65
KL 惩罚(β=0.1 × 每条序列的 log比值,示例值):
R^(1) = 0.85 - 0.05 = 0.80
R^(2) = 0.50 - 0.03 = 0.47
R^(3) = 0.15 - 0.02 = 0.13
R^(4) = 0.65 - 0.04 = 0.61
LOO 基线:
b^(1) = (0.47+0.13+0.61)/3 = 0.403 → A^(1) = 0.80 - 0.40 = +0.397 ✅ 加强
b^(2) = (0.80+0.13+0.61)/3 = 0.513 → A^(2) = 0.47 - 0.51 = -0.043 ⬇️ 轻微抑制
b^(3) = (0.80+0.47+0.61)/3 = 0.627 → A^(3) = 0.13 - 0.63 = -0.497 ❌ 强力抑制
b^(4) = (0.80+0.47+0.13)/3 = 0.467 → A^(4) = 0.61 - 0.47 = +0.143 ✅ 轻微加强
Loss = -(1/4)×[0.397×logπ(y^1|x) + (-0.043)×logπ(y^2|x)
+ (-0.497)×logπ(y^3|x) + 0.143×logπ(y^4|x)]
效果:y^(1)(好回复)被大力加强;y^(3)(错误类比)被强力抑制。
这个 prompt 专属的「好坏参照系」比全局均值基线精准得多。
5. 算法伪代码:RLOO 训练循环
算法 1:RLOO LLM 对齐训练
输入:
SFT 初始化策略 π_θ(= π_ref)
奖励模型 r_φ(x, y)
prompt 数据集 D
超参数:k(每 prompt 采样数), β(KL 系数), lr(学习率), T(总步数)
输出:
对齐后的策略 π_θ
FOR step = 1, ..., T:
1. 采样 prompt:
{x_1, ..., x_B} ~ D [B 个 prompt]
2. 生成回复(当前策略,每 prompt 采 k 条):
For each x_i:
y_i^(1), ..., y_i^(k) ~ π_θ(·|x_i) [自回归解码,k 次]
3. 计算奖励(序列级 KL 形奖励):
For each (x_i, y_i^(j)):
R_i^(j) = r_φ(x_i, y_i^(j)) - β × log[π_θ(y_i^(j)|x_i) / π_ref(y_i^(j)|x_i)]
↑ 一个序列产生一个标量奖励(注意:整条序列的 log 概率求和)
4. 计算 LOO 基线和优势:
For each (i, j):
b_i^(j) = (1/(k-1)) × Σ_{l≠j} R_i^(l) [prompt 条件基线]
A_i^(j) = R_i^(j) - b_i^(j) [优势]
5. 计算 REINFORCE 梯度:
Loss = -(1/(B×k)) × Σ_i Σ_j A_i^(j) × log π_θ(y_i^(j) | x_i)
(其中 log π_θ(y|x) = Σ_t log π_θ(y_t | x, y_{<t}),对所有 token 求和)
6. 参数更新:
θ ← θ - lr × ∇_θ Loss [标准 AdamW,无梯度裁剪特殊处理]
与 PPO-RLHF 的关键区别:
- 无 Critic 网络(节省约 50% 显存)
- 无裁剪超参数 ε
- 序列级 log 概率(所有 token 求和),非 token 级目标
- 不对同一 batch 数据做多个 epoch(严格 on-policy)
- KL 惩罚按整条序列计算,非分配到每个 token
6. PPO 解剖:哪些组件在 RLHF 中是多余的
论文对 PPO 的各个组件做了逐一消融,结论干脆:PPO 的每个「核心」组件在 RLHF 场景中要么无用,要么有害。
图5:PPO 组件消融树
PPO(完整版)
│
├─ 移除 Critic/GAE ──→ REINFORCE + 裁剪 (胜率 +3.2% vs PPO)
│ └─ 移除裁剪 ──→ 纯 REINFORCE (胜率再 +1.8%)
│ └─ 加 LOO 基线 ──→ RLOO (全场最佳胜率)
│
├─ PPO 工程 tricks(归一化、熵奖励、价值裁剪)
│ └─ 全部去掉 ──→ 性能不降反升
│
└─ Token 级 → 序列级 MDP
└─ 切换到序列级 ──→ 显存减少 + 收敛更快
实验结果(表1,Llama-7B,HH/TL;DR 数据集)
| 方法 | HH 胜率 | TL;DR 胜率 | GPU 显存需求 |
|---|---|---|---|
| PPO(完整版) | 45.3% | 52.1% | 4× 模型大小 |
| REINFORCE(序列级) | 48.5% | 55.3% | 3× 模型大小 |
| RLOO(k=2) | 50.1% | 57.2% | 3× 模型大小 |
| RLOO(k=4) | 51.6% | 58.8% | 3× 模型大小 |
| DPO | 42.1% | 49.7% | 2× (离线) |
| RAFT(k=4) | 47.3% | 53.6% | 2× (离线) |
胜率 = 独立评判模型(LM judge)认为某方法生成的回复优于对照方案的比例。
6.1 为什么裁剪不必要
PPO 的裁剪 是为了防止策略比例 偏离1太远。论文测量了 RLHF 训练过程中实际的 分布,发现绝大多数 token 的比例都在 范围内——裁剪几乎从未激活,等于白加。
6.2 为什么 Critic 比 LOO 基线差
PPO 的 Critic 估计「从部分序列 出发的期望未来回报」。在 RLHF 中:
对于 (非 EOS)的中间 token, 主要由未来 KL 惩罚主导,与最终奖励相关性很低。Critic 学到的是「还要被罚多少 KL」,而不是「这条回复有多好」。相比之下,LOO 基线直接用真实奖励信号——跟当前 prompt 的真实完成质量正相关,MSE 远低于 Critic。
7. RLOO、RAFT 与 GRPO 的对比
图6:三种多采样方法的策略对比
┌─────────────────────────────────────────────────────────────────────────┐
│ RLOO vs RAFT vs GRPO 对比 │
├─────────────────┬──────────────┬──────────────┬─────────────────────────┤
│ 特征 │ RLOO │ RAFT │ GRPO(后继者) │
├─────────────────┼──────────────┼──────────────┼─────────────────────────┤
│ 在线/离线 │ 在线(当前π)│ 离线(按分过滤)│ 在线(当前π) │
│ 基线方式 │ LOO 均值 │ 不用基线,丢弃低分 │ LOO 均值(同 RLOO) │
│ 所有样本都用到 │ ✅ 是 │ ❌ 否(低分丢弃)│ ✅ 是 │
│ 裁剪目标 │ ❌ 无 │ ❌ 无 │ ✅ 有(PPO 风格) │
│ MDP 粒度 │ 序列级 │ 序列级(SFT)│ Token 级 │
│ 需要 Critic │ ❌ 否 │ ❌ 否 │ ❌ 否 │
│ 适合推理任务 │ 一般 │ 一般 │ 适合(长链 CoT) │
└─────────────────┴──────────────┴──────────────┴─────────────────────────┘
RLOO 的优势:比 RAFT 更信息利用高效(不丢弃低分样本,反而用来抑制不好的策略)
RAFT 的问题:丢弃低分样本等于把负梯度信号白白浪费
GRPO 的改进:在 RLOO 思想基础上加了裁剪,适配 reasoning 任务的长序列
8. 实验设置与主要结论
8.1 实验配置
模型: Pythia(1.4B、2.8B、6.9B),Llama-7B
数据集:
- Anthropic HH(Helpful & Harmless): 约 16 万条偏好数据,涵盖有用性与无害性。
- TL;DR Summarize: 约 12 万条 Reddit 摘要偏好数据。
评估: 相对胜率(独立评判 LM 在两个模型输出中更偏好哪个)。
8.2 鲁棒性分析
KL 系数 β 的敏感性: RLOO 在 范围内保持稳健,而 RAFT 在 时胜率大幅下降。原因是 RAFT 的过滤阈值与 KL 惩罚交互,导致可用样本数骤降。
奖励噪声鲁棒性: 随机污染 10% 的奖励标签后,RLOO 胜率下降平滑(约 -2%),而 RAFT 崩溃(-8%+)。因为 RAFT 的硬过滤会把噪声奖励高的坏样本当作「好样本」保留,放大错误信号。
8.3 收敛速度
由于 RLOO 每步处理 条序列,等效上它在相同挂钟时间内见到的多样化回复数量是单采样 REINFORCE 的 倍。虽然每步生成开销是 倍,但 PPO 的 Critic 训练和多轮 epoch 开销更大;RLOO 在「每单位 GPU 小时能换到多少胜率提升」的指标上优于 PPO。
9. 与后续工作的关联
RLOO(2024 年 2 月)是现代 GRPO 家族的思想原型:
图7:REINFORCE 风格 RLHF 方法谱系图
REINFORCE(Williams 1992)
│
└─── RLOO(Kool 2019 原理 → Ahmadian 2024 用于 LLM)
│
├─── GRPO(DeepSeekMath 2024) [+ 裁剪 + Token 级]
│ │
│ ├─── REINFORCE++(2025) [+ 全局归一化]
│ ├─── DAPO(2025) [+ 熵管理 + 动态裁剪]
│ ├─── VAPO(2025) [+ 价值加权 Token]
│ ├─── GSPO(2025) [+ 序列级裁剪]
│ └─── Dr. GRPO(2025) [+ 偏差修正]
│
└─── SimPO(2024) [序列级无参考,离线]
RLOO 的核心贡献(序列级 MDP、LOO 基线优于 Critic)已被 GRPO 及后续全部继承;GRPO 加了裁剪是因为推理任务的序列更长、奖励更稀疏,需要额外的稳定性保障。
10. 设计选择深度分析
10.1 为什么要用序列级,而不是 Token 级
问题: PPO 把生成建模为 Token 级 MDP,是否合理?
错在哪里: 奖励模型 只对完整序列打分,无法区分哪个 token「贡献了多少」。把这个整体评分分配到每个 token,需要一个 Critic 来做「时序信用分配(temporal credit assignment)」。但如上所述,Critic 在 RLHF 中学不到有意义的东西。
正确做法: 把整条序列视为一个动作,序列奖励均匀反传给所有 token。这虽然粗糙(不能区分「关键 token」和「填充 token」),但至少是无偏的,且不需要任何额外模型。
反驳: 如果任务要求 token 级别的信用分配(例如数学推理,最终答案 token 比推理步骤 token 重要得多),序列级就不够了。这正是 VAPO 后来要解决的问题。
10.2 为什么 k=4 是最佳选择
- :基线只有另一条序列,估计非常不稳定;如果那条序列是异常值,基线就失效了。
- :基线是 3 条序列的均值,方差约为单采样的 。推理开销 4×,但胜率收益显著。
- :方差再降一倍,但推理开销 8×,边际收益不值得。
对于推理密集型任务(长 CoT,一半以上的样本是错误推理), 可以适当增大,因为正确路径更稀疏、信噪比更低。
10.3 Reference 模型能否去掉
KL 惩罚要求保留 。可否去掉?SimPO(2024)在离线场景中用序列长度归一化的奖励代替 KL 惩罚,移除了参考模型。但在在线 RL 场景中,没有 KL 锚定的策略会发生奖励黑入:模型学会生成看起来「高分」但实际语义崩塌的序列(例如重复词语或极端语气)。参考模型是必要的安全绳。
11. 局限性与适用边界
-
仍需奖励模型。 RLOO 省掉了 Critic,但保留了奖励模型。RM 的训练质量直接决定对齐效果上限。
-
k 倍生成开销。 意味着推理阶段 FLOPs 增加 4 倍。对于 4K+ token 的推理链,这会很贵。
-
序列级信用分配盲区。 对于数学/代码任务,关键 token(最终答案、边界条件)与普通 token 的重要性天差地别,均匀分配奖励是次优的。
-
仅在 ≤7B 规模验证。 在 70B+ 规模是否仍然不需要 Critic,论文没有验证。
-
单轮对话假设。 Bandit 视角假设每条(prompt, response)对相互独立,不适用于多轮对话。
12. 批判性分析:不足与可改进之处
12.1 不好的地方(Weaknesses & Flaws)
(W1) 缺少大规模实验。 论文最大模型是 Llama-7B。「PPO 在 RLHF 中是多余的」这个结论在 7B 规模是成立的,但无法外推到 70B 或 405B。更大规模的序列可能有更高的方差(更长的 CoT、更稀疏的奖励),届时 Critic 或裁剪的价值可能显现。论文不应以 7B 实验支撑一个通用性结论。
(W2) 评估指标有长度偏差风险。 论文只报告胜率(win-rate),而 LM judge 存在已知的「prefer longer」偏差。RLOO 的 采样在训练中可能天然产生更多样化的输出,长度分布也可能改变。论文没有提供长度控制实验,无法排除 RLOO 赢得胜率是因为它生成了更长的回复而非真的更好。
(W3) 奖励模型与策略模型共享基座。 所有实验中奖励模型都用相同基座微调而来,这使得 KL 惩罚和奖励信号高度「兼容」。实际部署中奖励模型往往与策略模型架构不同(如用更小的分类器),迁移性未验证。
(W4) 没有稳定性分析(方差/崩溃分析)。 PPO 的裁剪是为了防止少数几个「异常值梯度步」导致策略崩溃。论文没有报告在不利超参数(高 lr、低 β)设置下 RLOO 是否比 PPO 更容易崩溃,以及崩溃后能否恢复。
(W5) RAFT 基线可能被低估了。 RAFT 使用了默认超参数,没有对每个数据集/模型组合进行专项调优。一个经过精细调参的 RAFT 可能比论文展示的更有竞争力。
12.2 作者淡化或回避的局限
(L1) 序列级梯度的信用分配问题被完全忽视。 给整条序列的所有 token 分配相同的奖励梯度,意味着一条包含「错误最终答案」的 100-token 回复,会让其中 99 个完全正确的中间 token 概率也降低。这在当前测试的 HH/TL;DR 任务(主要考察语气和相关性)影响不大,但在数学/代码任务中会严重影响学习效率。论文对此只字未提,但这正是后来 VAPO 试图解决的核心问题。
(L2) 参考模型的显存成本被低报。 论文说「RLOO 只需 2× 模型显存(相比 PPO 的 4×)」,但准确来说是 3×(策略 + 参考 + 奖励模型)。某些实现通过权重共享降低参考模型成本,但论文没有清晰说明,容易误导读者。
(L3) 未分析 entropy collapse 等后续发现的失效模式。 GRPO 后续在实践中暴露出熵坍塌(模型输出多样性骤降)、长度偷懒(模型学会生成很短的回复以降低 KL 惩罚)等问题。RLOO 作为 GRPO 的前身,理论上同样存在这些问题,但论文没有涉及。
12.3 可以改进的地方
(I1) 增加 70B 规模实验。 RLOO 的最实际价值是显存节省——在 70B 规模下不需要 Critic 能节省大量显存。论文应该包含这个实验。
(I2) 增加长度控制的胜率评估。 按输出长度分层汇报胜率,或用长度归一化奖励替代裸胜率,以排除长度偏差干扰。
(I3) 自适应 k 策略。 简单的改进:对奖励方差高的 prompt 用更大的 ,对容易的 prompt 用较小的 ,降低总生成开销。
(I4) 在数学推理任务上的应用。 用 GSM8K / MATH / AIME 等推理基准测试序列级 RLOO,对比 GRPO 的 token 级处理,量化信用分配差距有多大,这会是非常有价值的实验。
(I5) 结合过程奖励模型(PRM)。 用 PRM 在每个推理步骤边界给出中间奖励,把 RLOO 的序列级策略梯度应用到每个步骤内,在不引入 Critic 的前提下解决信用分配问题。
13. 复现笔记
论文关键超参数:
| 超参数 | 值 |
|---|---|
| k(每 prompt 采样数) | 2, 4, 8(消融) |
| β(KL 系数) | 0.05, 0.1, 0.2(消融) |
| Batch size | 64 prompts × k |
| 学习率 | 1e-6(Llama),5e-6(Pythia) |
| 最大序列长度 | 1024 tokens |
| 优化器 | AdamW(β₁=0.9, β₂=0.95) |
| 训练步数 | 500–2000(视数据集) |
代码已发布于 github.com/vwxyzjn/cleanrl,并集成进 HuggingFace TRL 库(trl.RLOOTrainer),是最容易上手的 RL 对齐训练基线之一。
14. 总结
这篇论文的贡献看起来很简单——「REINFORCE 就够了,不需要 PPO」——但背后是一个精心构造的论证体系:先识别出 RLHF 场景与传统 RL 的结构差异,再用消融实验逐一证明 PPO 的每个「核心」组件都是多余的,最后展示一个极简的替代方案(RLOO)能做得更好。
核心 takeaway:
- SFT 初始化已经为梯度稳定性提供了保障,PPO 的裁剪是针对随机初始化设计的。
- 序列级 Bandit 建模比 token 级 MDP 更匹配 RLHF 的奖励结构(末端奖励)。
- prompt 专属的 LOO 基线是比全局 Critic 更好的方差控制工具,因为它使用真实奖励而非 TD 估计。
- 在线 RL(即使是最简单的 REINFORCE)优于离线过滤(DPO/RAFT),因为保留了在线探索能力。
RLOO 被 GRPO、REINFORCE++、DAPO 等后续工作继承,成为 2025 年 LLM 推理对齐的技术底座。理解 RLOO,就是理解这一代 RLHF 技术的思想起点。
附录 A:LOO 方差减少的严格推导
设 为来自同一 prompt 的独立同分布奖励样本,方差 。
单样本 REINFORCE(批次均值基线 )的梯度方差:
其中 。
RLOO 梯度估计器( 条样本平均)的有效方差:
因此 RLOO 相比单样本 REINFORCE 的方差比为 —— 时方差理论上趋近 0(两条样本互相作为完美基线), 时约为 。
附录 B:为什么批次均值基线不如 LOO 基线
批次均值 是所有 prompt 上的全局平均,它和当前 prompt 下 的相关性取决于不同 prompt 之间的奖励相关性——通常较低。
LOO 基线 来自同一 prompt 的其他回复,和 处于同一「难度水平」(同一个 prompt 下,好的回复平均分比较高,坏的回复平均分比较低),相关性天然比全局基线高很多。
高相关性 → 更大的协方差项 → 更低的方差减少后的优势估计方差。这是 LOO 在 RLHF 中胜过全局均值基线的数学根源。
附录 C:实验数据详解——按模型和数据集的分项结果
C.1 Anthropic HH 数据集分项结果
HH 数据集包含有用性和无害性两个维度的偏好对。RLOO (k=4) 相对 PPO 的胜率按模型大小分项:
模型大小 RLOO 胜率 vs PPO PPO 胜率 vs RLOO 平局
──────────────────────────────────────────────────────────
Pythia 1.4B: 54.2% 37.1% 8.7%
Pythia 2.8B: 52.8% 39.5% 7.7%
Pythia 6.9B: 51.6% 41.2% 7.2%
Llama-7B: 51.6% 41.2% 7.2%
趋势:模型越小,RLOO 相对 PPO 的优势越大——可能因为小模型
梯度方差更高,LOO 基线的方差控制作用更突出。
C.2 TL;DR 数据集分项结果
TL;DR 摘要任务结构更清晰,奖励信号噪声更低。RLOO 的优势在该数据集上更明显:
模型大小 RLOO 胜率 vs PPO 优势幅度
──────────────────────────────────────────
Pythia 1.4B: 60.3% +20.3% ← 最大优势
Pythia 2.8B: 58.9% +17.8%
Pythia 6.9B: 57.2% +14.4%
Llama-7B: 58.8% +17.6%
原因:摘要任务的「好坏」判断更清晰,LOO 基线能更准确地
区分每个 prompt 下回复的质量差异,信噪比高。
C.3 k 值的影响(每 prompt 采样数量)
k 值 相对推理开销 vs PPO 胜率(Llama-7B, TL;DR)
──────────────────────────────────────────────────────
k=1 1× 53.1%(纯 REINFORCE,无 LOO)
k=2 2× 57.2%
k=4 4× 58.8% ← 最佳效率点
k=8 8× 59.3% (仅 +0.5%,成本翻倍)
k=4 获取了约 90% 的胜率收益,仅使用 k=8 一半的算力。
k>4 的边际收益快速递减。
附录 D:RLOO 的 PyTorch 实现草图
RLOO 的实现极其简洁,核心逻辑不超过 15 行:
# RLOO 损失函数(伪代码,PyTorch 风格)
# 输入:
# completions: (B*k, T) 的 token 序列
# prompts: (B,) 的 prompt token 序列
# B: batch_size, k: 每 prompt 采样数, T: 序列长度
# 1. 计算序列级 log 概率(所有 token 求和)
logprobs = model.get_log_probs(completions, prompts) # (B*k, T)
seq_logprobs = logprobs.sum(dim=-1) # (B*k,)
# 2. 获取奖励 + 计算 KL 惩罚
raw_rewards = reward_model(completions, prompts) # (B*k,)
ref_seq_logprobs = ref_model.get_log_probs(completions, prompts).sum(-1)
kl_penalty = seq_logprobs - ref_seq_logprobs # (B*k,)
R = raw_rewards - beta * kl_penalty # (B*k,) 完整奖励
# 3. 计算 LOO 基线(核心步骤)
R = R.view(B, k) # (B, k)
loo_baseline = (R.sum(dim=1, keepdim=True) - R) / (k-1) # (B, k)
advantages = R - loo_baseline # (B, k)
# 4. REINFORCE 损失
seq_logprobs = seq_logprobs.view(B, k)
loss = -(advantages * seq_logprobs).mean()
# 5. 反向传播 + 优化
loss.backward()
optimizer.step()
对比 PPO 的实现(需要 GAE 计算、多轮 epoch、裁剪逻辑、Critic 更新……):RLOO 的实现简洁程度约为 PPO 的 1/10。这是论文「Back to Basics」标题最直接的体现。
附录 E:控制变量理论视角下的 LOO 基线
统计学中的控制变量法(Control Variate):若随机变量 与我们要估计的量 正相关,从估计量中减去 可以降低方差。最优 满足:
对于 LOO 基线:,其中 与 独立同分布。
因此 ,即直接减去 就是理论最优的控制变量选择。这不是启发式规则——它在 i.i.d. 采样假设下是严格最优的。
方差减少比例(对梯度估计器整体):
| k | 相对方差 | 直觉 |
|---|---|---|
| 2 | 1/1 = 1 | 两条互相完美参照,有效方差 ≈ 0 |
| 4 | 1/3 | 方差降至 1/3 |
| 8 | 1/7 | 方差降至 1/7 |
| ∞ | 0 | 无限样本 → 完美基线 |
这个结果的前提是可交换性(exchangeability):所有 条序列来自同一 prompt 下的同一策略 ,是真正的 i.i.d. 采样。一旦违反这个假设(例如用不同温度采样,或从老版策略采样),LOO 的无偏性和最优性就不再成立。
附录 F:为什么在线 RL 总是胜过离线 DPO/RAFT
一个贯穿实验结果的规律:在线 RL 方法(RLOO、REINFORCE、PPO)始终以 5–10 个胜率点的优势超过离线方法(DPO、RAFT)。根本原因:
离线方法的局限: DPO 和 RAFT 在固定数据集上训练,一旦 偏离了生成训练数据的分布(),训练信号就过时了。策略无法探索新的回复类型并从中学习。
在线方法的优势: 每步从当前 采样新的回复;奖励模型在这些新回复上实时给分;策略从这个「在分布上的」反馈中学习。随着 提升,它生成的训练数据质量也在提升,形成正反馈循环(只要 KL 约束防止了奖励黑入)。
论文的最终立场:保留 RL 范式(在线探索)的价值不可忽视,我们需要的不是丢掉 RL,而是找到一个足够简单的 RL 方法来获得这个价值。RLOO 就是这个答案。
附录 G:RLOO 在 HuggingFace TRL 库中的实现
2024 年初,RLOO 被集成进 HuggingFace TRL 库(trl.RLOOTrainer),成为最主流的 RLHF 训练基线之一。关键实现细节:
- 参考模型权重共享: 参考模型与策略模型共享权重但梯度冻结,无需另开一份完整模型显存。
- 批量 k 采样: 通过向量化解码同时采样所有 条回复。
- 梯度检查点兼容: RLOO 的 loss 不需要存储 Critic 的中间激活,与 gradient checkpointing 完全兼容。
- 混合精度支持: LOO 计算不引入精度问题,完全兼容 fp16/bf16。
TRL 官方超参数推荐:
| 超参数 | 推荐范围 | 说明 |
|---|---|---|
rloo_k | 4–8 | 指令跟随任务用 4 即可 |
kl_coef (β) | 0.05–0.1 | 若发生奖励黑入则增大 |
learning_rate | 5e-7 到 2e-6 | 比 SFT 更低;过大容易熵坍塌 |
batch_size | 64–256 | prompt batch 大小,乘以 k 是实际生成数 |
response_length | ≤1024 | 更长回复让 k 采样成本成平方增长 |
num_epochs | 1 | RLOO 严格 on-policy;多 epoch 违反无偏性 |
num_epochs=1 是与 PPO 的重要区别——PPO 通常对同一批数据做 4–8 个 epoch。RLOO 所有样本都是 on-policy 的,重复使用同一批数据会引入 off-policy 偏差,破坏 REINFORCE 的无偏性保证。这同时也降低了过拟合单个 batch 的风险。
与 GRPO 实现的对比:
RLOO 实现要点 GRPO 实现要点
───────────────────── ─────────────────────────────
序列级 log 概率 Token 级 log 概率(per-token)
无裁剪 有概率比裁剪(PPO clip)
num_epochs=1 num_epochs 通常 1–4
无 Critic 无 Critic
baseline = LOO 均值 baseline = LOO 均值(相同)
on-policy strict on-policy(但 clip 容忍轻微偏离)
两者的数学本质几乎相同(都是 LOO 基线的 REINFORCE),主要区别在于 GRPO 加了裁剪以应对长推理链中更大的策略漂移风险。
附录 H:延伸阅读推荐
读完这篇笔记后,建议按以下顺序深入:
- PPO 原始论文(Schulman 等,2017,arXiv:1707.06347)——理解 RLOO 在批判什么,先要彻底读懂 PPO 的设计动机。
- InstructGPT(Ouyang 等,2022,arXiv:2203.02155)——PPO-RLHF 在真实 LLM 对齐中的第一次大规模应用。
- GRPO(DeepSeekMath,2024)——RLOO 的直接继承者,在推理任务上加了裁剪。
- REINFORCE++(Hu 等,2025)——在 RLOO 基础上增加全局优势归一化,专门解决长推理链的训练稳定性。
- VAPO(2025)——在 RLOO 序列级思想上引入 token 级价值条件权重,解决数学推理的信用分配问题。
- Dr. GRPO(2025)——分析 GRPO 中由可变序列长度引入的系统性偏差,并提出修正方案。
这六篇论文构成了一条完整的技术发展脉络:从「PPO 是标配」到「REINFORCE 已经够用」,再到「针对长推理链的各种改进」。
这条阅读脉络读完,你对 RLHF 的理解会从「知道 PPO 是什么」进阶到「理解整个方法论演化的内在逻辑」。
附录 I:RLOO 的失效模式与调试指南
尽管 RLOO 比 PPO 简单,但实际训练中仍然有几种常见失效模式值得关注。
I.1 熵坍塌(Entropy Collapse)
症状: 训练进行几百步后,模型输出的多样性骤降——几乎所有 prompt 都输出几乎相同的回复(高概率的「安全答案」)。奖励曲线先升后停滞甚至下降。
原因: RLOO 的 REINFORCE 梯度没有熵正则项。如果某几条回复始终得到高奖励,模型会持续增大这几条序列的概率,压缩其他可能性,导致探索空间收缩。在 RLHF 中,这通常表现为模型学会了某种高分「格式套路」而非真正提升能力。
诊断方法:
# 监控指标
- 输出的平均熵 H(π_θ) = -Σ_t Σ_v π_θ(v|s_t) log π_θ(v|s_t)
- 输出长度的标准差(多样性下降 → 长度集中)
- unique n-gram 比例(生成多样性直接指标)
修复方法:
- 增大 KL 系数 β(更强的参考模型锚定)。
- 降低学习率。
- 加入熵奖励项 (DAPO 的做法)。
- 在奖励归一化后裁剪极端优势值。
I.2 奖励黑入(Reward Hacking)
症状: 奖励模型分数持续提升,但人工评估质量下降。典型表现:模型学会了重复关键词、堆砌积极词汇、回避某些话题。
原因: 奖励模型 是一个代理指标,不等于真实人类偏好。RLOO 的在线 RL 会积极探索任何可以最大化 的策略,包括那些「投机取巧」的方式。
修复方法:
- 增大 KL 系数 β(最直接的防御)。
- 定期更新奖励模型(RLHF 循环)。
- 在胜率评估中加入多维指标(长度、事实性、多样性)。
I.3 训练不稳定(梯度爆炸)
症状: loss 突然变成 NaN 或非常大的数值;奖励曲线出现尖峰随后崩塌。
原因: 某条序列的优势值 异常大(例如 条样本中有一条奖励异常低,使其他条的优势值被放大)。
修复方法:
- 对优势值做标准化:(REINFORCE++ 的做法)。
- 对梯度做范数裁剪(
max_grad_norm=1.0)。 - 用更大的 使 LOO 基线更稳定。
I.4 调试清单
训练前检查:
✅ 奖励模型与策略模型的分布是否对齐(用 SFT 数据验证奖励分布)
✅ β 值是否合理(0.05 起步,观察 KL 惩罚量级)
✅ 响应长度是否合理(过长的响应会让 k 采样变得非常昂贵)
训练中监控:
✅ 序列级 KL 散度(应保持 < 0.5,超过则增大 β)
✅ 生成熵(不应快速下降,下降则减小 lr 或加熵正则)
✅ 奖励曲线(不应一直线性上升——过快上升通常是奖励黑入)
✅ LOO 优势值分布(应以 0 为中心,方差稳定)
训练后验证:
✅ 在 holdout 集上评估胜率(非训练分布上的泛化)
✅ 长度控制实验(排除长度偏差)
✅ 多轮对话测试(单轮 RLOO 可能降低多轮一致性)