REINFORCE++:用全局优势归一化稳定免批评家策略优化

笔记日期: 2026-06-02
笔记作者: Zhongzhu Zhou
论文标题: REINFORCE++: Stabilizing Critic-Free Policy Optimization with Global Advantage Normalization
作者: Jian Hu, Jason Klein Liu, Haotian Xu, Wei Shen 等
arXiv: 2501.03262(v9,2025 年 11 月)
状态: 预印本 — 已被 OpenRLHF、TRL、Seed1.5-Thinking、DAPO、ScaleRL 等广泛采用

一句话总结

REINFORCE++ 证明了 GRPO 家族的局部优势归一化是有偏估计量(分子与分母统计相关),用覆盖整个训练批次的全局批次归一化替代它,从而消除偏差、稳定训练、防止 prompt 级别过拟合,在复杂推理任务上超越了包含完整批评家网络的 PPO。

前置知识

什么是 RLHF?为什么需要它?

预训练语言模型通过预测下一个 token 来学习互联网文本的分布。这个分布既包含有帮助的内容,也包含有害、错误、不友好的内容。监督微调(SFT)可以部分解决这个问题,但受限于标注数据的质量和覆盖范围。

人类反馈强化学习(RLHF)的思路是:训练一个奖励模型 R(x,y)R(x, y)(用人类偏好数据训练的神经网络,评分”对 prompt xx 的回复 yy 有多好”),然后用强化学习优化语言模型策略 πθ\pi_\theta,让它生成奖励模型评分更高的回复。

RLHF 的三个关键阶段:

  1. 预训练 → 大型语言模型 π0\pi_0
  2. 奖励模型训练R(x,y)R(x,y) 在人类偏好对 (yw,yl)(y_w, y_l) 上训练(ywy_w 优于 yly_l),使用 Bradley-Terry 模型:P(ywyl)=σ(R(x,yw)R(x,yl))P(y_w \succ y_l) = \sigma(R(x,y_w) - R(x,y_l))
  3. RL 微调 → 最大化 E[R(x,y)]βKL(πθπref)E[R(x,y)] - \beta \cdot \text{KL}(\pi_\theta \| \pi_{\text{ref}})

KL 散度惩罚防止策略”奖励黑客”——找到奇怪的输出骗取奖励模型高分,但偏离了正常语言分布。

策略梯度定理

理解优势函数估计方法,需要先理解策略梯度定理

对于参数化策略 πθ\pi_\theta,期望奖励关于 θ\theta 的梯度是:

θJ(θ)=Eτπθ[t=1Tθlogπθ(otq,o<t)Gt](PG)\nabla_\theta J(\theta) = E_{\tau \sim \pi_\theta}\left[\sum_{t=1}^{T} \nabla_\theta \log \pi_\theta(o_t | q, o_{<t}) \cdot G_t\right] \tag{PG}

其中 Gt=t=tTrtG_t = \sum_{t'=t}^{T} r_{t'} 是从第 tt 步起的累积回报(在 LLM RLHF 中,奖励只在最后给出,所以 Gt=rTG_t = r_T 对所有 tt 成立)。

用对数导数技巧:θπθ(as)=πθ(as)θlogπθ(as)\nabla_\theta \pi_\theta(a|s) = \pi_\theta(a|s) \cdot \nabla_\theta \log \pi_\theta(a|s),可以把期望转化为从样本估计的形式。

方差缩减——基线减法: 可以从 GtG_t 中减去任意常数基线 bb 而不引入偏差(因为 Eπθ[θlogπθ(as)b]=0E_{\pi_\theta}[\nabla_\theta \log \pi_\theta(a|s) \cdot b] = 0):

θJ(θ)=Eτπθ[t=1Tθlogπθ(otq,o<t)(Gtb)]\nabla_\theta J(\theta) = E_{\tau \sim \pi_\theta}\left[\sum_{t=1}^{T} \nabla_\theta \log \pi_\theta(o_t|q,o_{<t}) \cdot (G_t - b)\right]

(Gtb)(G_t - b) 就是优势函数 AtA_t:实际回报比基线高多少?

近端策略优化(PPO)

PPO 是 RLHF 的主流 RL 算法,使用演员-批评家架构:策略网络 πθ\pi_\theta(演员)和价值/批评家网络 VϕV_\phi(估计未来期望回报)。

PPO 的代理目标函数:

LPPO(θ)=Eq,o[1ot=1omin(st(θ)At,  clip(st(θ),  1ϵ,  1+ϵ)At)](1)\mathcal{L}^{\text{PPO}}(\theta) = E_{q,o}\left[\frac{1}{|o|}\sum_{t=1}^{|o|} \min\left(s_t(\theta) A_t,\; \text{clip}(s_t(\theta),\;1-\epsilon,\;1+\epsilon) A_t\right)\right] \tag{1}

其中 st(θ)=πθ(otq,o<t)πθold(otq,o<t)s_t(\theta) = \frac{\pi_\theta(o_t|q,o_{<t})}{\pi_{\theta_\text{old}}(o_t|q,o_{<t})} 是新旧策略的概率比。

clip 函数限制更新幅度:如果 sts_t 偏离 1 太远(策略变化过大),就裁剪目标函数,防止过大更新。

优势 AtA_t 通过广义优势估计(GAE) 计算,使用批评家网络 VϕV_\phi

Aq,otGAE=l=0(γλ)lδt+l(2)A_{q,o_t}^{\text{GAE}} = \sum_{l=0}^{\infty} (\gamma\lambda)^l \delta_{t+l} \tag{2}

其中 δq,ot=rt+γV(ot+1)V(ot)\delta_{q,o_t} = r_t + \gamma V(o_{t+1}) - V(o_t) 是时序差分误差,γ\gamma 是折扣因子,λ\lambda 是偏差-方差权衡参数。

GAE 的直觉: λ=0\lambda = 0 是单步 TD 估计(低方差,高偏差);λ=1\lambda = 1 是完整蒙特卡洛回报(无偏差,高方差);中间值 λ\lambda 平衡两者。

批评家的代价: 批评家网络参数量与策略网络相当,意味着显存翻倍、计算量大幅增加,在百亿参数级别的 LLM RLHF 中代价极高。

免批评家方法:ReMax、RLOO、GRPO

为避免批评家的开销,这类方法直接用奖励估计优势函数。

REINFORCE(Williams, 1992): 最基础的策略梯度,优势 = 总回报 - 固定基线 bb

AtREINFORCE=R(o,q)bA_t^{\text{REINFORCE}} = R(o, q) - b

无偏但方差高。

ReMax(Li et al., 2023): 对每个 prompt 额外做一次贪心解码得到 o^\hat{o},作为基线:

Aq,ot=R(o)R(o^)A_{q,o_t} = R(o) - R(\hat{o})

