数学基础

KL散度(KL divergence)

/ K-L dy-VER-juns /

KL 散度衡量的是「一个概率分布离另一个有多远」——更确切地说,是当你以为世界会遵循分布 Q、它实际上却遵循分布 P 时,你额外要承受多少意外。想象你照着一份说「多半放晴」的预报去打包行李。要真是晴天,你打包得正好;可要是天天倾盆,那份错误的预期就让你付出了惨重代价。KL 散度,就是这份惩罚的平均大小,以「白白浪费掉的意外」的比特来计量。

它永远是零或正数,而且仅当两个分布完全相同时才恰好等于零——你的信念与现实分毫不差,毫无惩罚。它越大,就说明你假定的那个分布,把真实分布误导得越离谱。这里有个著名的小别扭:KL 散度不是对称的。「真相是 P 却预期 Q」的惩罚,一般不等于「真相是 Q 却预期 P」的惩罚,所以它是一道有方向的缺口,而非日常意义上真正的「距离」。

在机器学习里,KL 散度是衡量「我的模型分布有多错」的天然标尺。训练一个分类器去最小化交叉熵,骨子里就是在把「模型预测的分布」与「真实标签」之间的 KL 散度推向零。它也是变分自编码器以及许多「用一个分布去逼近另一个分布」的方法内部的引擎。要随身带着的提醒:正因为它不对称,又会在模型给某件「确实发生了的事」赋了零概率时炸到无穷大,所以使用 KL 散度时,必须小心你究竟把它朝哪个方向摆。

一款天气应用相信 Q =(70% 晴、30% 雨),可真实气候却是 P =(50% 晴、50% 雨)。照着 Q 来安排,你被雨淋个措手不及的次数,会比预想的多;KL 散度就给这种反复出现的「校准失准」标上一个精确的数。把这款应用修到恰好预测(50%、50%),散度就降为零了。

KL 散度给「信了一份错误预报(Q)、却要面对现实(P)」的代价标价;让二者吻合,代价便归零。

KL 散度不是真正的距离,因为它不对称:从 P 到 Q 的散度,一般不等于从 Q 到 P 的散度。它也从不为负,并通过一个简单的恒等式与交叉熵相关——交叉熵等于数据自身的熵,加上 KL 散度。

又称
KL散度KL 散度相对熵相對熵Kullback-Leibler divergencerelative entropy