算法地基

交叉熵与 KL 散度:大模型训练里最常见的两个量

从预测分布与目标分布的差异出发,理解交叉熵和 KL 散度在预训练、蒸馏与对齐中的角色。

Information TheoryCross EntropyKL Divergence

交叉熵与 KL 散度:大模型训练里最常见的两个量

交叉熵衡量“按模型的概率分布编码真实答案要花多少代价”;KL 散度衡量“模型分布偏离参考分布多少”。它们的区别决定了它们在训练中的不同角色。

从语言模型预训练,到知识蒸馏、PPO 和 DPO,交叉熵与 KL 散度反复出现。很多公式看起来不同,底层问题却高度一致:我们有一个目标分布,模型给出一个预测分布,两者相差多少?

从分类任务开始

以词表分类为例。真实下一个 token 是 y,模型给每个 token 预测概率 pθ(token | context)。训练时最常用的损失是:

L = -log pθ(y | context)

如果模型给正确 token 的概率是 0.9,损失很小;若只给 0.01,损失很大。把一个 batch 中所有 token 的损失平均,就是语言模型常见的 cross-entropy loss。

真实标签也可以写成 one-hot 分布 q:正确 token 概率为 1,其他为 0。于是交叉熵为:

H(q, p) = -Σᵢ qᵢ log pᵢ

由于 one-hot 分布只有正确位置非零,这个式子自然退化成负对数似然。交叉熵因此不是神秘的新目标,它就是“让正确答案概率更高”的可微表达。

KL 散度在比较什么

KL 散度定义为:

D_KL(q || p) = Σᵢ qᵢ log(qᵢ / pᵢ)

它描述使用 p 近似 q 时的额外信息代价。关键性质有两个:

  • KL 总是非负,且仅当两个分布相同才为零;
  • KL 不对称,D_KL(q || p)D_KL(p || q) 不是一回事。

交叉熵和 KL 的关系是:

H(q, p) = H(q) + D_KL(q || p)

当目标分布 q 固定时,H(q) 是常数。所以最小化交叉熵,等价于最小化目标分布到模型分布的 KL 散度。这就是为什么监督学习里常直接用交叉熵:它的实现和解释更直接。

为什么对齐训练中会额外出现 KL

在偏好优化或强化学习对齐中,目标不只是让模型偏向高奖励回答,还要避免它为了奖励偏离原始模型过远。此时经常加入相对于参考策略 π_ref 的 KL 惩罚:

reward - β · D_KL(πθ || π_ref)

它的作用类似一根安全绳:模型可以学新偏好,但每一步偏离要付出代价。没有这种约束时,模型可能学会投机性地最大化奖励,却损害原有的语言能力、多样性或安全边界。

注意方向:D_KL(πθ || π_ref) 惩罚的是当前模型把概率放到参考模型认为不太可能的位置;改变 KL 的方向会改变优化偏好。这是阅读对齐算法公式时必须确认的细节。

三个常见误解

1. 交叉熵越低,用户体验一定越好

不一定。交叉熵通常衡量 token 级预测,与事实性、帮助性、格式遵循或任务完成率有关但不等价。训练和产品评测需要分层设计。

2. KL 越小越好

也不一定。若目标是让模型学到新行为,KL 为零意味着它根本没有变化。关键是选择合理的约束强度 β,在能力迁移与稳定性之间平衡。

3. KL 可以当作距离

KL 能衡量分布差异,却不是数学上的距离:它不对称,也不满足三角不等式。写分析和实现时不要把它当作普通欧氏距离理解。

小结

交叉熵关注模型是否把概率给到了目标答案;KL 散度关注模型分布相对某个参考分布偏移了多少。前者是预训练和监督微调的基本语言,后者则在蒸馏、分布匹配和模型对齐中提供约束。读懂两者的关系,会让许多大模型训练公式突然变得简单。

← 返回算法地基专题地图