Mini-class

在强化学习中,KL 散度的估计方式直接影响训练稳定性。本文系统剖析三种经典估计器 $k_1, k_2, k_3$ 在 on-policy 和 off-policy 场景的性质差异,并给出「用于 reward 惩罚」与「用于 loss 回传」时的选型指南。

English Version | 知乎版本 Zhihu

引言:KL 散度在强化学习中的角色

在策略优化(PPO、GRPO 等)或对齐训练(RLHF/RLAIF)中,KL 惩罚是约束新策略不偏离参考策略的核心手段,用以防止训练不稳定或策略崩溃。

正向 KL 与反向 KL 的区别

设 $q_\theta$ 为当前 actor 策略,$p$ 为参考策略,两种方向的 KL 散度分别为:

反向 KL(Reverse KL): \(D_{\mathrm{KL}}(q_\theta \| p) = \mathbb{E}_{x \sim q_\theta}\left[\log \frac{q_\theta(x)}{p(x)}\right]\)

图片来源:Dibya Ghosh's Blog

正向 KL(Forward KL): \(D_{\mathrm{KL}}(p \| q_\theta) = \mathbb{E}_{x \sim p}\left[\log \frac{p(x)}{q_\theta(x)}\right]\)

图片来源:Dibya Ghosh's Blog

直觉理解

  • 反向 KL 倾向于「模式寻优」(mode-seeking)——策略会集中在参考分布的高概率区域,可能牺牲多样性
  • 正向 KL 倾向于「质量覆盖」(mass-covering)——策略会尽量覆盖参考分布的支撑集

在 RLHF 的主流实现中,反向 KL 更为常见,因为我们希望 actor 不要偏离 reference policy 太远,而非要求完全覆盖所有模式。

三种估计器的定义与设计原理

设比值 $r(x) = \frac{p(x)}{q_\theta(x)}$,John Schulman 提出的三种单样本估计子定义如下:

$k_1$:最朴素的估计器

\[k_1(x) = -\log r = \log q_\theta(x) - \log p(x)\]

这是最直接的定义——直接取 log-ratio 的负值。它对反向 KL 无偏,但有一个致命缺陷:可能取负值,而 KL 散度始终非负。这导致其方差极高,因为正负样本会相互抵消。

$k_2$:基于 f-散度的低方差估计器

\[k_2(x) = \frac{1}{2}(\log r)^2\]

设计动机:$k_1$ 的问题在于可正可负,而 $k_2$ 通过取平方保证每个样本都是正的,直观上每个样本都在告诉你 $p$ 和 $q$ 相差多远。

为什么偏差很小? $k_2$ 本质上是一个 f-散度(f-divergence),其中 $f(x) = \frac{1}{2}(\log x)^2$。f-散度有一个优美的性质:所有可微的 f-散度在 $q \approx p$ 时,二阶展开都形如

\[D_f(p, q_\theta) = \frac{f^{\prime\prime}(1)}{2} \theta^T F \theta + O(\theta^3)\]

其中 $F$ 是 Fisher 信息矩阵。KL 散度对应 $f(x) = -\log x$,有 $f^{\prime\prime}(1) = 1$;而 $k_2$ 对应的 $f(x) = \frac{1}{2}(\log x)^2$,同样有 $f^{\prime\prime}(1) = 1$。这意味着当策略接近时,$k_2$ 与真实 KL 的行为几乎一致,偏差仅体现在高阶项。

$k_3$:控制变量法构造的「最优」估计器

\[k_3(x) = r - 1 - \log r\]

设计动机:我们想要一个既无偏又低方差的估计器。标准做法是给 $k_1$ 加一个控制变量(control variate)——一个期望为零但与 $k_1$ 负相关的量。

注意到 $\mathbb{E}_q[r - 1] = \mathbb{E}_q\left[\frac{p}{q}\right] - 1 = 1 - 1 = 0$,所以对于任意 $\lambda$,

\[k_1 + \lambda(r - 1) = -\log r + \lambda(r - 1)\]

仍然是无偏估计。

为什么选 $\lambda = 1$? 由于 $\log$ 是凹函数,有 $\log x \leq x - 1$,因此

\[k_3 = (r - 1) - \log r \geq 0\]

始终非负!这保证了每个样本都在「正向」贡献信息,消除了 $k_1$ 正负抵消的问题。

几何直觉:$k_3$ 实际上是一个 Bregman 散度。考虑凸函数 $\phi(x) = -\log x$,它在 $x=1$ 处的切线为 $y = 1 - x$。Bregman 散度定义为「函数值与切线值之差」:

