相对熵(KL散度)

Posted MorStar-Lab

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了相对熵(KL散度)相关的知识,希望对你有一定的参考价值。

1. 概述

在信息论中,相对熵等价于两个概率分布信息熵的差值,若其中一个概率分布为真实分布,另一个为理论(拟合)分布,则此时相对熵等于交叉熵与真实分布的信息熵之差,表示使用理论分布拟合真实分布时产生的信息损耗。

\\[D_{K L}(p \\| q)=\\sum_{i=1}^{N}-p\\left(x_{i}\\right) \\log q\\left(x_{i}\\right)\\tag{1}-\\sum_{i=1}^{N} -p\\left(x_{i}\\right) \\log p\\left(x_{i}\\right) \\]

上面的\\(p(x_i)\\)为真实事件的概率分布, \\(q(x_i)\\)为理论拟合出来的该事件的概率分布。
公式的字面含义:前半部分是拟合分布下事件信息量与真实事件概率乘积的累加,后半部分即真实分布下的信息熵

如何理解前半部分?
前半部分即为交叉熵,交叉熵的定义为

\\[\\begin{aligned} H(p, q) &=\\sum_{x} p(x) \\log \\frac{1}{q(x)} \\\\ &=-\\sum_{x} p(x) \\log q(x) \\end{aligned} \\]

故\\(D_{K L}(p | q)\\)可写为:

\\[\\begin{aligned} D_{K L}(p \\| q) &=H(p, q)-H(p) \\\\ &=-\\sum_{x} p(x) \\log q(x)-\\sum_{x}-p(x) \\log p(x) \\\\ &=-\\sum_{x} p(x)(\\log q(x)-\\log p(x)) \\\\ &=-\\sum_{x} p(x) \\log \\frac{q(x)}{p(x)} \\end{aligned} \\]

在信息论中,交叉熵可认为是对预测分布q(x)用真实分布p(x)来进行编码时所需要的信息量大小。

举个例子,需传输长度为8的字符串,字符串中仅有abcd四个字母,其中a字母出现的真实概率为1/8,b字母出现的真实概率为1/8,c字母出现的真实概率为2/8,d字母出现的真实概率为4/8。

  1. 假设我们知道每个字母出现的真实概率,那么a、b均需要3比特,c需要2比特,d需要1比特分别进行编码才能相互区分,故每个字母编码长度的期望值=1/8*3+1/8*3+2/8*2+1/2*1=1.75,该1.75即为信息熵值。
  2. 但假设预测的结果是a、b、c、d字母出现的概率均为1/4,根据预测的结果分别对a、b、c、d字母进行二进制编码,a、b、c、d均需2比特编码才能相互区分,故每个字母编码长度的期望值=(1/8+1/8+2/8+4/8)*2=2,该2即为交叉熵值。
  3. \\(D_{K L}(p | q)=2-1.75=0.25\\)

2. 性质

2.1 正定性

拟合出来的概率分布无非两种情况,一种和真实概率分布近乎一致,一种和真实概率分布相当不同。若拟合出来的概率分布和真实分布一致,那么公式后半部分即为拟合分布下的信息熵。由于拟合分布和真实分布一致,故\\(D_{KL}=0\\)。若拟合出来的概率分布与真实分布不同,在公式1下\\(D_{KL}>0\\)(稍后证明)。
这个性质很关键,因为它正是深度学习梯度下降法需要的特性。假设神经网络拟合近乎完美,那么它就不再梯度下降,而不完美则因为它大于0而继续下降。

2.2 非对称性

但它有不好的地方,就是它是不对称的。举个例子,比如随机变量 X ∼ P 取值为1,2,3时的概率分别为[0.1,0.4,0.5],随机变量 Y ∼ Q 取值为1,2,3时的概率分别为[0.4,0.2,0.4],则:

\\[\\begin{aligned} &D(P \\| Q)=0.1 \\times \\log \\left(\\frac{0.1}{0.4}\\right)+0.4 \\times \\log \\left(\\frac{0.4}{0.2}\\right)+0.5 \\times \\log \\left(\\frac{0.5}{0.4}\\right)=0.250 \\\\ &D(Q \\| P)=0.4 \\times \\log \\left(\\frac{0.4}{0.1}\\right)+0.2 \\times \\log \\left(\\frac{0.2}{0.4}\\right)+0.4 \\times \\log \\left(\\frac{0.4}{0.5}\\right)=0.327 \\end{aligned} \\]

\\[D(P \\| Q) \\neq D(Q \\| P) \\]

