信息熵、相对熵、交叉熵

信息论与信息熵

提到这三个概念,就不得不提到信息论。。人们通常将香农于1948年10月发表于《贝尔系统技术学报》上的论文《A Mathematical Theory of Communication》(通信的数学理论)作为现代信息论研究的开端。香农也被称为是“信息论之父”。其实熵这个概念是香农,从热力学中借鉴过来的,热力学中的热熵是表示分子状态混乱程度的物理量。香农用信息熵的概念来描述信源的不确定度。

信息论的基本想法是一个不太可能发生的事件居然发生了,要比一个非常可能发生的事件发生带来的信息要多。例如,说明天会发生日食,远比说明天太阳能照常升起带来的有效信息要多。

为了有效量化这一思想,特别是要符合以下三个性质:
(1) 非常可能发生的时间信息量要少,并且在极端情况下,确保能发生的事件应该没有信息量。
(2) 较不可能发生的事应具有更高的信息量。
(3) 独立事件应具有增量的信息。例如,投掷硬币两次正面面朝上的信息量,应该是投掷一次正面朝上的两倍

为满足以上的三个性质,我们首先定义一个自信息的概念。假设对弈事件X=xX=x,其自信息定义为:
I(x)=logP(x)I(x)=-logP(x)
需要解释一下,此处的log以e为底,单位为奈特(nats),而对于以2为底的log,其单位通常为比特(bit)或者香农(shannons)。我们这里除非特殊提到,默认底数为e。
自信息有两层含义:①表示事件发生前,事件发生的可能性。②表示时间发生后,时间所包含的信息量,是提供给信宿的信息量,也是解除这种不太确定性所需的信息量。

那对于整个的概率分布,就可以定义出香农熵或称信息熵的概念,从而可以量化事件发生的信息,其定义如下:一个分布的信息熵是指一个分布中所发生事件的期望信息总和。


信息熵、相对熵、交叉熵的理解

其实在这个公式中可以看出,越不可能发生的事件,熵就越大,包含的信息也就越多。再延伸一点,可以看出对于那些相对确定(即输出几乎可以确定)的分布,其熵会较低,反之熵会较高。对于连续的分布,信息熵被称为微分熵。

例如,在二值分布中,其信息熵的公式为:(p1)log(1p)plog(p)(p-1)log(1-p)-plog(p)从下图可以看出,当概率较为不确定时,熵最大。


信息熵、相对熵、交叉熵的理解

相对熵(KL散度)

对于两个基于自变量的单独的概率分布模型P(x)P(x)Q(x)Q(x),可以使用KL散度(Kullback-Leibler)即相对熵来衡量两个分布的差异。其公式定义如下:

信息熵、相对熵、交叉熵的理解

KL不完全等价于距离公式,因为KL散度是不对称的即在很多情况下,DKL(PQ)D_{KL}(P||Q)不等于DKL(QP)D_{KL}(Q||P) (前者表示从q到p的KL散度,后者表示从p到q的KL散度),因为最小化两个分布之间的KL散度,无非就两个任务。一种任务,让近似分布Q在真实分布P高概率的地方,放置高概率;另一种任务,让近似分布Q在真实分布P低概率的部分很少放置高概率。从下面这两个图的例子上来解释:


信息熵、相对熵、交叉熵的理解信息熵、相对熵、交叉熵的理解

首先,p(x)是一个真实存在的分布,其由两个高斯分布合成,如上图所示。假设q(x)是一个用来逼近p(x)的分布,是个单高斯分布。那这样的任务可简写成最小化DKL(pq)D_{KL}(p||q)或者DKL(qp)D_{KL}(q||p)。不同的目标函数会产生不同的效果。下面这幅图的左边这幅图,目标就是在p(x)高概率的地方,q(x)放置高概率,也就是要最小化DKL(pq)D_{KL}(p||q)。而右边这幅图,目标是在p(x)低概率的地方避免放置高概率,最小化DKL(qp)D_{KL}(q||p),可以看到的是,q(x)拟合到了p(x)的左边的峰上,但其实可以选择右边的峰,得到相同的KL散度值。

我个人的理解是,第一个任务,我们只需要在p(x)高概率的地方出现高概率,那这样只要在p(x)两个峰的位置产生更多的高概率,就可以了,至于是否在低概率的地方,放置多少高概率,我并不关心。第二个任务也是同样的想法,不同的是,这样会把p(x)的低概率的地方会将q(x)包裹起来。

交叉熵

讲完KL散度也就是相对熵,就可以来看一下什么是交叉熵了。交叉熵结合softmax现在在深度学习和机器学习中使用最广,尤其是在判别模型中。首先是交叉熵的定义。


信息熵、相对熵、交叉熵的理解

接下来回顾下,相对熵的定义。


信息熵、相对熵、交叉熵的理解

其实可以看出DKLD_{KL}可以拆分成H(P)+H(P,Q)-H(P)+H(P,Q)。也就是说H(P,Q)=H(x)+DKL(PQ)H(P,Q)=H(x)+D_{KL}(P||Q)

从这也很好的解释了,为什么在用交叉熵作为loss值而不用相对熵。首先P是真值,也是我们要去逼近的值,通常其分布是固定的,那它的信息熵就是一个常数。既然是个常数,对训练的结果就没什么影响,那干脆直接就用交叉熵来作为loss function吧。

相关文章: