KL散度#
KL散度(Kullback-Leibler Divergence)又称相对熵,是衡量两个概率分布之间差异的一种方法。对于两个概率分布 P 和 Q,KL散度定义为:
DKL(P∥Q)=Ex∼P[logdQdP]关于符号
Ex∼P 表示对随机变量 x 服从分布 P 的期望值。同时包含了对 x 的积分或求和,取决于 x 是连续还是离散的。
完全不需要在文章里深入解释 Radon-Nikodym 导数,只是一种形式取决于 x 是连续还是离散的。
连续情况下,KL散度可以表示为:
DKL(P∥Q)=∫−∞+∞p(x)logq(x)p(x)dx交叉熵可以表示为:
H(P,Q)=−∫−∞+∞p(x)logq(x)dx其中 p(x) 和 q(x) 分别表示概率分布 P 和 Q 的概率密度函数
为了数学推导的简洁性,下文以离散随机变量为例(这也是机器学习分类任务中的常见场景)。
DKL(P∥Q)=x∑P(x)logQ(x)P(x)交叉熵可以表示为:
H(P,Q)=−x∑P(x)logQ(x)若将求和换成积分、概率质量函数换成概率密度函数,结论形式完全平行
KL散度的性质#
- KL散度是非负的:DKL(P∥Q)≥0,当且仅当 P=Q 时,KL散度为零。
- KL散度不是对称的:DKL(P∥Q)=DKL(Q∥P)。
KL散度衡量的是两个分布之间的不对称的差异度

交叉熵#
对KL散度进一步变形,发现他是由 P 的熵和 P 与 Q 的交叉熵两部分组成的,交叉熵衡量用分布 Q 来编码来自分布 P 的样本时,所需的平均编码长度。
只有当目标分布 P 固定不变时,最小化交叉熵等价于最小化 KL 散度。
应用1:监督与分类#
损失函数:作为分类、目标检测、语义分割的损失函数
例如在二分类里面,损失函数:
L=−i=1∑Nyilog(y^i)+(1−yi)log(1−y^i)多分类:
L=−i=1∑Nc=1∑Cyi,clog(y^i,c)一般情况下,P 是真实标签的分布(通常是one-hot向量)
one-hot向量
在分类问题中,真实标签通常表示为一个长度为类别数的向量,其中只有一个元素为1(表示正确类别),其余元素为0。
Q 是模型预测的分布。交叉熵可以作为损失函数来优化模型参数,使得模型预测的分布尽可能接近真实标签的分布。
训练的过程就是Q从无偏(离散信源信息熵最大)到有偏的过程,最终使得Q与P尽可能接近,KL散度尽可能小,交叉熵尽可能小。
关于“熵最大”
“熵最大”是有条件的:只有在没有任何先验知识、且假设为均匀分布时,熵才最大。神经网络的初始化(如权重很小)确实会让 Softmax 输出接近均匀分布,但这只是工程上的初始化特性,并不是信息论推导出的必然起点。