\[\begin{aligned} D_\phi(r, 1) &= \phi(r) - \phi(1) - \phi'(1)(r - 1) \\ &= -\log r - 0 - (-1)(r - 1) \\ &= r - 1 - \log r \\ &= k_3. \end{aligned}\]

由于凸函数始终位于其切线上方,这个差值天然非负。更重要的是,在 $r \to 1$ 时,函数与切线「贴合」得越来越紧,差值以 $(r-1)^2$ 的二阶速度趋近于零——这正是 $k_3$ 在策略接近时方差小的根本原因。

三者对比总结

估计器 定义 设计原理 对数值的偏差 方差特性
$k_1$ $\log r$ 最朴素定义 无偏 高(可正可负)
$k_2$ $\frac{1}{2}(\log r)^2$ f-散度,二阶行为与 KL 一致 有偏(但极小) 低(恒正)
$k_3$ $r - 1 - \log r$ 控制变量 + Bregman 散度 无偏 低(恒正)

从数值估计的角度看,$k_3$ 是「无偏 + 低方差」的最优选择;但正如后文将分析的,梯度层面的故事完全不同

核心分析

估计 KL 数值时的偏差与方差

假设从 $q_\theta$ 采样来估计反向 KL $D_{\mathrm{KL}}(q_\theta | p)$:

无偏性分析

\[\begin{aligned} \mathbb{E}_{q}[k_1] &= \mathbb{E}_{q}\left[\log \frac{q}{p}\right] = D_{\mathrm{KL}}(q \| p) \quad \textbf{(无偏)}\\ \mathbb{E}_{q}[k_3] &= \mathbb{E}_{q}[r - 1 - \log r] \\ &= 1 - 1 + D_{\mathrm{KL}}(q \| p) \\ &= D_{\mathrm{KL}}(q \| p) \quad \textbf{(无偏)}\\ \mathbb{E}_{q}[k_2] &= \frac{1}{2}\mathbb{E}_{q}[(\log r)^2] \neq D_{\mathrm{KL}}(q \| p) \quad \textbf{(有偏)} \end{aligned}\]

结论:对于估计反向 KL 的数值,$k_1$ 和 $k_3$ 是无偏估计,而 $k_2$ 是有偏的。

方差特性的 Trade-off

John Schulman 的实验($q = \mathcal{N}(0,1)$,$p = \mathcal{N}(0.1,1)$,真实 KL = 0.005)表明:

估计器 bias/true stdev/true
$k_1$ 0 20
$k_2$ 0.002 1.42
$k_3$ 0 1.42

当 KL 较大时($p = \mathcal{N}(1,1)$,真实 KL = 0.5):

估计器 bias/true stdev/true
$k_1$ 0 2
$k_2$ 0.25 1.73
$k_3$ 0 1.7

核心直觉

  • $k_1 = -\log r$ 以一阶项起步,当 $r$ 接近 1 时波动较大,且可能取负值
  • $k_3 = r - 1 - \log r$ 在 $r=1$ 处是二阶小量,始终非负,因此在策略接近时方差更小
  • 但当覆盖严重不足($r$ 可能爆炸)时,$k_3$ 的方差会被权重爆炸拖累;此时 $k_1$ 反而更稳定

:若要估计正向 KL 的数值 $D_{\mathrm{KL}}(p | q) = \mathbb{E}_p[\log r]$,而只能从 $q$ 采样,可用重要性采样 $\mathbb{E}_q[r \log r]$。

估计 KL 梯度时的关键区分

这是最容易混淆、也是实践中最关键的部分。 本节先分析从 $q_\theta$ 采样(on-policy)的情形,后文将进一步讨论从行为策略 $\mu$ 采样(off-policy)时的变化。

正向与反向 KL 真梯度的推导

在分析估计器之前,我们先推导正向和反向 KL 散度对 $\theta$ 的真梯度作为参照。

记 score function $s_\theta(x) = \nabla_\theta \log q_\theta(x)$,它有一个重要性质:$\mathbb{E}_{q_\theta}[s_\theta] = 0$(因为 $\int \nabla_\theta q_\theta dx = \nabla_\theta \int q_\theta dx = \nabla_\theta 1 = 0$)。

反向 KL 的梯度

\[D_{\mathrm{KL}}(q_\theta \| p) = \int q_\theta(x) \log \frac{q_\theta(x)}{p(x)} dx\]

对 $\theta$ 求梯度(使用乘积法则):

\[\nabla_\theta D_{\mathrm{KL}}(q_\theta \| p) = \int \nabla_\theta q_\theta \cdot \log \frac{q_\theta}{p} dx + \int q_\theta \cdot \nabla_\theta \log \frac{q_\theta}{p} dx\]

利用 $\nabla_\theta q_\theta = q_\theta \cdot s_\theta$ 以及 $\nabla_\theta \log q_\theta = s_\theta$、$\nabla_\theta \log p = 0$:

\[= \mathbb{E}_q\left[s_\theta \cdot \log \frac{q_\theta}{p}\right] + \mathbb{E}_q[s_\theta] = \mathbb{E}_q\left[s_\theta \cdot \log \frac{q_\theta}{p}\right]\]

即:

\[\boxed{\nabla_\theta D_{\mathrm{KL}}(q_\theta \| p) = \mathbb{E}_q\left[s_\theta \cdot \log \frac{q_\theta}{p}\right] = -\mathbb{E}_q[s_\theta \cdot \log r]}\]

正向 KL 的梯度

\[D_{\mathrm{KL}}(p \| q_\theta) = \int p(x) \log \frac{p(x)}{q_\theta(x)} dx\]

由于 $p(x)$ 不依赖于 $\theta$:

\[\nabla_\theta D_{\mathrm{KL}}(p \| q_\theta) = \int p(x) \cdot \nabla_\theta \left(-\log q_\theta(x)\right) dx = -\mathbb{E}_p[s_\theta]\]

为了用 $q$ 的样本估计这个量,进行重要性采样:

\[-\mathbb{E}_p[s_\theta] = -\mathbb{E}_q\left[\frac{p}{q_\theta} \cdot s_\theta\right] = -\mathbb{E}_q[r \cdot s_\theta]\]

利用 $\mathbb{E}_q[s_\theta] = 0$,可改写为:

\[\boxed{\nabla_\theta D_{\mathrm{KL}}(p \| q_\theta) = \mathbb{E}_q[(1-r) \cdot s_\theta]}\]

有了这两个结果,我们就能判断各估计器的梯度期望究竟对应哪个 KL 的真梯度。

两种求导顺序

在代码实现中,存在两条路径:

  1. 先梯度、后期望:对每个样本的 $k_i(x)$ 求梯度,再对梯度求期望(Monte Carlo 估计)
  2. 先期望、后梯度:把 $\mathbb{E}_q[k_i]$ 当作损失函数,对解析表达式求梯度

在典型的深度学习代码中,我们实际执行的是「先梯度、后期望」——自动微分对每个样本计算梯度,然后在 batch 上取平均。

三种估计器的梯度推导

现在我们计算三种估计器的梯度,看它们的期望分别对应哪个 KL 的真梯度。

推导 $\nabla_\theta k_1$

\[k_1 = -\log r = -\log \frac{p(x)}{q_\theta(x)} = \log q_\theta(x) - \log p(x)\] \[\nabla_\theta k_1 = \nabla_\theta \log q_\theta(x) - \nabla_\theta \log p(x) = s_\theta - 0 = s_\theta\]

推导 $\nabla_\theta k_2$

\[k_2 = \frac{1}{2}(\log r)^2\]

由链式法则:

\[\begin{aligned} \nabla_\theta k_2 &= (\log r) \cdot \nabla_\theta(\log r) \\ &= (\log r) \cdot \nabla_\theta(\log p(x) - \log q_\theta(x)) \\ &= (\log r)(-s_\theta) \\ &= - (\log r) s_\theta. \end{aligned}\]

推导 $\nabla_\theta k_3$

\[k_3 = r - 1 - \log r\]

首先计算 $\nabla_\theta r$。由于 $r = p(x) \cdot q_\theta(x)^{-1}$:

\[\nabla_\theta r = p(x) \cdot (-1) \cdot q_\theta(x)^{-2} \cdot \nabla_\theta q_\theta(x) = -\frac{p(x)}{q_\theta(x)} \cdot \frac{\nabla_\theta q_\theta(x)}{q_\theta(x)} = -r \cdot s_\theta\]

再计算 $\nabla_\theta \log r$:

\[\nabla_\theta \log r = \frac{1}{r} \nabla_\theta r = \frac{1}{r} \cdot (-r \cdot s_\theta) = -s_\theta\]

因此:

\[\nabla_\theta k_3 = \nabla_\theta r - 0 - \nabla_\theta \log r = -r \cdot s_\theta - (-s_\theta) = (1 - r) \cdot s_\theta\]

对它们在 $q_\theta$ 下取期望:

Estimator $\mathbb{E}_{q}[\nabla_\theta k_i]$ Equals
$k_1$ $\mathbb{E}_{q}[s_\theta] = 0$ Zero (useless as loss)
$k_2$ $-\mathbb{E}_{q}[(\log r) \cdot s_\theta] = \nabla_\theta D_{\mathrm{KL}}(q \| p)$ Gradient of reverse KL
$k_3$ $\mathbb{E}_{q}[(1-r) \cdot s_\theta] = \nabla_\theta D_{\mathrm{KL}}(p \| q)$ Gradient of forward KL

关键洞察

  • $k_2$ 的梯度等价于反向 KL 的真梯度——这是优化「约束策略不偏离 ref」的正确选择
  • $k_3$ 的梯度等价于正向 KL 的真梯度——这对应「覆盖型」目标
  • $k_1$ 的梯度期望恒为零——作为 loss 反传毫无意义!

「先期望后梯度」vs「先梯度后期望」

如果从解析角度把 $\mathbb{E}_q[k_i]$ 当作一个关于 $\theta$ 的函数再求梯度(即「先期望后梯度」),那么:

\[\nabla_\theta \mathbb{E}_q[k_1] = \nabla_\theta D_{\mathrm{KL}}(q \| p)\] \[\nabla_\theta \mathbb{E}_q[k_3] = \nabla_\theta D_{\mathrm{KL}}(q \| p)\]

两者都给出反向 KL 的梯度。但在代码中直接对 $k_3$ 的样本均值调用反传时,自动微分执行的是「先梯度后期望」,得到的是 $\mathbb{E}_q[\nabla_\theta k_3]$,即正向 KL 的梯度

这个区分非常重要:同一个估计器,两种求导顺序可能给出完全不同的结果

扩展:从行为策略 $\mu$ 采样时的 KL 梯度估计

前面的分析都默认样本来自当前策略 $q_\theta$。然而在实际 RL 训练中,我们常常遇到这样的 off-policy 场景:

  • 用旧策略或混合策略生成数据,再更新当前 actor $q_\theta$
  • 离线 RL / 经验回放中,样本分布固定为 $\mu$,而不是当前的 $q_\theta$

这时,如果我们仍然希望优化反向 KL $D_{\mathrm{KL}}(q_\theta | p)$,就必须引入重要性权重

关于大模型 off-policy 场景的深入分析,可以参考我之前的博客:从两策略到三策略:LLM RL 中行为策略–参考策略不一致下的 TRPO 扩展

设置与记号

仍然沿用前文的记号,现在加入采样分布 $\mu(x)$,并定义重要性权重

\[w(x) = \frac{q_\theta(x)}{\mu(x)}\]

当从 $x \sim \mu$ 采样时,用 $w(x) k_i(x)$ 的 batch 均值作为 loss,然后调用自动微分。那么三种估计器分别给出什么梯度?

一个关键差异是:

以前的期望是 $\mathbb{E}_{q_{\theta}}[\cdot]$,分布本身依赖 $\theta$; 现在的期望是 $\mathbb{E}_{\mu}[\cdot]$,而 $\mu$ 与 $\theta$ 无关。

这会让「先期望后梯度」与「先梯度后期望」的关系发生根本变化。

关键观察:两种求导顺序的等价性

因为 $\mu$ 与 $\theta$ 无关,对任何关于 $\theta$ 可微的函数 $f_\theta(x)$,有

\[\nabla_\theta \mathbb{E}_{\mu}[f_\theta(x)] = \mathbb{E}_{\mu}[\nabla_\theta f_\theta(x)]\]

换句话说,代码中对样本均值反传(先梯度后期望)就等价于对解析形式求梯度(先期望后梯度),不会再像 on-policy 时那样分裂成两个不同的结果。

所以在 off-policy + 重要性加权 的情形下,对反向 KL 数值无偏的估计器 $k_1$ 和 $k_3$,它们的梯度期望都将对应于反向 KL 的真梯度。

这是与 on-policy 情形的根本区别。

数值层面:无偏性仍然保持

由标准的重要性采样关系 $\mathbb{E}_\mu[w \cdot f] = \mathbb{E}_{q_\theta}[f]$,有

\[\mathbb{E}_\mu[w k_1] = D_{\mathrm{KL}}(q_\theta \| p), \quad \mathbb{E}_\mu[w k_3] = D_{\mathrm{KL}}(q_\theta \| p) \quad \textbf{(无偏)}\] \[\mathbb{E}_\mu[w k_2] = \mathbb{E}_{q_\theta}[k_2] \neq D_{\mathrm{KL}}(q_\theta \| p) \quad \textbf{(有偏)}\]

这与 on-policy 情形完全一致。

梯度推导

首先计算重要性权重的梯度。由 $w = q_\theta / \mu$ 且 $\mu$ 不依赖 $\theta$:

\[\nabla_\theta w(x) = w(x) s_\theta(x)\]

结合前文已推导的 $\nabla_\theta k_i$,用乘积法则:

$\nabla_\theta(w k_1)$

\[\nabla_\theta(w k_1) = (\nabla_\theta w) k_1 + w (\nabla_\theta k_1) = w s_\theta k_1 + w s_\theta = w s_\theta (k_1 + 1)\]

$\nabla_\theta(w k_2)$

\[\nabla_\theta(w k_2) = w s_\theta k_2 + w (-\log r) s_\theta = w s_\theta (k_2 - \log r)\]

$\nabla_\theta(w k_3)$

\[\nabla_\theta(w k_3) = w s_\theta k_3 + w (1-r) s_\theta = w s_\theta (k_3 + 1 - r)\]

代入 $k_3 = r - 1 - \log r$:

\[k_3 + 1 - r = (r - 1 - \log r) + 1 - r = -\log r = k_1\]

因此有一个漂亮的简化:

\[\boxed{\nabla_\theta(w k_3) = w s_\theta k_1 = -w s_\theta \log r}\]

哪些给出无偏的反向 KL 梯度?

利用 $\mathbb{E}_\mu[w \cdot f] = \mathbb{E}_{q_\theta}[f]$ 和 $\mathbb{E}_{q_\theta}[s_\theta] = 0$:

$\mathbb{E}_\mu[\nabla_\theta(w k_1)]$

\[\mathbb{E}_\mu[w s_\theta (k_1 + 1)] = \mathbb{E}_{q}[s_\theta k_1] + \underbrace{\mathbb{E}_{q}[s_\theta]}_{=0} = \nabla_\theta D_{\mathrm{KL}}(q_\theta \| p) \quad \checkmark\]

$\mathbb{E}_\mu[\nabla_\theta(w k_2)]$

\[\mathbb{E}_\mu[w s_\theta (k_2 - \log r)] = \mathbb{E}_{q}[s_\theta (k_2 - \log r)] = \nabla_\theta \mathbb{E}_{q}[k_2]\]

这是 $\mathbb{E}_q[k_2]$ 这个 f-散度的真梯度,不是反向 KL 的梯度。

$\mathbb{E}_\mu[\nabla_\theta(\bar{w} k_2)]$($\bar{w} = \text{sg}(w)$ 表示 detach):

如果把重要性权重视为常数(在代码中 detach 掉),则:

\[\nabla_\theta(\bar{w} k_2) = \bar{w} \cdot \nabla_\theta k_2 = \bar{w} \cdot (-\log r) s_\theta\]

取期望:

\[\mathbb{E}_\mu[\bar{w} \cdot (-\log r) s_\theta] = \mathbb{E}_{q}[(-\log r) s_\theta] = \nabla_\theta D_{\mathrm{KL}}(q_\theta \| p) \quad \checkmark\]

这正是反向 KL 的真梯度!

$\mathbb{E}_\mu[\nabla_\theta(w k_3)]$

\[\mathbb{E}_\mu[w s_\theta k_1] = \mathbb{E}_{q}[s_\theta k_1] = \nabla_\theta D_{\mathrm{KL}}(q_\theta \| p) \quad \checkmark\]

总结表格

加权估计器 期望对应的目标 梯度期望对应的真梯度
$\frac{q_\theta}{\mu} k_1$ $D_{\mathrm{KL}}(q_\theta \| p)$ $\nabla_\theta D_{\mathrm{KL}}(q_\theta \| p)$(反向 KL) ✓
$\frac{q_\theta}{\mu} k_2$ $\mathbb{E}_q[k_2]$(f-散度) $\nabla_\theta \mathbb{E}_q[k_2]$,不是反向 KL ✗
$\text{sg}\left(\frac{q_\theta}{\mu}\right) k_2$ $\mathbb{E}_q[k_2]$(f-散度) $\nabla_\theta D_{\mathrm{KL}}(q_\theta \| p)$(反向 KL) ✓
$\frac{q_\theta}{\mu} k_3$ $D_{\mathrm{KL}}(q_\theta \| p)$ $\nabla_\theta D_{\mathrm{KL}}(q_\theta \| p)$(反向 KL) ✓

与 on-policy 情形的对比——一个有趣的反转

  • On-policy 时,用 $k_2$ 做 loss 的梯度是反向 KL,而 $k_1$ 的梯度期望恒为零
  • Off-policy + 重要性加权时,$\frac{q_\theta}{\mu} k_1$ 和 $\frac{q_\theta}{\mu} k_3$ 给出反向 KL 的真梯度,而 $\frac{q_\theta}{\mu} k_2$(权重参与梯度计算)不再适用
  • 但如果把重要性权重 detach 掉,$\text{sg}\left(\frac{q_\theta}{\mu}\right) k_2$ 的梯度也是反向 KL 的真梯度

三个无偏梯度估计器的方差对比

前一小节我们看到,在 off-policy + 重要性采样的设置下,下面三个 loss 都给出反向 KL 的无偏梯度估计:

\[L_1(x) = w(x) k_1(x),\qquad L_2(x) = \bar w(x) k_2(x),\qquad L_3(x) = w(x) k_3(x),\]

其中 $w = \dfrac{q_\theta}{\mu}$,$\bar w = \mathrm{sg}(w)$ 表示对权重做 stop-gradient。它们对应的梯度随机变量为:

\[g_1(x) := \nabla_\theta L_1(x),\quad g_2(x) := \nabla_\theta L_2(x),\quad g_3(x) := \nabla_\theta L_3(x).\]

利用前文已推导的结果:

  • $\nabla_\theta w = w s_\theta$;
  • $\nabla_\theta k_1 = s_\theta$;
  • $\nabla_\theta k_2 = - (\log r) s_\theta = k_1 s_\theta$;
  • $\nabla_\theta k_3 = (1-r) s_\theta$.

有:

\[\begin{aligned} g_1(x) &= \nabla_\theta(w k_1) = w s_\theta k_1 + w s_\theta = w(x) s_\theta(x)\big(k_1(x)+1\big),\\ g_2(x) &= \nabla_\theta(\bar w k_2) = \bar w \,\nabla_\theta k_2 = w \, k_1 s_\theta = w(x) s_\theta(x) k_1(x),\\ g_3(x) &= \nabla_\theta(w k_3) = w s_\theta k_3 + w(1-r)s_\theta = w s_\theta (k_3 + 1 - r) = w(x) s_\theta(x) k_1(x). \end{aligned}\]

最后一步用到了 $k_3 + 1 - r = (r - 1 - \log r) + 1 - r = -\log r = k_1$。于是出现了一个非常关键的事实:

在 off-policy + detach 权重的情况下,$\bar w k_2$ 与 $w k_3$ 的梯度完全一样:$g_2(x) \equiv g_3(x)$。

换言之,三个 loss 实际上只对应两种不同的梯度随机变量:$g_1$ 与 $g_\star := g_2 = g_3$。

下面就比较这两种随机变量的方差。

为简化记号,令

\[A(x) := w(x) s_\theta(x), \quad B(x) := k_1(x),\]

\[g_1 = A(B+1),\qquad g_\star = A B.\]

两者的期望都等于 $\nabla_\theta D_{\mathrm{KL}}(q_\theta|p)$,因此有相同的均值项。展开方差定义并相减得到:

\[\boxed{ \mathrm{Var}_\mu(g_1) - \mathrm{Var}_\mu(g_\star) = \mathbb{E}_\mu\big[A^2((B+1)^2 - B^2)\big] = \mathbb{E}_\mu\big[A^2 (2B+1)\big] }\]

也就是

\[\mathrm{Var}_\mu(g_1) - \mathrm{Var}_\mu(g_\star) = \mathbb{E}_\mu\Big[w(x)^2 s_\theta(x)^2 \big(2k_1(x)+1\big)\Big].\]

在常见的 KL 惩罚 regime 下,$q_\theta \approx p \approx \mu$,取 $r(x)=1+\varepsilon(x)$,$\lvert \varepsilon\rvert \ll1$。此时 $k_1 = -\log r \approx -\varepsilon$,因此 $2k_1+1 \approx 1 - 2\varepsilon$,主导项为正的 $O(1)$ 常数。这意味着上式右侧近似为 $\mathbb{E}_\mu[w^2 s_\theta^2] > 0$,从而 $\mathrm{Var}_\mu(g_1) > \mathrm{Var}_\mu(g_\star)$。

更具体地,一阶近似

\[k_1 \approx -\varepsilon,\quad k_1+1 \approx 1-\varepsilon.\]

于是

\[g_1(x) \approx w(x) s_\theta(x)(1 - \varepsilon(x)),\quad g_\star(x) \approx w(x) s_\theta(x)(-\varepsilon(x)).\]

核心直觉:

  • $g_1$ 包含一个量级为 $O(1)$ 的零均值噪声项 $w s_\theta$,导致单样本方差较大;
  • $g_\star$ 已把该常数噪声项消去,剩下与 $\varepsilon$ 成正比的一阶小量,方差为 $O(\varepsilon^2)$,显著更小。

小结表格:

估计器 梯度随机变量 系数量级($r\approx1$) 方差
$w k_1$ $w s_\theta (k_1+1)$ $O(1)$
$\mathrm{sg}(w) k_2$ $w s_\theta k_1$ $O(\varepsilon)$
$w k_3$ $w s_\theta k_1$ $O(\varepsilon)$

结论:在 off-policy + 重要性采样的设置下,给出反向 KL 真梯度的无偏估计器有三个:$w k_1,\; \bar w k_2,\; w k_3$。其中 $\bar w k_2$ 与 $w k_3$ 在梯度层面完全等价——同均值、同方差、同高阶矩;相比之下,$w k_1$ 的梯度多了一个零均值的常数噪声项 $w s_\theta$,在典型的 KL 惩罚 regime 下其方差大约高一个量级。

实践建议:若在 off-policy 场景下优化反向 KL,首选 $w k_3$ 或 $\mathrm{sg}(w) k_2$(两者梯度等价且方差低);$w k_1$ 虽无偏但方差高,可作为备选并需配合 clipping/正则化。

极度 off-policy 时的警示

当 $\mu$ 与 $q_\theta$ 差异很大——比如 $\mu$ 在 $q_\theta$ 的高密度区域几乎没有采样,或 $w = q_\theta / \mu$ 在尾部爆炸——任何基于 $\frac{q_\theta}{\mu}$ 的方法都会遭遇严重的方差问题。此时 $\frac{q_\theta}{\mu} k_3$(或 $\mathrm{sg}\left(\frac{q_\theta}{\mu}\right) k_2$)相对 $\frac{q_\theta}{\mu} k_1$ 的优势不再有理论保证,需要结合 clipping、正则化等策略综合处理。

不过,在 RL 实践中我们通常会控制 KL 约束、限制 off-policy 程度(比如使用近邻策略 $\mu = q_{\theta_\text{old}}$),在这个常见的 regime 里,可以相当有信心地说:

如果已经决定用 off-policy + 重要性采样来优化反向 KL,推荐使用 $\dfrac{q_\theta}{\mu} k_3$ 或 $\mathrm{sg}\left(\dfrac{q_\theta}{\mu}\right) k_2$(两者梯度等价且方差低);相较之下,$\dfrac{q_\theta}{\mu} k_1$ 方差更高。

这就是为什么 DeepSeek v3.2 技术报告中使用的是 $\frac{q_\theta}{\mu} k_3$ 作为 off-policy KL 惩罚的估计器。

图片来源:DeepSeek v3.2 技术报告 3.1 章节

小结

  • 从行为策略 $\mu$ 采样时,自然的 off-policy KL 估计为 $\frac{q_\theta}{\mu} k_i$。
  • 数值上,$\frac{q_\theta}{\mu} k_1$ 与 $\frac{q_\theta}{\mu} k_3$ 仍然是反向 KL 的无偏估计。
  • 梯度上,因为 $\mu$ 与 $\theta$ 无关,「先期望后梯度」与「先梯度后期望」等价:
    • $\mathbb{E}_\mu[\nabla_\theta(\frac{q_\theta}{\mu} k_1)] = \nabla_\theta D_{\mathrm{KL}}(q_\theta | p)$
    • $\mathbb{E}_\mu[\nabla_\theta(\frac{q_\theta}{\mu} k_3)] = \nabla_\theta D_{\mathrm{KL}}(q_\theta | p)$
    • $\mathbb{E}_\mu[\nabla_\theta(\frac{q_\theta}{\mu} k_2)] \neq \nabla_\theta D_{\mathrm{KL}}(q_\theta | p)$
  • 方差上,$\frac{q_\theta}{\mu} k_3$ 与 $\mathrm{sg}\left(\frac{q_\theta}{\mu}\right) k_2$ 的梯度完全相同(两者都是 $w s_\theta k_1$),在统计性质上等价。相比之下,$\frac{q_\theta}{\mu} k_1$ 的梯度多了一个零均值噪声项 $w s_\theta$,在 $q_\theta \approx p \approx \mu$ 的典型场景下方差显著更高。

梯度估计总览

下表汇总了 on-policy 与 off-policy 两种场景下,各估计器的梯度期望及其对应的优化目标:

采样来源 Loss $\nabla_\theta$ Loss 的期望 对应的优化目标 能否用于优化反向 KL?
$q$ (on) $k_1$ $\mathbb{E}_q[s_\theta] = 0$ 无(梯度恒为零)
$q$ (on) $k_2$ $\nabla_\theta D_{\mathrm{KL}}(q \| p)$ 反向 KL
$q$ (on) $k_3$ $\nabla_\theta D_{\mathrm{KL}}(p \| q)$ 正向 KL
$\mu$ (off) $\frac{q}{\mu} k_1$ $\nabla_\theta D_{\mathrm{KL}}(q \| p)$ 反向 KL ✓(但方差较高)
$\mu$ (off) $\frac{q}{\mu} k_2$ $\nabla_\theta \mathbb{E}_q[k_2]$ f-散度(非 KL)
$\mu$ (off) $\text{sg}\left(\frac{q}{\mu}\right) k_2$ $\nabla_\theta D_{\mathrm{KL}}(q \| p)$ 反向 KL
$\mu$ (off) $\frac{q}{\mu} k_3$ $\nabla_\theta D_{\mathrm{KL}}(q \| p)$ 反向 KL ✓(推荐,低方差)

关键结论

  1. On-policy 优化反向 KL:唯一正确选择是 $k_2$
  2. Off-policy 优化反向 KL:有三个正确选项:
    • $\frac{q}{\mu} k_1$:无偏但方差较高
    • $\text{sg}\left(\frac{q}{\mu}\right) k_2$:无偏,与 $\frac{q}{\mu} k_3$ 梯度完全等价
    • $\frac{q}{\mu} k_3$:无偏且方差更低(与上一项等价,均为推荐选择)
  3. $\frac{q}{\mu} k_2$(权重参与梯度)在 off-policy 下失效:这是一个容易被忽视的陷阱

RL 实践指南

KL 作为 Reward 惩罚(不需要梯度)

当 KL 仅作为标量惩罚加入 reward shaping 时,我们只需要准确的数值估计,不需要反传梯度。

推荐

  • 使用 $k_1$$k_3$(两者对反向 KL 数值均无偏)
  • 当策略已接近参考策略时,$k_3$ 往往更低方差
  • 覆盖不足或尾部错配明显时,$k_1$ 更稳健
  • Off-policy 时加重要性权重 $\frac{q_\theta}{\mu}$ 即可

:若想施加正向 KL 惩罚(偏向覆盖行为分布),数值上可用 $\mathbb{E}_q[r \log r]$ 或(若可从 $p$ 采样)$\mathbb{E}_p[\log r]$。

KL 作为 Loss(需要梯度回传)

当 KL 作为 loss 的一部分参与反传时,必须考虑梯度的正确性。

On-policy:优化反向 KL(最常见场景)

目标:控制 actor 不偏离 reference policy。

正确做法:使用 $k_2$ 作为 loss。

\[\mathcal{L}_{k_2} = \frac{1}{2}(\log r)^2\]

其梯度期望 $\mathbb{E}_q[\nabla k_2] = \nabla_\theta D_{\mathrm{KL}}(q | p)$ 正是反向 KL 的真梯度。

On-policy:优化正向 KL(覆盖型场景)

目标:让策略覆盖参考分布的支撑集(如离线 RL、模仿学习等)。

正确做法:使用 $k_3$ 作为 loss。

\[\mathbb{E}_q[\nabla k_3] = \mathbb{E}_q[(1-r) \cdot s_\theta] = \nabla_\theta D_{\mathrm{KL}}(p \| q)\]

直接对 $k_3$ 的样本均值调用反传,自动微分计算的就是 $\mathbb{E}_q[\nabla_\theta k_3]$,即正向 KL 的梯度,无需额外处理。

Off-policy:优化反向 KL

目标:数据来自行为策略 $\mu$,仍希望优化反向 KL。

推荐做法:使用 $\dfrac{q_\theta}{\mu} k_3$$\mathrm{sg}\left(\dfrac{q_\theta}{\mu}\right) k_2$ 作为 loss(两者梯度完全等价)。

\[\mathcal{L} = \dfrac{q_\theta(x)}{\mu(x)} \cdot \left(\dfrac{p(x)}{q_\theta(x)} - 1 - \log \dfrac{p(x)}{q_\theta(x)}\right)\]

\[\mathcal{L} = \mathrm{sg}\left(\dfrac{q_\theta(x)}{\mu(x)}\right) \cdot \dfrac{1}{2}\left(\log \dfrac{p(x)}{q_\theta(x)}\right)^2\]
  • 梯度无偏
  • 在 $q_\theta \approx p$ 时方差都显著更低

备选方案:使用 $\dfrac{q_\theta}{\mu} k_1$(梯度同样无偏,但方差更高)

避免:使用 $\dfrac{q_\theta}{\mu} k_2$(权重参与梯度计算)——梯度有偏,不是反向 KL 的正确方向

一份「拿来就用」的对照表

目标 采样来源 用于数值 用于梯度
反向 KL $D_{\mathrm{KL}}(q \| p)$ $q$(on-policy) $k_1$ 或 $k_3$(无偏) $k_2$
反向 KL $D_{\mathrm{KL}}(q \| p)$ $\mu$(off-policy) $\frac{q}{\mu} k_1$ 或 $\frac{q}{\mu} k_3$(无偏) $\frac{q}{\mu} k_3$(推荐)或 $\text{sg}\left(\frac{q}{\mu}\right) k_2$
正向 KL $D_{\mathrm{KL}}(p \| q)$ $q$ $\mathbb{E}_q[r\log r]$ $k_3$

常见实现陷阱

陷阱 1:把 $k_1$ 直接当 loss 反传(on-policy)

$k_1$ 的梯度期望恒为零($\mathbb{E}_q[\nabla k_1] = \mathbb{E}_q[s_\theta] = 0$),作为 loss 完全无效。

解决:reward shaping 用 $k_1$ 或 $k_3$(不需要梯度),loss 用 $k_2$ 或 $k_3$。

陷阱 2:混淆 $k_3$ 的「数值无偏性」与「梯度对应的目标」

$k_3$ 对反向 KL 的数值是无偏估计,但它的梯度对应的是正向 KL。如果你的目标是优化反向 KL,却用 $k_3$ 作为 loss,实际上在优化正向 KL。

解决:明确你的优化目标。优化反向 KL 用 $k_2$;优化正向 KL 才用 $k_3$。

陷阱 3:$r$ 重尾导致方差爆炸

当策略与参考分布差异过大时,$r = p/q$ 可能出现极端值,导致 $k_3$ 的方差爆炸。

解决:控制 KL 约束,或对 $r$ 进行 clipping。

陷阱 4:离策略下仍用 $k_2$ 或 $\frac{q_\theta}{\mu} k_2$(权重参与梯度)

在 on-policy 下,$k_2$ 是优化反向 KL 的正确选择。但如果数据来自 $\mu \neq q_\theta$:

  • 直接用 $k_2$(不加权):期望不是在 $q_\theta$ 下取的,估计器完全失效
  • 用 $\frac{q_\theta}{\mu} k_2$(权重参与梯度计算):梯度有偏,不是反向 KL 的真梯度

解决:离策略场景下,改用 $\frac{q_\theta}{\mu} k_3$(推荐)、$\text{sg}\left(\frac{q_\theta}{\mu}\right) k_2$(将权重 detach)或 $\frac{q_\theta}{\mu} k_1$。

陷阱 5:对重要性权重的 detach 处理不当

代码实现中,$w = q_\theta / \mu$ 通常通过 log_prob_q - log_prob_mu 再取 exp 计算得到。是否对 $w$ 进行 detach 会导致完全不同的结果:

  • 使用 $k_1$ 或 $k_3$ 时:$w$ 应该参与梯度计算(不要 detach),否则会丢失 $\nabla_\theta w = w s_\theta$ 这一项,导致梯度错误
  • 使用 $k_2$ 时:$w$ 应该被 detach,这样才能得到反向 KL 的真梯度。如果让 $w$ 参与梯度计算,得到的是 f-散度的梯度,不是反向 KL

总结:选择不同的估计器时,要注意匹配正确的 detach 策略。

总结

一句话记忆

  • 只要数值(KL 作为 reward 惩罚):选 $k_1$ 或 $k_3$(均对反向 KL 无偏);off-policy 时加重要性权重即可
  • 需要梯度(KL 作为 loss)
    • On-policy:优化反向 KL → 用 $k_2$;优化正向 KL → 用 $k_3$
    • Off-policy:优化反向 KL → 用 $\frac{q_\theta}{\mu} k_3$ 或 $\text{sg}\left(\frac{q_\theta}{\mu}\right) k_2$(两者梯度等价,均为无偏 + 低方差的推荐选择)

把「从谁采样」、「估计谁的值」、「对谁求梯度」这三个问题捋清楚,三种估计器就不再让人混淆了。特别注意:on-policy 和 off-policy 下,优化反向 KL 的正确选择是不同的——前者用 $k_2$,后者用 $\frac{q_\theta}{\mu} k_3$ 或 $\text{sg}\left(\frac{q_\theta}{\mu}\right) k_2$。

参考文献

  1. Dibya Ghosh. “KL Divergence for Machine Learning”. https://dibyaghosh.com/blog/probability/kldivergence

  2. John Schulman. “Approximating KL Divergence”. https://joschu.net/blog/kl-approx.html

  3. Verl Documentation. “Proximal Policy Optimization (PPO)”. https://verl.readthedocs.io/en/latest/algo/ppo.html

  4. 初七123334. RLHF/RLVR 训练中的 KL 近似方法浅析(k1 / k2 / k3). https://zhuanlan.zhihu.com/p/1966872846212010437

  5. Kezhao Liu, Jason Klein Liu, Mingtao Chen, Yiming Liu. “Rethinking KL Regularization in RLHF: From Value Estimation to Gradient Optimization”. https://arxiv.org/abs/2510.01555

  6. Yifan Zhang, Yiping Ji, Gavin Brown, et al. “On the Design of KL-Regularized Policy Gradient Algorithms for LLM Reasoning”. https://arxiv.org/abs/2505.17508

@misc{WangZhang2025KLEstimators,
  author       = {Wang, Xihuai and Zhang, Shao},
  title        = {Understanding {KL} Divergence Estimators in {RL}: From Value Approximation to Gradient Estimation},
  year         = {2025},
  month        = dec,
  day          = {01},
  url          = {https://xihuai18.github.io/reinforcement-learning/2025/12/01/kl-estimators-en.html}
}