了解最大熵模型之前,我们需要先了解一个和最大熵模型相伴的概念,指数家族。
指数家族
指数家族是一个包含我们常见的概率分布的分布族。不管是离散概率分布的代表伯努利分布还是连续概率分布的代表高斯分布,它们都属于指数家族。将其抽象到指数家族这一类会有一些性质,利于求解部分问题。指数家族的基本公式形式为:
p(x∣θ)=h(x)exp(θTϕ(x)−A(θ))
其中h(x)一般被认为是一个简单的乘子项,大多数时候是一个常量。θ表示模型中的参数,ϕ(x)被成为函数的充分统计量(Sufficient Statistic
),A(θ)被称为对数分割函数(Log Partition Function
),一般被用来归一化所有的概率项,具体形式为:
A(θ)=log∫x∈Xh(x)exp(θTϕ(x))dx
那常见的分布模型是如何变换成上述这种形式的呢?
伯努利分布转指数家族
伯努利分布的形式为:
P(X=x)=px(1−p)1−x
其中p表示X=1时的概率,将其做一定变换得到:
P(X=x)=exp(log(px(1−p)1−x))=exp(xlogp+(1−x)log(1−p))=exp(x(logp−log(1−p))+log(1−p)=exp(xlog1−pp−log1−p1)
其中h(x)=1,ϕ(x)=x,θ=log(1−pp),A(θ)=log1−p1=log(1+1−pp)。
高斯分布转指数家族
N(x∣μ,σ2)=2πσ21exp[−2σ2(x−μ)2]=2π1exp[−logσ−2σ2(x−μ)2]=2π1exp[−logσ−2σ21((x2−2xμ+μ2))]=2π1exp[−logσ−2σ21μ2+σ21xμ−2σ21x2]
其中h(x)=2π1,θ=[σ2μ,−2σ21],ϕ(x)=[x,x2],对于A(θ)有:
A(θ)=logσ+2σ21μ2=logσ2+(σ2μ)2×21σ2=−logσ21+θ12×2×σ211=−log−2×−2σ21−θ12×4×−2σ211=−log−2×θ2−θ12×4×θ21=−21log(−2θ2)−4θ2θ12
指数家族的性质
-
A(θ)的一阶导等于ϕ(x)的期望:
∂θ∂A(θ)=∂θ∂(log∫h(x)exp{θTϕ(x)}dx)=exp(A(θ))∫h(x)exp{θTϕ(x)}ϕ(x)dx=∫h(x)exp{θTϕ(x)−A(θ)}ϕ(x)dx=∫p(x∣θ)ϕ(x)dx=Eθ[ϕ(x)]
-
A(θ)的二阶导等于ϕ(x)的方差:
∂θ∂θT∂2A(θ)=∫h(x)exp(θTϕ(x)−A(θ))ϕ(x)(ϕ(x)−∂θ∂A(θ))dx=∫p(x∣θ)ϕ(x)(ϕ(x)−Eθ[ϕ(x)])dx=∫p(x∣θ)ϕ2(x)dx−Eθ[ϕ(x)]∫p(x∣θ)ϕ(x)dx=Eθ[ϕ2(x)]−Eθ2[ϕ(x)]=Varθ[ϕ(x)]
因此,将概率分布以指数家族的形式表达后,ϕ(x)的期望与方差实际上拥有两种解法,一种是直接使用这个函数进行求解,另一种则是采用对数分割函数进行求解。在实际问题中选择一种简便方式即可。
之后为了简便,指数家族采用如下简单的形式:
p(x∣θ)=Z(θ)1h(x)eθTϕ(x)
最大熵模型
设随机变量X的概率分布为P(X),熵可表示为:
H(P)=−X∑P(X)logP(X)
在建立一个概率模型时,往往会伴随一些约束,有时,这些约束的存在并不能得到一个唯一的模型,满足这些条件的模型有很多种,这些模型在约束上的表现基本一致的,而在没有约束的子空间上则表现得不尽相同,那么根据最大熵的思想,没有约束的子空间应该拥有均等的概率,这样就能确定一个唯一的概率分布。
因此最大熵原理为:在满足已知条件的情况下,选取熵最大的模型。而决策树的划分是不断降低实例所属类的不确定性,最终给实例一个合适的分类,是不确定性不断减小的过程,所以选择熵最小的划分。
通常我们希望模型能学习到数据中的分布特性,因此我们可以建立一个约束:模型分布的特征期望和训练样本分布的特征期望相等。其中模型分布的特征期望和训练样本的特征期望可分别表示为:
-
模型分布的特征期望,特征f(x,y)关于模型要建立的概率分布p(y∣x)的特征期望为:
p(f)=x,y∑p~(x)p(y∣x)f(x,y)
-
训练样本分布的特征期望,特征f(x,y)关于训练样本分布p~(x,y)的特征期望为:
p~(f)=x,y∑p~(x,y)f(x,y)=x,y∑N1count(x,y)f(x,y)
这样我们就找到一个约束条件:
x,y∑p~(x,y)f(x,y)=x,y∑p~(x)p(y∣x)f(x,y)
于此同时希望模型的概率分布能最大化熵H(p):
H(p)=−x,y∑p~(x)p(y∣x)logp(y∣x)
此时问题又变成了一个规划问题,其目标函数和约束项可表示为:
p∗=argmaxpH(p)=argmaxp−x,y∑p~(x)p(y∣x)logp(y∣x) s.t. p(y∣x)⩾0,∀x,y∑yp(y∣x)=1,∀x∑x,yp~(x)p(y∣x)f(x,y)=∑x,yp~(x,y)f(x,y),i∈{1,2,…,n}
那怎么求p呢?采用拉格朗日乘子法,得到拉格朗日函数ξ(p,Λ,γ):
ξ(p,Λ,γ)=−x,y∑p~(x)p(y∣x)logp(y∣x)+i=1∑nλi(x,y∑p~(x)p(y∣x)fi(x,y)−x,y∑p~(x,y)fi(x,y))+γ(y∑p(y∣x)−1)
其中Λ表示乘子λ1,⋯,λn的集合。假设Λ和γ不变,对p求导,可以得到:
∂p(y∣x)∂ξ=−p~(x)(logp(y∣x)+1)+i=1∑nλip~(x)fi(x,y)+γ
令导数为0
,可以得到p的极值:
−p~(x)(logp(y∣x)+1)+i=1∑nλip~(x)fi(x,y)+γ=0
整理得到:
p(y∣x)=exp(i=1∑nλifi(x,y))exp(p~(x)γ−1)
再次使用之前关于概率总和为1
的约束∑yp(y∣x)=1,∀x,代入求得:
y∑p(y∣x)→→exp(p~(x)γ−1)=y∑exp(i=1∑nλifi(x,y))exp(p~(x)γ−1)1=y∑exp(i=1∑nλifi(x,y))exp(p~(x)γ−1)=∑yexp(∑i=1nλifi(x,y))1
此时p(y∣x)可表示为:
p(y∣x)=exp(i=1∑nλifi(x,y))∑yexp(∑i=1nλifi(x,y))1
令Z(x)为:
Z(x)=y∑exp(i=1∑nλifi(x,y))
模型最优解为:
p(y∣x)=Z(x)1exp(i=1∑nλifi(x,y))
经过拉格朗日乘子法计算,变量由模型p变成了乘子λ,此时的乘子λ更像是每一个特征的权重项,为每个特征乘一个权重判断数据所属的y的概率值。
最大似然求解
那如何来求取参数λ呢?采用最大似然法求解,模型展开为:
p(y∣x,λ)=∑y′exp[∑iλifi(x,y′)]exp[∑iλifi(x,y)]
最大化对数似然logp(y∣x,λ),可以得到:
logp(Y∣X)=(x,y)∈(X,Y)∑logp(y∣x,λ)=(x,y)∈(X,Y)∑log∑y′exp[∑iλifi(x,y′)]exp[∑iλifi(x,y)]=(x,y)∈(X,Y)∑i∑λifi(x,y)−(x,y)∈(X,Y)∑logy′∑exp[i∑λifi(x,y′)]
对公式进行求导,可以得到:
∂λi∂logP(Y∣X)=∑(x,y)∈(X,Y)fi(x,y)−∑(x,y)∈(X,Y)∑y′′exp[∑iλifi(x,y′′)]1∂λi∂∑y′exp[∑iλifi(x,y′)]=∑(x,y)∈(X,Y)fi(x,y)−∑(x,y)∈(X,Y)∑y′′exp[∑iλifi(x,y′′)]1∑y′exp[∑iλifi(x,y′)]fi(x,y′)=∑(x,y)∈(X,Y)fi(x,y)−∑(x,y)∈(X,Y)∑y′∑y′′exp[∑iλifi(x,y′′)]exp[∑iλifi(x,y′)]fi(x,y′)=∑(x,y)∈(X,Y)fi(x,y)−∑(x,y)∈(X,Y)∑y′p(y′∣x,λ)fi(x,y′)
可以看出,最大似然的梯度等于训练数据分布的特征期望与模型的特征期望的差。当梯度为0时,刚好满足约束条件:
(x,y)∈(X,Y)∑fi(x,y)=(x,y)∈(X,Y)∑y′∑p(y′∣x,λ)fi(x,y′)
所以可以通过梯度下降法,不断迭代更新参数λ。
最大熵似然法
上文已经求出了最大熵模型的目标梯度。令X的数量为dimx,Y的数量为dimy,于是我们可以定义dimx×dimy个特征,每一个特征可以指示一组数据是否存在:
fi,j(x,y)={10i=x 且 j=y 其他情况
模型拥有dimx×dimy个参数λi,j,每一个参数表示对应特征的权重。如果一个样本拥有N个特征,那么我们可以得到某个样本x关于结果yi的概率:
p(yj∣x)=∑jexp(∑iλi,jfi,j(xi,yj))exp(∑iλi,jfi,j(xi,yj))
知道了这个概率,就能计算出一个样本对所有特征的累积量,其中每一个特征累积量为:
fi,j(x)=j∑p(yj∣x)fi,j(xi,yj)
也就可以求出一批样本对所有特征的累积量,其中每一个特征累积量为:
fi,j(X)=(x,y)∼(X,Y)∑j∑p(yj∣x)fi,j(xi,yj)
完整算法如下所示:

参考
- 强化学习精要-核心算法与Tensorflow实现
- http://www.huaxiaozhuan.com/%E7%BB%9F%E8%AE%A1%E5%AD%A6%E4%B9%A0/chapters/14_maxent.html