一、序言
本文大量知识建立在信息熵的基础上,可以说理解了信息熵是什么,对于KL散度的理解是水到渠成的,所以不了解信息熵的小伙伴强烈推荐阅读:
一文看懂信息熵的本质——谈谈自己对信息熵的理解
如有疑问欢迎评论,若对你有帮助,麻烦点个赞。未经允许、请勿转载。
二、什么是KL散度
在上一篇信息熵的文章中,我们举了一个在箱子里摸球的例子来形象的阐述信息熵的定义。那么这篇文章我们继续延续上一个例子。
简单回顾一下,我们用信息熵来度量在箱子中不同小球的概率分布P(x)已知的情况下,我们抓到想要的颜色的小球的平均次数(这个能理解吧?如果没理解建议看看本文首的那篇文章)
现在,这个游戏让你玩明白了。老板肯定不高兴了,老板就做了一个违背祖训的决定。他更改了箱子中不同颜色球的概率分布,从P(X)变化为Q(X)。
这时候的信息熵(真实情况下摸到想要的球的平均次数)应该是:
H
1
(
x
)
=
−
∑
i
=
1
n
Q
(
x
i
)
∗
l
o
g
(
Q
(
x
i
)
)
H1_{(x)}= -\sum_{i=1}^{n}Q_{(x_i)}*log(Q(x_i))\,
H1(x)=−i=1∑nQ(xi)∗log(Q(xi))
而实际上,我们认为的概率分布是P(x)。按照我们估计的概率分布P(x),现在的信息熵(按照我们认为的模型计算摸到想要的球的平均次数)变为:
H
2
(
x
)
=
−
∑
i
=
1
n
Q
(
x
i
)
∗
l
o
g
(
P
(
x
i
)
)
H2_{(x)}= -\sum_{i=1}^{n}Q_{(x_i)}*log(P(x_i))\,
H2(x)=−i=1∑nQ(xi)∗log(P(xi))
这里因为我们错误估算了每个球所携带的熵所以公式的log(Q(xi))被我们认为成log(P(xi)),所以每个xi所携带的信息量实际上是变了。这个H2便是交叉熵,这里交叉熵被顺便引入了出来。
这时候。可恶的老板想度量一下这两个信息熵的差距,他就很轻易的想到了减法
H
1
(
x
)
−
H
2
(
x
)
=
−
∑
i
=
1
n
P
(
x
i
)
∗
[
l
o
g
(
P
(
x
i
)
)
−
l
o
g
(
Q
(
x
i
)
)
]
=
−
∑
i
=
1
n
P
(
x
i
)
∗
l
o
g
P
(
x
i
)
Q
(
x
i
)
H1_{(x)}-H2_{(x)}=-\sum_{i=1}^{n}P_{(x_i)}*[log(P(x_{i}))-log(Q(x_i))]=-\sum_{i=1}^{n}P_{(x_i)}*log\frac{P(x_{i})}{Q(x_i)}
H1(x)−H2(x)=−i=1∑nP(xi)∗[log(P(xi))−log(Q(xi))]=−i=1∑nP(xi)∗logQ(xi)P(xi)
这个熵差即被称为Kullback-Leibler Divergence(KL散度)也称为交叉熵。记作:
D
k
L
(
P
∣
∣
Q
)
D_{kL}(P||Q)
DkL(P∣∣Q)
关于KL散度的性质,这里便不再赘述,其余的博客已经讲的很清楚了
三、KL散度的应用
其实看到这里很多小伙伴已经想到,上文的例子,就像在机器学习中,我们估计出一个概率分布为P(x)的模型,而GroundTruth的概率分布为Q(x)。KL散度反应了GT和预测之差,即LOSS。然而,很多人把KL散度的概念列为:描述一个概率分布P与另一个概率分布Q不同的度量。我认为这是不够严谨的,并且是容易造成迷惑的。 如果P和Q的分布相同,那么他们的KL散度是0。但如果KL散度是0,并不能说明他们的概率分布是相同的。又由于它的非负等性质,把他称为“散度”,才是最严谨的,他反应的是两个概率分布的差异程度。这给GAN等目前大火的、非常awesome的网络提供了理论基础。
参考文献
[1]wiki,https://en.wikipedia.org/wiki/Kullback%E2%80%93Leibler_divergence
[2]关于KL散度(Kullback-Leibler Divergence)的笔记,https://zhuanlan.zhihu.com/p/438129018
结语
如果没有读过我之前写的关于信息熵的本质的理解,这篇文章也会同网上所有文章一样看起来晦涩难懂或者总觉得偏离本质。再次推销一下这篇文章的前文,一文看懂信息熵的本质——谈谈自己对信息熵的理解。读到这里,如果觉得有帮助,麻烦点赞评论收藏下,以便让更多人看到它。