数学之美梳理(八)最大熵模型

在信息处理中,我们常常知道各种各样但又不完全准确的信息,我们需要一个统一的模型将这些信息综合起来。如何综合的好,是一门学问

让我们看一个拼音转汉字的简单例子,假设输入的拼音是“wang-xiao-bo”,利用语言模型,根据有限的上下文,我们可以给出两个最常见的名字:“王小波”和“王晓波”,但是要唯一确定哪个名字就难了,即使利用较长的上下文也比较难。当然,我们知道,如果通篇文章是介绍文学的,作家王小波的可能性更大,而在讨论两岸关系时,台湾学者王晓波的可能性更大。

最大熵原理和最大熵模型

数学解决上述问题最漂亮的方法是最大熵模型,这个名词听起来很深奥,但是它的原理很简单,就是保留全部的不确定性,将风险降到最低。

我们以骰子为例,对于每个面朝上的概率是多少这个问题,大家的答案都会说是等概率,即各种点数都是1/6。这种猜测当然是对的,但是为什么大家会这么想,因为我们对这个骰子一无所知,假定它的每一个面朝上的概率均等是最安全的做法。从信息论的角度讲,就是保留了最大的不确定性,也就是让熵最大。

最大熵原理指出,对一个随机事件的概率分布进行预测时,我们的预测应当满足全部已知条件,而对未知的情况不做任何主观假设。这种情况下,概率分布最均匀,风险最小。

刚才拼音转汉字的例子,我们已知两种信息,第一,根据语言模型,Wang-Xiao-Bo可以转换成王晓波或者王小波;第二,根据主题,我们知道王小波是作家,而王晓波是研究两岸关系的台湾学者。因此就可以建立一个最大熵模型,同时满足这两种信息的特征。

现在的问题是,这样一个模型是否存在。匈牙利著名数学家,信息论最高奖香农奖得主希撒证明,对于任何一组不自相矛盾的信息,这个最大熵模型不仅存在,而且唯一。此外,它们都有一个非常简单的形式——指数函数

下面的公式是根据上下文(前两个词)和主题预测下一个词的最大熵模型,其中w3w_3 是要预测的词(王晓波或王小波),w1,w2w_1,w_2 是它前两个词(比如分别是出版,小说家),也就是其上下文的一个大致估计,s表示主题。

P(w3w1,w2,s)=1Z(w1,w2,s)eλ1(w1,w2,w3)+λ2(s,w3)P(w_3 | w_1,w_2,s) = \frac{1}{Z(w_1,w_2,s)}e^{\lambda_1(w_1,w_2,w_3)+\lambda_2(s,w_3)}

其中Z是归一化因子,保证概率加起来等于1。

在上面的公式中,有几个参数λ,Z\lambda,Z,它们需要通过观测数据训练出来。

最大熵模型在形式上是最漂亮,最完美的统计模型,在自然语言处理和金融方面都有很多应用。

最大熵模型的训练

最大熵模型在形式上非常简单,但是在实现上却非常复杂,计算量很大,假定我们搜索的排序需要考虑20种特征,x1,x2,,x20{x_1,x_2,\ldots,x_{20}},待排序的网页是d,那么即使这些特征互相独立,对应的最大熵模型也是很长的。

P(dx1,x2,,x20)=1Z(x1,x2,,x20)eλ1(x1,d)+λ2(x2,d)++λ20(x20,d)P(d|x_1,x_2,\ldots,x_{20}) = \frac{1}{Z(x_1,x_2,\ldots,x_{20})}e^{\lambda_1(x_1,d)+\lambda_2(x_2,d)+\ldots+\lambda_{20}(x_{20},d)}

其中归一化因子为:

Z(x1,x2,,x20)=deλ1(x1,d)+λ2(x2,d)++λ20(x20,d)Z(x_1,x_2,\ldots,x_{20}) = \sum_de^{\lambda_1(x_1,d)+\lambda_2(x_2,d)+\ldots+\lambda_{20}(x_{20},d)}

这个模型里有很多参数λ\lambda 需要通过模型的训练而来。

最原始的最大熵模型的训练方法是一种被称为通用迭代算法GIS的迭代算法。

GIS的原理并不复杂,大致可以概括为几个步骤:

  1. 假定第零次迭代的初始模型为等概率的均匀分布
  2. 用第N次迭代的模型来估算每种信息特种在寻来你数据中的分布,如果超过了实际的,就把相应的模型参数调小,否则将其变大
  3. 重复步骤2,直至收敛

GIS算法是一种非常典型的期望最大化算法,但是GIS每次迭代的时间都很长,而且不太稳定,在64位机器上都会出现溢出,在实际应用中很少有人真正使用GIS,大家只是通过它来了解最大熵模型。