EM算法即期望最大化(Expection Maximization)算法,是一种最优化算法,在机器学习领域用来求解含有隐变量的模型的最大似然问题。最大似然是一种求解模型参数的方法,顾名思义,在给定一组数据时,将似然表示为参数的函数,然后对此似然函数最大化即可求出参数,此参数对应原问题的最大似然解。对于简单的问题,我们通过将似然函数对参数求导并令导数等于零即可求出参数的解析解或隐式解。然而,有一类模型,他们的结构中包含隐变量(如混合高斯模型、混合伯努利模型、隐马尔科夫模型等),无法通过对似然函数直接求导得到最大似然解,此时就要借助EM算法了。

要解释EM算法,需要解释两个问题,1. 这里的“期望”指什么? 2. 为什么最大化这个期望就可以最大化似然?

假设我们有一组$N$个已知数据$\left \{ x_1, x_2, \cdots, x_N \right \}$,简记为$\textbf{X}$。与之对应的$N$个隐变量为$\left \{ z_1, z_2, \cdots, z_N \right \}$,简记为$\textbf{Z}$。模型的所有参数记作$\theta$。我们的目标是要最大化如下似然函数

$$\begin{eqnarray} p(\textbf{X} \left | \theta \right)=\sum_{\textbf{Z}}{p(\textbf{X}, \textbf{Z}|\theta)} \label{eqlikelihood} \end{eqnarray}$$

这里我们假设隐变量$\textbf{Z}$是离散的;如果隐变量是连续的,所有公式形式不变,只需将对$\textbf{Z}$求和改成求积分即可。

这里我们引入一个$\textbf{Z}$的分布$q(\textbf{Z})$,则式($\ref{eqlikelihood}$)可以变换为

$$\begin{eqnarray} \ln{ p(\textbf{X} \left | \theta \right)}=L(q, \theta)+KL(q \left \| p \right) \label{eqloglikelihood} \end{eqnarray}$$

其中,$L(q, \theta)$和$KL(q \left \| p \right)$分别为

$$\begin{eqnarray}  \displaystyle L(q, \theta) & = & \sum_{\textbf{Z}}{q(\textbf{Z}) \ln{\left \{ \frac{p(\textbf{X}, \textbf{Z}|\theta)}{q(\textbf{Z})}\right \} }}\label{eqL} \\  \displaystyle KL(q \left \| p \right) & = & -\sum_{\textbf{Z}}{q(\textbf{Z}) \ln{\frac{p(\textbf{Z} \left | \textbf{X}  ,\theta \right)}{q(\textbf{Z})}}}  \label{eqKL} \end{eqnarray}$$

上述推导过程如下:

$$\begin{eqnarray*}  \displaystyle \ln{ p(\textbf{X} \left | \theta \right)} & = & \ln{\frac{p(\textbf{X}, \textbf{Z} \left | \theta \right)}{p(\textbf{Z} \left | \textbf{X}, \theta \right)}} \\  \displaystyle  & = & \ln{\frac{p(\textbf{X}, \textbf{Z} \left | \theta \right)}{q(\textbf{Z})}} + \ln{\frac{q({\textbf{Z})}}{p(\textbf{Z} \left | \textbf{X}, \theta \right)}} \\ \displaystyle  & = & \sum_{\textbf{Z}}{q(\textbf{Z}) \left [ \ln{\frac{p(\textbf{X}, \textbf{Z} \left | \theta \right)}{q(\textbf{Z})}} + \ln{\frac{q({\textbf{Z})}}{p(\textbf{Z} \left | \textbf{X}, \theta \right)}} \right ]} \\ \displaystyle & = & L(q, \theta)+KL(q \left \| p \right) \end{eqnarray*}$$

式($\ref{eqL}$)是一个泛函即函数的函数,因为$q$是一个函数。$KL(q \left \| p \right)$是两个概率分布$q(\textbf{Z})$和$p(\textbf{Z} \left | \textbf{X}, \theta \right)$的KL散度,因此$KL(q \left \| p \right) \geqslant 0$,当且仅当$q=p$时取等号。所以,$L(q, \theta) \leqslant \ln{ p(\textbf{X} \left | \theta \right)}$,也就是说$L(q, \theta)$是$\ln{ p(\textbf{X} \left | \theta \right)}$的下界。

