780 字
4 分钟
KL散度与交叉熵
2026-04-23
无标签

KL散度#

KL散度(Kullback-Leibler Divergence)又称相对熵,是衡量两个概率分布之间差异的一种方法。对于两个概率分布 PPQQ,KL散度定义为:

DKL(PQ)=ExP[logdPdQ]D_{KL}(P \| Q) = \mathbb{E}_{x \sim P} \left[ \log \frac{d P}{d Q} \right]
关于符号

ExP\mathbf{E}_{x \sim P} 表示对随机变量 xx 服从分布 PP 的期望值。同时包含了对 xx 的积分或求和,取决于 xx 是连续还是离散的。

完全不需要在文章里深入解释 Radon-Nikodym 导数,只是一种形式取决于 xx 是连续还是离散的。

连续情况下,KL散度可以表示为:

DKL(PQ)=+p(x)logp(x)q(x)dxD_{KL}(P \| Q) = \int_{-\infty}^{+\infty} p(x) \log \frac{p(x)}{q(x)} dx

交叉熵可以表示为:

H(P,Q)=+p(x)logq(x)dxH(P, Q) = -\int_{-\infty}^{+\infty} p(x) \log q(x) dx

其中 p(x)p(x)q(x)q(x) 分别表示概率分布 PPQQ 的概率密度函数

为了数学推导的简洁性,下文以离散随机变量为例(这也是机器学习分类任务中的常见场景)。

DKL(PQ)=xP(x)logP(x)Q(x)D_{KL}(P \| Q) = \sum_{x} P(x) \log \frac{P(x)}{Q(x)}

交叉熵可以表示为:

H(P,Q)=xP(x)logQ(x)H(P, Q) = -\sum_{x} P(x) \log Q(x)

若将求和换成积分、概率质量函数换成概率密度函数,结论形式完全平行

KL散度的性质#

  • KL散度是非负的:DKL(PQ)0D_{KL}(P \| Q) \geq 0,当且仅当 P=QP = Q 时,KL散度为零。
  • KL散度不是对称的:DKL(PQ)DKL(QP)D_{KL}(P \| Q) \neq D_{KL}(Q \| P)

KL散度衡量的是两个分布之间的不对称的差异度

alt text

交叉熵#

对KL散度进一步变形,发现他是由 PP 的熵和 PPQQ 的交叉熵两部分组成的,交叉熵衡量用分布 QQ 来编码来自分布 PP 的样本时,所需的平均编码长度。

只有当目标分布 PP 固定不变时,最小化交叉熵等价于最小化 KL 散度。

应用1:监督与分类#

损失函数:作为分类、目标检测、语义分割的损失函数

例如在二分类里面,损失函数:

L=i=1Nyilog(y^i)+(1yi)log(1y^i)L = -\sum_{i=1}^{N} y_i \log(\hat{y}_i) + (1 - y_i) \log(1 - \hat{y}_i)

多分类:

L=i=1Nc=1Cyi,clog(y^i,c)L = -\sum_{i=1}^{N} \sum_{c=1}^{C} y_{i,c} \log(\hat{y}_{i,c})

一般情况下,PP 是真实标签的分布(通常是one-hot向量)

one-hot向量

在分类问题中,真实标签通常表示为一个长度为类别数的向量,其中只有一个元素为1(表示正确类别),其余元素为0。

QQ 是模型预测的分布。交叉熵可以作为损失函数来优化模型参数,使得模型预测的分布尽可能接近真实标签的分布。

训练的过程就是Q从无偏(离散信源信息熵最大)到有偏的过程,最终使得Q与P尽可能接近,KL散度尽可能小,交叉熵尽可能小。

关于“熵最大”

“熵最大”是有条件的:只有在没有任何先验知识、且假设为均匀分布时,熵才最大。神经网络的初始化(如权重很小)确实会让 Softmax 输出接近均匀分布,但这只是工程上的初始化特性,并不是信息论推导出的必然起点。

KL散度与交叉熵
https://biscuit0613.github.io/posts/math/kldivergenceandcrossentropy/
作者
Biscuit
发布于
2026-04-23
许可协议
CC BY-NC-SA 4.0
自信息量与信息熵
矩阵的特征值与特征向量,手算和QR算法