EM算法是机器学习中比较重要的用于对于带有隐变量的联合概率模型参数进行极大似然估计的方法。因为这篇文章单独把EM算法抽出来讲,对于没有统计学习基础的同学来说,理解这个算法是如何引出的可能会有些困难,会需要关于ELBO,KL散度等相关知识储备。所以本文将从以下几个方面来讲解,让入门的同学可以快速对EM算法有一个大体的认知:


  • EM算法要解决什么问题

  • EM算法的E-step和M-step以及证明其收敛性

  • EM算法的应用




一.EM算法要解决什么问题



EM(期望最大化)算法于1976年提出,这篇论文的名字是“Maximum Likelihood for Incomplete Data via the EM Algorithm”。其实论文题目已经非常清楚地说明了EM算法作用——从incomplete data中进行极大似然求解。

什么是incomplete data呢,作者给出的定义是如果有两个样本空间Z和X以及关于Z->X的映射。x∈X是可以观察到的数据,而z∈Z是不能直接观察到,只能通过x间接观察到的数据,这样的数据就是incomplete data,我们称z为隐变量,EM算法的目的就是通过E-step和M-step迭代的方式进行极大似然估计,对含有隐变量的概率模型进行参数估计。


二.EM算法的公式以及证明其收敛性



假设输入的数据是观测数据X,隐变量数据Z,联合分布为P(x,z|θ),条件分布P(z|x,θ),要求解的是模型参数θ。

MLE(极大似然估计)问题的其实就是求解五分钟快速了解EM算法_java,为了方便求解一般会加上log,后面这个式子也称为log likelihood。EM算法就是通过迭代的方式求出这个式子的解析解。
首先选择参数初值五分钟快速了解EM算法_java_02, 开始迭代。假设五分钟快速了解EM算法_java_03是第t次迭代参数的估计值,在第t+1次迭代时,EM算法的公式是 

五分钟快速了解EM算法_java_04


这个式子后半部分的积分其实就是求期望五分钟快速了解EM算法_java_05,对应的E步我们称这个函数为Q函数,在证明收敛性时会用到,前面的加上argmax函数就是最大化,对应M步。式中五分钟快速了解EM算法_java_06是联合概率,五分钟快速了解EM算法_java_07是后验概率。


需要注意的是,虽然参数的初值可以任意选择,但是EM算法对于初值是敏感的,随意取初值很有可能得不到好的结果,所以还是要慎重取值。


了解了公式之后,接下来我们来证明EM算法的收敛性。即证明五分钟快速了解EM算法_java_08


 首先五分钟快速了解EM算法_java_09,两边同时取对数得 五分钟快速了解EM算法_java_10


由上文可知 五分钟快速了解EM算法_java_11


令 

五分钟快速了解EM算法_java_12


则 五分钟快速了解EM算法_java_13(解释说明:对于五分钟快速了解EM算法_java_14来说,五分钟快速了解EM算法_java_15和求期望没有关系,可以提取出来,而后面的五分钟快速了解EM算法_java_16等于1,所以等于五分钟快速了解EM算法_java_17五分钟快速了解EM算法_java_18同理。


对于上式分别取θ五分钟快速了解EM算法_java_19五分钟快速了解EM算法_java_20并相减,有


五分钟快速了解EM算法_java_21


为了证明五分钟快速了解EM算法_java_22,只需证明上式右端为非负的。由于在EM算法里,在M步会对Q函数求极大,则 五分钟快速了解EM算法_java_23


对于第二项


五分钟快速了解EM算法_java_24   五分钟快速了解EM算法_java_25
五分钟快速了解EM算法_java_26

这里的不等式由Jenson不等式得到。其实如果了解KL散度可以发现五分钟快速了解EM算法_java_27   又因为KL散度大于等于0,所以可得最后结果小于等于0。




三.EM算法的应用



之前有一次面试,面试官问我机器学习算法都会哪些,我说到了EM算法,然后她问EM算法有什么应用吗,她觉着EM算法没有什么应用场景。其实EM算法应用还是比较广泛的,尤其是在高斯混合模型做参数估计的时候。EM算法不像感知机,支持向量机应用普遍,它很少作为分类算法被使用,EM算法作为一种参数估计的方法,更多是和概率模型结合使用,例如用于马尔可夫模型参数求解。同时EM算法还有一些推广:GEM算法,变分EM等等。







投稿或交流学习,备注:昵称-学校(公司)-方向,进入DL&NLP交流群。

方向有很多:机器学习、深度学习,python,情感分析、意见挖掘、句法分析、机器翻译、人机对话、知识图谱、语音识别等

五分钟快速了解EM算法_java_28

记得备注呦