相对熵统治一切:理解 KL散度才能理解大模型
相对熵统治一切:理解 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)logP(x)Q(x) D_{\text{KL}}(P \parallel Q) = \sum_{x} P(x) \log \frac{P(x)}{Q(x)} DKL(P∥Q)=x∑P(x)logQ(x)P(x)
常见对数底:
- 信息论语境:log2\log_2log2,单位是 bit
- 统计/机器学习:自然对数 (\log),单位是 nat
2.2 连续情形
连续随机变量情形为:
DKL(P∥Q)=∫p(x)logp(x)q(x),dx D_{\text{KL}}(P \parallel Q) = \int p(x) \log \frac{p(x)}{q(x)} , dx DKL(P∥Q)=∫p(x)logq(x)p(x),dx
其中 (p,q) 是对应的密度函数。
2.3 基本性质
- 非负性
DKL(P∥Q)≥0 D_{\text{KL}}(P \parallel Q) \ge 0 DKL(P∥Q)≥0
等号仅当 (P = Q) 几乎处处成立。
这源自 Jensen 不等式,对应“信息不增加”的直觉。
- 不对称性
DKL(P∥Q)≠DKL(Q∥P) D_{\text{KL}}(P \parallel Q) \neq D_{\text{KL}}(Q \parallel P) DKL(P∥Q)=DKL(Q∥P)
这点在工程上非常重要:
- DKL(P∣Q)D_{\text{KL}}(P|Q)DKL(P∣Q):真实分布是 P,用 Q近似
- DKL(Q∣P)D_{\text{KL}}(Q|P)DKL(Q∣P):模型分布是 Q,用 P做“约束”
在训练中选择哪个方向,会直接影响模型行为(例如 mode covering vs mode seeking)。
- 非度量
KL 不满足对称性,也不满足三角不等式,因此不是严格意义上的“距离”,但在信息论和统计上是最自然的“相对熵”。
3. 与熵、交叉熵的关系
3.1 熵(Entropy)
对分布 § 的熵定义为:
H(P)=−∑xP(x)logP(x) H(P) = -\sum_x P(x)\log P(x) H(P)=−x∑P(x)logP(x)
它度量的是“系统自身的不确定性”。
3.2 交叉熵(Cross Entropy)
给定真实分布 § 和模型分布 (Q):
H(P,Q)=−∑xP(x)logQ(x) H(P, Q) = -\sum_x P(x)\log Q(x) H(P,Q)=−x∑P(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(P∥Q)
因为 (H§) 与模型参数无关,在训练中最小化交叉熵 (H(P,Q)) 等价于最小化 DKL(P∥Q)D_{\text{KL}}(P \parallel Q)DKL(P∥Q)。
这就是为什么交叉熵损失 = 最大似然估计(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[logp(x,z)]−Eq[logq(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(z∣x)∥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=1∏Tπθ(xt∣x<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=1∑Tlogπθ(xt∣x<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)=E∗x∗1:T∼data[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=1∑TE∗x∗1:T∼data[logπold(xt∣x<t)πθ(xt∣x<t)]
即序列 KL 等于所有 token 处 KL 的加和。
这直接导致一个重要后果:序列越长,KL 越容易“线性放大”。
6. KL 在监督训练与 RLHF 中的截然不同角色
6.1 监督训练:KL / 交叉熵是“目标”
在监督学习SFTSFTSFT中,我们最小化交叉熵:
L∗CE=−∑xP∗data(x)logQθ(x)=H(Pdata,Qθ) \mathcal{L}*{\text{CE}} = -\sum_x P*{\text{data}}(x)\log Q_\theta(x) = H(P_{\text{data}}, Q_\theta) L∗CE=−x∑P∗data(x)logQθ(x)=H(Pdata,Qθ)
等价于最小化:
DKL(Pdata∥Qθ) D_{\text{KL}}(P_{\text{data}}\parallel Q_\theta) DKL(Pdata∥Qθ)
此时:
- 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=1∑TDKL,t
即使每个 token 的 KL 很小(例如 0.01),当 (T=8000) 时:
DKLseq≈0.01×8000=80 D_{\text{KL}}^{\text{seq}} \approx 0.01 \times 8000 = 80 DKLseq≈0.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πθ(y−∣x)∗(logπref(y+∣x)−logπref(y−∣x))])
其中隐含了相对 KL 约束,使得模型偏离参考模型不至于过大。
虽然 DPO 的形式看上去不再显式出现 (D_{\text{KL}}),但本质上仍在通过 log-prob 差异对模型进行“相对于参考模型的对比学习”。
在长序列上,它仍然继承了两个问题:
- log-prob 是对全序列 token 的加和,长序列差异被稀释;
- 偏好标签通常是“整段级别”,导致奖励归因扩散(credit diffusion)。
换言之,DPO 相当于把 KL 惩罚“变形”了,而不是从根本上解决长序列 KL 带来的信用分配与尺度问题。
9. GRPO:在长序列上绕开“序列级 KL”的尝试
GRPO(Generalized Reweighted PPO)的关键思想,是从结构上削弱甚至绕开“序列级 KL 惩罚”带来的长序列不稳定。
核心变化可以概括为三点(简化视角):
-
不再使用显式的序列级 KL 惩罚项
改为基于 token-level 的比值约束(ratio clipping),从而避免 KL 随序列长度线性累加。 -
奖励重加权(reweighting),强调关键 token
将序列级奖励通过一定的规则(例如按梯度贡献、位置重要性等)分配到 token 上,避免 reward 被均匀摊薄在所有 token 上。 -
移除价值函数依赖
PPO 依赖 value function,长序列会导致价值估计噪声和累积误差,而 GRPO 从设计上弱化了这部分依赖,减少长序列下的估计偏差。
从 KL 的角度看,GRPO 的本质是:
将“全序列 KL 约束”退化为“局部 token-level 稳定约束”,
不再允许 KL 随长度任意线性放大,从而恢复长序列上的可学习性。
10. 总结:KL 散度在大模型时代的角色
从历史演变与当前实践来看的话,KL 散度在大模型体系中的角色可以概括为:
-
作为监督训练的本体目标
- 通过交叉熵最小化,实现对数据分布的逼近
- 本质是最小化 DKL(Pdata∥Qθ)D_{\text{KL}}(P_{\text{data}}\parallel Q_\theta)DKL(Pdata∥Qθ)
-
作为生成模型与变分推断的约束项
- VAE 中控制后验与先验差异
- 各类 VI 框架中保证近似分布合理
-
作为策略优化 / 对齐中的“安全闸门”
- PPO/RLHF 用 KL 控制模型偏离 SFT/参考策略的程度
- DPO 用相对 log-prob 间接体现 KL 限制
-
在长序列场景中成为“瓶颈”
- 序列 KL = token KL 累加 → 长度越长惩罚越大
- 奖励信号被 KL 吞没
- 奖励归因在长序列上严重扩散
-
推动新算法跳出“序列级 KL”的范式
- GRPO 等方法通过 token-level 比值约束与奖励重加权,削弱序列 KL 的负面效应
- 长序列 RLHF 不再被 KL 线性放大的结构性问题锁死
从“度量两个分布差异的相对熵”,到“控制大模型对齐训练稳定性的核心约束”,KL 散度几乎贯穿了现代机器学习和大模型技术的全部脉络。
理解它的数学形式、历史来源和在长序列上的结构性后果,是理解 RLHF、DPO、GRPO 等一系列算法设计的前提。
更多推荐
所有评论(0)