回归基础:用 RLOO 重新思考 RLHF 中的策略梯度优化

笔记日期: 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 采 kk 条序列,以其余 k1k-1 条的平均奖励作为基线,性能比 PPO 高出 3.2%–20.3%,同时只需 PPO 一半的显存。

1. 前置知识:读懂这篇论文需要了解什么

这篇论文的论证有一条清晰的逻辑链:PPO 是为一个 RLHF 几乎不存在的问题设计的。理解这一核心论点需要先搞清楚几个基础概念。

1.1 策略梯度定理(Policy Gradient Theorem)

强化学习的目标是找到一个策略 πθ\pi_\theta,最大化期望奖励:

J(θ)=ExD,  yπθ(x)[R(x,y)](1)J(\theta) = \mathbb{E}_{x \sim \mathcal{D},\; y \sim \pi_\theta(\cdot|x)} [R(x, y)] \tag{1}

Williams(1992)证明了该目标关于参数 θ\theta 的梯度可以写成:

θJ(θ)=Ex,y[R(x,y)θlogπθ(yx)](2)\nabla_\theta J(\theta) = \mathbb{E}_{x, y} \left[ R(x,y) \cdot \nabla_\theta \log \pi_\theta(y|x) \right] \tag{2}

直观理解: 如果生成的回复 yy 得到了高奖励,我们就沿 θlogπθ(yx)\nabla_\theta \log \pi_\theta(y|x) 方向走,使这条回复更容易被生成;奖励越高,步长越大。

这是 REINFORCE 的基本形式,无偏但方差很大——有限样本下估计的梯度噪声很强。

1.2 方差问题与基线(Baseline)

解决高方差的标准方法是从奖励中减去一个基线 b(x)b(x)

θJ(θ)=Ex,y[(R(x,y)b(x))θlogπθ(yx)](3)\nabla_\theta J(\theta) = \mathbb{E}_{x, y} \left[ (R(x,y) - b(x)) \cdot \nabla_\theta \log \pi_\theta(y|x) \right] \tag{3}

减去 b(x)b(x) 不影响无偏性(因为 Eyπθ[θlogπθ(yx)]=0\mathbb{E}_{y \sim \pi_\theta}[\nabla_\theta \log \pi_\theta(y|x)] = 0),但如果 b(x)b(x)R(x,y)R(x,y) 正相关,方差会大幅下降。

常见基线:

  • 批次均值基线: b=Rˉb = \bar{R}(当前 batch 的平均奖励)。简单但 prompt 无关,效果有限。
  • 状态价值函数: b(x,y<t)=Vψ(x,y<t)b(x, y_{<t}) = V_\psi(x, y_{<t}),一个专门学习「当前状态的期望未来收益」的神经网络。这是 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 形式的奖励:

R(x,y)=rϕ(x,y)βlogπθ(yx)πref(yx)(4)R(x,y) = r_\phi(x,y) - \beta \log \frac{\pi_\theta(y|x)}{\pi_{\text{ref}}(y|x)} \tag{4}

其中 β\beta 控制策略偏离参考模型的程度,防止「奖励黑入(reward hacking)」。

1.4 PPO 是什么

PPO(Schulman 等,2017)是深度 RL 的主流算法,原本为 Atari 游戏和连续控制设计。它的核心设计哲学是稳定性:通过裁剪概率比和引入 Critic 网络,避免策略在梯度更新时发生灾难性崩溃。

在 RLHF 中,PPO 把生成的每个 token 视为一步动作,把部分序列 (x,y<t)(x, y_{<t}) 视为状态(token 级 MDP):

