信息论与信息熵
提到这三个概念,就不得不提到信息论。。人们通常将香农于1948年10月发表于《贝尔系统技术学报》上的论文《A Mathematical Theory of Communication》(通信的数学理论)作为现代信息论研究的开端。香农也被称为是“信息论之父”。其实熵这个概念是香农,从热力学中借鉴过来的,热力学中的热熵是表示分子状态混乱程度的物理量。香农用信息熵的概念来描述信源的不确定度。
信息论的基本想法是一个不太可能发生的事件居然发生了,要比一个非常可能发生的事件发生带来的信息要多。例如,说明天会发生日食,远比说明天太阳能照常升起带来的有效信息要多。
-
为了有效量化这一思想,特别是要符合以下三个性质:
- (1) 非常可能发生的时间信息量要少,并且在极端情况下,确保能发生的事件应该没有信息量。
- (2) 较不可能发生的事应具有更高的信息量。
- (3) 独立事件应具有增量的信息。例如,投掷硬币两次正面面朝上的信息量,应该是投掷一次正面朝上的两倍
为满足以上的三个性质,我们首先定义一个自信息的概念。假设对弈事件
X
=
x
X=x
X=x,其自信息定义为:
I
(
x
)
=
−
l
o
g
P
(
x
)
I(x)=-logP(x)
I(x)=−logP(x)
需要解释一下,此处的log以e为底,单位为奈特(nats),而对于以2为底的log,其单位通常为比特(bit)或者香农(shannons)。我们这里除非特殊提到,默认底数为e。
自信息有两层含义:①表示事件发生前,事件发生的可能性。②表示时间发生后,时间所包含的信息量,是提供给信宿的信息量,也是解除这种不太确定性所需的信息量。
那对于整个的概率分布,就可以定义出香农熵或称信息熵的概念,从而可以量化事件发生的信息,其定义如下:一个分布的信息熵是指一个分布中所发生事件的期望信息总和。
其实在这个公式中可以看出,越不可能发生的事件,熵就越大,包含的信息也就越多。再延伸一点,可以看出对于那些相对确定(即输出几乎可以确定)的分布,其熵会较低,反之熵会较高。对于连续的分布,信息熵被称为微分熵。
例如,在二值分布中,其信息熵的公式为: ( p − 1 ) l o g ( 1 − p ) − p l o g ( p ) (p-1)log(1-p)-plog(p) (p−1)log(1−p)−plog(p)从下图可以看出,当概率较为不确定时,熵最大。
相对熵(KL散度)
对于两个基于自变量的单独的概率分布模型 P ( x ) P(x) P(x)和 Q ( x ) Q(x) Q(x),可以使用KL散度(Kullback-Leibler)即相对熵来衡量两个分布的差异。其公式定义如下:
KL不完全等价于距离公式,因为KL散度是不对称的 即在很多情况下, D K L ( P ∣ ∣ Q ) D_{KL}(P||Q) DKL(P∣∣Q)不等于 D K L ( Q ∣ ∣ P ) D_{KL}(Q||P) DKL(Q∣∣P) (前者表示从q到p的KL散度,后者表示从p到q的KL散度),因为最小化两个分布之间的KL散度,无非就两个任务。一种任务,让近似分布Q在真实分布P高概率的地方,放置高概率;另一种任务,让近似分布Q在真实分布P低概率的部分很少放置高概率。从下面这两个图的例子上来解释:
首先,p(x)是一个真实存在的分布,其由两个高斯分布合成,如上图所示。假设q(x)是一个用来逼近p(x)的分布,是个单高斯分布。那这样的任务可简写成最小化 D K L ( p ∣ ∣ q ) D_{KL}(p||q) DKL(p∣∣q)或者 D K L ( q ∣ ∣ p ) D_{KL}(q||p) DKL(q∣∣p)。不同的目标函数会产生不同的效果。下面这幅图的左边这幅图,目标就是在p(x)高概率的地方,q(x)放置高概率,也就是要最小化 D K L ( p ∣ ∣ q ) D_{KL}(p||q) DKL(p∣∣q)。而右边这幅图,目标是在p(x)低概率的地方避免放置高概率,最小化 D K L ( q ∣ ∣ p ) D_{KL}(q||p) DKL(q∣∣p),可以看到的是,q(x)拟合到了p(x)的左边的峰上,但其实可以选择右边的峰,得到相同的KL散度值。
我个人的理解是,第一个任务,我们只需要在p(x)高概率的地方出现高概率,那这样只要在p(x)两个峰的位置产生更多的高概率,就可以了,至于是否在低概率的地方,放置多少高概率,我并不关心。第二个任务也是同样的想法,不同的是,这样会把p(x)的低概率的地方会将q(x)包裹起来。
交叉熵
讲完KL散度也就是相对熵,就可以来看一下什么是交叉熵了。交叉熵结合softmax现在在深度学习和机器学习中使用最广,尤其是在判别模型中。首先是交叉熵的定义。
接下来回顾下,相对熵的定义。
其实可以看出 D K L D_{KL} DKL可以拆分成 − H ( P ) + H ( P , Q ) -H(P)+H(P,Q) −H(P)+H(P,Q)。也就是说 H ( P , Q ) = H ( x ) + D K L ( P ∣ ∣ Q ) H(P,Q)=H(x)+D_{KL}(P||Q) H(P,Q)=H(x)+DKL(P∣∣Q)
从这也很好的解释了,为什么在用交叉熵作为loss值而不用相对熵。首先P是真值,也是我们要去逼近的值,通常其分布是固定的,那它的信息熵就是一个常数。既然是个常数,对训练的结果就没什么影响,那干脆直接就用交叉熵来作为loss function吧。
参考文献
《Deep learning 深度学习》