3月机器学习在线班第六课笔记--信息熵与最大熵模型
机器学习
信息熵
信息是个很抽象的概念。人们常常说信息很多,或者信息较少,但却很难说清楚信息到底有多少。比如一本五十万字的中文书到底有多少信息量。直到1948年,香农提出了“信息熵”的概念,才解决了对信息的量化度量问题。(百度百科)
香农定义的信息熵的计算公式如下:
H(X)=−∑p(xi)log(p(xi)) (i=1,2,…,n)
其中
X 表示的是随机变量,随机变量的取值为
(x1,x2,…,xn) ,p({x_i}) 表示事件
xi发生的概率,且有
∑p(xi)=1 。信息熵的单位为bit。
说实在的,在听课的时候对这个概念一直是懵懵懂懂的,一直跨不过去。现在查找一些资料,希望能够通过笔记让自己清楚该概念。首先的疑问就是:为什么这样表达?
首先定义事件
xi的
信息量为其发生概率对数的负数,记为I(x_i),有:
I(xi)=−logp(xi)
有了该定义,可以发现信息熵
H(X)即为随机变量
X的平均信息量(期望)。那么疑问就变成:为什么
−logp(xi)可以表示为事件
xi的信息量?
其实这挺好理解:事件xi的信息量大小和它发生的概率(不确定性)有直接的关系。比如说,要搞清楚一件非常不确定的事,或是一无所知的事情,就需要了解大量的信息。相反,如果对某件事已经有较多了解,我们不需要太多的信息就能把它搞清楚。即信息量函数应该与事件概率成单调递减关系。同时,两个独立事件xi,xj(满足p(xi,xj)=p(xi)∗p(xj))的信息量大小应等于各自信息量之和。那么同时符合以上要求的是I(xi)=−logp(xi)。
在香农1948年的论文《A Mathematical Theory of Communication》中,他通过论证信息熵函数需要满足的多条性质,推导出信息熵公式的唯一性。有兴趣的可以看看。
为了更好的理解,我们举例说明:
随机变量为均匀分布
在《数学之美》中的例子:假如我错过了看世界杯,赛后我问一个知道决赛结果的观众“哪支球队是冠军?”他不愿意直接告诉我,而是让我猜,每猜一次需要1bit,他的回答是以下2个中的一个:是,否。假设我对这32支球队一无所知,即我认为每支球队获得冠军的概率是相等的,那么我至少需要付多少bit给他才能知道谁是冠军?
我把球队编号为1到32,然后使用折半查找法的原理(如:”冠军队在1-16吗?”)每一次就可以减少一半的队伍,这样只需要5次,就能够知道冠军球队。也就是说,谁是世界杯冠军这条信息的信息量只值5bit。代入计算公式,在这种情况下(等概率假设)得到的信息熵即为5bit。
课堂上,邹博老师给出的一个例子:
有五个硬币,四个等重,另外一个是假币所以质量相比其他4个要轻。我事先不知道关于任何硬币的信息(即认为每一个硬币是假币的概率都是1/5)。这个例子和之前的猜球队冠军有一些相似,我也是需要经过询问才能得到答案,且每问一次需要付1bit。但不同之处在于,现在我可以询问的对象变成了天平,天平每一次能够比较两堆硬币,且能够给出3个结果中的一个:左边比右边重,右边比左边重,两边同样重。问我至少需要付多少bit就能够确保知道哪个是假币?
我们通过自己的计算可知道,如果幸运的话我只需要1bit就能够把假币测出来(天平左右各两个硬币,结果等重,那么假币即为天平外的一个),但是通常情况下需要2bit才能知道假币。这个时候,会发现不能够按照之前的预测世界杯冠军的方式来计算信息熵了(按照之前的方法直接计算得到log25>2),毕竟之前问观众只能给出2种结果,现在问天平能够给出3种结果啊,需要的bit应该更少。
实际上不仅仅需要关心随机变量的信息熵,还应该关心被询问对象(例子中观众、天平)的表达能力(即被询问对象的信息熵)。正确的表达式应该是:
H(X)H(Y)
其中
X为随机变量,
Y为被询问对象。该问题最终得到的结果是
H(X)H(Y)=log25log23=1.46。世界杯冠军问题中之所以只计算随机变量的信息熵是因为被询问对象的信息熵刚好是1(
H(Y)=log22),所以忽略了。在计算机领域和通信领域,被询问对象一般都只能给出{0,1}两种结果,其信息熵为1,由此直接忽略。特殊情况下的忽略不代表不存在。
随机变量不再是均匀分布
有五个硬币,四个等重,另外一个是假币所以质量相比其他4个要轻。已知第一个硬币和第二个硬币是假硬币的概率为1/3,其他硬币为假硬币的概率为1/9。天平每一次能够比较两堆硬币,且能够给出3个结果中的一个:左边比右边重,右边比左边重,两边同样重。问我至少需要付多少bit就能够确保知道哪个是假币?
由于之前已经分析过,直接带入上面的计算公式即可得:
H(X)H(Y)=−(13log213)∗2−(19log219)∗3log23=1.333
也就是说,实际编码过程中需要2个bit来存储每一次。
在经典熵的定义式中,对数的底是2,单位为bit。在我们之后的例子中,为了方便分析使用底数e。如果底数为e,那么单位是nat(奈特)。重新写一遍信息熵的公式:
H(X)=−∑p(xi)ln(p(xi)) (i=1,2,…,n)
为此,我们来研究研究函数
f(x)=xln(x),看看图像长啥样。由信息熵的公式及定义,可以发现此时的
x 表示的是事件发生的概率,有
x∈[0,1]。求导分析:
f′(x)=lnx+1,f′′(x)=1x>0;由此发现
f(x)是凸函数。令
f′(x)=0可得
x=1e。由于
limx→0f(x)=0,我们定义
f(0)=0 。最后经过采样可得图像如下:
信息熵的总体理解
从之前的分析可以看出,熵其实定义了一个函数(概率分布函数p(x))到一个值(信息熵H(X))的映射。而且从表达式中可以知道:随机变量不确定性越大,p(x)越小,熵值越大。由此,熵是随机变量不确定性的度量。一种极限情况是:当随机变量退化为定值时(概率为1),那么此时的熵值为0。另一个极限就是:当随机变量服从均匀分布的时候,此时的熵值最大。
让我们以较为熟悉的随机变量分布来举例说明信息熵:
两点分布的熵
假设两点分布中p(X=1)=q,直接将概率分布函数代入信息熵公式可得:
H(X)=−∑x∈Xp(x)ln(p(x))=−qlnq−(1−q)ln(1−q)
通过随机采样可以得到图像:
通过对图像的分析可以印证我们之前的结论:当
p(X=1)=0.5,二点分布即为均匀分布,此时对应于图像中熵的最大值;当
p(X=1)=1或
p(X=1)=0时,二点分布退化为确定性分布,那么此时的熵为0.
联合熵、条件熵和相对熵
之前定义了单个随机变量的熵,现在将定义推广到两个随机变量的情形。对于服从联合分布为p(x,y)的一对离散随机变量(X,Y) ,其联合熵定义为:
H(X,Y)=−∑x∈X,y∈Yp(x,y)ln(p(x,y))
上式也可以表示为:
H(X,Y)=−E(logp(x,y)).
我们也可以定义一个随机变量在给定另一个随机变量下的
条件熵,它是条件分布上关于起条件作用的那个随机变量取平均之后的期望值。
定义:若 (X,Y)∼p(x,y),条件熵定义为:
H(Y|X)=∑x∈Xp(x)H(Y|X=x)=−∑x∈Xp(x)∑y∈Yp(y|x)logp(y|x)=−∑x∈X∑y∈Yp(x,y)logp(y|x)
联合熵和条件熵的定义的这个自然性可由一个事实得到体现:一对随机变量的熵等于其中一个随机变量的熵加上另一个随机变量的条件熵,即:
H(X,Y)=H(X)+H(Y|X)(链式法则)。其证明见如下:
H(X,Y)=−∑x∈X∑y∈Yp(x,y)logp(x,y)=−∑x∈X∑y∈Yp(x,y)logp(x)p(y|x)=−∑x∈X∑y∈Yp(x,y)logp(x)−∑x∈X∑y∈Yp(x,y)logp(y|x)=−∑x∈Xp(x)logp(x)−∑x∈X∑y∈Yp(x,y)logp(y|x)=H(X)+H(Y|X)
相对熵是两个随机分布之间距离的度量。假设
p(x),q(x) 是随机变量
X中取不同值时的两个概率分布,那么
p对
q的相对熵是:
D(p||q)=∑xp(x)logp(x)q(x)=Ep(x)logp(x)q(x)
在上述定义中,我们约定:
0log00=0,0log0q=0,0logp0=∞(基于连续性)。因此,如果存在
x∈X使得
p(x)>0,q(x)=0,则有
D(p||q)=∞。
可以通过证明知道相对熵总是非负的,而且,当且仅当
p=q时为零。但是由于相对熵并不对称(一般
D(p||q)≠D(q||p) ),而且也不满足三角不等式,因此它实际上并不是两个分布之间的真正距离。然而,将相对熵视作分布之间的“距离”往往会很有用。
互信息
互信息是一个随机变量包含另一个随机变量信息量的度量。互信息也是在给定另一个随机变量知识的条件下,原随机变量不确定度的缩减量。(为什么这么说,接下来会有解释。)
定义:考虑两个随机变量X和Y,它们的联合概率密度函数为p(x,y),其边缘概率密度函数分别为p(x),p(y)。互信息I(x,y)为联合分布p(x,y)和乘积分布 p(x)p(y)之间的相对熵,即:
I(X;Y)=∑x∈X∑y∈Yp(x,y)logp(x,y)p(x)p(y)=D(p(x,y)||(p(x)p(y)))=Ep(x,y)logp(X,Y)p(X)p(Y)
通过查看表达式,即可知道互信息具有对称性,即 。同样可以简单证明得互信息的非负性,这里省略。
熵与互信息的关系
可将互信息I(x,y)重新写为:
I(X;Y)=∑x∈X,y∈Yp(x,y)logp(x,y)p(x)p(y)=∑x∈X,y∈Yp(x,y)logp(x|y)p(x)=−∑x∈X∑y∈Yp(x,y)logp(x)+∑x∈X∑y∈Yp(x,y)logp(x|y)=−∑x∈Xp(x)logp(x)−(−∑x∈X∑y∈Yp(x,y)logp(x|y))=H(X)−H(X|Y)
由此可见,互信息息
I(x,y)是在给定另一个随机变量
Y知识的条件下,
X 不确定度的缩减量。
由于互信息的对称性,可得:
I(X;Y)=I(Y;X)=H(Y)−H(Y|X)
由于之前已经得到表达式
H(X,Y)=H(X)+H(Y|X),代入上式可得:
I(X;Y)=H(X)+H(Y)−H(X,Y)
我们把之前的一些重要表达式都放在一块:
I(X;Y)=H(X)−H(X|Y)I(X;Y)=H(Y)−H(Y|X)I(X;Y)=H(X)+H(Y)−H(X,Y)I(X;Y)=I(Y;X)
实际上,韦恩图可以很好地表示以上各变量之间的关系,对着上面的公式,应该可以很好理解下面的图表达的含义。
最大熵模型
当我们需要对一个随机事件的概率分布做出预测的时候,我们的预测应当满足全部一致的条件,而对未知的情况不要做任何主观的假设。在这种情况下,概率分布最均匀,预测的风险最小。因为这个时候分布的信息熵是最大的,所以人们称满足上述条件要求的模型就是“最大熵模型”。“最大熵模型”的核心两点:1.承认已知事物(或知识);2.对未知事物不做任何假设,没有任何偏见。 It agrees with everything that is known, but carefully avoids assuming anything that is not known.
我们常说,不要把所有的鸡蛋放在一个篮子里,其实就是最大熵原理的一个朴素说法,因为当我们遇到不确定性时,就要保留各种可能性。说白了,就是保留全部的不确定性,将风险降到最小。--摘自《Google黑板报》作者:吴军。
如何引入最大熵模型呢?我们使用NLP(自然语言处理)中的例子来说明:
“学习”这个词可能是动词,也可能是名词。另一方面,“学习”这个词可以被标为主语、谓语、宾语、定语。
令x1表示“学习”被标成名词,x2表示“学习”被标成动词。令y1表示“学习”被标为主语,y2 表示被标为谓语,y3表示宾语,y4表示定语。得到下面的表示:
p(x1)+p(x2)=1∑i=14p(yi)=1
如果没有其他的知识,根据信息熵的理论,概率趋向于均匀。所以有:
p(x1)=p(x2)=0.5p(y1)=p(y2)=p(y3)=p(y4)=0.25
但是在实际情况中,“学习”被标为定语的可能性很小,只有0.05。我们引入这个新的知识: ,在满足了这个约束的情况下,其他的事件我们尽可能的让他们符合自然,符合均匀分布(无偏原则):
p(x1)=p(x2)=0.5p(y1)=p(y2)=p(y3)=0.953
再加入一个知识:当“学习”被标作动词的时候,它被标作谓语的概率为0.95。这个其实是很自然的事情。都已经是动词了,那么是谓语的可能性就很大了:
p(y2|x1)=0.95
已经有了两个知识了,第二个还是条件概率相关的知识。就像最大熵模型的核心两点所述,已知的知识点我需要承认,未知的部分不做任何假设,保持无偏(让概率尽量分布平均)。我们现在需要做的就是:在满足这两个已知知识点的前提下,让剩余的概率符合尽可能的均匀分布。可以想象,随着已知的知识点越来越多,其实也就是约束越来越多,求解的过程会变得越来越复杂。那么该怎么做呢?其实就是使得熵尽可能的大就行了。写成表达式即为:
我们要一个x和y 的分布,满足:
p(x1)+p(x2)=1 ∑i=14p(yi)=1p(y2|x1)=0.95 p(y4)=0.05
而且使得H(Y|X)达到最大值。
以上表达中,一般我们用H(Y|X),其实这跟用H(X,Y) 是一个效果。因为根据之前推导可得H(X,Y)=H(Y|X)+H(X),而X是训练集合,分布已经知道的(记住,我们认为训练集合是有代表性的),所以H(X) 是一个定值。由此,令H(Y|X)最大相当于令H(X,Y) 最大。
最后的数学表达式为:
maxH(Y|X)=−∑x,yp(x,y)logp(y|x) p(x1)+p(x2)=1p(y1)+p(y2)+p(y3)+p(y4)=1 p(y4)=0.05 p(y2|x1)=0.95
上面的表达式仅仅针对某一个NLP的特例。最大熵模型Maxent(Maximum Entropy)的一般式为:
maxp∈PH(Y|X)=−∑(x,y)p(x,y)logp(y|x)
其中,
P={p|p是X上满足条件的概率分布} 。注意区分这里的
P和
p。
为了进一步说明最大熵模型在NLP中的应用,我们给出一些在NLP中的常用的定义,以此推出最大熵模型的一个约束条件的具体表达式:
- 特征:(x,y)
x:这个特征中的上下文信息(已知部分)
y:这个特征中需要确定的信息(未知部分)
- 样本:关于某个特征(x,y)的样本,特征所描述的语法现象在标准集合里的分布;
也就是(xi,yi)对,形如:(x1,y1),(x2,y2),(x3,y3)... 其中yi是y的一个实例,xi是yi的上下文信息。
- 特征函数:对于一个特征(xi,yi),定义特征函数:
f(x,y)={10x=xi and y=yielse
这个特征函数很简单,只有当x=xi and y=yi 时候为1,其他均为0。该函数为接下来的样本特征期望值做铺垫。
- 样本特征函数期望值:对于一个特征(xi,yi),在样本中的特征函数期望值是:
p¯(f)=∑(xi,yi)p¯(x,y)f(x,y)
其中p¯(x,y)是(x,y)在样本中出现的概率。由特征函数的定义,可以很好理解上式,求解的即为特征(xi,yi)在样本中出现的概率,也可以看成是特征函数的期望值。
条件Constraints:
对每个特征(x,y),模型所建立的特征函数的期望值必须与训练样本特征函数期望值相等,即p(f)=p¯(f)。
特征f在模型中的特征函数期望值为:
p(f)=∑(xi,yi)p¯(x)p(y|x)f(x,y)
其中,
p¯(x)表示样本中
x出现的概率,而
p(y|x)则是模型中需要求解的条件概率。
由条件Constraints中的要求,可得:
p(f)=p¯(f)。即:
∑(xi,yi)p¯(x)p(y|x)f(x,y)=∑(xi,yi)p¯(x,y)f(x,y)
上面这个等式就是最大熵模型中的限制条件,那么最大熵模型的完整提法是:
p∗=argmaxp∈PH(Y|X)=−∑(x,y)p(x,y)logp(y|x)=−∑(x,y)p(y|x)p¯(x)logp(y|x)其中P={p(y|x)|∀fi:∑(x,y)p¯(x)p(y|x)fi(x,y)=∑(x,y)p¯(x,y)fi(x,y),∀x:∑yp(y|x)=1}fi表示特征函数。
求解最大熵模型
我们使用Lagrange乘子法来求解,该条件约束优化问题的Lagrange函数为:
Λ(p,λ⃗ )=H(Y|X)+∑i=1mλi(E(fi)−E¯(fi))+λ0(∑yp(y|x)−1)
其中参数
p表示
p(y|x),
λ⃗ 表示
λ的向量形式,即:
L=∑(x,y)p(y|x)p¯(x)log1p(y|x)+∑i=1mλi∑(x,y)fi(x,y)[p¯(x)p(y|x)−p¯(x,y)]+λ0⎡⎣∑yp(y|x)−1⎤⎦
按照Lagrange乘子法的思路,对参数
p 求偏导,可得:
∂L∂p(y|x)=p¯(x)(−logp(y|x)−1)+∑i=1mλip¯(x)fi(x,y)+λ0=Δ0⇒p∗(y|x)=exp(∑i=1mλifi(x,y)+λ0p¯(x)−1)=exp(∑i=1mλifi(x,y))exp(λ0p¯(x)−1)
可以看出p∗(y|x)表达式的第二个因子对应的是约束∑yp∗(y|x)=1。将p∗(y|x)表达式带入到∑yp∗(y|x)=1,可求得:
∑yexp(∑i=1mλifi(x,y))exp(λ0p¯(x)−1)=1exp(λ0p¯(x)−1)=1∑yexp(∑mi=1λifi(x,y))
令
Zλ(x)=∑yexp(∑mi=1λifi(x,y))可得:
p∗(y|x)=1Zλ(x)exp(∑iλifi(x,y))
经过这个步骤,我们似乎已经求得了最优的最大熵模型中p∗(y|x) 的表达式,但是,请注意的是参数λ⃗ 并没有求解得到,p∗(y|x)的表达式依赖于参数λ⃗ 。下一步,如果我们能够求解出λ⃗ ,那么问题才算真正解决。
关于参数λ⃗ 的求解,我们使用对偶函数来帮助我们解决。将已经求得的p∗(y|x) 的表达式代入到Lagrange函数中,可得到以上问题的对偶函数L(λ)为
L(λ)=−∑x,yp(y|x)p¯(x)logp(y|x)+∑i=1kλi∑x,yfi(x,y)[p(y|x)p¯(x)−p¯(x,y)]+λ0⎡⎣∑yp(y|x)−1⎤⎦=−∑x,ypλ(y|x)p¯(x)logpλ(y|x)+∑i=1kλi∑x,yfi(x,y)[pλ(y|x)p¯(x)−p¯(x,y)]=−∑x,yp¯(x)pλ(y|x)logpλ(y|x)+∑i=1kp¯(x)pλ(y|x)λi∑x,yfi(x,y)−∑i=1kp¯(x,y)λi∑x,yfi(x,y)=−∑x,yp¯(x)pλ(y|x)logpλ(y|x)+∑x,yp¯(x)pλ(y|x)∑i=1kλifi(x,y)−∑i=1kp¯(x,y)λi∑x,yfi(x,y)=∑x,yp¯(x)pλ(y|x)logZλ(x)−∑i=1kp¯(x,y)∑x,yλifi(x,y)
上述表达式中,
Zλ(x)=∑yexp(∑mi=1λifi(x,y))
因为没有显式的解析式,我们使用IIS (Improved Iterative Scaling) 改进的迭代尺度算法来计算最大熵模型的数值解。具体做法是:
假设最大熵模型当前的参数向量是
λ⃗ ,希望能够找到新的参数向量
λ⃗ +δ ,使得对偶函数
L增加。重复这个过程,直到找到对偶函数的最大值。
L(λ+δ)−L(λ)=∑x,yp¯(x,y)∑i=1nδifi(x,y)−∑xp¯(x)logZλ+δ(x)Zλ(x)≥∑x,yp¯(x,y)∑i=1nδifi(x,y)+1−∑xp¯(x)Zλ+δ(x)Zλ(x)=∑x,yp¯(x,y)∑i=1nδifi(x,y)+1−∑xp¯(x)Zλ+δ(x)Zλ(x)=∑x,yp¯(x,y)∑i=1nδifi(x,y)+1−∑xp¯(x)exp(∑i=1nδifi(x,y))=∑x,yp¯(x,y)∑i=1nδifi(x,y)+1−∑xp¯(x)∑ypλ(y|x)exp(∑i=1nδifi(x,y))
为进一步推导,我们打算针对凸函数
f(x)=ex使用Jensen不等式,令
f#(x,y)=∑mi=1fi(x,y),可得:
A(δ|λ)=∑x,yp¯(x,y)∑i=1nδifi(x,y)+1−∑xp¯(x)∑ypλ(y|x)exp(∑i=1nδifi(x,y))=∑x,yp¯(x,y)∑i=1nδifi(x,y)+1−∑xp¯(x)∑ypλ(y|x)exp(f#(x,y)∑i=1nδifi(x,y)f#(x,y))≥∑x,yp¯(x,y)∑i=1nδifi(x,y)+1−∑xp¯(x)∑ypλ(y|x)∑i=1nfi(x,y)f#(x,y)exp(δif#(x,y))
接下来,对该下界求偏导,令偏导为0,求出相应的δ。这么做的原因是:每一次迭代的δ 都能够令相邻两次迭代的函数值之间的差值L(λ+δ)−L(λ)尽可能大,也就是通过每一次迭代的δ尽快达到L最大。令
B(δ|λ)=∑x,yp¯(x,y)∑i=1nδifi(x,y)+1−∑xp¯(x)∑ypλ(y|x)∑i=1nfi(x,y)f#(x,y)exp(δif#(x,y))
对
δ求偏导,得:
∂B(δ|λ)∂δi=∑x,yp¯(x,y)fi(x,y)−∑xp¯(x)∑ypλ(y|x)fi(x,y)exp(δif#(x,y))=∑x,yp¯(x,y)fi(x,y)−∑x,yp¯(x)pλ(y|x)fi(x,y)exp(δif#(x,y))=Ep¯(fi)−∑x,yp¯(x)pλ(y|x)fi(x,y)exp(δif#(x,y))
令偏导为0,得到:
∑x,yp¯(x)pλ(y|x)fi(x,y)exp(δif#(x,y))−Ep¯(fi)=0
分情况讨论:
- 若f#(x,y)=M为常数,那么:
δi=1MlogEp¯(fi)Ep(fi)
- 若f#(x,y)不是常数,那么无法直接求得令偏导为0时候δ的值,令偏导表示为
g(δi)=∑x,yp¯(x)pλ(y|x)fi(x,y)exp(δif#(x,y))−Ep¯(fi)
转化为求解g(δi)=0 的根。使用牛顿法:
δi(k+1)=δi(k)−g(δi(k))g′(δi(k))
因为需要计算g(δi)=0的根而不是求g(δi) 的极小值,所以牛顿法中是函数值除以一阶导,而不是一阶导除以二阶导。实践中,可采用拟牛顿法BFGS解决。
将上述求解过程中得到的参数λ⃗ ,回代到下式中,即可得到最大熵模型的最优估计:
p∗(y|x)=1Zλ(x)e∑iλifi(x,y)Zλ(x)=∑ye∑iλifi(x,y)
参考文献:
《统计学习方法》,李航著,清华大学出版社,2012年
A Mathematical Theory of Communication,shannon,1948