作者:bobo
EM算法是机器学习十大算法之一, 在机器学习史上提出极早,影响范围极广。本文由浅入深,逐步推导EM算法,使读者更深刻的理解EM算法。
本文从EM算法的基本概念说起,提出对于EM算法的一些基本认知问题,而后通过抛硬币实例让读者更好的理解EM算法和理解这个算法要去解决的实际问题,全文主要分为如下几个部分:
- 初识EM算法
- 从抛硬币说起 - 极大似然估计与隐变量
- 似曾相识的模式 - K-Means
- 推导接近EM的优化算法
- 问题和算法的形式化
- 应用和推广
一 初识EM算法
EM算法全称Expectation Maximization算法,即期望最大化算法。EM算法是机器学习十大方法之一, 由Arthur P. Dempster,Nan Laird和Donald Rubin 1977年正式提出,是一种在已知部分相关变量的情况下,估计未知变量的迭代算法,该算法之前已经在许多特定的领域中被应用。
三位作者从左至右Arthur P. Dempster,Nan Laird和Donald Rubin
EM的算法流程相对而言比较简单,其步骤如下:
step1 :初始化分布参数
step2 :重复E、M步骤直到收敛:
a) E步骤-期望值计算:根据参数的假设值,给出未知变量的期望估计,应用于缺失值。
b) M步骤-最大化计算:根据未知变量的估计值,给出当前的参数的极大似然估计。
EM算法的描述看似非常直白简单,然而真正理解它的算法设计、有效性和实际应用,还需要思考这些问题:
- 这个算法要解决什么样的问题?
- 已知部分相关变量指的是什么,未知变量是哪些?
- 求解过程中为什么需要进行迭代?
- 迭代过程的关键是什么?
- 从数学的角度来看,EM算法是如何推演的?
本文将注重EM算法基本概念的理解,从最简单的抛硬币实验开始,并通过逐步的改进重现EM算法的构造过程, 最后对EM算法的数学推导中关键步骤进行辅助说明和解释,希望初次接触EM算法的读者们有更深刻的了解。
二 从抛硬币说起- 极大似然估计与隐变量
在重复抛硬币实验中,如果知道硬币抛出正面的概率p,就可以计算n次试验结果中抛出正面的期望
对于上图中的两个不同颜色的小人,我们按照颜色姑且称之为小蓝和小绿。这两个小伙伴相处得很和谐:
- 小蓝知道硬币的正反面概率分布,根据该分布可以计算出实验结果序列的期望E。如上图所示,如果硬币正面概率是0.7,意味着能够计算出每种不同的序列的概率,从而得到总体概率最大的序列结果。
- 小绿知道实际的试验结果,可以对硬币的分布进行极大似然估计。比如,如上图所示,小绿所估算出的p=0.7。p表示在当前的观察结果下,硬币抛出正面的概率,最可能的参数是0.7。
对于小绿来说,掌握了方法后,对多枚硬币分别进行估计和一枚硬币进行估计并没有区别,在逐渐复杂的参数估计任务下,小绿开始了打怪升级的过程。第二层任务这种情况如下图所示:
事物是发展的,小绿在掌握了这种技能不久之后,就遇到了一个比较头疼的问题,要估计的问题形式上发生了变化:一次猜测多个硬币的投掷概率,但试验结果和具体硬币的关系被隐藏了。在多个硬币的实验中,不仅不知道每个硬币的投掷结果概率分布,并且还不知道每个实验结果分别是来自于哪个硬币的话,小绿还有办法估算出硬币的分布吗?如下图,小红从两枚硬币中选择一枚重复抛十次,小绿只能看到每组试验的结果,却不知道小红每次使用的硬币是哪个:
此时小绿要如何估计出这两枚硬币的投掷结果概率参数呢?更进一步地,有没有办法估计出每次使用的硬币是哪一枚呢?此时,由于每次使用的硬币不可观察,实质上引入了一个额外的未知量,简单的似然估计已经不再适用了。这个引入的未知量叫做隐变量(Latent (hidden/unobserved) variable),而EM算法正是解决这类含隐变量问题的一种通用方法。
三 似曾相识的模式:K-Means