可见用P来拟合Q和用Q来拟合P的相对熵不一样,但他们的距离一样。也就是说,相对熵的大小和距离没有一一对应关系。这点蛮头疼的,因为一般我们希望距离越远下降越快,而相对熵取不同分布为参考在同等距离情况下下降的速度不一样。
不对称的性质来源于公式的后半部分,后半部分采用的是真实分布的概率进行乘积,所以以不同的概率分布作为真实分布得到的相对熵亦不同。

既然如此,为什么很多人用相对熵衍生出来的交叉熵作为损失函数来训练神经网络而不直接用距离相关的均方差呢?(以后讲)

3. 不同角度解读KL散度

3.1 统计学意义上的KL散度

在统计学意义上来说,KL散度可以用来衡量两个分布之间的差异程度。若两者差异越小,KL散度越小,反之亦反。当两分布一致时,其KL散度为0。正是因为其可以衡量两个分布之间的差异,所以在VAE、EM、GAN中均有使用到KL散度。

3.2 信息论角度的KL散度

KL散度在信息论中的专业术语为相对熵。其可理解为编码系统对信息进行编码时所需要的平均附加信息量。其中信息量的单位随着计算公式中log运算的底数而变化。

log底数为2:单位为比特(bit)
log底数为e:单位为奈特(nat)

4. 正定性证明

这里证明\\(D_{KL}\\geq0\\)。

4.1 法一

注意在一般情况下神经网络中默认log以e为底,这样算出来的香农信息量虽然不是最小的可用于完整表示事件的比特数,但对于信息熵的含义来说是区别不大。其实只要这个底数大于1,都能用来表达信息熵的大小。

\\[\\text { 要证: } D_{K L}(p \\| q)=\\sum_{i=1}^{N}\\left[p\\left(x_{i}\\right) \\log p\\left(x_{i}\\right)-p\\left(x_{i}\\right) \\log q\\left(x_{i}\\right)\\right] \\geq 0 \\]

\\[\\text { 即证 } \\sum_{i=1}^{N} p\\left(x_{i}\\right) \\log \\frac{q\\left(x_{i}\\right)}{p\\left(x_{i}\\right)} \\leq 0 \\]

\\[\\text { 又 } \\ln (x) \\leq x-1, \\text { 当且仅当 } x=1 \\text { 时等号成立 } \\]

\\[\\text { 故 } \\sum_{i=1}^{N} p\\left(x_{i}\\right) \\log \\frac{q\\left(x_{i}\\right)}{p\\left(x_{i}\\right)} \\leq \\sum_{i=1}^{N} p\\left(x_{i}\\right)\\left(\\frac{q\\left(x_{i}\\right)}{p\\left(x_{i}\\right)}-1\\right)=\\sum_{i=1}^{N}\\left[p\\left(x_{i}\\right)-q\\left(x_{i}\\right)\\right]=0 \\]

4.2 法二

我们可以使用Jensen不等式在凸函数中的命题,若对于任意点集 {\\({x_i}\\)},\\(\\lambda_{i} \\geq 0\\)且\\(\\sum_{i} \\lambda_{i}=1\\) ,可以证明凸函数 f (x) 满足:

\\[f\\left(\\sum_{i=1}^{M} \\lambda_{i} x_{i}\\right) \\leq \\sum_{i=1}^{M} \\lambda_{i} f\\left(x_{i}\\right) \\]

由于\\(log^x\\)为上凸函数,故

\\[\\begin{aligned} K L(p \\| q) &=\\sum_{x} p(x) \\log \\frac{p(x)}{q(x)}=-\\sum_{x} p(x) \\log \\frac{q(x)}{p(x)} \\\\ & \\geq-\\log \\sum_{x} p(x) \\frac{q(x)}{p(x)}(\\text { 使用Jensen不等式 }) \\\\ & \\geq-\\log 1=0 \\end{aligned} \\]

5. 参考链接

https://blog.csdn.net/weixinhum/article/details/85064685
https://hsinjhao.github.io/2019/05/22/KL-DivergenceIntroduction/

以上是关于相对熵(KL散度)的主要内容,如果未能解决你的问题,请参考以下文章

相对熵(KL散度)

K-L散度(相对熵)

通俗理解交叉熵和KL散度(包括标签平滑的pytorch实现)

通俗理解交叉熵和KL散度(包括标签平滑的pytorch实现)

通俗理解交叉熵和KL散度(包括标签平滑的pytorch实现)

机器学习深度学习中的信息熵相对熵(KL散度)交叉熵条件熵