直觉:采样回复比贪心回复好就强化它,否则抑制它。

RLOO(Ahmadian et al., 2024): 每个 prompt 采样 kk 个回复,以其余回复的均值作为留一法基线:

Aq,ot(i)=R(o(i))1k1jiR(o(j))A_{q,o_t^{(i)}} = R(o^{(i)}) - \frac{1}{k-1}\sum_{j \neq i} R(o^{(j)})

GRPO(Shao et al., 2024): DeepSeekMath 和 DeepSeek-R1 使用的算法。每个 prompt 采样 kk 个回复,用组内均值和标准差做 z-score 归一化:

Aq,ot(i)=R(o(i))mean{R(o(j))}j=1kstd{R(o(j))}j=1k+ϵ(3)A_{q,o_t^{(i)}} = \frac{R(o^{(i)}) - \text{mean}\{R(o^{(j)})\}_{j=1}^{k}}{\text{std}\{R(o^{(j)})\}_{j=1}^{k} + \epsilon} \tag{3}

GRPO 在 DeepSeek-R1 的推理训练中大放异彩,但 REINFORCE++ 证明它存在根本性的数学缺陷。

这篇论文做了什么?

REINFORCE++(arXiv 2501.03262,2025 年 1 月首发,v9 2025 年 11 月)有三个核心贡献:

  1. 定理证明(附录 A): GRPO 的逐 prompt 局部归一化对任意有限组大小 kk 都是有偏估计量。
  2. REINFORCE++ 算法: 用全局批次归一化替代局部归一化;k=1k=1(通用 RLHF,最大效率)和 k>1k>1(推理任务,同一全局归一化原则)均支持。
  3. REINFORCE++w/Baseline 算法: 针对 k>1k > 1 的复杂任务,在全局归一化前先做组均值减法(奖励重塑),并使用理论上正确的 k2k_2 KL 估计量。

方法深入解析

GRPO 局部归一化的三大缺陷

图 1:PPO 与免批评家 RLHF 方法架构对比

flowchart LR
  subgraph PPO["PPO(演员-批评家)"]
    A1[策略模型 π_θ] -->|采样回复 o| B1[奖励模型 R]
    A1 --> C1["批评家网络 V_φ\n(参数量≈策略模型)\n⚠️ 显存翻倍!"]
    B1 --> D1["GAE 优势 Eq.2\nA_t = Σ(γλ)^l δ_{t+l}"]
    C1 --> D1
    D1 --> A1
  end

  subgraph GRPO["GRPO(局部归一化)"]
    A2[策略模型 π_θ] -->|"每个 prompt 采\n样 k 个回复"| B2[奖励模型 R]
    B2 -->|"同一 prompt 的\nr_1...r_k"| C2["局部归一化 Eq.3\nA_i = (r_i - mean_组) / std_组\n⚠️ 有偏估计量!"]
    C2 --> A2
  end

  subgraph RF["REINFORCE++(全局归一化)"]
    A3[策略模型 π_θ] -->|"采样 1+ 回复\n每个 prompt"| B3[奖励模型 R]
    B3 -->|"批次内所有\nprompt 的奖励"| C3["全局归一化 Eq.5\nA_i = (r_i - mean_批次) / std_批次\n✅ 有效无偏"]
    C3 --> A3
  end

缺陷一:理论有偏性。 优势估计量 Ai=(ϵiϵˉ)/DA_i = (\epsilon_i - \bar{\epsilon}) / D 是有偏的,因为分子(中心化奖励)和分母 DD(局部组标准差)统计不独立——二者都依赖于同一 prompt 的同一组 kk 个奖励。下文给出完整证明。

缺陷二:数值不稳定性。 当同一 prompt 的 kk 个回复奖励相近时(简单 prompt 上很常见),局部 std0\text{std} \to 0,优势爆炸,训练崩溃。

缺陷三:prompt 级别过拟合。 策略被优化为”比同一 prompt 的其他回复更好”,而非”全局更好”。在小数据集上导致灾难性过拟合:训练集上 95% 的准确率,测试集上 0%(见 Table 2 实验)。

证明:GRPO 的局部优势估计量是有偏的

这是论文附录 A 中 Theorem 1 的完整推导,是整篇论文最核心的理论贡献。

问题设置:

假设我们对某一个 prompt 观测到 NN 个奖励,真实基线为 θ\theta,奖励满足:

ri=θ+ϵi,ϵiN(0,σ2),i=1,,N(i.i.d.)(P1)r_i = \theta + \epsilon_i, \quad \epsilon_i \sim \mathcal{N}(0, \sigma^2), \quad i = 1, \ldots, N \quad \text{(i.i.d.)} \tag{P1}

定义样本均值、样本标准差和优势估计量:

ϵˉ=1Nj=1Nϵj,D=1Nj=1N(ϵjϵˉ)2,Ai=ϵiϵˉD(P2)\bar{\epsilon} = \frac{1}{N}\sum_{j=1}^{N}\epsilon_j, \quad D = \sqrt{\frac{1}{N}\sum_{j=1}^{N}(\epsilon_j - \bar{\epsilon})^2}, \quad A_i = \frac{\epsilon_i - \bar{\epsilon}}{D} \tag{P2}

定理 1: 对任意有限 N2N \geq 2

E[Aiϵi]ϵiE[A_i \mid \epsilon_i] \neq \epsilon_i

AiA_i 是有偏估计量。

证明——第一步:分子偏差

改写分子:

ϵiϵˉ=ϵi1N(ϵi+jiϵj)=(11N)ϵi1Njiϵj\epsilon_i - \bar{\epsilon} = \epsilon_i - \frac{1}{N}\left(\epsilon_i + \sum_{j \neq i}\epsilon_j\right) = \left(1 - \frac{1}{N}\right)\epsilon_i - \frac{1}{N}\sum_{j \neq i}\epsilon_j

在给定 ϵi\epsilon_i 的条件下取期望,利用 jij \neq iϵj\epsilon_j 独立且 E[ϵj]=0E[\epsilon_j] = 0

E[ϵiϵˉϵi]=(11N)ϵi(P3)E[\epsilon_i - \bar{\epsilon} \mid \epsilon_i] = \left(1 - \frac{1}{N}\right)\epsilon_i \tag{P3}

分子的期望是 ϵi\epsilon_i缩放版本,缩放因子 (11/N)(1 - 1/N)。对 N=4N=4(典型 GRPO 组大小),缩放因子是 3/43/4

证明——第二步:分母依赖于 ϵi\epsilon_i

D2=1Njϵj2ϵˉ2D^2 = \frac{1}{N}\sum_j \epsilon_j^2 - \bar{\epsilon}^2,计算 E[D2ϵi]E[D^2 \mid \epsilon_i]

由于 ϵˉ=1N(ϵi+jiϵj)\bar{\epsilon} = \frac{1}{N}(\epsilon_i + \sum_{j \neq i}\epsilon_j),展开后:

