最大熵模型

上集回顾

在上一篇文章中,笔者分享了自己对最大熵原理的认识,包括最大熵原理的意义、最大熵原理的求解以及一些简单而常见的最大熵原理的应用。在上一篇的文末,我们还通过最大熵原理得到了正态分布,以此来说明最大熵原理的深刻内涵和广泛意义。

本文中,笔者将介绍基于最大熵原理的模型——最大熵模型。本文以有监督的分类问题来介绍最大熵模型,所谓有监督,就是基于已经标签好的数据进行的。

事实上,第二篇文章的最大熵原理才是主要的,最大熵模型,实质上只是最大熵原理的一个延伸,或者说应用。

分类:意味着什么?

在引入最大熵模型之前,我们先来多扯一点东西,谈谈分类问题意味着什么。假设我们有一批标签好的数据:
$$\begin{array}{c|cccccccc}
\hline
\text{数据}x & 1 & 2 & 3 & 4 & 5 & 6 & \dots & 100 \\
\hline
\text{标签}y & 1 & 0 & 1 & 0 & 1 & 0 & \dots & 0\\
\hline \end{array}$$
所谓分类问题,就是给出一个模型,我告诉模型$x$,模型给能够告诉我对应的$y$,因此,很自然可以把分类问题看成是一个拟合问题,即找到函数$y=f(x)$来拟合这批数据。可用来拟合的函数有很多,简单的有线性函数(线性回归)、Logistic函数(Logistic回归),复杂的有多层神经网络,都是通过把分类问题看成拟合问题来解决。

然后,这种看法并不是唯一,我们还可以用概率的角度看待分类问题。因为世界上几乎没有什么确定的事情,因此,当我们输入$x$时,输出的$y$值并不是确定的,比如上述数据,当我们输入1时,它以一定的概率输出1或0,只不过1的概率更大一些而已。这时候,分类问题变成了已知$x$的情况下求$y$的概率分布的问题,也就是求条件分布$p(Y|X)$。

而在前面一篇文章已经知道,最大熵原理天生就是用来求概率分布的,因此在这里,最大熵原理自然地与分类问题结合了起来,产生了最大熵模型。

最大熵模型

现在,分类问题变成了求条件分布$p(Y|X)$的问题,我们还是用最大熵原理来求解,不同的是,由于是条件分布,因此,我们需要求极值的熵是条件熵(参考第一篇):
$$S(Y|X)=S[p(x,y)]-S[p(x)]\tag{37}$$

$$p(y|x)=\frac{p(x,y)}{p(x)}\tag{38}$$
因此,求出$p(x,y)$和$p(x)$就可以求出条件分布$p(Y|X)$。这里的$p(x,y)$和$p(x)$均是未知的,但是我们认为,可以通过大量的统计,得出$p(x)$的经验分布$\tilde{p}(x)$(因为$x$仅仅是需要收集的数据,因此,这个统计是理论可行的。),因此,未知的分布仅仅是$p(x,y)$,我们集中精力求它。这时候,求$(37)$式的最大值,等价于求$S[p(x,y)]$的最大值。

