KL散度
KL 散度(全称 Kullback-Leibler Divergence,也叫相对熵),本质就是衡量两个概率分布的 “不一样程度”,更准确地说:用一个近似分布去描述真实分布时,会损失 / 多浪费多少信息。
两个基础的概念:
概率分布:就是一件事所有可能结果的出现概率。比如抛正常硬币,正面 50%、反面 50%,这就是一个分布;作弊硬币正面 90%、反面 10%,这是另一个分布。
信息熵:香农老爷子的定义,简单说就是「一个分布本身的最小平均信息量」。可以看下这里
公式
KL散度的公式,拆开来就是:
D_KL(P || Q) = 交叉熵H(P,Q) - 真实分布的熵H(P)
离散型事件(比如抛硬币这种可数的结果)的KL散度公式:
我们把它拆开:
-
\(\sum P(x) \cdot \log P(x) = -H(P)\),就是真实分布熵的负数
-
\(\sum P(x) \cdot \log Q(x) = -H(P,Q)\),就是交叉熵的负数
连续型事件的公式只是把求和换成积分,核心逻辑完全不变。
核心特性
-
永远非负
KL散度≥0,只有当P和Q两个分布完全一模一样时,KL散度才等于0。KL散度越小,说明分布越接近。
-
绝对不对称
\(D_{KL}(P \parallel Q) \neq D_{KL}(Q \parallel P)\)!
- 前面的P,永远是真实分布、目标分布;后面的Q,永远是用来拟合的近似分布、模型预测的分布。
-
0概率会直接爆炸
如果真实分布P里有出现概率>0的事件,但是近似分布Q给这个事件定了0概率,那公式里的\(\log(P(x)/0)\)会直接变成无穷大,KL散度直接爆炸。
所以实际使用时,都会给Q的概率加一个极小值,避免出现0概率的情况。
常见用途
-
机器学习的分类损失函数
分类任务里,我们希望模型预测的分布Q,和真实标签的分布P越像越好,也就是KL散度越小越好。
而真实分布P的熵H(P)是固定不变的,所以最小化KL散度,就等价于最小化交叉熵H(P,Q)——这就是为什么所有分类任务都用交叉熵损失,它的本质就是最小化KL散度。 -
生成模型的核心(比如VAE变分自编码器)
VAE里,我们需要用一个简单的正态分布Q,去近似一个复杂的、没法直接算的真实后验分布P。核心就是最小化\(D_{KL}(Q \parallel P)\),让Q尽可能贴近P,这样就能用简单分布代替复杂分布,实现生成图片、音频等功能。

浙公网安备 33010602011771号