相对熵统治一切:理解 KL散度才能理解大模型

1. 引言

KL 散度(Kullback–Leibler divergence)几乎贯穿了现代机器学习的所有关键环节:
从最大似然估计(MLE)、交叉熵损失、变分推断,到深度生成模型、RLHF、PPO、DPO、再到最近针对长序列的 GRPO,本质上都在围绕“如何度量两个概率分布的差异”展开,而 KL 散度是最核心的工具。

要真正理解大模型训练与对齐,必须把 KL 的前世今生、数学结构和工程后果全部吃透。

在这里插入图片描述


2. 数学定义与基本性质

2.1 离散情形

给定两个离散分布 (P(x)) 与 (Q(x)),它们在同一支持集上的 KL 散度定义为:

DKL(P∥Q)=∑xP(x)log⁡P(x)Q(x) D_{\text{KL}}(P \parallel Q) = \sum_{x} P(x) \log \frac{P(x)}{Q(x)} DKL(PQ)=xP(x)logQ(x)P(x)

常见对数底:

  • 信息论语境:log⁡2\log_2log2,单位是 bit
  • 统计/机器学习:自然对数 (\log),单位是 nat

2.2 连续情形

连续随机变量情形为:

DKL(P∥Q)=∫p(x)log⁡p(x)q(x),dx D_{\text{KL}}(P \parallel Q) = \int p(x) \log \frac{p(x)}{q(x)} , dx DKL(PQ)=p(x)logq(x)p(x),dx

其中 (p,q) 是对应的密度函数。

2.3 基本性质

  1. 非负性

DKL(P∥Q)≥0 D_{\text{KL}}(P \parallel Q) \ge 0 DKL(PQ)0

等号仅当 (P = Q) 几乎处处成立。
这源自 Jensen 不等式,对应“信息不增加”的直觉。

  1. 不对称性

DKL(P∥Q)≠DKL(Q∥P) D_{\text{KL}}(P \parallel Q) \neq D_{\text{KL}}(Q \parallel P) DKL(PQ)=DKL(QP)

这点在工程上非常重要:

  • DKL(P∣Q)D_{\text{KL}}(P|Q)DKL(PQ):真实分布是 P,用 Q近似
  • DKL(Q∣P)D_{\text{KL}}(Q|P)DKL(QP):模型分布是 Q,用 P做“约束”

在训练中选择哪个方向,会直接影响模型行为(例如 mode covering vs mode seeking)。

  1. 非度量

KL 不满足对称性,也不满足三角不等式,因此不是严格意义上的“距离”,但在信息论和统计上是最自然的“相对熵”。


3. 与熵、交叉熵的关系

3.1 熵(Entropy)

对分布 § 的熵定义为:

H(P)=−∑xP(x)log⁡P(x) H(P) = -\sum_x P(x)\log P(x) H(P)=xP(x)logP(x)

它度量的是“系统自身的不确定性”。

3.2 交叉熵(Cross Entropy)

给定真实分布 § 和模型分布 (Q):

H(P,Q)=−∑xP(x)log⁡Q(x) H(P, Q) = -\sum_x P(x)\log Q(x) H(P,Q)=xP(x)logQ(x)

解释为:如果真实样本来自 P,但你用 Q作为编码分布,那么平均每个样本要花多少“比特成本”。

3.3 三者关系:一个关键恒等式

H(P,Q)=H(P)+DKL(P∥Q) H(P, Q) = H(P) + D_{\text{KL}}(P \parallel Q) H(P,Q)=H(P)+DKL(PQ)

因为 (H§) 与模型参数无关,在训练中最小化交叉熵 (H(P,Q)) 等价于最小化 DKL(P∥Q)D_{\text{KL}}(P \parallel Q)DKL(PQ)
这就是为什么交叉熵损失 = 最大似然估计(MLE)的根本原因。


4. KL 散度的历史轨迹

4.1 前史:Fisher 与似然思想(1920s–1930s)

Fisher 引入了:

  • 对数似然(log-likelihood)
  • Fisher 信息量(Fisher Information)

本质问题是:如何用概率模型去刻画数据生成过程,并量化“信息量”与“模型差异”。
这些思想为 KL 提供了数学基础。

4.2 Shannon 的信息论(1948)

