信息熵(香农熵),相对熵(KL散度), 交叉熵 三者的对比以及 吉布斯不等式

各种各样信息科学中,无论是通信还是大数据处理,各种“熵”是非常重要的,因为它可以度量随机变量不确定度,量化信息量的大小。

  • 信息熵(香农熵)

首先复习一下信息熵(香农熵),辅助我们对相对熵和交叉熵的理解。
对于一个随机变量X,其可能的取值分别为X={x1,x2,x3,...xn},对应概率为P(X=xn)=Pn,于是X的信息熵为:

H(X)=i=1nPilogPi
我们换成以下形式:
H(X)=i=1nPi(logPi)
这样看来,像不像对随机变量X的某种特征求期望?而这个期望就是随机变量X携带的信息量。那只要反过去理解,就能得出(logPi)X=xi时,我们能够获得信息量的大小,并且也符合“概率越小,不确定性越大,信息量越大”。

  • 相对熵(KL散度)

如果我们对于同一个随机变量X有两个单独的概率分布 P(X)Q(X),我们可以使用KL散度(Kullback-Leibler(KL)divergence)来衡量这两个分布的差异:

DKL(P||Q)=EXP[logP(X)Q(X)]=EXP[logP(X)logQ(X)]
先来看一下对于相对熵比较广泛的一种说法:

在离散型变量的情况下,KL散度衡量的是,当我们使用一种被设计成能够使得概率分布Q产生的消息的长度最小的编码,发送包含由概率分布P产生的符号的消息时,所需要的额外信息量

说实话这很难让人真正理解,甚至因为相对熵的不对称性,很容易让人把PQ搞混。所以对上面公式变形得到我们熟悉的形式:

DKL(P||Q)=i=1nPi[logP(X=xi)logQ(X=xi)]=i=1nP(X=xi){logQ(X=xi)[logP(X=xi)]}
同时,回想一下信源编码的目的:对于随机变量X的n种可能{x1,x2,x3,...xn},一般需要用二进制码元序列来表示这n种可能的取值。并且对于出现概率较高的可能取值,我们希望使用更短的码元序列表示他们,而对于出现概率较低的可能取值,才不得不用较长的码元序列代替,这样一来就使码元序列的期望会尽可能小。

当且仅当码元序列的概率分布和信源分布相同时,平均码元长度等于信源信息量。再回头看信息熵的定义:i=1nPi(logPi),它也代表了最理想状态下的编码方法,即对于Pi概率发生的事件,使用码元长度为logPi的码元序列去代替它。

但是大多数情况下没法找到那么理想的编码方式,我们只能用接近分布P的分布Q来对信源进行编码,所以对于Pi概率发生的事件,近似使用码元长度为logQi的码元序列去代替它。这时可能会发生在随机变量X取较小概率的值时,我们使用较短的码元序列去表示,或是随机变量X取较大概率的值时,我们使用较长的码元序列去表示,这就违背了让码元期望尽可能小的初衷,造成了码元的浪费。

具体到公式中,当信源Xxi时概率为P(X=xi),此时使用分布Q来对信源进行编码的码长为logQ(X=xi),而使用分布P的理想编码的码长为logP(X=xi),对两者之差求期望既得相对熵。

然后附上吉布斯不等式:

i=1npi=1,i=1nqi=1pi,qi(0,1]
i=1npilogpii=1npilogqi,pi=qi,i
这个不等式常用在信源编码的证明,上面的看懂了这个不等式也基本可以理解了。

KL散度有很多有用的性质,最重要的是它是非负的。KL散度为0当且仅当P
Q在离散型变量的情况下是相同的分布,或者在连续型变量的情况下是‘‘几乎处处’’相同的。因为 KL
散度是非负的并且衡量的是两个分布之间的差异,它经常被用作分布之间的某种距离。然而,它并不是真的距离因为它不是对称的:对于某些PQDKL(P||Q)DKL(Q||P)。这种非对称性意味着选择
DKL(P||Q)还是DKL(Q||P)影响很大。更多细节可以看图。

信息熵(香农熵),相对熵(KL散度), 交叉熵 三者的对比以及 吉布斯不等式

KL散度是不对称的。假设我们有一个分布p(x),并且希望用另一个分布q(x)来近似它。
我们可以选择最小化DKL(p||q)或最小化DKL(q||p)。为了说明每种选择的效果,我们令p是两个高斯分布的混合,令q为单个高斯分布。选择使用KL散度的哪个方向是取决于问题的。一些应用需要这个近似分布q在真实分布p放置高概率的所有地方都放置高概率,而其他应用需要这个近似分布q在真实分布p放置低概率的所有地方都很少放置高概率。KL散度方向的选择反映了对于每种应用,优先考虑哪一种选择。(左)最小化DKL(p||q)的效果。在这种情况下,我们选择一个q使得它在p具有高概率的地方具有高概率。当p具有多个峰时,q选择将这些峰模糊到一起,以便将高概率质量放到所有峰上。(右)最小化DKL(q||p)的效果。在这种情况下,我们选择一个q使得它在p具有低概率的地方具有低概率。当p具有多个峰并且这些峰间隔很宽时,如该图所示,最小化KL散度会选择单个峰,以避免将概率质量放置在p的多个峰之间的低概率区域中。这里,我们说明当q被选择成强调左边峰时的结果。我们也可以通过选择右边峰来得到 KL
散度相同的值。如果这些峰没有被足够强的低概率区域分离,那么 KL 散度的这个方向仍然可能选择模糊这些峰。

上面的例子如果去用编码的角度来想,会更容易理解。

  • 交叉熵

一个和KL散度密切联系的量是交叉熵(cross-entropy):H(P,Q)=H(P)+DKL(P||Q),它和 KL 散度很像但是缺少左边一项:

H(P,Q)=ExPlogQ(x)
针对Q最小化交叉熵等价于最小化KL散度,因为Q并不参与被省略的那一项。

仍然结合相对熵的例子,如果说相对熵是“编码后多余出来的码元长度(信息量)”,那么交叉熵就是“编码之后的平均码长”。对于一般通信中信源编码,我们的目的是让交叉熵(平均码长)尽量低,于是让编码后的分布与信号原本分布尽可能接近;而在机器学习或神经网络中交叉熵作为损失函数,我们的目的是则让输出和标注值分布尽可能相同,所以让交叉熵尽量低。这么想起来可以说非常有意思了。