EM算法理解

前言

这几天开始研究一些视频处理的算法,在学习GMM(高斯混合模型)时硬是弄不懂其优化原理,什么E步、什么M步完全搞不懂,到最后才发现其实GMM是使用了EM算法进行优化求解,但是大多数介绍GMM的文章是不会仔细说明EM算法的,所以我在不了EM算法的情况下能懂才怪了,更何况EM算法本身就一个难理解的东西。

两篇介绍EM算法优秀博文

EM算法是Expectation Maximization Algorithm的简称,中文可以翻译为期望最大化算法,它是一种基于统计估计的迭代算法,它能够用在一些无监督的方法上。关于EM算法我在网上找到了两篇非常好的文章:

  1. EM算法(Expectation Maximization Algorithm)
  2. 如何感性地理解EM算法?

第一篇博客,作者从实例出发,一步步非常详细的推理、论证和说明EM算法的基本原理,甚至连需要的数学背景知识都有简要的介绍。这篇文章最让我敬佩得就是,作者认真细致得写作态度,各种数学公式、图片、文本格式都是是否的整洁和漂亮,而从内容上来看,这也许是EM算法总结得最完善、最严谨的中文学习博客了。但是说实话,在看完这篇文章后,我仍然时一头雾水,因为数学公式太多了看得晕,直到我看完第二篇博客。其实我们从标题也可以看出,第二篇博客作者的目的就是希望读者能够更加直观的理解EM算法,所以在第二篇在这篇博文中,基本上没有数学公式,只有最基本的概率计算。同时作者使用最简单的例子由浅入深,从不同的层次带领读者直观的体验EM算法处理问题的思路和方法,所以阅读时建议先看第二篇再看第一篇。

这两篇文章分别从两个不同的角度将EM算法说明得非常得详尽了,在我看来因该称得上是初学者学习EM算法的最佳资料了。甚至在看过这两篇文章,我觉得已经没有再次总计的必要了,因为该说的东西这两篇文章都说了。不过我还是想自己记录一下,一方面是基于这两篇文章中的难点内容做一些进一步的说明,另一方面则是记录一些我自己的理解。

关于隐变量的理解

EM算法中比较关键的一点就是要理解隐变量是什么东西。以上面两篇博文里面都提到的硬币为例,在两硬币的例子里每组投掷同一个硬币多次,我们能观测到了每组硬币的投掷的结果,但是却不知道每组投掷的是哪一个硬币,这里每次投掷的硬币类型就是隐变量;而在三硬币模型里,每组投两个硬币1次,第一硬币是已知的,第二个硬币要根据第一个硬币的结果来确定,所以第二个硬币的类型(或者说是第一个硬币的投掷结果)就隐变量。

从以上我们可以看到,一般我们能通过观测事件发生的结果,来预测事件发生的概率,但是如果观察的结果是受到令一个事件的影响的话,我们可能就没法直接估计了。所以我们需要先估计隐变量,然后再估计我们需要的结果,这就是EM算法中需要引入隐变量的意义。

EM算法流程

在前面的博文中有提到EM算法分两个步骤:E步和M步,不过再开始之前,我们需要对最终的结果分布假定一个初值,在初值的基础上进行E步:利用初值计算估计每组观察隐变量的分布,然后M步:对E步得到的隐变量分布和原始观察结果,计算其log似然函数的最大值,计算结果更新初值,重复迭代。

在M步求解最大值的时候,可以求参数的的偏导数为0,得到结果,如果不方便计算也可以用梯度下降得到近似解。

Compartir