E[ϵˉ2ϵi]=ϵi2N2+(N1)σ2N2E[\bar{\epsilon}^2 \mid \epsilon_i] = \frac{\epsilon_i^2}{N^2} + \frac{(N-1)\sigma^2}{N^2}

(交叉项因独立性和零均值消失),以及:

E[1Nj=1Nϵj2ϵi]=ϵi2+(N1)σ2NE\left[\frac{1}{N}\sum_{j=1}^{N}\epsilon_j^2 \mid \epsilon_i\right] = \frac{\epsilon_i^2 + (N-1)\sigma^2}{N}

整理得:

E[D2ϵi]=(N1)2σ2N2+N1N2ϵi2(P4)\boxed{E[D^2 \mid \epsilon_i] = \frac{(N-1)^2\sigma^2}{N^2} + \frac{N-1}{N^2}\epsilon_i^2} \tag{P4}

关键发现: E[D2ϵi]E[D^2 \mid \epsilon_i] 中有 N1N2ϵi2\frac{N-1}{N^2}\epsilon_i^2 这一项——分母 DD 依赖于 ϵi\epsilon_i

证明——第三步:相关的分子和分母意味着有偏

由于分子 (ϵiϵˉ)(\epsilon_i - \bar{\epsilon}) 和分母 DD 都是同一 NN 样本组的函数,且都依赖于 ϵi\epsilon_i,它们相关,因此:

E[ϵiϵˉDϵi]E[ϵiϵˉϵi]E[Dϵi]E\left[\frac{\epsilon_i - \bar{\epsilon}}{D} \mid \epsilon_i\right] \neq \frac{E[\epsilon_i - \bar{\epsilon} \mid \epsilon_i]}{E[D \mid \epsilon_i]}

(当分子分母相关时,比值的期望不等于期望之比——这是经典的比值估计量偏差。)\square

偏差的定量感受:

ϵi|\epsilon_i| 较大的极端样本(组内最好或最差的回复),分母 DDϵi|\epsilon_i| 增大(由 P4),所以优势 Ai=(ϵiϵˉ)/DA_i = (\epsilon_i - \bar{\epsilon}) / D 低估了这些极端样本的真实优势。

组大小 NN标准化优势 ϵi/σ\epsilon_i / \sigma偏差比(真实估计量/无偏目标)
40(均值回复)1.00(零优势无偏差)
41(高出 1 个标准差)≈ 0.866(低估 13%)
42(高出 2 个标准差)≈ 0.655(低估 35%)
81≈ 0.935(低估 6.5%)
82≈ 0.798(低估 20%)
64(全局批次)1≈ 0.992(低估 <1%)

结论: 对典型的 k=4k=4 GRPO,组内最优回复(高出均值 2 个标准差)的优势被低估 35%——这意味着最有信息量的训练样本反而接受了最少的梯度强化,严重影响训练质量。全局批次归一化(B64B \geq 64)将偏差降至 1% 以下。

为什么全局归一化修复了问题: 当归一化覆盖 BkB \gg k 个不同 prompt 时,批次均值 μbatch\mu_\text{batch} 和标准差 σbatch\sigma_\text{batch} 是独立 prompt 样本的统计量,与任何单个奖励 rir_i 渐近独立。因此:

E[Aiglobal]=E[riμbatchσbatch]BE[ri]μσ(unbiased)E[A_i^\text{global}] = E\left[\frac{r_i - \mu_\text{batch}}{\sigma_\text{batch}}\right] \xrightarrow{B \to \infty} \frac{E[r_i] - \mu}{\sigma} \quad \text{(unbiased)}

REINFORCE++:全局优势归一化

图 2:REINFORCE++ 训练循环(k=1 变体)

sequenceDiagram
    participant D as 数据集 D
    participant Policy as 策略模型 π_θ
    participant Ref as 参考模型 π_ref
    participant Reward as 奖励模型 R
    participant Norm as 全局归一化器

    loop 每个训练步
        D->>Policy: 采样 B 个 prompt {q_1...q_B}
        Policy->>Policy: 复制 π_old ← π_θ
        Policy->>Reward: 对每个 q_i 生成一个回复 o_i(在 π_old 下)
        Reward->>Norm: 计算 r_i = R(o_i, q_i)
        Policy->>Norm: 计算逐 token KL: log[π_ref(o_t|...) / π_old(o_t|...)]
        Norm->>Norm: A_i = r_i - β·ΣKL(t)   [式4 原始优势]
        Norm->>Norm: μ = mean(所有token的A_i), σ = std(所有token的A_i)
        Norm->>Policy: A_norm = (A_i - μ) / (σ + ε)   [式5 全局归一化]
        Policy->>Policy: 用 A_norm 通过 PPO 裁剪目标更新 θ
    end

REINFORCE++ 的每个 token oto_t 的原始优势为:

Aq,ot=R(o1:T,q)βi=tTKL(i)(4)A_{q,o_t} = R(o_{1:T}, q) - \beta \cdot \sum_{i=t}^{T} \text{KL}^{(i)} \tag{4}

其中 KL(i)=logπθold(oiq,o<i)πref(oiq,o<i)\text{KL}^{(i)} = \log\frac{\pi_{\theta_\text{old}}(o_i|q,o_{<i})}{\pi_\text{ref}(o_i|q,o_{<i})} 是逐 token KL 散度,β\beta 是 KL 惩罚系数。

设计选择分析: KL 惩罚被直接融入奖励(k1 风格),而非添加为独立损失项。这将 KL 惩罚变成优势信号的一部分,简化目标函数——最终 PPO 更新只需处理一个目标。

然后应用全局批次归一化

Aq,otnorm=Aq,otmean(AADbatch)std(AADbatch)+ϵ(5)A_{q,o_t}^\text{norm} = \frac{A_{q,o_t} - \text{mean}(A \mid A \in \mathcal{D}_\text{batch})}{\text{std}(A \mid A \in \mathcal{D}_\text{batch}) + \epsilon} \tag{5}

其中 Dbatch\mathcal{D}_\text{batch} 包含批次内所有 prompt 所有 token 的优势。取 B=1024B = 1024,平均回复长度 512,则共归一化约 52 万个优势值——远胜于 GRPO 每组 4–8 个。

算法 1:REINFORCE++(k=1 完整伪代码)

REINFORCE++(k=1)算法
────────────────────────────────────────────────────────────────
输入:
  π_ref   — 冻结参考策略(SFT 模型)
  R       — 奖励模型(Bradley-Terry 或规则型)
  D       — 训练 prompt 数据集
