从最大似然到EM算法:一致的理解方式
By 苏剑林 | 2018-03-15 | 147579位读者 |最近在思考NLP的无监督学习和概率图相关的一些内容,于是重新把一些参数估计方法理了一遍。在深度学习中,参数估计是最基本的步骤之一了,也就是我们所说的模型训练过程。为了训练模型就得有个损失函数,而如果没有系统学习过概率论的读者,能想到的最自然的损失函数估计是平均平方误差,它也就是对应于我们所说的欧式距离。而理论上来讲,概率模型的最佳搭配应该是“交叉熵”函数,它来源于概率论中的最大似然函数。
最大似然 #
合理的存在 #
何为最大似然?哲学上有句话叫做“存在就是合理的”,最大似然的意思是“存在就是最合理的”。具体来说,如果事件$X$的概率分布为$p(X)$,如果一次观测中具体观测到的值分别为$X_1,X_2,\dots,X_n$,并假设它们是相互独立,那么
$$\mathcal{P} = \prod_{i=1}^n p(X_i)\tag{1}$$
是最大的。如果$p(X)$是一个带有参数$\theta$的概率分布式$p_{\theta}(X)$,那么我们应当想办法选择$\theta$,使得$\mathcal{L}$最大化,即
$$\theta = \mathop{\text{argmax}}_{\theta} \mathcal{P}(\theta) = \mathop{\text{argmax}}_{\theta}\prod_{i=1}^n p_{\theta}(X_i)\tag{2}$$
对概率取对数,就得到等价形式
$$\theta = \mathop{\text{argmax}}_{\theta}\sum_{i=1}^n \log p_{\theta}(X_i)\tag{3}$$
如果右端再除以$n$,我们就得到更精炼的表达形式
$$\theta = \mathop{\text{argmax}}_{\theta} \mathcal{L}(\theta) = \mathop{\text{argmax}}_{\theta} \mathbb{E}\big[\log p_{\theta}(X_i)\big]\tag{4}$$
其中我们将$-\mathcal{L}(\theta)$就称为交叉熵。
理论形式 #
理论上,根据已有的数据,我们可以得到每个$X$的统计频率$\tilde{p}(X)$,那么可以得到上式的等价形式
$$\theta = \mathop{\text{argmax}}_{\theta} \mathcal{L}(\theta) = \mathop{\text{argmax}}_{\theta}\sum_X \tilde{p}(X)\log p_{\theta}(X)\tag{5}$$
但实际上我们几乎都不可能得到$\tilde{p}(X)$(尤其是对于连续分布),我们能直接算的是关于它的数学期望,也就是$(4)$式,因为求期望只需要把每个样本的值算出来,然后求和并除以$n$就行了。所以$(5)$式只有理论价值,它能方便后面的推导。
要注意的是,上面的描述是非常一般的,其中$X$可以是任意对象,它也有可能是连续的实数,这时候就要把求和换成积分,把$p(X)$变成概率密度函数。当然,这并没有什么本质困难。
更广泛的KL散度 #
从KL散度出发也可以导出最大似然的形式来。假如两个分布$\tilde{p}(X)$和$p(X)$,我们用KL散度来衡量它们的距离:
$$\begin{aligned}KL\Big(\tilde{p}(X)\Big\Vert p(X)\Big) =& \sum_X \tilde{p}(X) \ln \frac{\tilde{p}(X)}{p(X)}\\
=&\mathbb{E}\left[\ln \frac{\tilde{p}(X)}{p(X)}\right]\end{aligned}\tag{6}$$
当两个分布相同时,KL散度为0,当两个分布不同时,KL散度大于0,假设读者已经知道这些性质。
接着假设$X$的样本已经给出来了,这就意味着$\tilde{p}(X)$可以视为已知了,这时候:
$$\begin{aligned}\theta =& \mathop{\text{argmin}}_{\theta} KL\Big(\tilde{p}(X)\Big\Vert p_{\theta}(X)\Big)\\
=& \mathop{\text{argmax}}_{\theta}\sum_X \tilde{p}(X)\log p_{\theta}(X)\\
=& \mathop{\text{argmax}}_{\theta}\mathbb{E}\big[\log p_{\theta}(X_i)\big]\end{aligned}\tag{7}$$
这就重新导出了$(4)$和$(5)$。事实上KL散度要比简单的最大似然含义更为丰富,因为最大似然相当于假设了$\tilde{p}(X)$是已知的(已知$X$的样本),这并不总是能实现的(比如EM算法的场景),很多时候我们只知道$X$的部分信息,这时候就要回归到KL散度中来。
注:如果读者不能很好地理解采样计算,请阅读《变分自编码器(二):从贝叶斯观点出发》中的《数值计算vs采样计算》一节。
有监督模型 #
现在我们来观察有监督学习中是如何应用上述内容的。假设输入为$X$,标签为$Y$,那么$(X,Y)$就构成了一个事件,于是我们根据$(4)$就有
$$\theta = \mathop{\text{argmax}}_{\theta} \mathbb{E}_{X,Y}\big[\log p_{\theta}(X,Y)\big]\tag{8}$$
这里已经注明了是对$X,Y$整体求数学期望,然而该式却是不够实用的。
分类问题 #
以分类问题为例,我们通常建模的是$p(Y|X)$而不是$p(X,Y)$,也就是我们要根据输入确定输出的分布,而不是它们的联合分布。所以我们还是要从$(5)$式出发,利用$p(X,Y)=p(X) p(Y|X)$,先得到
$$\theta = \mathop{\text{argmax}}_{\theta} \sum_{X,Y} \tilde{p}(X,Y)\log \big[p_{\theta}(X)p_{\theta}(Y|X)\big]\tag{9}$$
因为我们只对$p(Y|X)$建模,因此$p_{\theta}(X)$我们认为就是$\tilde{p}(X)$,那么这相当于让优化目标多了一个常数项,因此$(9)$等价于
$$\theta = \mathop{\text{argmax}}_{\theta} \sum_{X,Y} \tilde{p}(X, Y)\log p_{\theta}(Y|X)\tag{10}$$
然后,我们还有$\tilde{p}(X,Y)=\tilde{p}(X)\tilde{p}(Y|X)$,于是$(8)$式还可以再变化成
$$\theta = \mathop{\text{argmax}}_{\theta} \sum_X \tilde{p}(X) \sum_Y \tilde{p}(Y|X)\log p_{\theta}(Y|X)\tag{11}$$
最后别忘了,我们是处理有监督学习中的分类问题,一般而言在训练数据中对于确定的输入$X$就只有一个类别,所以$\tilde{p}(Y_t|X)=1$,其余为0,$Y_t$就是$X$的目标标签,所以
$$\theta = \mathop{\text{argmax}}_{\theta} \sum_X \tilde{p}(X) \log p_{\theta}(Y_t|X)\tag{12}$$
这就是最常见的分类问题的最大似然函数了:
$$\theta = \mathop{\text{argmax}}_{\theta} \mathbb{E}_{X}\big[\log p_{\theta}(Y_t|X)\big]\tag{13}$$
变变变 #
事实上,上述的内容只是一些恒等变换,应该说没有特别重要的价值,而它的结果(也就是分类问题的交叉熵损失)也早就被我们用得滚瓜烂熟了。因此,这一节仅仅是展示了如何将最大似然函数从最原始的形式出发,最终落实到一个具体的问题中,让读者熟悉一下这种逐步推进的变换过程。
隐变量 #
现在就是展示它的价值的时候了,我们要将用它来给出一个EM算法的直接推导(本博客还提供了另外一个理解角度,参考《梯度下降和EM算法:系出同源,一脉相承》)。对于EM算法,一般将它分为M步和E步,应当说,M步是比较好理解的,难就难在E步的那个$Q$函数为什么要这样构造。很多教程并没有给出这个$Q$函数的解释,有一些教程给出了基于詹森不等式的理解,但我认为这些做法都没有很好凸显出EM算法的精髓。
一般来说,EM算法用于存在隐变量的概率问题优化。什么是隐变量?很简单,还是以刚才的分类问题为例,分类问题要建模的是$p(Y|X)$,当然也等价于$p(X,Y)$,我们说过要用最大似然函数为目标,得到$(8)$式
$$\theta = \mathop{\text{argmax}}_{\theta} \mathbb{E}_{X,Y}\big[\log p_{\theta}(X,Y)\big]\tag{8}$$
如果给出$(X,Y)$的标签数据对,那就是一个普通的有监督学习问题了,然而如果只给出$X$不给出$Y$呢?这时候$Y$就称为隐变量,它存在,但我们看不见,所以“隐”。
GMM模型 #
等等,没有标签数据你也想做分类问题?当然有可能,GMM模型不就是这样的一个模型了吗?在GMM中假设了
$$p_{\theta}(X,Y) = p_{\theta}(Y) p_{\theta}(X|Y)\tag{14}$$
注意,是$p_{\theta}(Y) p_{\theta}(X|Y)$而不是$p_{\theta}(X) p_{\theta}(Y|X)$,两者区别在于我们难以直接估计$p(X)$,也比较难直接猜测$p(Y|X)$的形式。而$p(Y)$和$p(X|Y)$就相对容易了,因为我们通常假设$Y$的意义是类别,所以$p(Y)$只是一个有限向量,而$p(X|Y)$表示每个类内的对象的分布,既然这些对象都属于同一个类,同一个类应该都长得差不多吧,所以GMM假设它为正态分布,这时候做的假设就有依据了,不然将所有数据混合在一起,谁知道假设什么分布好呢?
这种情况下,我们完整的数据应该是$(X,Y)$,但我们并没有这种成对的样本$(X_1,Y_1),\dots,(X_n,Y_n)$(不然就退化为有监督学习了),我们只知道$X$的样本$X_1,\dots,X_n$,这就对应了我们在KL散度这一节描述的情形了。
pLSA模型 #
当然,并不只有无监督学习才有隐变量,有监督学习也可以有,比如我们可以设
$$p(Y|X)=\sum_{Z}p_{\theta}(Y|Z)p_{\theta}(Z|X)\tag{15}$$
这时候多出了一个变量$Z$,就算给出$(X,Y)$这样的标签数据对,但$Z$仍然是没有数据的,是我们假想的一个变量,它也就是隐变量,pLSA就是这样的一个问题。也就是说,这时候完整的数据对应该是$(X,Y,Z)$的形式,但我们只知道$(X_1,Y_1),\dots,(X_n,Y_n)$这样的部分样本。
贝叶斯学派 #
可能有读者“异想天开”:那么参数$\theta$是不是也可以看作一个隐变量呢?恭喜你,如果你有这层领悟,那你已经进入贝叶斯学派的思维范畴了。贝叶斯学派认为,一切都是随机的,一切都服从某个概率分布,参数$\theta$也不例外。不过很遗憾,贝叶斯学派的概率理论很艰深,我们这里还没法派上用场。(其实更重要的是,笔者也还不懂~~)
EM算法 #
好了,不再废话了,还是正式进入对EM算法的讨论吧。
联合KL散度 #
我们先来看一下,对于含有隐变量的问题求解,一般教程的处理方案是这样的:由于隐变量不可观测,因此一般改用边缘分布(也就是显变量的分布)的最大似然为目标函数,即
$$\theta = \mathop{\text{argmax}}_{\theta}\sum_X \tilde{p}(X)\log\sum_Z p_{\theta}(X|Z)p_{\theta}(Z)\tag{16}$$
为最大化的目标。
这种做法不是不行,而是这样一来为了得到EM算法就需要引入比较多的数学知识,而且严格证明还需要比较冗长的推导。事实上可以从KL散度出发,通过分析联合概率分布的KL散度来极大简化EM算法的推导。而如果采用边缘分布最大似然的做法,我们就无法直观地理解那个$Q$函数的来源了。
以GMM为例,首先我们来算$\tilde{p}(X,Y)$和$p_{\theta}(X,Y)$的KL散度:
$$\begin{aligned} &KL\Big(\tilde{p}(X,Y)\Big\Vert p_{\theta}(X,Y)\Big)\\
=& \sum_{X,Y}\tilde{p}(X,Y)\log \frac{\tilde{p}(X,Y)}{p_{\theta}(X,Y)}\\
=& \sum_{X}\tilde{p}(X)\sum_{Y} \tilde{p}(Y|X)\log \frac{\tilde{p}(Y|X)\tilde{p}(X)}{p_{\theta}(X|Y)p_{\theta}(Y)}\\
=& \mathbb{E}_X\left[\sum_{Y} \tilde{p}(Y|X)\log \frac{\tilde{p}(Y|X)\tilde{p}(X)}{p_{\theta}(X|Y)p_{\theta}(Y)}\right]\\
=& \mathbb{E}_X\left[\sum_{Y} \tilde{p}(Y|X)\log \frac{\tilde{p}(Y|X)}{p_{\theta}(X|Y)p_{\theta}(Y)}+\sum_{Y} \tilde{p}(Y|X)\log \tilde{p}(X)\right]\\
=& \mathbb{E}_X\left[\sum_{Y} \tilde{p}(Y|X)\log \frac{\tilde{p}(Y|X)}{p_{\theta}(X|Y)p_{\theta}(Y)}\right]+\mathbb{E}\left[\log \tilde{p}(X)\right]\\
=& \mathbb{E}_X\left[\sum_{Y} \tilde{p}(Y|X)\log \frac{\tilde{p}(Y|X)}{p_{\theta}(X|Y)p_{\theta}(Y)}\right]+\text{常数}
\end{aligned}\tag{17}$$
这个过程虽然比较长,但并没有什么迂回的变换,是比较容易接受的。
EM大佬来了 #
再次回顾$(17)$式的来源,我们希望找到一组分布的参数$\theta$,使得$KL\Big(\tilde{p}(X,Y)\Big\Vert p_{\theta}(X,Y)\Big)$越小越好,$p_{\theta}(X,Y)$我们已经给出为$p_{\theta}(X|Y)p_{\theta}(Y)$的形式,只有参数$\theta$是未知的。但是在$(17)$式中,$\tilde{p}(Y|X)$也是未知的,包括形式。
这时候,大佬就发话了:先当它已知的吧,这时候$\tilde{p}(Y|X)$可以视为常数,那么我们就可以算参数$\theta$了:
$$\begin{aligned}\theta^{(r)} =& \mathop{\text{argmin}}_{\theta} \mathbb{E}_X\left[\sum_{Y} \tilde{p}^{(r-1)}(Y|X)\log \frac{\tilde{p}^{(r-1)}(Y|X)}{p_{\theta}(X|Y)p_{\theta}(Y)}\right]\\
=& \mathop{\text{argmax}}_{\theta} \mathbb{E}_X\left[\sum_{Y}\tilde{p}^{(r-1)}(Y|X)\log p_{\theta}(Y) p_{\theta}(X|Y)\right]\end{aligned}\tag{18}$$
然后这时候算出了新的$\theta^{(r)}$,我们把$p_{\theta}(X|Y)$当成已知的,来求$\tilde{p}(Y|X)$,
$$\tilde{p}^{(r)}(Y|X) = \mathop{\text{argmin}}_{\tilde{p}(Y|X)} \mathbb{E}_X\left[\sum_{Y} \tilde{p}(Y|X)\log \frac{\tilde{p}(Y|X)}{p_{\theta^{(r)}}(X|Y)p_{\theta^{(r)}}(Y)}\right]\tag{19}$$
事实上$(19)$式是可以直接写出解析解的,答案是:
$$\tilde{p}^{(r)}(Y|X)=\frac{p_{\theta^{(r)}}(Y)p_{\theta^{(r)}}(X|Y)}{\sum\limits_Y p_{\theta^{(r)}}(Y)p_{\theta^{(r)}}(X|Y)}\tag{20}$$
补充推导:$(19)$式方括号内的部分,可以改写为
$$\begin{aligned}&\sum_{Y} \tilde{p}(Y|X)\log \frac{\tilde{p}(Y|X)}{p_{\theta^{(r)}}(X,Y)}\\
=&\sum_{Y} \tilde{p}(Y|X)\log \frac{\tilde{p}(Y|X)}{p_{\theta^{(r)}}(Y|X)} - \sum_{Y} \tilde{p}(Y|X)\log p_{\theta^{(r)}}(X)\\
=& KL\Big(\tilde{p}(Y|X)\Big\Vert p_{\theta^{(r)}}(Y|X)\Big) - \text{常数}
\end{aligned}$$所以最小化$(19)$式也就相当于最小化$KL\Big(\tilde{p}(Y|X)\Big\Vert p_{\theta^{(r)}}(Y|X)\Big)$,根据KL散度的性质,显然最优解就是两个分布完全一致,即
$$\tilde{p}(Y|X) = p_{\theta^{(r)}}(Y|X) = \frac{p_{\theta^{(r)}}(Y)p_{\theta^{(r)}}(X|Y)}{\sum\limits_Y p_{\theta^{(r)}}(Y)p_{\theta^{(r)}}(X|Y)}$$这就得到了$(20)$式。
因为我们没法一步到位求$(17)$的最小值,所以现在就将它交替地训练:先固定一部分,最大化另外一部分,然后交换过来。EM算法就是对复杂目标函数的交替训练方法!
联合$(18)$式和$(20)$式,就构成了整个求解算法。现在来看看$(18)$式,有个E(求期望),又有个M($\mathop{\text{argmax}}$),就叫它EM算法吧,那个被E的式子,我们就叫它$Q$函数好了。于是EM大佬就这样出来了,$Q$函数也出来了,就这么任性...
当然,EM算法中的E的本意是将$\sum\limits_{Y}\tilde{p}^{(r-1)}(Y|X)\log p_{\theta}(Y) p_{\theta}(X|Y)$看成是对隐变量$Y$求期望,这里我们就随意一点的,结论没错就行~
是不是感觉很突然?感觉啥也没做,EM算法就这么两句话说清楚了?还包括了推导?
究竟在做啥 #
对于pLSA或者其他含有隐变量的模型的EM算法,也可以类似地推导。对比目前我能找到的EM算法的推导,我相信上面的过程已经是相当简洁了。尽管前面很多铺垫,但其实都是基础知识而已。
那这是如何实现的呢?回顾整个过程,其实我们也没做什么,只是纯粹地使用KL散度作为联合分布的差异性度量,然后对KL散度交替最小化罢了~这样子得到的推导,比从边缘分布的最大似然出发,居然直接快捷了很多,也是个惊喜。
一致的理解 #
本文是作者对最大似然原理的一翻思考,整体思路是从最大似然的原理和形式出发,来诱导出有监督/无监督学习的一些结果,希望能用一个统一的思想将各种相关内容都串起来。最后发现结果也挺让人满意的,尤其是EM算法部分,以后只需要记住一切的根本都是(联合)分布的最大似然或KL散度,再也不用死记EM算法中的Q函数形式了。
当然,文章有些观点都是“我认为”的,因此可能有不当之处,请读者甄别。不过可以保证的是结果跟现有的都是一样的。欢迎读者继续交流~
转载到请包括本文地址:https://kexue.fm/archives/5239
更详细的转载事宜请参考:《科学空间FAQ》
如果您还有什么疑惑或建议,欢迎在下方评论区继续讨论。
如果您觉得本文还不错,欢迎分享/打赏本文。打赏并非要从中获得收益,而是希望知道科学空间获得了多少读者的真心关注。当然,如果你无视它,也不会影响你的阅读。再次表示欢迎和感谢!
如果您需要引用本文,请参考:
苏剑林. (Mar. 15, 2018). 《从最大似然到EM算法:一致的理解方式 》[Blog post]. Retrieved from https://kexue.fm/archives/5239
@online{kexuefm-5239,
title={从最大似然到EM算法:一致的理解方式},
author={苏剑林},
year={2018},
month={Mar},
url={\url{https://kexue.fm/archives/5239}},
}
March 28th, 2018
你好,还是感觉有点困惑啊。交叉熵是衡量经验模型和预测模型之间概率分布的差距的。如果按照文中定义的
$$
E \left[ \log p _ { \theta } \left( X _ { i } \right) \right]
$$
$$=\frac{1}{N} \log p_\theta(X_1)+\frac{1}{N} \log p_\theta(X_2)+\frac{1}{N} \log p_\theta(X_3)+...$$
为交叉熵。$X_i$是每个样本观测值。$p_\theta(X_i)$是模型对于$X_i$的预测概率。而交叉熵
$$
\sum _ { X } \tilde { p } ( X ) \log p _ { \theta } ( X )
$$
中的$X$下标代表的是其取值的种类吧。或者是说是一种经验分布。 感觉这个变化只能说是相似但不是等价形式吧
建议你斟酌一下本文的第$(4)$式和第$(5)$式,以及我刚写的 https://kexue.fm/archives/5343 一文中的“数值计算vs采样计算”一节。
我想了一下这个问题,cross entropy用做分类的loss function时下标的确是取值的种类,所以是和general的cross entropy的定义是一致的。cross entropy loss function借用了cross entropy的概念去构造了损失函数。
有几个字打错了,这个网站未来有没有编辑回复的功能?
没有~
May 3rd, 2018
对比了之前的版本,这一版简直是融会贯通的利器!佩服佩服!!!
October 12th, 2018
获益良多. 谢谢剑林哥.
October 12th, 2018
前面的部分可以总结为 Cross Entropy = Entropy + KL Divergence.
July 16th, 2019
公式(11)的假设$\tilde{p}(X,Y)=\tilde{p}(X)\tilde{p}(Y|X)$是不是来自于最大熵模型里面的假设$E_{\tilde{p}(x,y)}f(x,y) = E_{\tilde{p}(x)\cdot p(y|x)}f(x,y)$?
之前写多了个参数$\theta$,更正后是$\tilde{p}(X,Y)=\tilde{p}(X)\tilde{p}(Y|X)$,这就是训练数据的概率写法,不是假设。
September 5th, 2019
苏神,您看看这个http://www.sohu.com/a/210551059_473283。(到第4层)
我感觉您这里的EM的推导结果其实是GEM算法的求解过程。您的$(19)$式最小化$KL(p~(Y|X)∥p_θ(r)(Y|X))$. 其实就是GEM中的E步。
所以感觉您是从建模联合概率分布的角度推出了GEM算法。不知道我理解的对不对。
我只是想着绕开对边缘分布的讨论(避免使用詹森不等式)而已~
February 12th, 2020
请问从$(18)$式到$(19)$式,$p_{\theta}(X|Y)$为什么是已知的?
注意到在GMM模型一节中提到,GMM假设这个分布为正态分布,但它的均值和方差也应该是未知的啊?
假设你能从$(18)$式解出$\theta$,然后代入$p_{\theta}(X|Y)$不就得到一个近似的$p_{\theta}(X|Y)$了么?然后将它代入到$(19)$求解就是了。
July 8th, 2020
非常棒的文章,感谢。不过我还有一点没想明白。最后的迭代公式$\theta^{r+1} = arg\mathop{max}\limits_\theta E_X[ \sum\limits_Y \widetilde{P} ^r(Y|X)log P_\theta(X|Y)P_\theta(Y) ]$,在给定了$\theta^r$的情况下,先算出$\widetilde{P}^r(Y|X)$,接着对$P_\theta(X|Y)P_\theta(Y)$求期望,然后极大似然估计更新参数。$P_\theta(X|Y)$是第几个类别的高斯分布,参数为均值与协方差矩阵,$P_\theta(Y)$是离散分布。这里我不确定的是在更新参数过程中,$P_\theta(Y)$是作为一个具体计算出来的值,比如$P_\theta(Y)=\sum\limits_X\widetilde{P}^r(Y|X)\widetilde{P}(X)$,还是说也是一个需要求的参数。如果是后一种情况,我想不清楚应该怎么求解呢,是利用约束条件$\sum\limits_YP_\theta(Y)=1$,然后用拉格朗日乘子法求解吗?
$P_{\theta}(Y)$是什么形式,这是人为给定的,给定之后才做优化,比如它可能是$softmax(\theta)$,$\theta$对应每一类的参数向量。
August 13th, 2020
请问一下大佬,公式(7)中的第一行为什么可以推导出第二行?不是应该等于$\mathop{argmax}\limits_{\theta}\sum\limits_{X}\tilde{P}(X)log\frac{\tilde{P}(X)}{{P}_{\theta}(X)}$吗?
$=\mathop{\arg\min}\limits_{\theta}\sum\limits_{X}\tilde{P}(X)log\frac{\tilde{P}(X)}{{P}_{\theta}(X)}=\mathop{\arg\min}\limits_{\theta}\sum\limits_{X}-\tilde{P}(X)log {P}_{\theta}(X)=\mathop{\arg\max}\limits_{\theta}\sum\limits_{X}\tilde{P}(X)log {P}_{\theta}(X)$
September 6th, 2020
为什么感觉E步和M步跟通常看到的版本是反着的?
随便吧...没必要纠结~