Rt(x,yt)={rϕ(x,y)βlogπθ(yTsT)πref(yTsT)t=T(EOS)βlogπθ(ytst)πref(ytst)t<T(5)R_t(x,y_t) = \begin{cases} r_\phi(x,y) - \beta \log\frac{\pi_\theta(y_T|s_T)}{\pi_{\text{ref}}(y_T|s_T)} & t = T\text{(EOS)} \\ -\beta \log\frac{\pi_\theta(y_t|s_t)}{\pi_{\text{ref}}(y_t|s_t)} & t < T \end{cases} \tag{5}

然后用 GAE(广义优势估计)估计每一步的优势 A^λ(yt,st)\hat{A}_\lambda(y_t, s_t),并优化裁剪目标:

LPPO=Et[min ⁣(ftA^λ(yt,st),  clip1ϵ1+ϵ(ft)A^λ(yt,st))](6)\mathcal{L}_{\text{PPO}} = \mathbb{E}_t \left[ \min\!\left( f_t \hat{A}_\lambda(y_t, s_t),\; \text{clip}_{1-\epsilon}^{1+\epsilon}(f_t)\,\hat{A}_\lambda(y_t, s_t) \right) \right] \tag{6}

其中 ft=πθ(ytst)/πold(ytst)f_t = \pi_\theta(y_t|s_t) / \pi_{\text{old}}(y_t|s_t) 是概率比,ϵ0.2\epsilon \approx 0.2 是裁剪比例。

PPO-RLHF 同时需要四个模型在显存中:

  • Generator 模型 πθ\pi_\theta
  • Reference 模型 πref\pi_{\text{ref}}(计算 KL 惩罚)
  • Critic 网络 VψV_\psi(与策略同量级大小,用于 GAE)
  • 奖励模型 rϕr_\phi

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 估计状态价值 V(st)V(s_t),但 st=(x,y<t)s_t = (x, y_{<t}) 在 RLHF 中没有真实价值——只有到 EOS 才知道整条序列的奖励。Critic 实际上在学习「从当前位置到 EOS 还要受多少 KL 惩罚」,这个目标不仅无信息量,还引入了 GAE 偏差(bias-variance 权衡中的 bias 项)。

关键洞察3:GAE 偏差在 RLHF 中是净负担。 GAE 用参数 λ\lambda 平衡偏差和方差:λ0\lambda \to 0 依赖 Critic(低方差高偏差),λ1\lambda \to 1 用完整轨迹回报(高方差零偏差)。论文消融表明,在 RLHF 场景中,λ=1\lambda = 1(即不使用 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 惩罚

更自然的建模方式:把整条生成序列 y=(y1,,yT)y = (y_1, \ldots, y_T) 视为一个多维动作(bandit / contextual bandit 视角)。在这个框架下:

  • 状态:prompt xx
  • 动作:整条回复 yy
  • 奖励:R(x,y)R(x,y)(一个序列级标量)

策略梯度估计器变成:

θJ(θ)=Ex,y[R(x,y)θlogπθ(yx)](7)\nabla_\theta J(\theta) = \mathbb{E}_{x, y} \left[ R(x,y) \cdot \nabla_\theta \log \pi_\theta(y|x) \right] \tag{7}

其中 logπθ(yx)=t=1Tlogπθ(ytx,y<t)\log \pi_\theta(y|x) = \sum_{t=1}^{T} \log \pi_\theta(y_t | x, y_{<t}),可以通过反向传播计算。

与 PPO 的核心区别:没有折扣因子、没有 GAE、没有 Critic、没有裁剪,也没有 token 级优势估计。序列奖励 R(x,y)R(x,y) 均匀地传播给该序列所有 token 的对数概率。

3.2 序列级梯度的物理含义

当某条回复 yy 的奖励 R(x,y)R(x,y) 高于平均水平时,我们更新 θ\theta 使 πθ(yx)\pi_\theta(y|x) 增大;当奖励低于平均时,我们减小 πθ(yx)\pi_\theta(y|x)

由于 logπθ(yx)=tlogπθ(ytst)\log \pi_\theta(y|x) = \sum_t \log \pi_\theta(y_t|s_t),梯度等效地增加(或减小)该回复中所有 token 的生成概率。这与 PPO 按 token 分配不同大小的优势信号不同——REINFORCE 把序列奖励均匀分配给所有 token。

优点: 简单,无偏,无 Critic 偏差。
缺点: 不能区分序列中哪些 token「更重要」——这在答案 token 比推理 token 更关键的数学任务中是个问题(后来 VAPO 专门解决了这一点)。

4. RLOO:REINFORCE Leave-One-Out

4.1 LOO 估计器推导

RLOO 的创新点在于基线的选取。对每个 prompt xx,采样 kk 条独立回复 y(1),,y(k)πθ(x)y^{(1)}, \ldots, y^{(k)} \sim \pi_\theta(\cdot|x),然后用其余 k1k-1 条回复的平均奖励作为第 ii 条回复的基线:

b(i)(x)=1k1jiR(x,y(j))(8)b^{(i)}(x) = \frac{1}{k-1} \sum_{j \neq i} R(x, y^{(j)}) \tag{8}

RLOO 梯度估计器:

g^RLOO=1ki=1k(R(x,y(i))b(i)(x))θlogπθ(y(i)x)(9)\hat{g}_{\text{RLOO}} = \frac{1}{k} \sum_{i=1}^{k} \left( R(x, y^{(i)}) - b^{(i)}(x) \right) \cdot \nabla_\theta \log \pi_\theta(y^{(i)} | x) \tag{9}

为什么这个基线是无偏的?

对任意固定的基线 b(i)(x)b^{(i)}(x)(与 y(i)y^{(i)} 独立),由于 y(ji)y^{(j \neq i)}y(i)y^{(i)} 是独立采样的,b(i)(x)b^{(i)}(x) 相对于 y(i)y^{(i)} 而言是一个常数。因此:

Ey(i)πθ[b(i)(x)θlogπθ(y(i)x)]=b(i)(x)Ey(i)[θlogπθ(y(i)x)]=0=0(10)\mathbb{E}_{y^{(i)} \sim \pi_\theta}\left[ b^{(i)}(x) \cdot \nabla_\theta \log \pi_\theta(y^{(i)}|x) \right] = b^{(i)}(x) \cdot \underbrace{\mathbb{E}_{y^{(i)}}\left[\nabla_\theta \log \pi_\theta(y^{(i)}|x)\right]}_{= 0} = 0 \tag{10}

对数导数的期望为零是 policy gradient 定理的基本性质,因此减去任何与 y(i)y^{(i)} 独立的基线都不会引入偏差。

4.2 方差分析:LOO 为什么比批次均值好

批次均值基线 Rˉ\bar{R} 是 prompt 无关的全局均值;LOO 基线 b(i)(x)b^{(i)}(x) 是 prompt 条件的均值(来自当前 prompt 的 k1k-1 条独立样本)。

设 prompt xx 的奖励分布方差为 σR2\sigma_R^2。LOO 基线的方差:

Var[b(i)(x)]=σR2k1(11)\text{Var}\left[b^{(i)}(x)\right] = \frac{\sigma_R^2}{k-1} \tag{11}

LOO 基线与第 ii 条回复奖励的协方差(二者来自同一 prompt 分布,正相关):

Cov[R(i),b(i)(x)]σR2k1(12)\text{Cov}\left[R^{(i)}, b^{(i)}(x)\right] \approx \frac{\sigma_R^2}{k-1} \tag{12}

因此 LOO 优势 A(i)=R(i)b(i)A^{(i)} = R^{(i)} - b^{(i)} 的方差:

Var[A(i)]=σR2+σR2k12σR2k1=σR2k2k1(13)\text{Var}[A^{(i)}] = \sigma_R^2 + \frac{\sigma_R^2}{k-1} - \frac{2\sigma_R^2}{k-1} = \sigma_R^2 \cdot \frac{k-2}{k-1} \tag{13}

整个梯度估计器(对 kk 条样本平均)的有效方差:

Var[g^RLOO]1kkk1σR2=σR2k1(14)\text{Var}[\hat{g}_{\text{RLOO}}] \propto \frac{1}{k} \cdot \frac{k}{k-1} \cdot \sigma_R^2 = \frac{\sigma_R^2}{k-1} \tag{14}
k方差(相对于单样本 REINFORCE)直觉
1σR2\sigma_R^2无减方差
2σR2\sigma_R^2两条相互作为基线,接近完美
4σR2/3\sigma_R^2 / 33× 方差减小
8σR2/7\sigma_R^2 / 77× 方差减小,但成本是 k=4k=4 的两倍

实践中 k=4k=4 是最佳权衡点。

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× 模型大小
DPO42.1%49.7%2× (离线)
RAFT(k=4)47.3%53.6%2× (离线)

胜率 = 独立评判模型(LM judge)认为某方法生成的回复优于对照方案的比例。

6.1 为什么裁剪不必要

PPO 的裁剪 clip1ϵ1+ϵ(ft)\text{clip}_{1-\epsilon}^{1+\epsilon}(f_t) 是为了防止策略比例 ft=πθ/πoldf_t = \pi_\theta/\pi_{\text{old}} 偏离1太远。论文测量了 RLHF 训练过程中实际的 ftf_t 分布,发现绝大多数 token 的比例都在 [0.95,1.05][0.95, 1.05] 范围内——裁剪几乎从未激活,等于白加。

6.2 为什么 Critic 比 LOO 基线差

PPO 的 Critic Vψ(st)V_\psi(s_t) 估计「从部分序列 sts_t 出发的期望未来回报」。在 RLHF 中:

Gt=βlogπθ(ytst)πref(ytst)当前步 KL 惩罚+>t()未来步 KL 惩罚+1[t=T]rϕ(x,y)只有 EOS 有真实奖励(15)G_t = \underbrace{-\beta \log \frac{\pi_\theta(y_t|s_t)}{\pi_{\text{ref}}(y_t|s_t)}}_{\text{当前步 KL 惩罚}} + \underbrace{\sum_{\ell > t} (\cdots)}_{\text{未来步 KL 惩罚}} + \underbrace{\mathbf{1}[t=T] \cdot r_\phi(x,y)}_{\text{只有 EOS 有真实奖励}} \tag{15}

对于 t<Tt < T(非 EOS)的中间 token,GtG_t 主要由未来 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 在 β[0.05,0.2]\beta \in [0.05, 0.2] 范围内保持稳健,而 RAFT 在 β>0.05\beta > 0.05 时胜率大幅下降。原因是 RAFT 的过滤阈值与 KL 惩罚交互,导致可用样本数骤降。

奖励噪声鲁棒性: 随机污染 10% 的奖励标签后,RLOO 胜率下降平滑(约 -2%),而 RAFT 崩溃(-8%+)。因为 RAFT 的硬过滤会把噪声奖励高的坏样本当作「好样本」保留,放大错误信号。

8.3 收敛速度

由于 RLOO 每步处理 kk 条序列,等效上它在相同挂钟时间内见到的多样化回复数量是单采样 REINFORCE 的 kk 倍。虽然每步生成开销是 kk 倍,但 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,是否合理?

错在哪里: 奖励模型 rϕ(x,y)r_\phi(x,y) 只对完整序列打分,无法区分哪个 token「贡献了多少」。把这个整体评分分配到每个 token,需要一个 Critic 来做「时序信用分配(temporal credit assignment)」。但如上所述,Critic 在 RLHF 中学不到有意义的东西。

正确做法: 把整条序列视为一个动作,序列奖励均匀反传给所有 token。这虽然粗糙(不能区分「关键 token」和「填充 token」),但至少是无偏的,且不需要任何额外模型。

反驳: 如果任务要求 token 级别的信用分配(例如数学推理,最终答案 token 比推理步骤 token 重要得多),序列级就不够了。这正是 VAPO 后来要解决的问题。

10.2 为什么 k=4 是最佳选择

  • k=2k=2:基线只有另一条序列,估计非常不稳定;如果那条序列是异常值,基线就失效了。
  • k=4k=4:基线是 3 条序列的均值,方差约为单采样的 1/31/3。推理开销 4×,但胜率收益显著。
  • k=8k=8:方差再降一倍,但推理开销 8×,边际收益不值得。

对于推理密集型任务(长 CoT,一半以上的样本是错误推理),kk 可以适当增大,因为正确路径更稀疏、信噪比更低。

10.3 Reference 模型能否去掉

KL 惩罚要求保留 πref\pi_{\text{ref}}。可否去掉?SimPO(2024)在离线场景中用序列长度归一化的奖励代替 KL 惩罚,移除了参考模型。但在在线 RL 场景中,没有 KL 锚定的策略会发生奖励黑入:模型学会生成看起来「高分」但实际语义崩塌的序列(例如重复词语或极端语气)。参考模型是必要的安全绳。

11. 局限性与适用边界

  1. 仍需奖励模型。 RLOO 省掉了 Critic,但保留了奖励模型。RM 的训练质量直接决定对齐效果上限。

  2. k 倍生成开销。 k=4k=4 意味着推理阶段 FLOPs 增加 4 倍。对于 4K+ token 的推理链,这会很贵。

  3. 序列级信用分配盲区。 对于数学/代码任务,关键 token(最终答案、边界条件)与普通 token 的重要性天差地别,均匀分配奖励是次优的。

  4. 仅在 ≤7B 规模验证。 在 70B+ 规模是否仍然不需要 Critic,论文没有验证。

  5. 单轮对话假设。 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 的 kk 采样在训练中可能天然产生更多样化的输出,长度分布也可能改变。论文没有提供长度控制实验,无法排除 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 用更大的 kk,对容易的 prompt 用较小的 kk,降低总生成开销。

(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 size64 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:

  1. SFT 初始化已经为梯度稳定性提供了保障,PPO 的裁剪是针对随机初始化设计的。
  2. 序列级 Bandit 建模比 token 级 MDP 更匹配 RLHF 的奖励结构(末端奖励)。
  3. prompt 专属的 LOO 基线是比全局 Critic 更好的方差控制工具,因为它使用真实奖励而非 TD 估计。
  4. 在线 RL(即使是最简单的 REINFORCE)优于离线过滤(DPO/RAFT),因为保留了在线探索能力。

RLOO 被 GRPO、REINFORCE++、DAPO 等后续工作继承,成为 2025 年 LLM 推理对齐的技术底座。理解 RLOO,就是理解这一代 RLHF 技术的思想起点。

附录 A:LOO 方差减少的严格推导

R(1),,R(k)R^{(1)}, \ldots, R^{(k)} 为来自同一 prompt xx 的独立同分布奖励样本,方差 σR2\sigma_R^2

单样本 REINFORCE(批次均值基线 Rˉ\bar{R})的梯度方差:

Var[(R(1)Rˉ)g(1)]σR2g2(A.1)\text{Var}[(R^{(1)} - \bar{R}) \cdot g^{(1)}] \approx \sigma_R^2 \cdot \|g\|^2 \tag{A.1}

其中 g(1)=θlogπθ(y(1)x)g^{(1)} = \nabla_\theta \log \pi_\theta(y^{(1)}|x)

RLOO 梯度估计器(kk 条样本平均)的有效方差:

Var[g^RLOO]=1kVar[A(i)g(i)]σR2k/(k1)kg2=σR2k1g2(A.2)\text{Var}[\hat{g}_{\text{RLOO}}] = \frac{1}{k} \cdot \text{Var}[A^{(i)} \cdot g^{(i)}] \approx \frac{\sigma_R^2 \cdot k/(k-1)}{k} \cdot \|g\|^2 = \frac{\sigma_R^2}{k-1} \cdot \|g\|^2 \tag{A.2}

因此 RLOO 相比单样本 REINFORCE 的方差比为 1/(k1)1/(k-1)——k=2k=2 时方差理论上趋近 0(两条样本互相作为完美基线),k=4k=4 时约为 1/31/3

附录 B:为什么批次均值基线不如 LOO 基线

批次均值 Rˉ\bar{R} 是所有 prompt 上的全局平均,它和当前 prompt xxR(x,y(i))R(x, y^{(i)}) 的相关性取决于不同 prompt 之间的奖励相关性——通常较低。

LOO 基线 b(i)(x)b^{(i)}(x) 来自同一 prompt 的其他回复,和 R(i)R^{(i)} 处于同一「难度水平」(同一个 prompt 下,好的回复平均分比较高,坏的回复平均分比较低),相关性天然比全局基线高很多。

Corr[R(i),bLOO(i)]Corr[R(i),Rˉglobal](B.1)\text{Corr}[R^{(i)}, b^{(i)}_{\text{LOO}}] \gg \text{Corr}[R^{(i)}, \bar{R}_{\text{global}}] \tag{B.1}

高相关性 → 更大的协方差项 → 更低的方差减少后的优势估计方差。这是 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):若随机变量 cc 与我们要估计的量 RR 正相关,从估计量中减去 α(cE[c])\alpha(c - \mathbb{E}[c]) 可以降低方差。最优 α\alpha 满足:

α=Cov[R,c]Var[c](E.1)\alpha^* = \frac{\text{Cov}[R, c]}{\text{Var}[c]} \tag{E.1}

对于 LOO 基线:c=b(i)=1k1jiR(j)c = b^{(i)} = \frac{1}{k-1}\sum_{j\neq i}R^{(j)},其中 R(j)R^{(j)}R(i)R^{(i)} 独立同分布。

Cov[R(i),b(i)]=σR2k1,Var[b(i)]=σR2k1(E.2)\text{Cov}[R^{(i)}, b^{(i)}] = \frac{\sigma_R^2}{k-1}, \quad \text{Var}[b^{(i)}] = \frac{\sigma_R^2}{k-1} \tag{E.2}

因此 α=1\alpha^* = 1,即直接减去 b(i)b^{(i)} 就是理论最优的控制变量选择。这不是启发式规则——它在 i.i.d. 采样假设下是严格最优的。

方差减少比例(对梯度估计器整体):

Var[g^RLOO]Var[g^REINFORCE]=1k1(E.3)\frac{\text{Var}[\hat{g}_{\text{RLOO}}]}{\text{Var}[\hat{g}_{\text{REINFORCE}}]} = \frac{1}{k-1} \tag{E.3}
k相对方差直觉
21/1 = 1两条互相完美参照,有效方差 ≈ 0
41/3方差降至 1/3
81/7方差降至 1/7
0无限样本 → 完美基线

这个结果的前提是可交换性(exchangeability):所有 kk 条序列来自同一 prompt 下的同一策略 πθ\pi_\theta,是真正的 i.i.d. 采样。一旦违反这个假设(例如用不同温度采样,或从老版策略采样),LOO 的无偏性和最优性就不再成立。

附录 F:为什么在线 RL 总是胜过离线 DPO/RAFT

一个贯穿实验结果的规律:在线 RL 方法(RLOO、REINFORCE、PPO)始终以 5–10 个胜率点的优势超过离线方法(DPO、RAFT)。根本原因:

离线方法的局限: DPO 和 RAFT 在固定数据集上训练,一旦 πθ\pi_\theta 偏离了生成训练数据的分布(πSFT\pi_{\text{SFT}}),训练信号就过时了。策略无法探索新的回复类型并从中学习。

在线方法的优势: 每步从当前 πθ\pi_\theta 采样新的回复;奖励模型在这些新回复上实时给分;策略从这个「在分布上的」反馈中学习。随着 πθ\pi_\theta 提升,它生成的训练数据质量也在提升,形成正反馈循环(只要 KL 约束防止了奖励黑入)。

论文的最终立场:保留 RL 范式(在线探索)的价值不可忽视,我们需要的不是丢掉 RL,而是找到一个足够简单的 RL 方法来获得这个价值。RLOO 就是这个答案。

附录 G:RLOO 在 HuggingFace TRL 库中的实现

2024 年初,RLOO 被集成进 HuggingFace TRL 库(trl.RLOOTrainer),成为最主流的 RLHF 训练基线之一。关键实现细节:

  1. 参考模型权重共享: 参考模型与策略模型共享权重但梯度冻结,无需另开一份完整模型显存。
  2. 批量 k 采样: 通过向量化解码同时采样所有 kk 条回复。
  3. 梯度检查点兼容: RLOO 的 loss 不需要存储 Critic 的中间激活,与 gradient checkpointing 完全兼容。
  4. 混合精度支持: LOO 计算不引入精度问题,完全兼容 fp16/bf16。

TRL 官方超参数推荐:

超参数推荐范围说明
rloo_k4–8指令跟随任务用 4 即可
kl_coef (β)0.05–0.1若发生奖励黑入则增大
learning_rate5e-7 到 2e-6比 SFT 更低;过大容易熵坍塌
batch_size64–256prompt batch 大小,乘以 k 是实际生成数
response_length≤1024更长回复让 k 采样成本成平方增长
num_epochs1RLOO 严格 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:延伸阅读推荐

读完这篇笔记后,建议按以下顺序深入:

  1. PPO 原始论文(Schulman 等,2017,arXiv:1707.06347)——理解 RLOO 在批判什么,先要彻底读懂 PPO 的设计动机。
  2. InstructGPT(Ouyang 等,2022,arXiv:2203.02155)——PPO-RLHF 在真实 LLM 对齐中的第一次大规模应用。
  3. GRPO(DeepSeekMath,2024)——RLOO 的直接继承者,在推理任务上加了裁剪。
  4. REINFORCE++(Hu 等,2025)——在 RLOO 基础上增加全局优势归一化,专门解决长推理链的训练稳定性。
  5. VAPO(2025)——在 RLOO 序列级思想上引入 token 级价值条件权重,解决数学推理的信用分配问题。
  6. 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 比例(生成多样性直接指标)

修复方法:

  1. 增大 KL 系数 β(更强的参考模型锚定)。
  2. 降低学习率。
  3. 加入熵奖励项 αH(πθ)\alpha \cdot H(\pi_\theta)(DAPO 的做法)。
  4. 在奖励归一化后裁剪极端优势值。

I.2 奖励黑入(Reward Hacking)

症状: 奖励模型分数持续提升,但人工评估质量下降。典型表现:模型学会了重复关键词、堆砌积极词汇、回避某些话题。

原因: 奖励模型 rϕr_\phi 是一个代理指标,不等于真实人类偏好。RLOO 的在线 RL 会积极探索任何可以最大化 rϕr_\phi 的策略,包括那些「投机取巧」的方式。

修复方法:

  1. 增大 KL 系数 β(最直接的防御)。
  2. 定期更新奖励模型(RLHF 循环)。
  3. 在胜率评估中加入多维指标(长度、事实性、多样性)。

I.3 训练不稳定(梯度爆炸)

症状: loss 突然变成 NaN 或非常大的数值;奖励曲线出现尖峰随后崩塌。

原因: 某条序列的优势值 A(i)A^{(i)} 异常大(例如 kk 条样本中有一条奖励异常低,使其他条的优势值被放大)。

修复方法:

  1. 对优势值做标准化:A^(i)=(A(i)μA)/(σA+ϵ)\hat{A}^{(i)} = (A^{(i)} - \mu_A) / (\sigma_A + \epsilon)(REINFORCE++ 的做法)。
  2. 对梯度做范数裁剪(max_grad_norm=1.0)。
  3. 用更大的 kk 使 LOO 基线更稳定。

I.4 调试清单

训练前检查:
  ✅ 奖励模型与策略模型的分布是否对齐(用 SFT 数据验证奖励分布)
  ✅ β 值是否合理(0.05 起步,观察 KL 惩罚量级)
  ✅ 响应长度是否合理(过长的响应会让 k 采样变得非常昂贵)

训练中监控:
  ✅ 序列级 KL 散度(应保持 < 0.5,超过则增大 β)
  ✅ 生成熵(不应快速下降,下降则减小 lr 或加熵正则)
  ✅ 奖励曲线(不应一直线性上升——过快上升通常是奖励黑入)
  ✅ LOO 优势值分布(应以 0 为中心,方差稳定)

训练后验证:
  ✅ 在 holdout 集上评估胜率(非训练分布上的泛化)
  ✅ 长度控制实验(排除长度偏差)
  ✅ 多轮对话测试(单轮 RLOO 可能降低多轮一致性)