这是阅读周志华教授《机器学习》中第七章(贝叶斯分类器)中EM算法部分的笔记,书上总结得很精炼,有很多细枝末节的东西需要填充。
PDF版:http://pcoln8jiu.bkt.clouddn.com/em.pdf
简单总结
书中将EM算法总结为估计参数隐变量的方法,它是一种迭代式算法:
若参数Θ已知,则根据训练数据D推断出最优隐变量Z;若Z的值已知,则可对Θ求极大似然估计。
步骤简单地可以总结为下面两步:
E步:利用当前估计的参数值Θ计算对数似然的期望。
M步:寻找可以使E步产生的似然期望最大的Θ。
上面两个步骤交替执行,直至收敛。
补充
强烈建议观看徐亦达教授的EM算法视频:https://www.bilibili.com/video/av23901379
这部分之前写的不是很清楚,于是我决定重新看一下徐老师的视频和PPT,认真把EM算法框架推导和证明过一遍,再推导出高斯混合模型带入框架中的具体形式。
EM算法是一个非常好的解决计算困难问题的思路,巧妙地引入隐变量(latent variables)避开一些复杂计算。首先从高斯混合模型引入问题:
高斯混合模型(Gaussian Mixture Model, GMM)
基于贝叶斯估计通常首先假设数据中的特征之间独立同分布。我们遇到数据集的分布无法仅用一个Gaussian Distribution拟合时通常考虑使用混合模型,Gaussian mixture model就是将多个高斯模型加权求和达到对拟合数据的目的。使用GMM描述一个数据集的分布可以表示成:
p(X)=k∑i=1αiN(X|μi,Σi)
∑αi=1
k为高斯分布个数,Θ表示高斯混合模型,α为每个高斯分布的权,N表示一个高斯分布的概率值,定义为f(x;θi),是参数为θi的高斯分布概率密度函数1√2πΣiexp(−(x−μi)22Σ2i)。μ、Σ分别为每个高斯分布的参数。
对于整个GMM Θ,我们需要确定的参数有2k−1个,即μ1,…,μk,Σ1,…,Σk,α1,…,αk−1.
插一句关于αi的来历:因为数据分布(或者说宽度)并不一定非常平均,我随便搜了一张图来解释一下:
比如这个图,很明显两个高斯分布比例不一样,因此用权重更合适。
我思考为什么权值和是1,参考了问答[1]:因为GMM的定义本质上是一个概率密度函数,概率密度函数在负无穷到正无穷内的积分为1,因此我们首先要满足概率密度函数的性质。
我们希望GMM更好地拟合数据集,也就是希望p(x)尽可能地大,于是通常利用对数似然估计对高斯混合模型进行调参,使得拟合特定的数据集。
这里再插一句:为什么不用一般的极大似然估计(MAP)?
这是我和师兄同学在饭桌上讨论过的一个问题,总结一下,原因有两条:
- 因为极大似然估计是把所有概率乘在一起,每个概率值都是小数,数据量大了小数位精度会丢得非常厉害。
- 将连乘换成对数和的形式,求导方便。
针对高斯混合模型,我们构造损失函数L(Θ):
L(Θ|X)=n∑i=1logp(X)
即:
L(Θ|X)=n∑i=1logk∑j=1αjN(xi|μj,Σj)
于是我们的优化目标就是:
ΘMLE=argmaxΘL(Θ|X)
虽然上式可导,但是无法一步到位,计算过程过于复杂。
考虑是不是可以有一个迭代的方法,求得Θ(1),Θ(2),…,Θ(t),使得我们最后收敛?
这是推导EM需要的前置知识,摆在这里。
Jensen不等式[2]
设f是定义域为实数的函数,如果对于所有的实数x,f(x)的二次导数大于等于0,那么f是凸函数。当x是向量时,如果其Hessian矩阵H是半正定的,那么f是凸函数。如果只大于0,不等于0,那么称f是严格凸函数。
Jensen不等式表述如下:
如果f是凸函数,X是随机变量,那么:E[f(X)]≥f(E[X]),特别地,如果f是严格凸函数,当且仅当X是常量时,上式取等号。
图中,实线f是凸函数,X是随机变量,有0.5的概率是a,有0.5的概率是b。X的期望值就是a和b的中值了,图中可以看到E[f(X)]≥f(E[X])成立。
顺便,中国数学界关于函数凹凸性定义和国外很多定义是反的。国内教材中的凹凸,是指曲线,而不是指函数,图像的凹凸与直观感受一致,却与函数的凹凸性相反[3].
EM算法
直接给出EM算法需要迭代解决的基本任务:
Θ(t+1)=argmaxΘ∫zlogp(X,z|Θ)p(z|X,Θ(t))dz
当然这是最普遍的定义,如果放在离散问题上,那么z的数量是有限的于是可以写成:
$$
\Theta^{(t+1)}=\mathop{argmax}\Theta\sum{i=1}^k\log p(X,z_i|\Theta)p(z_i|X,\Theta^{(t)})
$$
接下来会一步一步地推出上面这个迭代式。
我再摆一下原来的优化目标:
$$
\Theta^{MLE}=\mathop{argmax}\Theta\log \sum{j=1}^k\alpha_jN(X|\mu_j,\Sigma_j)
$$
我们发现有2个不一样的地方:
- 怎么多了个变量z?
- 这个∑怎么跑log左边去了?
怎么多了个变量?这对原目标不会有影响么?
首先,其实z是辅助变量,称为隐变量(latent variable),引入这个东西是EM算法的一个亮点。我记得在数据挖掘课上徐君老师点评SVM算法,说这是一个典型的“看似化简为繁”的工作,但是有了这一步,后面的计算往往会更加简便。
这和EM算法异曲同工,EM算法的提出者也看得很远,他对需要优化的损失函数引入辅助变量,而且必须保证加和不加的分布相同(保证加了z之后的边缘分布与原分布一致),也就是说,给出数据的概率分布,必须保证有:
p(X)=k∑i=1p(X|Θ,zi)p(Θ,zi)
p(X|Θ,zi)表示对数据判断的似然(对应GMM中的概率密度函数N)
p(Θ,zi)表示先验(对应GMM中的权重αi)
我们这么定义,因此合适的p都不会有影响。
这个∑怎么跑log左边去了?
保留这个问题,首先分析我们的优化目标。由于是迭代的,那么最基本的要求就是我们每次迭代都要使当前结果更加接近最终结果,也就是:
logp(X|Θ(t+1))≥logp(X|Θ(t))
我们的目标是推出这样一个式子,此时已经没有隐变量z了。我们希望通过优化目标下式来得到上式的结果:
$$
\Theta^{(t+1)}=\mathop{argmax}\Theta\sum{i=1}^k\log p(X,z_i|\Theta)p(z_i|X,\Theta^{(t)})
$$
这个假设非常大胆,我们很轻易地发现这里其实蕴含了一个矛盾,我们定义$\Theta$是最终的优化结果,而$\Theta^{(t)}$却是当前步的最优目标,我们在计算过程中实际上并不知道$\Theta$,这完全是个Chicken and eggs problem。
如何处理并不是很显然,我们尝试推一下。首先知道:
p(X)=p(X)p(XZ)p(XZ)=p(XZ)p(Z|X)
于是:
logp(X|Θ)=logp(XZ|Θ)p(Z|XΘ)=logp(XZ|Θ)−logp(Z|XΘ)
那么它们在Z下的期望也一定相等,即:
Ep(Z|XΘ(t))[logp(X|Θ)]=Ep(Z|XΘ(t))[logp(XZ|Θ)−logp(Z|XΘ)]
等式左边展开期望的定义:
Ep(Z|XΘ(t))[logp(X|Θ)]=∫Z[logp(X|Θ)]p(z|XΘ(t))dz
=logp(X|Θ)∫zp(z|XΘ(t))dz
=logp(X|Θ)
等式右边,由期望可加性拆成两项差,期望定义展开:
=∫Zlogp(XZ|Θ)p(z|XΘ(t))dz−∫Zlogp(Z|XΘ)p(z|XΘ(t))dz
这是整个EM算法里最tricky的部分(其次是引入latent variable),仔细观察就会发现EM算法迭代优化的只是前面那个积分∫Zlogp(XZ|Θ)p(Z|XΘ(t))dz,所以接下来就是消掉后面这个积分,这个被消掉的过程是有点厉害的。。
前半部分定义给个记号:Q(Θ,Θ(t)),后半部分定义为:H(Θ,Θ(t)).
重申下我们的目标,希望推出最终优化目标为:
argmaxΘ[∫Zlogp(XZ|Θ)p(z|XΘ(t))dz]=Θ(t)
那么到t+1步的时候,Q和H会变大还是变小?
讨论Q:(因为我们的最终目标就只包含Q,所以Q肯定单调增加啦)显然Q(Θ(t+1),Θ(t))Q>(Θ,Θ(t)).
讨论H:如果H(Θ(t),Θ(t))≥H(Θ(t+1),Θ(t)),即H是单调递减的话就可以将优化目标的后半部分的积分约掉了,下面证明。
证明H(Θ(t),Θ(t))≥H(Θ,Θ(t))
∫zlog[p(z|XΘ(t))]p(z|XΘ(t))dz−∫zlog[p(Z|XΘ)]p(z|XΘ(t))dz
即:
∫zlog[p(z|XΘ(t))p(Z|XΘ)]p(z|XΘ(t))dz
希望上式≥0,ummmm…似乎做不下去了。
冷静分析,上面实际上是个函数的期望EZ(log[p(z|XΘ(t))p(Z|XΘ)]),里面有个log实在太复杂,能不能把log拿出来,比如写成logE(p(z|XΘ(t))p(Z|XΘ)).
我们再仔细考虑,诶?这个分子是p(z|XΘ(t)),跟Z下的概率一样嘛。于是保证这个函数的单调性的同时做一下变换:
EZ(log[p(z|XΘ(t))p(Z|XΘ)])=EZ(−log[p(Z|XΘ)p(z|XΘ(t))])
我们要把log拿出来,于是作者想到了用Jensen不等式E[f(X)]≥f(E[X]),函数的期望≥期望的函数,带进去就OK了:
EZ(−log[p(Z|XΘ)p(z|XΘ(t))])≥−logEZ(p(Z|XΘ)p(z|XΘ(t)))
展开不等式右边:
−logEZ(p(Z|XΘ)p(z|XΘ(t)))=∫Zp(Z|XΘ)p(z|XΘ(t))p(z|XΘ(t))dz=−log(1)=0
于是:
EZ(−log[p(Z|XΘ)p(z|XΘ(t))])≥−logEZ(p(Z|XΘ)p(z|XΘ(t)))=0
单调减的性质就证出来了。
所以我们的优化目标就是:
$$
\Theta^{(t+1)}=\mathop{argmax}\Theta\sum{i=1}^k\log p(X,z_i|\Theta)p(z_i|X,\Theta^{(t)})
$$
($\sum$竟然跑到$\log$的左边去了)
Reference:
徐老师的视频链接:https://www.bilibili.com/video/av23901379
[1]. https://www.quora.com/Why-are-all-of-the-weights-in-Gaussian-mixture-models-supposed-to-be-positive
v1.5.2