机器学习笔记之三: 熵

来源:互联网 发布:将软件添加到磁贴 编辑:程序博客网 时间:2024/05/21 17:49

熵的推导

已知随机变量X的概率分布P(X),我们对事件X=xi(i=0,1,...,N)进行编码,编码要求符合前缀编码规则,(即任何一个编码都不能是另一个有效编码的前缀,例如已有编码10,则编码100,101,1011,等都不是可用的编码)。

在这种编码规则下,记X=xi编码的长度为L(xi),则它的代价(它所占用的编码空间的比例)记为C(xi)=12L(xi)。例如编码10,它的长度为2,任何以10开头的编码都被它占用,10开头的编码占整个编码空间的比例为1/22=1/4

编码长度Len(X)也是一个随机变量,它的期望:

E[L(X)]=i=0NP(xi)L(xi)(1)

现在我们希望编码长度的期望最小,约束条件是代价总和为1:
i=0NC(xi)=i=0N12L(xi)=1(2)

这是一个有约束条件的最优化问题,可以用拉格朗日乘子法。构建拉格朗日函数
L(L(xi),λ)=i=0NP(xi)L(xi)λ(i=0N12L(xi)1)(3)

为简化我们用C(xi)表示L(xi),即L(xi)=log2C(xi),则拉格朗日函数变为:

L(C(xi),λ)=i=0NP(xi)log2C(xi)λ(i=0NC(xi)1)(4)

拉格朗日函数取极值条件:
LC(xi)=1ln2P(xi)C(xi)+λ=0

P(xi)C(xi)=λln2

又有:

i=0NC(xi)=1

i=0NP(xi)=1

最终有:
P(xi)C(xi)=1

所以,当事件X=xi的编码长度对应得代价与其发生的概率相等时,编码长度期望值最小。最小的编码长度为:
min(E[L])=i=0NP(xi)log2P(xi)(5)

举个例子, Bob只能说4个单词”dog”, “cat”, “fish”, “bird”,概率分布为
Word Freq
现在我们需要跟Bob交流,必须先进行编码,如果采用固定长度的编码:

编码长度期望为1/22+1/42+1/82+1/82=2bits

而采用最优编码,即概率为P(xi)的单词编码长度为log2P(xi):

编码长度期望为1/21+1/42+1/83+1/83=1.75bits

编码长度期望的最小值,被称为entropy(熵),它是由随机变量的分布决定的,我们称分布p的熵为H(p):

H(p)=xp(x)log21p(x)(6)

import mathdef H(p_seq):    return sum(-p*math.log(p) for p in p_seq if p>0)/math.log(2)
H([0.25,0.25,0.25,0.25])
2.0

熵的理解

先看几个例子:

x1 x2 x3 x4 entropy 分布1 1 0 0 0 分布2 0.8 0.2 0 0 分布3 0.5 0.5 0 0 分布4 0 0 0.2 0.8 分布5 0.25 0.25 0.25 0.25

分布1只能取x1一个值,它的熵为0。分布2和分布3能取两个值,但分布3更平均,它的熵更大。分布2和分布4是两个不同的分布,但是分布的集中程度相同,他们的熵也相同。分布3和分布5都是均匀分布,但分布5取值范围更广,它的熵更大。

从以上例子可以看出,分布约集中,其熵越小。从这个意义上来说,熵代表着不确定性,不确定度越小,熵越小。熵的取值范围:

0H(p)log2N

(对于连续变量的微分熵,其值可以小于0。)

为了加深对这个概念的理解,着重看一下 熵的定义式(6)。它是一个和式,和式的每一项是两个部分的乘积,第一部分是概率函数p(x)(在国外教科书中也称为概率质量函数),第二部分是一个随机变量的函数,也是一个随机变量,其含义是最优编码下的编码长度。所以熵是最优编码下消息编码长度的期望。对于连续变量,其定义是:

h(p)=+p(x)1logp(x)dx(7)

h(p)称为分布p微分熵(differential entropy)。其中p(x)为概率密度函数。(为简化,这里及后面的部分用log代表log2)

下面来看一个更一般的式子:

+p(x)g(x)dx(8)

其中p(x)满足:

  • p(x)0

  • +p(x)dx=1

以及它的离散形式

xp(x)g(x)(9)

其中p(x)满足:

  • p(x)0

  • xp(x)=1

这个式子很重要,将会在很多地方看到它的各种各样的形式,举例说明:

(1) 当g(x)=1logp(x) 时, 它就是熵

(2) 当g(x)=x时, 它就是期望

(3) 当g(x)=(xE[X])2 时, 它就是方差

(4)物理学的例子,质心=ρ(x)/Mxdx, 这里g(x)=x, p(x)=ρ(x)/M, ρ(x)是密度

(5)另一个物理学的例子:

=JM=dmMr2=ρ(x,y,z)Mr(x,y,z)2dxdydz

这里 ρ 表示密度, r表示到转轴的距离。

(6)机器学习的例子,在EM算法的E-step中要用到以下的变换:

p(x)=zp(x,z)=zQ(z)p(x,z)Q(z)=E[p(x,z)Q(z)]

这里,Q(z)是隐含变量z的一个分布。

(7)当g(x)=1logq(x) 时, 它就是下面要讲到的交叉熵(cross entropy)

交叉熵(cross entropy)

现在如果有另一个分布q(x):

在使用分布p的最优编码的情况下,分布q的编码长度期望为: 1/81+1/22+1/43+1/83=2.25

这个长度称为q相对于p交叉熵(cross entropy),记为:

Hp(q)=xq(x)log1p(x)(10)

这里强调q相对于p是因为交叉熵不是对称的,即Hp(q)Hq(p)

