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. taro 创建 Tabbar

    1.代码 src/app.js import '@tarojs/async-await' import Taro, { Component } from '@tarojs/taro' import H ...

  2. HTTP缓存策略 304

    1.图解缓存 示例: 200 (from disk cache): 200 (from memory cache) MemoryCache顾名思义,就是将资源缓存到内存中,等待下次访问时不需要重新下载 ...

  3. 安卓Camera APP

    一.Camera package android.hardware            该类用于设定图像捕获设置,开启/关闭预览,抓拍图片以及获取帧用于编码视频.这个类是Camera服务的客户端,用 ...

  4. C++中返回对象的情形及RVO

    http://www.cnblogs.com/xkfz007/archive/2012/07/21/2602110.html 之前有文章介绍过临时对象和返回值优化RVO方面的问题.见此处. 在C++中 ...

  5. ASP.Net MVC3/4中Model验证错误信息的本地化

    最近使用ASP.Net MVC4做一个B/S的管理系统,里面有N多的Action和View Model,View Model上又有N多的验证. 一开始写的时候虽然知道要实现多语言,但是没有过多考虑,本 ...

  6. Ansible远程执行脚本示例

    首先创建一个shell脚本 cat /tmp/df.sh #!/bin/bash df -h|grep vda|awk '{print $5}' 然后把该脚本分发到各个机器上 ansible comp ...

  7. C语言-二进制技巧

    打开位: flags = flags | MASK 要打开的位为 1 关闭位: flags = flags & ~MASK 要关闭的位为 1 转置位: flags = flags ^ MASK ...

  8. python-数据结构Data Structure1

    四种数据结构: 列表list = [val1,val2,val3,val4]字典dict = {key1:val1,key2:val2}元组tuple = (val2,val2,val3,val4)集 ...

  9. A Translation for Quaternion 一篇对四元数的翻译

    一篇写的非常好的博客:http://www.cnblogs.com/lookof/archive/2012/02/24/2360749.html

  10. server2008系统修改3389远程端口

    我给大家简单谈谈正确修改远程端口的方法        在开始-----运行菜单里,输入regedit,进入注册表编辑,按先面的路径进入修改端口的地方 HKEY_LOCAL_MACHINE\System ...