机器学习笔记——10 上帝的算法EM算法
EM算法是一种迭代算法,它可以用来求解一些含有潜在变量的模型的参数。比如后面我们将介绍的混合高斯模型、kmean聚类以及因子分析,它们都利用EM算法来求解参数。EM算法非常美妙,在吴军的《数学之美》一书中,将该算法称为上帝的算法,本文标题即是延用他的说法。在本文中,我们主要介绍EM算法及其相关的数学理论,重点解释为什么EM算法可以保证收敛,以及EM算法是否能够保证得到全局最优解。
潜变量模型
给定了一个训练集 S = { x ( 1 ) , . . . , x ( m ) } S = \{x^{(1)},...,x^{(m)}\} S={ x(1),...,x(m)},训练的模型是 p ( x , z ; θ ) p(x,z;\theta) p(x,z;θ),注意到这是一个潜变量模型(latent variable model),我们的目的是通过训练集训练出参数 θ \theta θ。因此按照正常的思路,我们需要构建一个似然函数,并尝试通过MLE获得 θ \theta θ的参数估计。由于变量z是无法观测的,因此我们需要获得 x x x的边缘分布: p ( x ; θ ) = ∑ z p ( x , z ; θ ) p(x;\theta) = \sum_{z}p(x,z;\theta) p(x;θ)=z∑p(x,z;θ)然后就可以得到对数似然函数 ℓ ( θ ) = ∑ i = = 1 m log p ( x ( i ) ; θ ) = ∑ i = = 1 m log ∑ z ( i ) p ( x ( i ) , z ( i ) ; θ ) \ell(\theta) = \sum_{i = =1}^{m}\log{p(x^{(i)};\theta)} = \sum_{i = =1}^{m}\log{\sum_{z^{(i)}}p(x^{(i)},z^{(i)};\theta)} ℓ(θ)=i==1∑mlogp(x(i);θ)=i==1∑mlogz(i)∑p(x(i),z(i);θ)事实上我们会发现求此函数的驻点是没有封闭解的,这就是潜变量模型参数估计时的困难。但是,通过EM算法,我们可以通过迭代给出一个满意的参数估计。
EM算法
EM算法通过E-step和M-step两步来不断迭代 θ ( t ) \theta^{(t)} θ(t),最终达到收敛。需要特别指出,除非迭代的函数是一个凸函数,否则一般而言是无法保证达到全局最优解。此外,EM算法是可以保证收敛,这一点我们会在下文中证明。现在我们具体阐述EM算法的步骤:
Repeate until convergence
(E-step) For each i,set
Q ( i ) = p ( z ( i ) ∣ x ( i ) , θ ) Q^{(i)} = p(z^{(i)}|x^{(i)},\theta) Q(i)=p(z(i)∣x(i),θ)(M-step) Update the parameters : θ = a r g M a x θ ∈ Θ ∑ i = 1 m E L B O ( x ( i ) , Q , θ ) \theta = argMax_{\theta \in \Theta} {\sum_{i = 1}^{m}ELBO(x^{(i)},Q,\theta)} θ=argMaxθ∈Θi=1∑mEL