最大熵模型

目录

  • 基本原理
  • 模型推导
  • 模型应用
  • 学习算法
  • 模型实现python

基本原理

最大熵模型的基本原理是:在只掌握关于未知分布的部分信息的情况下,符合已知知识的概率分布可能有多个,但使熵值最大的概率分布最真实地反映了事件的分布情况,因为熵定义了随机变量的不确定性,当熵最大时,随机变量最不确定,最难准确地预测其行为.也就是说,在已知部分信息的前提下,关于未知分布最合理的推断应该是符合已知信息最不确定或最大随机的推断.

例子:
  如果有一个正6面体骰子,其他什么信息也没有,那么根据最大熵原理,可以知道概率均等的时候熵最大,我们最好推测每个面朝上的概率是1/6(这也是符合我们基本的生活常识的)
  但是如果我们给一个信息,说4点朝上的概率是1/3,由于我们不知道其他面的情况,那么这时对于骰子正面朝上点数的概率分布我们只能依据最大熵的准则来推测,也就是说其他的几个面朝上的概率是(1-1/3)/5 = 2/15

模型推导

下面用一个翻译的例子(来自于[Berger et al. , 1996])来详细地解释最大熵模型推导的整个过程.
情景介绍:现在我们要进行一个翻译任务,将英文翻译成中文.

英文:I am studying English.
中文:我在学习英语.

现在任务进行到studying这个单词了,我想要知道studying对应的中文是什么,需要建立一个概率模型来预测studying对应的中文翻译.

对于自然语言处理中某个歧义消解问题,若用A表示待消岐问题所有可能候选结果的集合(这里的翻译问题表示整个中文词典,或者在中文分词任务中为{0,1},在词性标注(POS)中表示所有的POS tag), B表示当前歧义点所在上下文信息构成的集合(一般在sequence问题中指,当前点前后的信息,当然也可能只有前面或者后面的信息).
建立最大熵模型的目的就是为了找到一个概率分布 pP 使得p(a|b)的熵最大,这里 aA,bB 都只是A, B集合中的代表元素,并不是具体的值,也就是说p(a|b)代表的是a在给定b的条件下的概率分布.
所以根据最大熵原理,求p(a|b)的概率分布等价于

p̂ (a|b)=argmaxpPH(p)

H(p)=H(A|B)=bBp(b)H(A|B=b)=a,bp(b)p(a|b)logp(a|b)

p̂ (a|b)=argmaxpP(a,bp(b)p(a|b)logp(a|b))(1)

这就是我们根据最大熵原理得到的最终需要求解的优化问题.
但是我们前面提到过,最大熵模型的原理是在满足已知条件的情况下使得模型的熵最大,所以我们还需要给定一定的约束条件,用来表示当前已知的信息.

  • 首先,所建立模型的概率分布p(b)必须符合已知训练样本中的概率分布 p̂ (b) , 即 p(b)=p̂ (b)
  • 然后可以根据 (a,b) aA,bB 和特征模板(feature template)生成一系列的特征. fi(a,b) , 简记为 fi ,
    那么对于每个特征 fi, i{1,...,k} 有:
    它在训练样本中关于经验概率分布 p̂ (a|b) 的数学期望 Ep̂ (fi) 等于它在理论模型 p(a|b) 中的数学期望 Ep(fi)
    即:
    Ep̂ (fi)=A,Bp̂ (a,b)fi(a,b)
    Ep(fi)=A,Bp(a,b)fi(a,b)
    Ep̂ (fi)=Ep(fi)
    所以约束条件为: P={p|Ep(fi)=Ep̂ (fi),i{1,2,...,k}}(2)

利用拉格朗日乘子法对满足(2)式的(1)式优化问题求解能够得到,最优解具有如下形式:

p̂ (a|b)=1Z(b)exp(li=1λifi(a,b))
其中,
Z(b)=Aexp(li=1λifi(a,b)) ,

Z(b) 是归一化因子, λi 是特征 fi 的权重.

在我们前面提到的语言翻译任务中,我们要应用最大熵模型,需要做的就是根据当前预测点的上下文信息(a, b)构建一系列的特征 fi , 然后通过训练样本提供的信息来训练模型的参数 λi .
最大熵模型的参数就是 λi,i{1,2,...,k} , 学习算法的主要目的也是为了学习 λi ,但是和其他机器学习模型不同点在于,最大熵模型的优化目标是使得熵最大,所以在利用GIS算法进行训练的时候,更新操作是:

λ(n+1)i=λni+1Cln(Ep̂ (fi)Epn(fi))

算法的基本思路是:
1. 假定第零次迭代的初始模型为等概率的均匀分布。
2. 用第 N 次迭代的模型来估算每种信息特征在训练数据中的分布,如果超过了实际的,就把相应的模型参数变小;否则,将它们变大。
3. 重复步骤 2 直到收敛。

这里在应用的时候感觉除了最后的训练参数的算法和最后概率的计算不同以外,其他的处理过程和感知机模型没有很大的差别.
所以其实机器学习的算法,其实实现的时候大体思路都差不多,最终的优化过程才是体现算法的着重点的地方[???这个我还不是很确定]

模型应用

最大熵原理最早由E.T.Jaynes于1957年提出,1996年被应用于自然语言处理 [Berger et al. , 1996]
Berger 1996年的文章中提出了一个用最大似然函数的方法自动构建最大熵模型的方法

We present a maximum-likelihood approach for automatically constructing maximum entropy models and describe how to implement this approach efficiently

Berger在论文中指出,最开始我们的概率分布空间 P 是infinite的,然后通过一系列的constraints,我们逐步缩小了概率空间 P , 但是 P 依然是infinite, 然后我们的最大熵模型需要从中找到一个概率分布 pP 使得 p 相对来说是最uniform的,因为最大熵原理就是要在排除所有已知条件下,找到一个最混乱的模型.对于Uniform程度的度量,我们使用了conditional entropy H(p)=H(A|B)
所以最大熵模型最终是要最大化条件熵.
It can be shown that p* is always well-defined ; that is, there is always a unique model p* with maximum entropy in any constraints C.

学习算法

  • GIS(generalized iterative scaling)
  • IIS(improved iterative scaling)
  • 基于梯度下降实现的算法(最大熵模型的似然函数为 L(p)=a,bp̂ (a,b)logp(a|b) )(条件熵, 一般的神经网络最后的loss函数都是交叉熵)

也就是说神经网络经过softmax以后如果loss函数设置成条件熵,就是最大熵模型了,但是因为神经网络最后提取出来的特征向量没有具体的解释,所以无法直接计算 p̂ (a,b) , 所以目前大家都是采用的交叉熵.

将感知机模型最后的计算变为softmax,然后loss函数改为条件熵,就可以实现最大熵模型了.(二分类来说,用两套参数,而不是一套参数设置域值的方法)

模型实现

最大熵模型GIS算法实现 python版

[Berger et al. , 1996] A Maximum Entropy Approach to Natural Language Processing

你可能感兴趣的:(机器学习个人总结)