第
一次系统提出
最大熵的原理的一般认为是Jaynes,后来有人提出了相应的算法来估计对应的
统计模型的参数。由于当时计算条件的限制,最大熵模型在人工智能和
自然语言处理领域都没有得到广泛应用。上世纪90年代,
IBM的研究员应用重新深入的研究了这个问题,系统地描述了条件最大熵的框架和实现算法,并在自然语言处理任务上取得了非常好的效果,引起了人们的重视。很快条件最大熵模型技术得到了广泛的传播,在自然语言处理的各个领域都取得了巨大的成功,在此基础上的一些深入研究工作也不断展开。最大熵模型已经成为近年来自然语言处理领域最成功的机器学习方法。
假设我们的分类任务或者预测任务的类别为y,而我们能够依据的
上下文信息记为x。我们希望在不同的给定的上下文x条件下,统计模型能够给出判为不同类别y的
概率值。因此,我们希望能够建立一种区分性的
条件概率模型(注意,我们这里仍然用了的表示形式,但是此处的意义表示的是整个的
概率分布,也不再表示具体的实例)。我们用来表示所有这种条件
概率模型的集合,而我们期望得到的模型就是中的一种。所谓的条件最大熵模型,就是在一定约束下
条件熵最大的模型。
所谓的约束,也就是我们已知的信息,可以认为我们希望模型在这些信息上能和训练
数据匹配。而熵最大,则表明除约束外,我们不再做未知的假设。在条件最大熵模型中,约束是通过特征的形式来体现的。这里的特征和
语音识别等领域的特征有所不同,它表示成和的函数的形式,表示了x的某种属性和y的共现情况。
特征函数理论上可以取任何实数值(早期因为训练算法的原因只能取正值),在
自然语言处理领域一般表示为0-1的
指示函数的形式,例如:
恰好就是上文所提的
约束条件。在设定的权值参数下,
似然值的梯度是容易计算的。因此权值
参数估计的方法可以通过基于梯度的数值优化算法进行,比如共轭梯度(Conjugate Gradient, CG),拟牛顿方法(quasi-Newton)等等。目前最常用的是一种称为L-BFGS的拟
牛顿方法(limited memory BFGS),它在优化性能和速度上都表现良好,特别是相对于早期的以前基于迭代缩放的IIS(improved iterative scaling)、
GIS(generalized iterative scaling)最大熵模型参数估计方法优势明显。
采用最大
似然方法训练出的最大熵模型能够在训练数据上表现良好,但是不一定在未知数据上具有好的推广性。特别是出现在参数数量巨大而训练数据又不是很充足的情况下。一种解决方案是设立一定数量的开发集,当在开发集上性能下降时停止训练。但是这并不是一个很好的策略,因为可能暂时的下降之后还会上升。
另一种思路就是在优化目标上改变,可以增加关于参数的
先验知识,也被称为一种“正则化”的策略。设定我们的参数集为w,训练样本集合为D,那么根据
贝叶斯公式有:
其中,成为给定D下参数w的后验,成为w在D上的似然,称为w的先验。最大似然轨迹其实就是假设w的先验为
均匀分布,直接最大化
似然就可以了。