如何确定$x$与$y$的关系呢?很简单,统计!通过统计已经标签好的数据,来得出它们之间的概率关系。而如果要用数学描述的话,我们需要定义特征函数
$$\chi(x,y)=\left\{\begin{aligned}&1,\quad x,y\text{满足某个事实}\\
&0,\quad x,y\text{不满足某个事实}\end{aligned}\right.\tag{39}$$
比如,在上面给出的标签数据表中,我们发现,当$x$是奇数时,给出$y=1$,当$x$是偶数时,给出$y=0$,因此,我们猜想,结果跟奇偶性有关,因此,可以定义特征函数
$$\chi(x,y)=\left\{\begin{aligned}&1,\quad \text{当x是奇数且y=1时}\\
&0,\quad \text{其他情况}\end{aligned}\right.\tag{40}$$
然后,我们去统计满足特征函数的个数$N_{\chi}$,然后除以样本总数$N$,得到$\tau=N_{\chi}/N$。我们认为,当数据足够多时,这个“个数”就是平均意义下的结果
$$E[\chi(x,y)]=\sum_{x,y} p(x,y)\chi(x,y)=\tau\tag{41}$$
我们可以定义多个特征,得到多个特征函数,然后得到多个统计结果:
$$\left\{\begin{aligned}&E[\chi_1(x,y)]=\sum_{x,y} p(x,y)\chi_1(x,y)=\tau_1\\
&\vdots\\
&E[\chi_k(x,y)]=\sum_{x,y} p(x,y)\chi_k(x,y)=\tau_k\end{aligned}\right.\tag{42}$$
这些成为了对最大熵的约束,因此,又变成了一个带有约束的极大值问题,在第二篇中,我们已经给出了结果(类似式$(20)$):
$$p(x,y)=\frac{1}{Z}\exp\left(-\sum_{i=1}^k \lambda_i \chi_i (x,y)\right)\tag{43}$$

$$Z=\sum_{x,y} \exp\left(-\sum_{i=1}^k \lambda_i \chi_i (x,y)\right)\tag{44}$$
注意,这里求出了$p(x,y)$,如果我们我们只关心$p(y|x)$,最好将它变成$p(y|x)$的形式,即
$$p(y|x)=\frac{p(x,y)}{p(x)}=\frac{1}{Z(x)}\exp\left(-\sum_{i=1}^k \lambda_i \chi_i (x,y)\right)\tag{45}$$
这里的$Z(x)=Z\times p(x)$是与$x$有关的归一化因子。

浅谈模型的应用

接下来是模型求解的问题,但是已经说过,最大熵原理相关的模型具有形式简单、适应能力强等特点,然而它却有一个致命的缺点——难于求解,一般只能够通过数值方法求解。笔者在这方面并没有自己的见解,所以就不细说了。有兴趣的读者可以参考其他文献,如这里

我们再来仔细谈一下怎么用最大熵模型,假设我们提取了一个特征,这个特征有$N$个取值(比如这个特征为单词的词性,取值有动词、名词、形容词等),而我们做的是二元分类(如情感分类,积极或消极),那么事实上,可以构造$2N$个特征函数(动词-积极,名词-积极,动词-消极,名词-消极,等等组合)。再加上,如果提取了多个特征,那么特征函数的数目将是非常可观的。

因此,最大熵模型虽然适应能力强(适应能力强,是因为它可以在基于我们提出的任意约束的情况下,求出概率分布,约束的数目理论上没有限制),效果很好(如果能求解出来,那么效果通常是非常好的),但是应用比较窄,一般的分类问题,很少直接用最大熵模型。尤其是深度学习算法流行后,多层神经网络强大的拟合能力和优良的性能,使得我们在通常的分类问题中,几乎不会再使用最大熵模型了。

那什么时候用这个最大熵模型呢?我们一般是”挑选出“适合用最大熵模型的问题(一般来说,特征的取值是二元的,或者特征不多),这时候,适合使用最大熵模型,而且作为单一的模型来说,效果一般比其他的模型好。(请回忆,最大熵的意义)

结束语

本系列到此算是结束了。很多网络文章或者书籍中,也讲解了最大熵模型的推导、求解等内容,但是我还是感觉,教科书上那种讲法,不够清晰明确。诸如熵的定义、熵的意义、最大熵的意义、最大熵模型的推导等,都不尽让我满意,因此,结合自己的理解,写了这三篇小文,既是自己的笔记,又是笔者与大家分享的自己的理解。如果有不当之处,请读者批评。

在本系列中,最大熵模型只是一个契机,事实上,三篇文章的重点是熵的概念和最大熵原理,它们才是值得反复琢磨的。熵量化了信息,量化了不确定性,我们可以用它来做很多事情。虽然这个系列结束了,但是关于信息、关于熵的内容,在本博客以后的文章中,仍会时常出现,因为关于熵,实在有太多美妙的不得不说的内容了。

关于最大熵模型,读者还可以参考吴军老师的《数学之美》,书中有两篇关于最大熵模型的介绍,还有很多其他的数据分析资料和故事,都很值得一看。


转载到请包括本文地址:https://spaces.ac.cn/archives/3567/

如果您觉得本文还不错,欢迎点击下面的按钮对博主进行打赏。打赏并非要从中获得收益,而是希望知道科学空间获得了多少读者的真心关注。当然,如果你无视它,也不会影响你的阅读。再次表示欢迎和感谢!