EM算法的过程是一个迭代的过程。回到式($\ref{eqloglikelihood}$),假设先固定$\theta = \theta^{old}$,因此等式左边是一个与$q$无关的常量值。因为$L(q, \theta)$是$\ln{ p(\textbf{X} \left | \theta \right)}$的下界,我们要最大化这个下界,也即最小化$KL(q \left \| p \right)$,因此最优解为$q(\textbf{Z}) = p(\textbf{Z} \left | \textbf{X}  ,\theta^{old} \right)$,此时的下界等于log似然。以上为EM算法的E步。

接下来,我们固定$q(\textbf{Z})$为上一步的最优解,以$\theta$为参数对下界$L(q, \theta)$最大化求得新的参数$\theta^{new}$。因为下界变大了(除非已经达到了最大值),所以$\ln{ p(\textbf{X} \left | \theta \right)}$必然也变大,而且因为此时$q(\textbf{Z})$(实际为$p(\textbf{Z} \left | \textbf{X}  ,\theta^{old} \right)$)与$p(\textbf{Z} \left | \textbf{X}  ,\theta^{new} \right)$不相等,$KL(q \left \| p \right) > 0$,所以,$\ln{ p(\textbf{X} \left | \theta \right)}$变大的量比下界变大的量还多(此时,下界和log似然又不相等了,从而为回到E步留下了“空间”)。以上为EM算法的M步。EM算法就是通过E步和M步这样不停迭代来最大化log似然直至收敛的。

如果我们将E步的解$q(\textbf{Z}) = p(\textbf{Z} \left | \textbf{X}  ,\theta^{old} \right)$带入式($\ref{eqL}$)中可以看到,此时的下界

$$ \begin{eqnarray} L(q, \theta) & = & \sum_{\textbf{Z}}{p(\textbf{Z} \left | \textbf{X}, \theta^{old} \right) \ln{p(\textbf{X}, \textbf{Z} \left | \theta \right )}} - \sum_{\textbf{Z}}{p(\textbf{Z} \left | \textbf{X}, \theta^{old} \right) \ln{p(\textbf{Z} \left | \textbf{X}, \theta^{old} \right) }} \\ & = & Q(\theta, \theta^{old}) + const \end{eqnarray} $$

因此在M步我们要最大化的实际是上式的第一部分$Q(\theta, \theta^{old})$,即“全数据”(complete-data)的log似然在分布$p(\textbf{Z} \left | \textbf{X}, \theta^{old} \right)$下的期望,这里的“全数据”即指已知数据加上其对应的隐变量,可以记作$\left \{ \textbf{X}, \textbf{Z} \right \}$,它是相对单独的已知数据$\left \{ \textbf{X} \right \}$而言的。

如下两个图,左图用于说明log似然始终可以分解为一个下界与一个KL散度的和。右图用于说明,因为存在左图所示的关系,当下界变大时(从底部变到虚线的位置),log似然始终会变得更大(从底部变到红线的位置)。

最后,我们回答文章一开始的两个问题。

1. 这里的“期望”指什么?

A: 这里的期望指全数据的log似然的期望。这也是EM算法名称的由来。

2. 为什么最大化这个期望就可以最大化似然?

A:上述E步和M步的论述已经阐明。这里简述如下:我们通过对隐变量引入一个假设分布将目标函数(log似然)分解为两部分,一部分为它的下界,一部分为一个非负的KL散度。为了最大化目标函数,我们先在E步使KL散度为0从而使下界最大,此时下界等于log似然;接下来在M步我们以模型参数为自变量进一步最大化下界,因为下界更大了,所以目标函数也会变得更大。通过这两步不停地迭代直至收敛就找到了原问题的最大似然解。(有兴趣的同学可以通过公式推导证明,为什么每经过一轮EM迭代,目标函数就会更大。)

在下一篇文章里,会通过介绍混合高斯模型及其实例进一步阐述EM算法。