def cross_entropy(p_seq, q_seq):    return sum(-q* math.log(p) for (p,q) in zip(p_seq,q_seq) if p>0)/math.log(2)p_seq=[1/2,1/4,1/8,1/8]q_seq=[1/8,1/2,1/4,1/8]print('cross entropy of q with respect to p:',cross_entropy(p_seq,q_seq))print('cross entropy of p with respect to q:',cross_entropy(q_seq,p_seq))
cross entropy of q with respect to p: 2.25cross entropy of p with respect to q: 2.375

交叉熵本身并没有多大的意义,有意义的是交叉熵与熵的差,称为Kullback–Leibler距离(简称KL距离):

Dp(q)=Hp(q)H(q)(11)

它的意义是分布q采用另一个分布p的最优编码与采用自身的最优编码比较,消息编码长度的差。它表征的是两个分布的差异。当两个分布相同时,KL距离为0,当两个分布的差异越大,KL距离越大。KL距离在机器学习中经常被当做损失函数来使用。

多变量的熵

先看一个例子:

X与Y的联合熵:

H(X,Y)=x,yp(x,y)log1p(x,y)(12)

以上图为例把X,Y的组合看成一个随机变量,则它有四种值:raining & t-shirt, raning & coat, sunny & t-shirt, sunny & coat, 其概率分别为6%,19%, 56%, 19%,故H(X,Y)=0.06log(1/0.06)+0.19log(1/0.19)+0.56log(1/0.56)+0.19log(1/0.19)=1.62bits

H([0.06,0.19,0.19,0.56])
1.6224272282706345

Y给定时X的条件熵:

H(X|Y)x,yp(x,y)log1p(x|y)(13)

注意 (13)式与(12)式的区别:

H(X|Y)x,yp(x|y)log1p(x|y)

H(X,Y)是直接从熵的定义得出的不同,H(X|Y)是定义式,这是因为X|Y并不是随机变量,随机变量的值域必须是基本事件的集合,X|Y不满足这个条件(在概率论的教科书中,也没有“条件事件”这一说法,只有“条件概率”,而且“条件概率”也是一个定义式)。

还可以从另一个角度看条件熵,X|Y=raining 和 X|Y=sunny 是随机变量,它们的熵可以算出来,然后对这两个熵求期望,得到:

H(X|Y)=p(x|y=raining)H(X|Y=raining)+p(x|y=sunny)H(X|Y=sunny)

推导过程如下:

H(X|Y)=x,yp(x,y)log1p(x|y)=x,yp(y)p(x|y)log1p(x|y)=yp(y)xp(x|y)log1p(x|y)

把(13)式条件熵与交叉熵对比,可以看出条件熵是联合概率p(x,y)相对于条件概率p(x|y)的交叉熵。

X_prob=[0.62,0.38] # t-shirt, coatY_prob=[0.25,0.75] # raning, sunnyjoint_prob = [0.06,0.19,0.56,0.19] cond_prob_x_y = [0.25,0.75,0.75,0.25]cond_prob_y_x = [0.08,0.5,0.92,0.5]print('H(X) =',H(X_prob))print('H(Y) =',H(Y_prob))print('H(X,Y) =', H(joint_prob))print('H(X|Y) =',cross_entropy(cond_prob_x_y, joint_prob))print('H(Y|X) =',cross_entropy(cond_prob_y_x, joint_prob))
H(X) = 0.9580420222262997H(Y) = 0.8112781244591328H(X,Y) = 1.6224272282706347H(X|Y) = 0.8112781244591328H(Y|X) = 0.6659961422684021

条件熵和联合熵存在以下关系:

H(X,Y)=H(X|Y)+H(Y)

H(X,Y)=H(Y|X)+H(X)

推导过程如下:
H(X|Y)+H(Y)=x,yp(x,y)log1p(x|y)+yp(y)log1p(y)

=x,yp(x,y)log1p(x|y)+yxp(x,y)log1p(y)

=x,yp(x,y)(log1p(x|y)+log1p(y))

=x,yp(x,y)(log1p(x|y)p(y))

=x,yp(x,y)log1p(x,y)

=H(X,Y)

上面等式的意义是X,Y联合的信息等于Y中的信息加上X中除去Y的信息。

多变量熵的一个重要概念是交互信息(mutual information),它被定义为:

I(X,Y)=H(X)+H(Y)H(X,Y)

=x,yp(x,y)(log1p(x)+log1p(y)log1p(x,y))

=x,yp(x,y)logp(x,y)p(x)p(y)(14)

交互信息表示两个随机变量X,Y之间共享的信息,当X,Y相互独立时,交互信息为0, 当X,Y一一对应时,交互信息最大。
交互信息还可以表示为:

I(X,Y)=H(X)H(X|Y)=H(Y)H(Y|X)

另一个概念是变动信息(variation information),它被定义为:

V(X,Y)=H(X,Y)I(X,Y)

下面的图有助于理解这几个概念:

把式(13)KL距离定义式变换一下:

Dp(q)=Hp(q)H(q)=xq(x)log1p(x)xq(x)log1q(x)

=xq(x)logq(x)p(x)

上式的意义是p的最优编码和q的最优编码在编码同一分布q的消息时编码长度的差。与式(14)对比可以看出,交互信息表示与假设X,Y相互独立(p(x)p(y))相比,了解X,Y之间的相互关系(p(x,y))之后,编码长度可以缩短的量。

交互信息在神经网络中有很多应用,如交互信息最大化原则(Infomax),参看Simon Haykin 《神经网络与机器学习》。

参考文献

[1] colah’s blog Visual Information Theory.

[2] Simon Haykin 《神经网络与机器学习》

原创粉丝点击