在学习最大熵模型前,我们需要知道熵是什么,在前面决策树那一节,我们介绍了决策树在选择特征时所采用的三种策略:信息增益、信息增益比和基尼指数,其中信息增益和信息增益比都是基于熵计算的,在那里介绍了熵是表示随机变量不确定性的度量,如果设随机变量 X X X的概率分布为:
P ( X = x i ) = p i , i = 1 , 2 , ⋯ , n P(X=x_i)=p_i,\,\,\,\,\,i=1,2,\cdots,n P(X=xi)=pi,i=1,2,⋯,n
则随机变量 X X X的熵定义为:
H ( X ) = − ∑ i = 1 n p i log p i H(X)=-\sum\limits_{i=1}^n{p_i\log p_i} H(X)=−i=1∑npilogpi
上式的 H ( X ) H(X) H(X)为随机变量 X X X的熵,也反映出随机变量 X X X不确定性的度量,可以理解为无法确定的程度,就像两个事件:一、明天有98%的概率会下雨;二、明天有50%的概率会下雨。明显后者的不确定性更大,那么可以说第二个事件的熵比第一个事件的熵要大。
何为最大熵,那就是使得 H ( X ) H(X) H(X)值达到最大时对应的 X X X分布,也称此模型为最大熵模型。由此我们也可以看出,最大熵模型是用来求解概率模型的,在所有的概率分布中,熵最大的模型就是最好的模型。一般情况下,概率分布都是有一些条件约束的,所以我们也称最大熵原理为在满足约束条件的模型集合中选取熵最大的模型。
为了给出最大熵模型的可学习形式,我们需要一步步进行推导。
假设分类模型是一个条件概率分布 P ( Y ∣ X ) P(Y|X) P(Y∣X), X ∈ χ ∈ R n X\in\chi\in R^n X∈χ∈Rn表示输入, Y Y Y表示输出。也就是说,这个模型就是给定输入 X X X,需要我们以条件概率 P ( Y ∣ X ) P(Y|X) P(Y∣X)输出 Y Y Y。
给定一个数据集
T = { ( x 1 , x 2 ) , ( x 2 , y 2 ) , ⋯ , ( x N , y N ) } T=\{(x_1,x_2),(x_2,y_2),\cdots,(x_N,y_N)\} T={(x1,x2),(x2,y2),⋯,(xN,yN)}
学习的目标就是用最大熵原理选择最好的分类模型。
首先考虑模型应该满足的条件。给定数据集,可以用确定联合概率分布 P ( X , Y ) P(X,Y) P(X,Y)的经验分布和边缘分布 P ( X ) P(X) P(X)的经验分布,分别以 P ~ ( X , Y ) \widetilde P(X,Y) P (X,Y)和 P ~ ( X ) \widetilde P(X) P (X)表示,这里,
P ~ ( X = x , Y = y ) = v ( X = x , Y = y ) N \widetilde P(X=x,Y=y)=\frac{v(X=x,Y=y)}{N} P (X=x,Y=y)=Nv(X=x,Y=y)
P ~ ( X = x ) = v ( X = x ) N \widetilde P(X=x)=\frac{v(X=x)}{N} P (X=x)=Nv(X=x)
其中, v ( X = x , Y = y ) v(X=x,Y=y) v(X=x,Y=y)表示训练数据中样本 ( x , y ) (x,y) (x,y)出现的次数, v ( X = x ) v(X=x) v(X=x)表示训练数据中输入 x x x出现的次数, N N N表示训练样本容量。
用特征函数 f ( x , y ) f(x,y) f(x,y)描述输入 x x x和输出 y y y之间的某一个事实,当 x x x和 y y y均满足一事实时,其值为1,如果有一不满足,其值为0。
特征函数 f ( x , y ) f(x,y) f(x,y)关于经验分布 P ~ ( X , Y ) \widetilde P(X,Y) P (X,Y)的期望值,用 E P ~ ( f ) E_{\widetilde P}(f) EP (f)表示:
E P ~ ( f ) = ∑ x , y P ~ ( x , y ) f ( x , y ) E_{\widetilde P}(f)=\sum\limits_{x,y}{\widetilde P(x,y)f(x,y)} EP (f)=x,y∑P (x,y)f(x,y)
特征函数 f ( x , y ) f(x,y) f(x,y)关于模型 P ( Y ∣ X ) P(Y|X) P(Y∣X)与经验分布 P ~ ( X ) \widetilde P(X) P (X)的期望值,用 E P ( f ) E_P(f) EP(f)表示:
E p ( f ) = ∑ x , y P ~ ( x ) P ( y ∣ x ) f ( x , y ) E_p(f)=\sum\limits_{x,y}{\widetilde P(x)P(y|x)f(x,y)} Ep(f)=x,y∑P (x)P(y∣x)f(x,y)
如果模型能够获取训练数据中的信息,那么就可以假设这两个期望值相等,即:
E P ( f ) = E P ~ ( f ) E_P(f)=E_{\widetilde P}(f) EP(f)=EP (f)
从上面两个期望值可以看出,第一个是联合概率分布,在满足合适的条件时,两个期望值相等。
在《统计学习方法》这本书中,称这为模型的约束条件,其实 这一部分很好理解,你可以就把它当作一个约束条件来看,只不过这个约束条件要让概率满足某种关系,更主要的模型还在后面。
假设满足所有约束条件的模型集合为:
C = { P ∈ P ∣ E p ( f i ) = E P ~ ( f i ) , i = 1 , 2 , ⋯ , n } C = \{P\in {\rm P}|E_p(f_i)=E_{\widetilde P}(f_i),\,\,\,\,i=1,2,\cdots,n\} C={P∈P∣Ep(fi)=EP (fi),i=1,2,⋯,n}
定义在条件概率分布 P ( Y ∣ X ) P(Y|X) P(Y∣X)上的条件熵为:
H ( P ) = − ∑ x , y P ~ ( x ) P ( y ∣ x ) log P ( y ∣ x ) H(P) = -\sum\limits_{x,y}{\widetilde P(x)P(y|x)\log P(y|x)} H(P)=−x,y∑P (x)P(y∣x)logP(y∣x)
则集合 C C C中条件熵最大的模型称为最大熵模型,这里的对数为自然对数。
第一个式子是找到所有满足约束条件的概率分布,第二个式子即计算熵的公式,我们需要找到熵最大的概率分布。
在上一节中,我们学习到要想解决最大熵模型,其实就是找到熵最大的概率分布,那么如何找到最大的熵呢?总不能把所有的概率分布全部列出来,然后一个一个计算条件熵吧,这样做实在是太慢了。既然无法通过遍历的方法找到最大熵,那么我们可以将上面的第二个式子转化为一个优化模型,即定义下面的优化模型:
对于给定的特征训练集 T = { ( x 1 , x 2 ) , ( x 2 , y 2 ) , ⋯ , ( x N , y N ) } T=\{(x_1,x_2),(x_2,y_2),\cdots,(x_N,y_N)\} T={(x1,x2),(x2,y2),⋯,(xN,yN)}以及特征函数 f i ( x , y ) , i = 1 , 2 , ⋯ , n f_i(x,y),i=1,2,\cdots,n fi(x,y),i=1,2,⋯,n,最大熵模型的学习等价于约束最优化问题:
max P ∈ C H ( P ) = − ∑ x , y P ~ ( x ) P ( y ∣ x ) log P ( y ∣ x ) s . t E p ( f i ) = E P ~ ( f i ) , i = 1 , 2 , ⋯ , n ∑ y P ( y ∣ x ) = 1 \mathop {\max }\limits_{P \in C} H(P)=-\sum\limits_{x,y}{\widetilde P(x)P(y|x)\log P(y|x)}\\ s.t\,\,\,\,\,\,\,\,\,E_p(f_i)=E_{\widetilde P}(f_i),\,\,\,\,\,\,\,i=1,2,\cdots,n\\ \sum\limits_{y}P(y|x)=1 P∈CmaxH(P)=−x,y∑P (x)P(y∣x)logP(y∣x)s.tEp(fi)=EP (fi),i=1,2,⋯,ny∑P(y∣x)=1
按照最优化问题的习惯,将求最大值问题改写为等价的求最小值问题:
min P ∈ C − H ( P ) = ∑ x , y P ~ ( x ) P ( y ∣ x ) log P ( y ∣ x ) s . t E p ( f i ) = E P ~ ( f i ) , i = 1 , 2 , ⋯ , n ∑ y P ( y ∣ x ) = 1 \mathop {\min }\limits_{P \in C} -H(P)=\sum\limits_{x,y}{\widetilde P(x)P(y|x)\log P(y|x)}\\ s.t\,\,\,\,\,\,\,\,\,E_p(f_i)=E_{\widetilde P}(f_i),\,\,\,\,\,\,\,i=1,2,\cdots,n\\ \sum\limits_{y}P(y|x)=1 P∈Cmin−H(P)=x,y∑P (x)P(y∣x)logP(y∣x)s.tEp(fi)=EP (fi),i=1,2,⋯,ny∑P(y∣x)=1
上面的式子看上去是不是很熟悉,没错,在SVM的数学形式其实就是这样。回想一下,在SVM中,我们利用拉格朗日乘数法将原问题转化为无约束优化的对偶问题。通过求解对偶问题求解原始问题。为什么要这么做呢?这是因为在原始问题上,求解过程中一直存在约束条件,如果将约束条件消去,那么求解过程将会简单很多。
借助SVM中的思想,我们这里理解起来将会容易很多。
首先第一步,引入拉格朗日乘子 w 0 , w 1 , w 2 , ⋯ , w n w_0,w_1,w_2,\cdots,w_n w0,w1,w2,⋯,wn,定义拉格朗日函数 L ( P , w ) : L(P,w): L(P,w):
L ( p , w ) ≡ − H ( p ) + w 0 ( 1 − ∑ y P ( y ∣ x ) ) + ∑ i = 1 n w i ( E P ~ ( f i ) − E P ( f i ) ) = ∑ x , y P ~ ( x ) P ( y ∣ x ) log P ( y ∣ x ) + w 0 ( 1 − ∑ y P ( y ∣ x ) ) + ∑ i = 1 n w i ( ∑ x , y P ~ ( x , y ) f i ( x , y ) − ∑ x , y P ~ ( x ) P ( y ∣ x ) f i ( x , y ) ) \begin{aligned}L(p,w) &\equiv -H(p)+w_0(1-\sum\limits_{y}{P(y|x)})+\sum\limits_{i=1}^n{w_i(E_{\widetilde P}(f_i)-E_P(f_i))}\\ & = \sum\limits_{x,y}{\widetilde P(x)P(y|x)\log P(y|x)}+w_0(1-\sum\limits_{y}P(y|x))\\ &+\sum\limits_{i=1}^n{w_i(\sum\limits_{x,y}{\widetilde P(x,y)f_i(x,y)-\sum\limits_{x,y}\widetilde P(x)P(y|x)f_i(x,y)})} \end{aligned} L(p,w)≡−H(p)+w0(1−y∑P(y∣x))+i=1∑nwi(EP (fi)−EP(fi))=x,y∑P (x)P(y∣x)logP(y∣x)+w0(1−y∑P(y∣x))+i=1∑nwi(x,y∑P (x,y)fi(x,y)−x,y∑P (x)P(y∣x)fi(x,y))
很明显引入了拉格朗日数有 w 0 w_0 w0和 w i w_i wi将等式约束放在了目标函数后面,然后形成了一个新的损失函数 L ( p , w ) L(p,w) L(p,w),原始问题为 min P ∈ C max w L ( P , w ) \min\limits_{P\in C}\max\limits_{w}L(P,w) P∈CminwmaxL(P,w)转化后的对偶问题为: max w min P ∈ C L ( p , w ) \max\limits_{w}\min\limits_{P\in C}L(p,w) wmaxP∈CminL(p,w)由于拉格朗日函数 L ( p , w ) L(p,w) L(p,w)是一个凸函数,所以原始问题和对偶问题是等价的。
上面讲原始问题转化为求解下面的对偶问题:
max w min P ∈ C L ( p , w ) \max\limits_{w}\min\limits_{P\in C}L(p,w) wmaxP∈CminL(p,w)
求解思路和SVM中类似,首先求解内部的最小化问题 min P ∈ C L ( p , w ) \min\limits_{P\in C}L(p,w) P∈CminL(p,w),这个函数的自变量是概率分布 P P P,加上该函数是凸函数,那么我可以用求偏导等于0的方法找到极值,具体的对函数求 L ( p , w ) L(p,w) L(p,w)对 P ( y ∣ x ) P(y|x) P(y∣x)的偏导,得到:
∂ L ( P , w ) ∂ P ( y ∣ x ) = ∑ x , y P ~ ( x ) ( log P ( y ∣ x ) + 1 ) − ∑ y w 0 − ∑ x , y ( P ~ ( x ) ∑ i = 1 n w i f i ( x , y ) ) = ∑ x , y P ~ ( x ) ( log P ( y ∣ x ) + 1 − w 0 − ∑ i = 1 n w i f i ( x , y ) ) \begin{aligned} \frac{\partial L(P,w)}{\partial P(y|x)}&=\sum\limits_{x,y}{\widetilde P(x)(\log P(y|x)+1)}-\sum\limits_{y}w_0-\sum\limits_{x,y}(\widetilde P(x)\sum\limits_{i=1}^nw_if_i(x,y))\\ &=\sum\limits_{x,y}\widetilde P(x)(\log P(y|x)+1-w_0-\sum\limits_{i=1}^nw_if_i(x,y)) \end{aligned} ∂P(y∣x)∂L(P,w)=x,y∑P (x)(logP(y∣x)+1)−y∑w0−x,y∑(P (x)i=1∑nwifi(x,y))=x,y∑P (x)(logP(y∣x)+1−w0−i=1∑nwifi(x,y))
令偏导数等于0,在 P ~ ( x ) > 0 \widetilde P(x)>0 P (x)>0的情况下,解得:
P ( y ∣ x ) = exp ( ∑ i = 1 n w i f i ( x , y ) + w 0 − 1 ) = exp ( ∑ i = 1 n w i f i ( x , y ) ) exp ( 1 − w 0 ) P(y|x)=\exp(\sum\limits_{i=1}^n{w_if_i(x,y)+w_0-1})=\frac{\exp(\sum\limits_{i=1}^nw_if_i(x,y))}{\exp(1-w_0)} P(y∣x)=exp(i=1∑nwifi(x,y)+w0−1)=exp(1−w0)exp(i=1∑nwifi(x,y))
由于 ∑ y P ( y ∣ x ) = 1 \sum\limits_{y}{P(y|x)=1} y∑P(y∣x)=1,因此右边的式子所有的 y y y相加等于1,而分母不与 y y y的取值有关,于是为了构造满足条件的式子,我们将分母写成:
Z w = ∑ y exp ( ∑ i = 1 n w i f i ( x , y ) ) Z_w=\sum\limits_{y}\exp(\sum\limits_{i=1}^nw_if_i(x,y)) Zw=y∑exp(i=1∑nwifi(x,y))
且有每一个分量 y y y:
P w ( y ∣ x ) = 1 Z w ( x ) exp ( ∑ i = 1 n w i f i ( x , y ) ) P_w(y|x)=\frac{1}{Z_w(x)}\exp(\sum\limits_{i=1}^n{w_if_i(x,y)}) Pw(y∣x)=Zw(x)1exp(i=1∑nwifi(x,y))
到这里我们就已经得到求解对偶问题的第一步结果,即内部最小值,其解就是上面的值,将该值带入原始问题中,得到只有参数 w w w的损失函数 L ( w ) L(w) L(w),此时就可以再用优化方法求解无约束模型了,是不是很简单了。
最大化问题 L ( w ) L(w) L(w),即也可以用求偏导等于0的方法,假设最优解为 w ∗ w^* w∗,那么概率分布 P w ∗ ( y ∣ x ) P_{w^*}(y|x) Pw∗(y∣x)就是学习的最大熵模型。