EM算法也称指望最大化(Expectation-Maximum,简称EM)算法,它是一个基础算法,是不少机器学习领域算法的基础,好比隐式马尔科夫算法(HMM), LDA主题模型的变分推断等等。本文就对EM算法的原理作一个总结。html
咱们常常会从样本观察数据中,找出样本的模型参数。 最经常使用的方法就是极大化模型分布的对数似然函数。算法
可是在一些状况下,咱们获得的观察数据有未观察到的隐含数据,此时咱们未知的有隐含数据和模型参数,于是没法直接用极大化对数似然函数获得模型分布的参数。怎么办呢?这就是EM算法能够派上用场的地方了。机器学习
EM算法解决这个的思路是使用启发式的迭代方法,既然咱们没法直接求出模型分布参数,那么咱们能够先猜测隐含数据(EM算法的E步),接着基于观察数据和猜想的隐含数据一块儿来极大化对数似然,求解咱们的模型参数(EM算法的M步)。因为咱们以前的隐藏数据是猜想的,因此此时获得的模型参数通常还不是咱们想要的结果。不过不要紧,咱们基于当前获得的模型参数,继续猜想隐含数据(EM算法的E步),而后继续极大化对数似然,求解咱们的模型参数(EM算法的M步)。以此类推,不断的迭代下去,直到模型分布参数基本无变化,算法收敛,找到合适的模型参数。函数
从上面的描述能够看出,EM算法是迭代求解最大值的算法,同时算法在每一次迭代时分为两步,E步和M步。一轮轮迭代更新隐含数据和模型分布参数,直到收敛,即获得咱们须要的模型参数。学习
一个最直观了解EM算法思路的是K-Means算法,见以前写的K-Means聚类算法原理。在K-Means聚类时,每一个聚类簇的质心是隐含数据。咱们会假设$K$个初始化质心,即EM算法的E步;而后计算获得每一个样本最近的质心,并把样本聚类到最近的这个质心,即EM算法的M步。重复这个E步和M步,直到质心再也不变化为止,这样就完成了K-Means聚类。优化
固然,K-Means算法是比较简单的,实际中的问题每每没有这么简单。上面对EM算法的描述还很粗糙,咱们须要用数学的语言精准描述。htm
对于$m$个样本观察数据$x=(x^{(1)},x^{(2)},...x^{(m)})$中,找出样本的模型参数$\theta$, 极大化模型分布的对数似然函数以下:$$\theta = arg \max \limits_{\theta}\sum\limits_{i=1}^m logP(x^{(i)};\theta)$$blog
若是咱们获得的观察数据有未观察到的隐含数据$z=(z^{(1)},z^{(2)},...z^{(m)})$,此时咱们的极大化模型分布的对数似然函数以下:$$\theta = arg \max \limits_{\theta}\sum\limits_{i=1}^m logP(x^{(i)};\theta) = arg \max \limits_{\theta}\sum\limits_{i=1}^m log\sum\limits_{z^{(i)}}P(x^{(i)}, z^{(i)};\theta) $$get
上面这个式子是没有 办法直接求出$\theta$的。所以须要一些特殊的技巧,咱们首先对这个式子进行缩放以下:$$\begin{align} \sum\limits_{i=1}^m log\sum\limits_{z^{(i)}}P(x^{(i)}, z^{(i)};\theta) & = \sum\limits_{i=1}^m log\sum\limits_{z^{(i)}}Q_i(z^{(i)})\frac{P(x^{(i)}, z^{(i)};\theta)}{Q_i(z^{(i)})} \\ & \geq \sum\limits_{i=1}^m \sum\limits_{z^{(i)}}Q_i(z^{(i)})log\frac{P(x^{(i)}, z^{(i)};\theta)}{Q_i(z^{(i)})} \end{align}$$数学
上面第(1)式引入了一个未知的新的分布$Q_i(z^{(i)})$,第(2)式用到了Jensen不等式:$$log\sum\limits_j\lambda_jy_j \geq \sum\limits_j\lambda_jlogy_j\;\;, \lambda_j \geq 0, \sum\limits_j\lambda_j =1$$
或者说因为对数函数是凹函数,因此有:$$f(E(x)) \geq E(f(x))\;\; 若是f(x) 是凹函数$$
此时若是要知足Jensen不等式的等号,则有:$$\frac{P(x^{(i)}, z^{(i)};\theta)}{Q_i(z^{(i)})} =c, c为常数$$
因为$Q_i(z^{(i)})$是一个分布,因此知足:$$ \sum\limits_{z}Q_i(z^{(i)}) =1 $$
从上面两式,咱们能够获得:$$Q_i(z^{(i)}) = \frac{P(x^{(i)}, z^{(i)};\theta)}{\sum\limits_{z}P(x^{(i)}, z^{(i)};\theta)} = \frac{P(x^{(i)}, z^{(i)};\theta)}{P(x^{(i)};\theta)} = P( z^{(i)}|x^{(i)};\theta))$$
若是$Q_i(z^{(i)}) = P( z^{(i)}|x^{(i)};\theta)) $, 则第(2)式是咱们的包含隐藏数据的对数似然的一个下界。若是咱们能极大化这个下界,则也在尝试极大化咱们的对数似然。即咱们须要最大化下式:$$ arg \max \limits_{\theta} \sum\limits_{i=1}^m \sum\limits_{z^{(i)}}Q_i(z^{(i)})log\frac{P(x^{(i)}, z^{(i)};\theta)}{Q_i(z^{(i)})}$$
去掉上式中为常数的部分,则咱们须要极大化的对数似然下界为:$$ arg \max \limits_{\theta} \sum\limits_{i=1}^m \sum\limits_{z^{(i)}}Q_i(z^{(i)})log{P(x^{(i)}, z^{(i)};\theta)}$$
上式也就是咱们的EM算法的M步,那E步呢?注意到上式中$Q_i(z^{(i)})$是一个分布,所以$\sum\limits_{z^{(i)}}Q_i(z^{(i)})log{P(x^{(i)}, z^{(i)};\theta)}$能够理解为$logP(x^{(i)}, z^{(i)};\theta)$基于条件几率分布$Q_i(z^{(i)})$的指望。
至此,咱们理解了EM算法中E步和M步的具体数学含义。
如今咱们总结下EM算法的流程。
输入:观察数据$x=(x^{(1)},x^{(2)},...x^{(m)})$,联合分布$p(x,z ;\theta)$, 条件分布$p(z|x; \theta)$, 最大迭代次数$J$。
1) 随机初始化模型参数$\theta$的初值$\theta^{0}$。
2) for j from 1 to J开始EM算法迭代:
a) E步:计算联合分布的条件几率指望:$$Q_i(z^{(i)}) = P( z^{(i)}|x^{(i)},\theta^{j})) $$$$L(\theta, \theta^{j}) = \sum\limits_{i=1}^m\sum\limits_{z^{(i)}}Q_i(z^{(i)})log{P(x^{(i)}, z^{(i)};\theta)}$$
b) M步:极大化$L(\theta, \theta^{j})$,获得$\theta^{j+1}$: $$\theta^{j+1} = arg \max \limits_{\theta}L(\theta, \theta^{j}) $$
c) 若是$\theta^{j+1}$已收敛,则算法结束。不然继续回到步骤a)进行E步迭代。
输出:模型参数$\theta$。
EM算法的流程并不复杂,可是还有两个问题须要咱们思考:
1) EM算法能保证收敛吗?
2) EM算法若是收敛,那么能保证收敛到全局最大值吗?
首先咱们来看第一个问题, EM算法的收敛性。要证实EM算法收敛,则咱们须要证实咱们的对数似然函数的值在迭代的过程当中一直在增大。即:$$\sum\limits_{i=1}^m logP(x^{(i)};\theta^{j+1}) \geq \sum\limits_{i=1}^m logP(x^{(i)};\theta^{j})$$
因为$$L(\theta, \theta^{j}) = \sum\limits_{i=1}^m\sum\limits_{z^{(i)}}P( z^{(i)}|x^{(i)};\theta^{j}))log{P(x^{(i)}, z^{(i)};\theta)}$$
令:$$H(\theta, \theta^{j}) = \sum\limits_{i=1}^m\sum\limits_{z^{(i)}}P( z^{(i)}|x^{(i)};\theta^{j}))log{P( z^{(i)}|x^{(i)};\theta)}$$
上两式相减获得:$$ \sum\limits_{i=1}^m logP(x^{(i)};\theta) = L(\theta, \theta^{j}) - H(\theta, \theta^{j})$$
在上式中分别取$\theta$为$\theta^j$和$\theta^{j+1}$,并相减获得:$$\sum\limits_{i=1}^m logP(x^{(i)};\theta^{j+1}) - \sum\limits_{i=1}^m logP(x^{(i)};\theta^{j}) = [L(\theta^{j+1}, \theta^{j}) - L(\theta^{j}, \theta^{j}) ] -[H(\theta^{j+1}, \theta^{j}) - H(\theta^{j}, \theta^{j}) ] $$
要证实EM算法的收敛性,咱们只须要证实上式的右边是非负的便可。
因为$\theta^{j+1}$使得$L(\theta, \theta^{j})$极大,所以有:$$L(\theta^{j+1}, \theta^{j}) - L(\theta^{j}, \theta^{j}) \geq 0$$
而对于第二部分,咱们有:$$ \begin{align} H(\theta^{j+1}, \theta^{j}) - H(\theta^{j}, \theta^{j}) & = \sum\limits_{i=1}^m\sum\limits_{z^{(i)}}P( z^{(i)}|x^{(i)};\theta^{j})log\frac{P( z^{(i)}|x^{(i)};\theta^{j+1})}{P( z^{(i)}|x^{(i)};\theta^j)} \\ & \leq \sum\limits_{i=1}^mlog(\sum\limits_{z^{(i)}}P( z^{(i)}|x^{(i)};\theta^{j})\frac{P( z^{(i)}|x^{(i)};\theta^{j+1})}{P( z^{(i)}|x^{(i)};\theta^j)}) \\ & = \sum\limits_{i=1}^mlog(\sum\limits_{z^{(i)}}P( z^{(i)}|x^{(i)};\theta^{j+1})) = 0 \end{align}$$
其中第(4)式用到了Jensen不等式,只不过和第二节的使用相反而已,第(5)式用到了几率分布累积为1的性质。
至此,咱们获得了:$\sum\limits_{i=1}^m logP(x^{(i)};\theta^{j+1}) - \sum\limits_{i=1}^m logP(x^{(i)};\theta^{j}) \geq 0$, 证实了EM算法的收敛性。
从上面的推导能够看出,EM算法能够保证收敛到一个稳定点,可是却不能保证收敛到全局的极大值点,所以它是局部最优的算法,固然,若是咱们的优化目标$L(\theta, \theta^{j}) $是凸的,则EM算法能够保证收敛到全局最大值,这点和梯度降低法这样的迭代算法相同。至此咱们也回答了上面提到的第二个问题。
若是咱们从算法思想的角度来思考EM算法,咱们能够发现咱们的算法里已知的是观察数据,未知的是隐含数据和模型参数,在E步,咱们所作的事情是固定模型参数的值,优化隐含数据的分布,而在M步,咱们所作的事情是固定隐含数据分布,优化模型参数的值。比较下其余的机器学习算法,其实不少算法都有相似的思想。好比SMO算法(支持向量机原理(四)SMO算法原理),坐标轴降低法(Lasso回归算法: 坐标轴降低法与最小角回归法小结), 都使用了相似的思想来求解问题。
你们也能够去比较下这些算法的优化方法,看思路上是否是有共同之处。
(欢迎转载,转载请注明出处。欢迎沟通交流: liujianping-ok@163.com)