“熵”不起:从熵、最大熵原理到最大熵模型(三)
By 苏剑林 | 2015-12-20 | 69037位读者 |上集回顾 #
在上一篇文章中,笔者分享了自己对最大熵原理的认识,包括最大熵原理的意义、最大熵原理的求解以及一些简单而常见的最大熵原理的应用。在上一篇的文末,我们还通过最大熵原理得到了正态分布,以此来说明最大熵原理的深刻内涵和广泛意义。
本文中,笔者将介绍基于最大熵原理的模型——最大熵模型。本文以有监督的分类问题来介绍最大熵模型,所谓有监督,就是基于已经标签好的数据进行的。
事实上,第二篇文章的最大熵原理才是主要的,最大熵模型,实质上只是最大熵原理的一个延伸,或者说应用。
最大熵模型 #
分类:意味着什么? #
在引入最大熵模型之前,我们先来多扯一点东西,谈谈分类问题意味着什么。假设我们有一批标签好的数据:
$$\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://kexue.fm/archives/3567
更详细的转载事宜请参考:《科学空间FAQ》
如果您还有什么疑惑或建议,欢迎在下方评论区继续讨论。
如果您觉得本文还不错,欢迎分享/打赏本文。打赏并非要从中获得收益,而是希望知道科学空间获得了多少读者的真心关注。当然,如果你无视它,也不会影响你的阅读。再次表示欢迎和感谢!
如果您需要引用本文,请参考:
苏剑林. (Dec. 20, 2015). 《“熵”不起:从熵、最大熵原理到最大熵模型(三) 》[Blog post]. Retrieved from https://kexue.fm/archives/3567
@online{kexuefm-3567,
title={“熵”不起:从熵、最大熵原理到最大熵模型(三)},
author={苏剑林},
year={2015},
month={Dec},
url={\url{https://kexue.fm/archives/3567}},
}
December 22nd, 2015
给跪
July 12th, 2017
写得很好啊,你写的都是原创精品
谢谢~^_^
May 8th, 2019
「尤其是深度学习算法流行后,多层神经网络强大的拟合能力和优良的性能,使得我们在通常的分类问题中,几乎不会再使用最大熵模型了。」
但是如果從$(45)$ 式來看,就好像多層神經網路後面接了一層softmax 一樣,所以是否也可以說,接了softmax 的神經網路是自帶了最大熵原理?
August 7th, 2020
有个问题有想清楚,比如说文本的二分类,新来一个样本怎么分类
是假设p(y|x)为正太分布吗。在上面给定的例子中x表示为名字、动词的onehot编码。可以这样理解吗?
分布的形式就是$(43)$或$(45)$,预测就是根据类别概率最大来预测。
October 9th, 2021
苏神的博客汇总出书的那天,记得捎带我们读者的几则精选评论。
November 10th, 2021
$p(x)$ 可以用$\tilde{p}(x)$来近似估计,为什么$p(x,y)$就不能直接统计出$\tilde{p}(x, y)$呢?根据公式$(41)$用特征也是得统计出来的,为什么得设计这么多特征,而不是直接统计出$\tilde{p}(x,y)$呢?
你这是纯粹为估计而估计,都还没理解做模型的目的。
你去估计$\tilde{p}(x,y)$干嘛呢?你是想知道训练样本的分布情况吗?如果是这种非正常需求,那确实是可以这样做。但一般的正常需求是,我希望建立一个可以运算的模型$p(x,y)$,能对新的$x$(而不仅仅是训练集的x)给出$p(y|x)$的分布,从而实现新样本的预测。而你说的直接统计$\tilde{p}(x,y)$,统计完之后,能预测新样本吗?
May 25th, 2022
请问, 二分类问题中的最小化交叉熵跟这里的最大化信息熵如何联系起来?谢谢.
没什么联系。
January 2nd, 2023
苏神写的真不错,最后结果的形式跟softmax很像,是不是softmax是把人为构造特征的工作交给了神经网络?
目前我们确实都这样理解
April 26th, 2023
写得非常不错!
这也证明了$\color{black}{\mathbf{softmax}}$函数是$\color{black}{\mathbf{最大条件熵}}$的结果:
用矩阵表示求和项 $\sum_i^k\lambda_i X_i(x,y):=\Lambda^TX$, 由归一化条件$\color{green}\sum_y{p(y|x)=1}$ 可知
$
\color{green}{
\sum_yp(y|x)=\frac1{Z(x)}\sum_yexp(\Lambda^TX)=1
\tag 1}$
解得$\color{green}{Z(x)=\sum_yexp(\Lambda^TX)}$, 因此
$
\color{purple}{
p(y|x)=\frac{exp(\Lambda^TX)}{\sum_yexp(\Lambda^TX)}
\tag 2}$
定义$\color{black}{\mathbf{softmax}(y)=\phi(y)}$,得到以下结论
$\color{red}{\phi(y)=\arg\underset{y}{\max}H(y|x)=\frac{exp(\Lambda^TX)}{\sum_yexp(\Lambda^TX)}\tag3}$
谢谢!还整不同颜色的排版,有心了,点赞!
April 26th, 2023
*不知道这里的Latex如何居中...
最后的 $\phi(y)$ 要修改成
$\color{purple}{\phi(y)=}
\color{red}{\underset{y}{\max}H(y|x)}\color{purple}{=\frac{\exp(\Lambda^TX)}{\sum_y\exp(\Lambda^TX)}}\tag3$
若设 $z_i:=z(y_i)=\Lambda^TX$, 则
$\color{red}{\phi(z)=\frac{e^{z_i}}{\sum_i e^{z_i}}\tag4}$