EM算法--原理的更多相关文章

  1. 2. EM算法-原理详解

    1. EM算法-数学基础 2. EM算法-原理详解 3. EM算法-高斯混合模型GMM 4. EM算法-高斯混合模型GMM详细代码实现 5. EM算法-高斯混合模型GMM+Lasso 1. 前言 概率 ...

  2. EM算法原理简析——图解

    一. 扯淡 转眼间毕业快一年了,这期间混了两份工作,从游戏开发到算法.感觉自己还是喜欢算法,可能是大学混了几年算法吧!所以不想浪费基础... 我是个懒得写博客的人,混了几年coding,写的博客不超过 ...

  3. EM算法原理总结

    EM算法也称期望最大化(Expectation-Maximum,简称EM)算法,它是一个基础算法,是很多机器学习领域算法的基础,比如隐式马尔科夫算法(HMM), LDA主题模型的变分推断等等.本文就对 ...

  4. EM算法原理以及高斯混合模型实践

    EM算法有很多的应用: 最广泛的就是GMM混合高斯模型.聚类.HMM等等. The EM Algorithm 高斯混合模型(Mixtures of Gaussians)和EM算法 EM算法 求最大似然 ...

  5. EM算法原理

    在聚类中我们经经常使用到EM算法(i.e. Estimation - Maximization)进行參数预计, 在该算法中我们通过函数的凹/凸性,在estimation和maximization两步中 ...

  6. EM算法原理详解

    1.引言 以前我们讨论的概率模型都是只含观测变量(observable variable), 即这些变量都是可以观测出来的,那么给定数据,可以直接使用极大似然估计的方法或者贝叶斯估计的方法:但是当模型 ...

  7. 【转】EM算法原理

    EM是我一直想深入学习的算法之一,第一次听说是在NLP课中的HMM那一节,为了解决HMM的参数估计问题,使用了EM算法.在之后的MT中的词对齐中也用到了.在Mitchell的书中也提到EM可以用于贝叶 ...

  8. 4-EM算法原理及利用EM求解GMM参数过程

    1.极大似然估计 原理:假设在一个罐子中放着许多白球和黑球,并假定已经知道两种球的数目之比为1:3但是不知道那种颜色的球多.如果用放回抽样方法从罐中取5个球,观察结果为:黑.白.黑.黑.黑,估计取到黑 ...

  9. EM算法 The EM Algorithm

    (EM算法)The EM Algorithm http://www.cnblogs.com/jerrylead/archive/2011/04/06/2006936.html EM算法原理 http: ...

随机推荐

  1. tomcat中server.xml配置详解(转载)(一)

    转载自:https://www.cnblogs.com/starhu/p/5599773.html tomcat中server.xml配置详解 Tomcat Server的结构图如下:(该文件描述了如 ...

  2. 【转】Spring的中IoC及AOP

    1. Spring介绍 Spring是轻量级的J2EE应用程序框架.Spring的核心是个轻量级容器(container),实现了IoC(Inversion of Control)模式的容器,Spri ...

  3. 算法笔记_070:BellmanFord算法简单介绍(Java)

    目录 1 问题描述 2 解决方案 2.1 具体编码   1 问题描述 何为BellmanFord算法? BellmanFord算法功能:给定一个加权连通图,选取一个顶点,称为起点,求取起点到其它所有顶 ...

  4. ionic 进入二级目录以后隐藏底部导航栏(tabs)

    1.在标签ion-tabs中添加:ng-class=”{‘tabs-item-hide’: $root.hideTabs}”,源码如下: <ion-tabs class="tabs-i ...

  5. Customize User Interfaces and Pass User Input to Installer Classes

    In this article I am going to demonstrate how to customize your MSI install to prompt the user for s ...

  6. 单元测试JUnit 4(二)——keeps the bar green to keeps the code clean

    1.Failure和Error Failure是指测试失败  Error是指测试程序本身出错  (int a=10/0) 2.JUnit常用注解 2.1 @RunWith: 可以更改测试运行器(继承o ...

  7. 基于easyui fom分组插件

    本插件适用于表单按属性分组,可以动态设置显示的列数,每一个表单宽度,表单类型,以及对齐.不同panel之间的表单也是对齐的. 效果: 依赖:jquery ,easyui, 实现过程:整个控件一个pan ...

  8. java基础讲解09-----接口,继承,多态

    还有什么包装类,数字类,这些简单的我就不想过去介绍,前面也大概的介绍了下,继承,多态 1.类的继承 继承的思想:基于某个父类的扩展,制定一个新的子类.子类可以继承父类原有的属性,方法,也可以重写父类的 ...

  9. FIle类常用工具方法整理(持续更新)

    1.递归遍历一个目录,获取所有文件名(也可以取到绝对路径) public static void traverse(String filePath, List<String> files) ...

  10. C# Oracle.ManagedDataAccess 批量更新表数据

    这是我第一次发表博客.以前经常到博客园查找相关技术和代码,今天在写一段小程序时出现了问题, 但在网上没能找到理想的解决方法.故注册了博客园,想与新手分享(因为本人也不是什么高手). vb.net和C# ...