Shannon 在《A Mathematical Theory of Communication》中提出:

  • 熵(Entropy)
  • 交叉熵(Cross Entropy)的雏形
  • “平均编码长度”这一核心度量

KL 后来可以被解释为:

如果真实分布是 §,却用 (Q) 设计编码,那么平均每个符号会多消耗多少比特。

这就是 KL 的信息论语义。

4.3 Kullback & Leibler 的正式提出(1951)

Kullback 和 Leibler 在论文 On Information and Sufficiency 中正式给出 KL 形式,并命名为“判别信息(discrimination information)”,用来衡量:

在真实分布为 § 时,用假设分布 (Q) 进行统计判别或编码,损失了多少信息。

至此,KL 从直觉走向了明确的数学对象。

4.4 贝叶斯统计与大偏差理论(1950s–1970s)

在此阶段,KL 被广泛用于:

  • 大偏差理论(Sanov 定理):概率偏离真实分布的指数衰减速率由 KL 控制
  • 假设检验与错误概率界限(Chernoff bound)
  • 贝叶斯更新的收敛分析

KL 成为“概率分布偏离”的标准度量。

4.5 机器学习与信息几何(1970s–1990s)

  • 信息几何(Amari):概率分布形成流形,Fisher 信息给出度量张量,KL 是自然的“距离函数”的一阶近似。
  • EM 算法:可以解释为在隐变量模型上迭代地降低某个 KL(变分下界)。

这使 KL 成为许多学习算法的隐性核心。

4.6 现代深度学习:VI、VAE、GAN(1990s–2010s)

  • 变分推断(VI):优化目标通常是 ELBO=Eq[log⁡p(x,z)]−Eq[log⁡q(z)]\text{ELBO} = \mathbb{E}_q[\log p(x,z)] - \mathbb{E}_q[\log q(z)]ELBO=Eq[logp(x,z)]Eq[logq(z)],其差异部分是 KL。
  • VAE:损失 = 重构误差 + KL 约束 DKL(q(z∣x)∥p(z))D_{\text{KL}}(q(z|x)\parallel p(z))DKL(q(zx)p(z))

KL 完全进入主流深度生成建模。

4.7 大模型与 RLHF:PPO、DPO、GRPO(2017–至今)

  • PPO:在策略优化目标中显式引入 KL 惩罚 βDKL(πθ∥πold)\beta D_{\text{KL}}(\pi_\theta \parallel \pi_{\text{old}})βDKL(πθπold),控制策略步长;
  • RLHF:用 KL 限制模型相对 SFT 模型的偏移量,防止对齐训练把模型“拉崩”;
  • DPO:通过相对 log-prob 差异间接体现 KL;
  • GRPO:在长序列场景下,主动绕开“序列级 KL 惩罚”,改为 token 级比值约束。

此时 KL 已经成为“大模型训练与对齐稳定性”的中心对象。


5. KL 在语言模型中的精确定义

5.1 自回归语言模型的概率结构

自回归模型对一个序列 x1:Tx_{1:T}x1:T 的概率:

πθ(x1:T)=∏t=1Tπθ(xt∣x<t) \pi_\theta(x_{1:T}) = \prod_{t=1}^{T} \pi_\theta(x_t \mid x_{<t}) πθ(x1:T)=t=1Tπθ(xtx<t)

对应 log-prob:

log⁡πθ(x1:T)=∑t=1Tlog⁡πθ(xt∣x<t) \log \pi_\theta(x_{1:T}) = \sum_{t=1}^{T} \log \pi_\theta(x_t \mid x_{<t}) logπθ(x1:T)=t=1Tlogπθ(xtx<t)

5.2 “序列 KL = token KL 的累加”

对于两个语言模型 πθ\pi_\thetaπθπold\pi_{\text{old}}πold,在同一数据分布上,它们的序列级 KL:

DKL(πθ∥πold)=E∗x∗1:T∼data[log⁡πθ(x1:T)πold(x1:T)] D_{\text{KL}}(\pi_\theta \parallel \pi_{\text{old}}) = \mathbb{E}*{x*{1:T}\sim \text{data}} \left[ \log \frac{\pi_\theta(x_{1:T})}{\pi_{\text{old}}(x_{1:T})} \right] DKL(πθπold)=Ex1:Tdata[logπold(x1:T)πθ(x1:T)]

代入链式分解,得到:

DKL(πθ∥πold)=∑t=1TE∗x∗1:T∼data[log⁡πθ(xt∣x<t)πold(xt∣x<t)] D_{\text{KL}}(\pi_\theta \parallel \pi_{\text{old}}) = \sum_{t=1}^{T} \mathbb{E}*{x*{1:T}\sim \text{data}} \left[ \log \frac{\pi_\theta(x_t \mid x_{<t})}{\pi_{\text{old}}(x_t \mid x_{<t})} \right] DKL(πθπold)=t=1TEx1:Tdata[logπold(xtx<t)πθ(xtx<t)]

序列 KL 等于所有 token 处 KL 的加和
这直接导致一个重要后果:序列越长,KL 越容易“线性放大”。


6. KL 在监督训练与 RLHF 中的截然不同角色

6.1 监督训练:KL / 交叉熵是“目标”

在监督学习SFTSFTSFT中,我们最小化交叉熵:

L∗CE=−∑xP∗data(x)log⁡Qθ(x)=H(Pdata,Qθ) \mathcal{L}*{\text{CE}} = -\sum_x P*{\text{data}}(x)\log Q_\theta(x) = H(P_{\text{data}}, Q_\theta) LCE=xPdata(x)logQθ(x)=H(Pdata,Qθ)

等价于最小化:

DKL(Pdata∥Qθ) D_{\text{KL}}(P_{\text{data}}\parallel Q_\theta) DKL(PdataQθ)

此时:

  • KL 大 → 模型与数据分布偏差大
  • 训练目标就是减小 KL
  • KL 越大,梯度越大,更新越多

KL 在这里是“优化目标”。

6.2 RLHF / PPO:KL 是“惩罚项”

在 RLHF 中(以 PPO 型为例),目标通常是:

max⁡θ;E[r(x1:T)]∗β,DKL(πθ∥πref) \max_\theta ; \mathbb{E}[r(x_{1:T})]* \beta , D_{\text{KL}}(\pi_\theta \parallel \pi_{\text{ref}}) θmax;E[r(x1:T)]β,DKL(πθπref)

或近似成 token-level 的 ratio clipping 形式。

此时:

  • reward 项推动模型偏离参考分布,朝“高奖励”方向移动
  • KL 惩罚项阻止模型偏离参考分布太远

因此在 RLHF 中:

  • KL 大 → 惩罚大 → 抵消 reward 的梯度 → 真正的更新反而变小
  • 尤其在长序列时,由于 KL 是对 token KL 的累加,惩罚会随长度线性放大

所以在 RLHF 中说“KL 越大,模型更新越大”是不对的;
事实上恰好相反:KL 越大,模型越“被拉回原位”


7. 长序列中的 KL:结构性问题

当序列长度从几百 token 扩展到 8k、32k、乃至 100k 以上,KL 在 RLHF 中出现了几个结构性问题:

7.1 序列 KL 线性放大

如前所述:

DKLseq=∑t=1TDKL,t D_{\text{KL}}^{\text{seq}} = \sum_{t=1}^{T} D_{\text{KL}, t} DKLseq=t=1TDKL,t

即使每个 token 的 KL 很小(例如 0.01),当 (T=8000) 时:

DKLseq≈0.01×8000=80 D_{\text{KL}}^{\text{seq}} \approx 0.01 \times 8000 = 80 DKLseq0.01×8000=80

如果 KL 权重 (\beta) 在 0.1~1 量级,这一惩罚在目标函数中往往远大于 reward 项,导致:

  • 更新方向被 KL 惩罚主导
  • 模型几乎被“钉死”在参考策略附近
  • 长序列上的 RL 学习基本停滞

7.2 奖励信号被 KL 吞噬

reward 一般是序列级信号,量级有限(例如 1~5),
但 KL 会随着长度线性增长,最终 reward 的贡献被 KL 完全淹没。

结果是:

  • RLHF 不再真正“优化行为”,而是仅仅在“防止偏移”
  • 尤其在长上下文推理任务中,关键逻辑无法获得足够梯度

7.3 KL 不区分重要 token 与冗余 token

KL 是对整个分布的距离度量,不关心:

  • 哪些 token 是逻辑关键
  • 哪些 token 只是风格或废话
  • 哪些部分应该允许更自由地偏移