超参数:
  B       — 批大小(每步 prompt 数,建议 ≥ 512)
  β       — KL 惩罚系数(如 0.01–0.1)
  ε       — 归一化数值稳定常数(如 1e-8)
  ε_clip  — PPO 裁剪阈值(如 0.2)
  k_ppo   — 每次 rollout 的 PPO 更新迭代次数(如 1)
  M       — 总训练步数

初始化:π_θ ← π_ref

for step = 1, 2, ..., M:

  ─── 数据采集阶段 ───────────────────────────────
  1. 采样批次:{q_1,...,q_B} ← 从 D 无放回采样 B 个 prompt
     (无放回保证 prompt 多样性)

  2. 快照旧策略:π_old ← π_θ
     (必须在生成 rollout 前冻结 π_old)

  3. 对每个 q_i:
       o_i ~ π_old(·|q_i)   ← 每个 prompt 只生成一个回复!
       (k=1 意味着无组采样——最大化 prompt 多样性)

  4. 计算原始优势:
     对每个 (q_i, o_i):
       r_i = R(o_i, q_i)                    ← 完整回复的奖励
       对每个 token 位置 t = 1...|o_i|:
         KL_t = log π_ref(o_t|q_i,o<t) - log π_old(o_t|q_i,o<t)
         A_raw(q_i,o_t) = r_i - β × Σ_{s=t}^T KL_s   [式4]
         (从当前 token 起到序列末尾的未来 KL 累加)
  ─────────────────────────────────────────────

  ─── 全局归一化阶段 ──────────────────────────────
  5. 将所有原始优势收集到 D_batch:
       D_batch = {A_raw(q_i,o_t):所有 i,所有 t}
       (大小 ≈ B × 平均长度,如 1024×512 = 52 万个值)

  6. 计算全局统计量:
       μ = mean(D_batch)   ← 标量,对大 B 高度稳定
       σ = std(D_batch)    ← 标量,对大 B 高度稳定

  7. 对每个优势归一化:
       A_norm(q_i,o_t) = (A_raw(q_i,o_t) - μ) / (σ + ε)   [式5]
  ─────────────────────────────────────────────

  ─── PPO 更新阶段 ─────────────────────────────
  8. for ppo_iter = 1,...,k_ppo:
       对每个 (q_i,o_t):
         ratio_t = π_θ(o_t|q_i,o<t) / π_old(o_t|q_i,o<t)
         L_t = min(ratio_t × A_norm, clip(ratio_t,1±ε_clip) × A_norm)
       L_total = mean(所有 token 和 prompt 的 L_t)
       θ ← θ + α × ∇_θ L_total   ← 梯度上升(最大化奖励)
  ─────────────────────────────────────────────
────────────────────────────────────────────────────────────────

逐行解析:

  • 第 3 行(k=1): 每个 prompt 只生成一个回复,使批次覆盖 BB 个不同 prompt——最大化 prompt 多样性,防止对特定 prompt 的过拟合。
  • 第 4 行(逐 token KL): KL 惩罚在 token 级别计算,确保策略在 token 生成层面靠近参考模型,而非只在回复层面。Σ_{s=t}^T KL_s 表示未来 KL 的累加,用 flip-cumsum-flip 技巧高效实现。
  • 第 5–7 行(全局统计): 均值和标准差在批次内所有 token 优势上计算——数十万个值,远比每组 4–8 个稳定。

REINFORCE++w/Baseline:面向复杂推理任务

当任务具有稀疏 0/1 奖励(数学正确性、代码通过率)时,k=1k=1 采样会产生大量零奖励样本,梯度信号很弱。每个 prompt 采样 k>1k > 1 个回复并用组均值减法过滤无效样本会更有效。

图 3:REINFORCE++w/Baseline 的两步优势计算

flowchart TD
    A["采样 k 个回复:o^(1), o^(2), ..., o^(k) ~ π_old"] --> B
    B["计算奖励:R^(1), R^(2), ..., R^(k)"] --> C
    C["第一步:组均值减法\n(奖励重塑 / 无效样本过滤)\n\nA'_i = R^(i) - mean_组(R^(1)...R^(k))\n\n若所有 R^(j) 相等(无效样本):\n  A'_i = 0 → 零梯度,自动过滤!"] --> D
    D["第二步:全局批次归一化\n(稳定性 + 有效无偏性)\n\nA_norm_i = (A'_i - mean_批次) / (std_批次 + ε)\n\n使用全局统计量而非组内统计量\n→ 修复 GRPO 的偏差!"] --> E
    E["PPO 更新(使用 A_norm_i)\n+\n独立 k2 KL 损失:J_k2 = E[½(log π_θ/π_ref)²]"]

第一步——组均值减法(式 6):

Aq,ot(i)=R(o(i))meangroup{R(o(j))}j=1k(6)A'_{q,o_t^{(i)}} = R(o^{(i)}) - \text{mean}_{\text{group}}\{R(o^{(j)})\}_{j=1}^{k} \tag{6}

这一步的目的是奖励重塑,而非归一化:

  • 无效样本过滤: 如果组内 kk 个回复全部奖励 = 0(没有解出问题),则 meangroup=0\text{mean}_{\text{group}} = 0,所有 Ai=0A'_i = 0 → 零梯度 → 该 prompt 不影响参数更新。这是正确的:我们没有信息指导策略往哪个方向改进。
  • 奖励尺度归一化: 无论奖励在 [0,1][0,1] 还是 [1,+1][-1,+1],组均值减法后都产生以 0 为中心的优势,使算法对两种奖励格式都有效。

第二步——全局批次归一化(式 7):

