从最大似然到EM算法:一致的理解方式
By 苏剑林 | 2018-03-15 | 142422位读者 |最近在思考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 29th, 2021
pθ(Y)pθ(X|Y)苏神,请问这个(18)这两个作为已知,是不是需要人为根据任务去规定的函数形式呢?
不知道你想表达什么
October 4th, 2021
苏神,你好。在这篇博客中你通过最大似然估计的思路导出了分类问题的优化式子,我很好奇那么回归问题中的L1,L2 Loss有这种从统计出发的推导吗?
哦,我知道了。一般教程中的讲法是L2 Loss来源于对噪声的高斯分布假设。 但是我还是有点疑问。在最大似然估计中,我们一般是假定了似然函数$P(Y|X)$的形式,去求解最优的参数$\Theta$。在分类问题中$P(Y|X)$的形式是由sigmoid函数组成的伯努利分布,但是在回归问题中,我们往往将$P(Y|X)$看成是一个定值(狄拉克分布),然后假设存在一个加性的高斯分布的噪声,然后才有了L2 loss。 我很好奇为什么在回归问题中,不直接将$P(Y|X)$看成是一个高斯分布,方差固定,均值由某个输入为X的确定函数构成,虽然结果都是一样的,但这样更和分类问题的推导一致,否则回归问题需要考虑这个噪声,但是分类问题不需要,还是挺别扭的。
你说的两种做法事实上是完全等价的:
1、假设$p(y|x)$的分布是$\mathcal{N}(y;f(x),\sigma^2)$,然后用交叉熵为损失;
2、假设$y=f(x)+\varepsilon$,其中$\varepsilon\sim \mathcal{N}(\varepsilon;0,\sigma^2)$,然后用MSE损失。
反过来说,后者用MSE损失的原因,就是后者假设的分布为前者,前者的交叉熵为后者的MSE。
March 10th, 2022
公式(9)下面,”因此$p_{\theta}(X)$我们认为就是$\tilde{p}(X)$“,请问为啥可以这样认为啊?直接抹掉了$\theta$对x的影响。
因为我们不需要用到它,所以就不建模它。
October 19th, 2022
[...]从最大似然到EM算法:一致的理解方式[...]
December 23rd, 2022
“存在就是最合理的” 真是醍醐灌顶啊
之前理解的似然都是从概率反推的, 就一直不明白为什么一定要最大化它, 现在一下子就懂了, 因为存在的就是最合理的!
March 24th, 2023
苏神你好,“$p_θ(X)$我们认为就是$p̃(X)$”,请问这怎么得到呢?有什么自然的解释吗?
准确地说,不需要训练的话,它就相当于一个常数,可以忽略。
如果$P_\theta(Y|X)$是可以训练的,那么$P_\theta(X)$共用同样一个参数$\theta$,那么在优化过程中$P_\theta(X)$也会随着变化,怎么会是常数呢?不吝赐教!
这只是一个形式记号,看你关心哪一个,你不关心$P_{\theta}(X)$,就可以将它视为常数。
$\theta$是全体参数的记号,并不是说两者参数完全相同,比如可能$P_{\theta}(X)$用前一半参数,$P_{\theta}(Y|X)$用后一半参数。
July 7th, 2023
所以是否可以这么理解:VAE就是将EM算法中p(y|x)假设为符合高斯分布的常数,而VAE的训练过程就是不断地在重复EM算法求解隐变量的过程,不同之处在于VAE训练时p(y|x)与cita是同步变化的,而EM是要固定一个,求另一个的最大似然,所以VAE中p(y|x)与p(x|y)是相互靠近的,而EM算法是一个靠近之后固定,再让另一个靠近。那这个EM算法感觉和DCGAN很类似啊?要看苏神另一篇博客了,变分推断下的统一理解。
对,在那个变分推断的统一理解下,GAN跟EM的思想是一致的,都是固定一个优化另一个,交替优化。
感谢苏神,看完了后边一部分博客,回头再回顾一下,当时理解没那么深的,现在感觉一切都很合理。
赞!这个系列真的太妙了,不愧是苏老师!
September 11th, 2024
苏神,其实前面引用的“存在即合理”的本意并不是文中的意思,而是说“凡是存在中的事物都是合乎发展规律(理性)的”,当然你这么说也有助于理解文章
谢谢指点,学习了。
November 11th, 2024
谢谢苏老师!终于有一篇能看懂的讲EM算法的文章了。还想请教一下,大多数文章里面用到的p=ELBO+Dkl这个式子,为什么要让kl散度最小?kl散度大的时候,似然估计值不是更大吗?