在长序列中,这会产生两个副作用:

  • 前缀和模板化文本被过度保护
  • 冗余解释、冗长铺垫被强化
  • 关键推理链由于 KL 惩罚而难以大幅改变

这正是很多长序列大模型“话变多、信息密度下降、但推理不见得更好”的一个重要原因。


8. DPO 与 KL:从显式惩罚到隐式对比

DPO(Direct Preference Optimization)是对 RLHF 的一种改写,它绕过显式 reward model 和 PPO,直接在偏好对(preferred vs rejected)上优化:

log⁡σ(β[log⁡πθ(y+∣x)−log⁡πθ(y−∣x)∗(log⁡πref(y+∣x)−log⁡πref(y−∣x))])  \log \sigma\Big( \beta \big[ \log\pi_\theta(y^+|x) - \log\pi_\theta(y^-|x)* (\log\pi_{\text{ref}}(y^+|x) - \log\pi_{\text{ref}}(y^-|x)) \big] \Big)\ logσ(β[logπθ(y+x)logπθ(yx)(logπref(y+x)logπref(yx))]) 

其中隐含了相对 KL 约束,使得模型偏离参考模型不至于过大。

虽然 DPO 的形式看上去不再显式出现 (D_{\text{KL}}),但本质上仍在通过 log-prob 差异对模型进行“相对于参考模型的对比学习”。
在长序列上,它仍然继承了两个问题:

  • log-prob 是对全序列 token 的加和,长序列差异被稀释;
  • 偏好标签通常是“整段级别”,导致奖励归因扩散(credit diffusion)。

换言之,DPO 相当于把 KL 惩罚“变形”了,而不是从根本上解决长序列 KL 带来的信用分配与尺度问题。


9. GRPO:在长序列上绕开“序列级 KL”的尝试

GRPO(Generalized Reweighted PPO)的关键思想,是从结构上削弱甚至绕开“序列级 KL 惩罚”带来的长序列不稳定。

核心变化可以概括为三点(简化视角):

  1. 不再使用显式的序列级 KL 惩罚项
    改为基于 token-level 的比值约束(ratio clipping),从而避免 KL 随序列长度线性累加。

  2. 奖励重加权(reweighting),强调关键 token
    将序列级奖励通过一定的规则(例如按梯度贡献、位置重要性等)分配到 token 上,避免 reward 被均匀摊薄在所有 token 上。

  3. 移除价值函数依赖
    PPO 依赖 value function,长序列会导致价值估计噪声和累积误差,而 GRPO 从设计上弱化了这部分依赖,减少长序列下的估计偏差。

从 KL 的角度看,GRPO 的本质是:

将“全序列 KL 约束”退化为“局部 token-level 稳定约束”,
不再允许 KL 随长度任意线性放大,从而恢复长序列上的可学习性。


10. 总结:KL 散度在大模型时代的角色

从历史演变与当前实践来看的话,KL 散度在大模型体系中的角色可以概括为:

  1. 作为监督训练的本体目标

    • 通过交叉熵最小化,实现对数据分布的逼近
    • 本质是最小化 DKL(Pdata∥Qθ)D_{\text{KL}}(P_{\text{data}}\parallel Q_\theta)DKL(PdataQθ)
  2. 作为生成模型与变分推断的约束项

    • VAE 中控制后验与先验差异
    • 各类 VI 框架中保证近似分布合理
  3. 作为策略优化 / 对齐中的“安全闸门”

    • PPO/RLHF 用 KL 控制模型偏离 SFT/参考策略的程度
    • DPO 用相对 log-prob 间接体现 KL 限制
  4. 在长序列场景中成为“瓶颈”

    • 序列 KL = token KL 累加 → 长度越长惩罚越大
    • 奖励信号被 KL 吞没
    • 奖励归因在长序列上严重扩散
  5. 推动新算法跳出“序列级 KL”的范式

    • GRPO 等方法通过 token-level 比值约束与奖励重加权,削弱序列 KL 的负面效应
    • 长序列 RLHF 不再被 KL 线性放大的结构性问题锁死

从“度量两个分布差异的相对熵”,到“控制大模型对齐训练稳定性的核心约束”,KL 散度几乎贯穿了现代机器学习和大模型技术的全部脉络。
理解它的数学形式、历史来源和在长序列上的结构性后果,是理解 RLHF、DPO、GRPO 等一系列算法设计的前提。


更多推荐