Aq,otnorm=Aq,otmeanbatch(A)stdbatch(A)+ϵ(7)A_{q,o_t}^\text{norm} = \frac{A'_{q,o_t} - \text{mean}_{\text{batch}}(A')}{\text{std}_{\text{batch}}(A') + \epsilon} \tag{7}

组均值减法之后,用全局批次统计归一化。关键在于:这里除以 stdbatch\text{std}_{\text{batch}}(由批次内数千个 token 优势计算,高度稳定),而非 stdgroup\text{std}_{\text{group}}(由单个 prompt 的 k=4k=4 或 8 个值计算,极不稳定且有偏)。

k2 KL 估计量(式 8):

REINFORCE++w/Baseline 使用独立的 KL 损失项而非将 KL 融入奖励,采用 k2k_2 估计量:

L=LPPO(Anorm)λJk2(θ),Jk2(θ)=E[12(logπθπref)2](8)\mathcal{L} = \mathcal{L}^\text{PPO}(A^\text{norm}) - \lambda \cdot J_{k_2}(\theta), \quad J_{k_2}(\theta) = E\left[\frac{1}{2}\left(\log\frac{\pi_\theta}{\pi_\text{ref}}\right)^2\right] \tag{8}

为什么 k2 优于 GRPO 的 k3?

GRPO 使用的 k3k_3 估计量:

k3=πθπreflogπθπref1k_3 = \frac{\pi_\theta}{\pi_\text{ref}} - \log\frac{\pi_\theta}{\pi_\text{ref}} - 1

这是反向 KL 散度 KL(πrefπθ)\text{KL}(\pi_\text{ref}\|\pi_\theta) 的一阶泰勒近似。问题:k3k_3πθ/πref<1\pi_\theta / \pi_\text{ref} < 1 的某些范围内可以为负值,产生不稳定梯度。

k2k_2 估计量 12(logπθπref)2\frac{1}{2}\left(\log\frac{\pi_\theta}{\pi_\text{ref}}\right)^2

  • 始终非负 ✓
  • 梯度有界且平滑 ✓
  • 对反向 KL 提供无偏梯度估计 ✓
  • 类似对数比的平方误差损失,与偏差成比例惩罚 ✓

与 PPO 的关系:简化视角

REINFORCE++w/Baseline 等价于去掉批评家网络、用两步全局归一化替换 GAE 的 PPO

图 4:从 PPO 到 REINFORCE++w/Baseline 的化简步骤

graph TD
    A["完整 PPO"] --> B["演员 π_θ\n+ 批评家 V_φ(参数量相当)\n+ GAE:A_t = Σ(γλ)^l δ_{t+l}"]
    
    B --> C["化简步骤:"]
    C --> D["1. 移除批评家:V_φ ← 0\n   此时:δ_t = r_t(无自举)"]
    D --> E["2. 设 γ=1:不折扣未来\n   (RLHF 中奖励只在序列末给出)"]
    E --> F["3. 设 λ=1:完整 MC 回报\n   A_t = Σ_{l=0}^∞ δ_{t+l} = R(总奖励)"]
    F --> G["4. 用全局批次归一化替代学习的价值函数\n   作为更精确、更稳定的基线"]
    
    G --> H["REINFORCE++w/Baseline\n= PPO with V=0, γ=λ=1,\n  全局归一化替代价值函数"]

这个等价关系很有启发性:PPO 的批评家网络估计 V(st)V(s_t)(从状态 sts_t 出发的期望未来回报)。在 RLHF 中,奖励只在序列末给出,所以 V(st)E[R]V(s_t) \approx E[R]——这基本上就是一个均值基线,而全局批次归一化更准确地估计了这个均值(通过批次统计),而无需训练一个参数量相当的批评家网络。

各方法对比总结

图 5:所有免批评家 RLHF 方法横向对比

graph LR
    subgraph Compare["免批评家方法横向对比"]
        direction TB
        R1["REINFORCE\nA_t = R - b(常数基线)\n偏差:无  方差:高  k=1"]
        R2["ReMax\nA_t = R(o) - R(o_贪心)\n偏差:无  方差:中  k=1+1"]
        R3["RLOO\nA_t = R(o_i) - mean_其余\n偏差:轻微(有限 k)  k≥2"]
        R4["GRPO\nA_t = (R - mean_组) / std_组\n偏差:是(已证明)\n稳定性:std→0 爆炸风险\n倾向过拟合"]
        R5["REINFORCE++\nA_t = (R + KL) 全局归一化\n偏差:渐近无  稳定:高\nk=1 或 k>1 均可"]
        R6["REINFORCE++w/Baseline\nA_t = (R-mean_组+KL)/std_批次\nk2 KL 损失  k>1\n无效过滤:有"]
    end

实验

实验一:通用 RLHF——Chat-Arena-Hard

设置: Llama-3-8B-SFT 在 2 万条多样 prompt 上,使用约 70 万条人类偏好对训练的 Bradley-Terry 奖励模型进行训练。评估指标:Chat-Arena-Hard 归一化得分(基于 LLM Judge 的对比排名)。

表 1:通用 RLHF 对比(Chat-Arena-Hard)

算法归一化类型每 prompt 样本数得分长度(token)每 token 得分
REINFORCE++(k=1)全局146.78320.0561
GRPO(k=4)局部446.88600.0544
RLOO(k=4)留一法444.68660.0515
ReMax(k=1+1)固定基线1+145.18050.0560

分析要点:

  1. 得分与效率的对比: REINFORCE++ (k=1) 以 4 倍更少的样本匹配 GRPO (k=4) 的得分(46.7 vs 46.8),直接意味着 4 倍更低的奖励模型推理成本。

  2. 长度与奖励黑客: GRPO 产生更长回复(860 vs 832 token)。长度增加是奖励黑客的经典信号——模型学会了”越长越高分”的捷径。全局归一化的稳定性避免了这种行为。

  3. KL 动态: REINFORCE++ 在训练过程中 KL 散度显著更低,说明训练后的策略更靠近参考模型——在获得任务收益的同时更好地保留了模型质量。

实验二:小数据集上的灾难性过拟合(AIME-24)

这是最有说服力的实验,直接展示了局部归一化偏差的实际危害。

设置: 仅在 30 条 AIME-24 数学题上训练,在未见过的 AIME-25 题目上评估。

表 2:过拟合实验(训练集 30 道题,测试 AIME-25)

算法AIME-24 训练 Pass@1AIME-25 测试 Pass@1AIME-25 测试 Pass@16
GRPO(局部归一化)95.0%0.0%0.4%
REINFORCE++(全局归一化)71.0%2.5%40.0%

GRPO 发生了什么: 局部归一化让策略优化”比同一 prompt 的其他回复更好”,仅在 30 道训练题上迅速记住解题模式——训练集 95% 的准确率。但底层推理能力没有提升:在未见过的 AIME-25 题目上 0% Pass@1——完全没有泛化。

Pass@16 的差距(0.4% vs 40%)尤其说明问题: GRPO 训练后模型的多样性崩溃——给 16 次机会解一道 AIME-25 题目仍然几乎失败,因为所有 16 个回复都高度相似(模型收敛到了针对训练 prompt 的极度特化策略)。REINFORCE++ 保持了解法多样性,Pass@16 远高于 Pass@1。

机制分析: 局部归一化隐含了一个”与同 prompt 其他回复竞争”的目标,这与”学习可迁移推理技能”不同。全局归一化迫使策略同时在整个批次的多样 prompt 上提升——必须构建真正可迁移的推理能力,而非记忆特定问题的解法模式。

实验三:分布外泛化——K&K 逻辑谜题

Knights and Knaves (K&K) 谜题测试演绎推理。难度随谜题中”人物”数量自然增加(更多人 = 更多约束 = 更难)。测试设置:训练 2–5 人谜题,测试对 6–8 人谜题的泛化。

结果:GRPO 在简单任务(2–3 人)上有竞争力,但在更难的分布外任务(6–8 人)上性能崩溃。REINFORCE++ 在 4 人以上的所有难度级别上都超过 GRPO,平均得分高出 6.4 点(62.1 vs 55.7)。

局部归一化导致策略针对训练题目中的特定难度级别优化,而非构建可扩展到更高难度的通用推理启发。

实验四:复杂长时序工具使用——ZeroTIR

最高难度测试:Qwen-2.5-Base-7B 从零开始(无 SFT 热身,直接 RL)学习使用 Python 工具解决数学问题,涉及多轮工具调用和长时序信用分配。

训练数据来自 ORZ 和 DAPO 数据集。评估:AIME 2024/2025、HMMT Feb 2024/2025、CMIMC,使用 average@32 指标。

表 4:复杂工具使用基准(average@32)

算法AIME’24AIME’25HMMT’25HMMT’24CMIMC均值
GRPO(局部归一化,k>1)31.6621.8716.9717.7024.6822.58
PPO(完整批评家)30.2021.6615.0018.4323.9521.85
REINFORCE++w/Baseline30.8327.1817.9118.9525.6224.10

核心结论:

  1. REINFORCE++w/Baseline 超越了 PPO(均值 +2.25),且无需批评家网络。这是最核心的标题结论:更简单的算法打败了更重的算法。

  2. 最大收益在 AIME-2025(最难、最 OOD):比 GRPO 高 +5.31,比 PPO 高 +5.52。证明了全局归一化对困难、泛化任务的特殊价值。

  3. 无效样本过滤的关键作用: 在从零开始的 RL 训练初期,大量回复完全失败(奖励 = 0)。组均值减法自动给这些无效样本赋予零优势,保持训练稳定——在 GRPO 中,这些无效样本可能产生数值不稳定的非零梯度。

何时使用哪个变体?

图 6:REINFORCE++ 变体选择指南

flowchart TD
    A["任务类型"] --> B{"有离散可验证奖励?\n(RLVR:0/1 正确性,\n代码通过率,规则检查)"}
    A --> C{"通用 RLHF?\n(Bradley-Terry 奖励模型,\n连续分数,多样 prompt)"}

    B -- 是 --> D["REINFORCE++w/Baseline\n- k>1 采样\n- 两步:组均值减法 → 全局归一化\n- k2 KL 估计量\n- 0/1 和 -1/1 均支持\n- 自动无效样本过滤"]
    B -- 否 --> C

    C -- 是 --> E["REINFORCE++(k=1)\n- 每 prompt 一个回复\n- 仅全局批次归一化\n- KL 融入奖励(k1 风格)\n- 最大化 prompt 多样性\n- 对称 -1/1 奖励效果最佳"]

    D --> F["最适合:数学推理、代码、工具使用、\n长时序任务、多轮 agent"]
    E --> G["最适合:对话对齐、指令跟随、\nPRM 训练、在线实时 RL"]

经验推荐(来自第三方验证):

  • 批次大小 B512B \geq 512,建议 B=1024B = 1024 以获得稳定全局统计量
  • w/Baseline 变体:组大小 k=4k = 488
  • KL 系数 β=0.01\beta = 0.010.10.1(RLVR 任务用较小值,对话对齐用较大值)
  • k2k_2 KL 损失系数 λ=0.001\lambda = 0.0010.010.01

限制与边界条件

  1. 批次大小依赖: 全局归一化依赖大批次(B512B \geq 512)来稳定均值/标准差估计。在 70B+ 参数规模下,每 GPU 批次大小很小,全局统计量可能需要跨多个梯度累积步骤计算,增加实现复杂度。

  2. 异构奖励尺度: 全局归一化假设批次内所有奖励尺度相当。多任务训练时(如混合数学+代码+安全奖励),若不同任务奖励尺度差异大,可能需要先对各任务奖励单独归一化。

  3. k=1 对稀疏奖励不一定最优: 当通过率极低时(如 0.1% 的极难题),k=1 可能产生过多零奖励样本。w/Baseline 的无效样本过滤机制在这种情况下更有效。

  4. 没有与 Online DPO/SimPO/DAPO 的对比: 论文聚焦于 REINFORCE/PPO 家族,未与 DAPO 等近期方法直接比较(后者也针对 GRPO 不稳定性提出了修复方案)。

批判性分析:不足与可改进之处

不好的地方

(a) 过拟合实验是极端人工场景: Table 2 仅在 30 道 AIME 题上训练——现实 RLHF 部署使用数万到数百万条 prompt。GRPO 的 95%→0% 崩溃令人震惊,但在现实规模下局部归一化的过拟合问题有多严重?论文完全没有给出数据规模缩放实验,使这个结果更像是刻意构造的极端 case,而非代表性场景。

(b) 有效无偏性的量化分析缺失: 论文声称全局归一化”渐近无偏”,但从未测量:在实际常用的 B=256B = 256 批次大小下,偏差剩余多少?没有偏差-批次大小消融曲线,实践者无法知道需要多大批次才能获得有意义的偏差缩减。

(c) w/Baseline 变体的两个改进未被解耦: REINFORCE++w/Baseline 同时引入了(1)全局标准差替代局部标准差,和(2)k2 KL 估计量替代 GRPO 的 k3。没有 2×2 消融表格分别验证两个改动的贡献。k3→k2 的切换可能贡献了相当大比例的改进,这个问题没有答案。

(d) 对比基线不够全面: 未与 DAPO 直接比较——后者在几乎同期独立发现了 GRPO 类似问题并提出了 token 级别优势裁剪的修复方案。两篇论文都声称修复了 GRPO 的不稳定性,理应直接对比,但两边都回避了这一对比。

作者淡化或回避的局限

(e) 全局 vs. 局部的对立被过度简化: 论文将局部归一化的偏差定性为缺陷,将全局归一化定性为修复。但局部归一化其实做了一件有意义的事:它比较的是”同一问题的不同解法”(苹果比苹果)。全局归一化则是比较”完全不同问题的解法”(苹果比橙子)。当不同 prompt 的内在难度差异很大时,全局统计量的标准差会被难度方差放大,优势信号被稀释。这种权衡没有被讨论。

(f) k=1 效率声明需要细化: 论文称 k=1 比 k=4 GRPO “效率高 4 倍”,但这只计算了奖励模型调用次数。REINFORCE++ (k=1) 需要 4 倍更多的不同 prompt 来维持全局统计量的稳定性(你需要覆盖 BB 个不同 prompt 而非 B/4B/4 个 prompt × 4 个回复)。从数据集规模和多样性要求的角度,效率对比并不总是 4 倍。

可以改进的地方

  1. 添加批次大小消融实验:B{64,128,256,512,1024}B \in \{64, 128, 256, 512, 1024\} 下训练,测量最终性能。这是最重要的缺失实验,能直接给出最小批次大小的实践指导。

  2. 2×2 消融表格隔离 w/Baseline 的两个改动: (局部/全局归一化)×(k2/k3 KL 估计量)四组配置在 ZeroTIR 上对比,确定每个改动的独立贡献。

  3. 数据规模缩放实验: 在 30、100、500、2000、10000 条训练 prompt 下对比 GRPO 与 REINFORCE++,绘制测试准确率-训练集大小曲线,明确局部归一化过拟合在何种规模下变得不重要。

  4. 与 DAPO 等比较: 在相同计算预算下对比 DAPO、REINFORCE++、GRPO,给出性能-计算量帕累托曲线,让实践者了解什么条件下各算法最优。

  5. 分析 prompt 难度分布对全局归一化的影响: 混合简单和困难 prompt 时全局统计量的稳定性如何?提出按难度分层的奖励归一化方案。

总结

REINFORCE++ 提出了一个干净的理论论点并配以扎实的实证支持。核心洞见——GRPO 的逐 prompt 归一化创造了有偏、不稳定的优势估计量,全局批次归一化修复了它——简单易懂、易于实现、实际有效。

两变体设计很有针对性:REINFORCE++ (k=1) 针对通用对齐训练,REINFORCE++w/Baseline (k>1) 针对复杂推理任务,覆盖了两种最常见的 RLHF 应用场景。论文清楚地解释了为什么组采样在稀疏奖励下有帮助、在密集连续奖励下可能反而不必要。

该算法已被 OpenRLHF、TRL(HuggingFace 训练库)、Seed1.5-Thinking 和 ScaleRL 的 16,000 GPU 时实验独立验证采用——这种大规模工业采用是对论文核心贡献最有力的现实背书。

主要不足是批次大小消融缺失、KL 估计量贡献未被隔离验证。但核心理论结果正确,方法在实践中有效。对于今天(2025–2026)构建 RLHF 系统的任何人而言,REINFORCE++ 是对 GRPO 的一个简单、有理论保证的直接替代,额外带来稳定性和泛化性,没有任何代价。

参考文献

  • REINFORCE++(2025): Jian Hu 等,arXiv:2501.03262v9
  • PPO(2017): Schulman 等,arXiv:1707.06347
  • GAE(2018): Schulman 等,arXiv:1506.02438
  • GRPO / DeepSeekMath(2024): Shao 等,arXiv:2402.03300
  • RLOO(2024): Ahmadian 等
  • ReMax(2023): Li 等,arXiv:2310.10505
  • InstructGPT / RLHF(2022): Ouyang 等,arXiv:2203.02155
  • DPO(2023): Rafailov 等,NeurIPS 2023
  • DAPO(2025): Yu 等,arXiv:2503.14476
  • OpenRLHF(2024): Hu 等,arXiv:2405.11143
  • ScaleRL(2025): Khatri 等,arXiv:2510.13786
  • DLER(2025): Liu 等,arXiv:2510.15110
  • LitePPO(2025): Liu 等,arXiv:2508.08221
  • VAPO(2025): Yue 等,arXiv:2504.05118
  • DeepSeek-R1(2025): Guo 等,arXiv:2501.12948
  • KL 正则化分析(2025): Liu 等,arXiv:2510.01555
  • Agent RL 规模法则(2025): Mai 等,arXiv:2505.07773

可复现性说明

REINFORCE++ 已在 OpenRLHF(arXiv 2405.11143)和 TRL(HuggingFace 训练库)中开源实现,两者都是业界广泛使用的 RLHF 框架。代码可以直接运行,无需重新实现。

想快速上手的读者建议从 OpenRLHF 入手:设置 advantage_normalize=global 并将 num_generations 调为 1 即可体验最基本的 REINFORCE++ (k=1) 变体。

OpenRLHF 中的关键配置项:

配置项默认值REINFORCE++ 推荐值说明
advantage_normalizelocal(GRPO 风格)global核心改动
kl_estimatork3k2仅 w/Baseline 变体
num_generations41(基础)或 4–8(w/Baseline)每 prompt 采样数
train_batch_size256≥ 512全局统计量稳定性
kl_coef0.10.01–0.1(任务相关)KL 惩罚强度

复现 Table 1(通用 RLHF)的关键信息:

  • 基础模型:Llama-3-8B-SFT
  • 奖励模型:Bradley-Terry,~70 万条偏好对训练
  • 训练集:2 万条多样 prompt
  • 框架:OpenRLHF
  • 评估:Chat-Arena-Hard(LLM Judge 比较排名)
  • 关键区别:k=1(无组采样)+ 全局批次归一化

复现 Table 4(ZeroTIR 工具使用)的关键信息:

  • 基础模型:Qwen-2.5-Base-7B(无 SFT 初始化,RL from Zero)
  • 训练数据:ORZ(arXiv:2503.24290)+ DAPO 数据集
  • 环境:ZeroTIR(Python 工具调用,数学解题)
  • 评估:average@32(32 次独立采样的平均准确率)
  • 框架:OpenRLHF,使用 REINFORCE++w/Baseline 配置

附录:偏差量化计算

前置定义同正文证明,这里给出偏差比的完整推导。

对于 GRPO 优势估计量 Ai=(ϵiϵˉ)/DA_i = (\epsilon_i - \bar{\epsilon}) / D,近似偏差比(真实估计期望 / 无偏归一化目标 ϵi/σ\epsilon_i / \sigma):

Bias Ratio=E[Aiϵi]ϵi/σ11+ϵi2/((N1)σ2)\text{Bias Ratio} = \frac{E[A_i \mid \epsilon_i]}{\epsilon_i/\sigma} \approx \frac{1}{\sqrt{1 + \epsilon_i^2 / ((N-1)\sigma^2)}}

这个公式揭示了偏差的两个关键特性:

  1. 偏差随 ϵi|\epsilon_i| 增大而增大: 越好(或越差)的回复,优势被低估得越严重。最有信息量的训练样本受影响最大。

  2. 偏差随组大小 NN 增大而减小: (N1)(N-1) 在分母上,所以组越大偏差越小。全局批次大小为 BB 时,等效 N=B×avg_lenN = B \times \text{avg\_len},偏差接近于零。

Batch Normalization 类比: 这个全局归一化与有监督学习中的批归一化(Batch Normalization, Ioffe & Szegedy, 2015)数学上完全类似——都是在更大的分母统计量(批次均值/方差)上归一化。BN 通过稳定激活分布大幅稳定了神经网络训练;全局优势归一化通过稳定梯度信号大幅稳定了策略梯度训练。这不是巧合,而是同一个稳定训练原则在两个学习范式中的体现。

附录 B:REINFORCE++ PyTorch 实现要点

这里给出在 PyTorch 中实现全局归一化的核心代码注释。

# REINFORCE++ 全局归一化核心实现(伪代码)

def compute_raw_advantages(rewards, kl_penalties, beta=0.05):
    """
    计算原始优势(式 4)。
    
    参数:
        rewards:      每个回复的标量奖励 r(o, q)
        kl_penalties: (序列长度,) 逐 token KL 散度
                      KL_t = log π_ref(o_t|...) - log π_old(o_t|...)
        beta:         KL 惩罚系数
    返回:
        raw_adv: (序列长度,) 每个 token 的原始优势
    """
    T = len(kl_penalties)
    # 计算从每个 token 位置到序列末尾的 KL 累积和
    # future_kl[t] = Σ_{s=t}^{T} KL_s
    future_kl = kl_penalties.flip(0).cumsum(0).flip(0)  # 高效翻转累加翻转
    
    # 式 4:A_{q,o_t} = r - β · future_kl[t]
    raw_adv = rewards - beta * future_kl
    return raw_adv


def global_normalize(all_advantages, eps=1e-8):
    """
    全局批次归一化(式 5)。
    
    关键:必须在所有 prompt 的优势都计算完毕后才能调用!
    不能逐 prompt 归一化(那样就退化为局部归一化)。
    
    参数:
        all_advantages: (总 token 数,) 批次内所有 token 的优势
        eps:            数值稳定常数
    返回:
        normalized_adv: 零均值、单位方差的优势
    """
    mean = all_advantages.mean()   # 全局均值(标量)
    std = all_advantages.std()     # 全局标准差(标量)
    return (all_advantages - mean) / (std + eps)


# 训练循环核心逻辑
def rl_training_step(policy, ref_policy, reward_model, batch_prompts):
    """
    REINFORCE++ 单个训练步(k=1 变体)的伪代码。
    """
    # ────── 数据采集 ──────
    policy_old = copy.deepcopy(policy)  # 快照旧策略
    
    all_raw_advantages = []
    all_responses = []
    
    for q in batch_prompts:
        # 采样单个回复(k=1)
        o = policy_old.generate(q)
        r = reward_model(q, o)
        kl = compute_kl_per_token(policy_old, ref_policy, q, o)
        
        raw_adv = compute_raw_advantages(r, kl)
        all_raw_advantages.append(raw_adv)
        all_responses.append((q, o, raw_adv))
    
    # ────── 全局归一化(关键步骤)──────
    # 将所有 prompt 的所有 token 优势拼接成一个大向量
    flat_advantages = torch.cat(all_raw_advantages)  # (所有批次 token 数,)
    # 用全局统计量归一化——这是 REINFORCE++ 与 GRPO 的核心区别!
    flat_normalized = global_normalize(flat_advantages)
    
    # 将归一化后的优势重新分配给各 prompt
    ptr = 0
    for i, (q, o, _) in enumerate(all_responses):
        L = len(o)
        norm_adv = flat_normalized[ptr:ptr+L]
        ptr += L
        all_responses[i] = (q, o, norm_adv)
    
    # ────── PPO 更新 ──────
    total_loss = 0.0
    for q, o, norm_adv in all_responses:
        for t, (o_t, adv_t) in enumerate(zip(o, norm_adv)):
            log_prob_new = policy.log_prob(o_t, q, o[:t])
            log_prob_old = policy_old.log_prob(o_t, q, o[:t])
            ratio = torch.exp(log_prob_new - log_prob_old)
            
            clipped_ratio = ratio.clamp(1 - eps_clip, 1 + eps_clip)
            ppo_loss = -torch.min(ratio * adv_t, clipped_ratio * adv_t)
            total_loss += ppo_loss
    
    total_loss /= sum(len(o) for _, o, _ in all_responses)
    total_loss.backward()
    optimizer.step()

实现中容易犯的错误(来自开源社区经验):

  1. ❌ 逐 prompt 归一化: 在每个 prompt 的回复循环内立即归一化——这等同于局部归一化,GRPO 的缺陷依然存在。必须先收集所有优势,再统一归一化。

  2. ❌ 用无偏标准差(Bessel 校正): torch.std(unbiased=True) 除以 (N1)(N-1),在大 batch 下影响不大,但在小 batch 下会产生略大的值,建议用 unbiased=False(除以 NN)以与论文一致。

  3. ❌ 分布式训练中忘记 all-reduce: 多 GPU 训练时,每张 GPU 只看到部分批次。必须对均值和方差做 all-reduce 才能获得真正的全局统计量。

附录 C:第三方验证摘要

REINFORCE++ 的核心原则——全局批次归一化优于局部组归一化——已被多个独立大规模系统验证:

LitePPO(Liu et al., 2025,arXiv:2508.08221): 将 REINFORCE++w/Baseline 与 token 级别损失结合,实验结果表明全局标准差优于局部标准差——“训练更稳定,泛化更好”,与本文结论完全一致。

ScaleRL(Khatri et al., 2025,arXiv:2510.13786): 在 16,000 GPU 时规模实验中直接对比了 REINFORCE++ 的批次级归一化与 GRPO 的 prompt 级归一化,结论是批次级归一化”在计算效率和最终性能上略优”。这是迄今规模最大的独立验证。

DLER(Liu et al., 2025,arXiv:2510.15110): 研究了在用截断控制 LLM 输出长度时,批次归一化(全局)保持稳定而组归一化(局部)准确率下降。进一步证明全局归一化在各种训练条件和奖励格局变化下更鲁棒。

Seed1.5-Thinking(ByteDance Seed team, 2025): Seed 团队的超大规模推理模型训练中采用了 REINFORCE++ 家族算法,模型在多项推理基准上达到了与 o1/o3 相当的水平。

这种跨团队、跨规模、跨应用场景的一致性验证,是算法实用性最可靠的佐证。

附录 D:与 DeepSeek-R1 训练流程的关系

DeepSeek-R1 的成功让 GRPO 广为人知。有必要理解 REINFORCE++ 与 DeepSeek-R1 的关系。

DeepSeek-R1(Guo et al., 2025)使用 GRPO 进行推理训练,取得了令人印象深刻的推理能力。论文本身也承认 GRPO 存在奖励崩溃等问题,并通过 DAPO 中的 clip-higher 等技巧缓解。

REINFORCE++ 的视角:DeepSeek-R1 的成功尽管有 GRPO 的局部归一化偏差,而非因为它。GRPO 的总体 RLVR 框架(使用可验证奖励训练基础模型推理)是关键创新;局部归一化偏差是一个可修复的实现细节。REINFORCE++ 提供了这个修复,且在多项任务上证明可以超越原始 GRPO。

从实践角度看:

  • 如果你在重现 DeepSeek-R1 风格的训练,可以直接将 GRPO 替换为 REINFORCE++w/Baseline,保持其他所有设计不变(RLVR 框架、数学推理任务设置、Qwen/LLaMA 基础模型),预期会得到更好的泛化性能。
  • 关键变化:用全局 std 替换局部 std,用 k2 KL 估计量替换 k3,其余不变。
  • 需要注意批次大小:建议 B512B \geq 512,否则全局统计量可能不够稳定。