zoukankan      html  css  js  c++  java
  • EM算法--原理

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

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

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

    $$egin{eqnarray} p( extbf{X} left | heta ight)=sum_{ extbf{Z}}{p( extbf{X},  extbf{Z}| heta)} label{eqlikelihood} end{eqnarray}$$

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

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

    $$egin{eqnarray} ln{ p( extbf{X} left | heta ight)}=L(q, heta)+KL(q left | p ight) label{eqloglikelihood} end{eqnarray}$$

    其中,$L(q, heta)$和$KL(q left | p ight)$分别为

    $$egin{eqnarray}  displaystyle L(q, heta) & = & sum_{ extbf{Z}}{q( extbf{Z}) ln{left { frac{p( extbf{X},  extbf{Z}| heta)}{q( extbf{Z})} ight } }}label{eqL} \  displaystyle KL(q left | p ight) & = & -sum_{ extbf{Z}}{q( extbf{Z}) ln{frac{p( extbf{Z} left | extbf{X}  , heta ight)}{q( extbf{Z})}}}  label{eqKL} end{eqnarray}$$

    上述推导过程如下:

    $$egin{eqnarray*}  displaystyle ln{ p( extbf{X} left | heta ight)} & = & ln{frac{p( extbf{X}, extbf{Z} left | heta ight)}{p( extbf{Z} left | extbf{X}, heta ight)}} \  displaystyle  & = & ln{frac{p( extbf{X}, extbf{Z} left | heta ight)}{q( extbf{Z})}} + ln{frac{q({ extbf{Z})}}{p( extbf{Z} left | extbf{X}, heta ight)}} \ displaystyle  & = & sum_{ extbf{Z}}{q( extbf{Z}) left [ ln{frac{p( extbf{X}, extbf{Z} left | heta ight)}{q( extbf{Z})}} + ln{frac{q({ extbf{Z})}}{p( extbf{Z} left | extbf{X}, heta ight)}} ight ]} \ displaystyle & = & L(q, heta)+KL(q left | p ight) end{eqnarray*}$$

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

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

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

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

    $$ egin{eqnarray} L(q, heta) & = & sum_{ extbf{Z}}{p( extbf{Z} left | extbf{X}, heta^{old} ight) ln{p( extbf{X}, extbf{Z} left | heta ight )}} - sum_{ extbf{Z}}{p( extbf{Z} left | extbf{X}, heta^{old} ight) ln{p( extbf{Z} left | extbf{X}, heta^{old} ight) }} \ & = & Q( heta, heta^{old}) + const end{eqnarray} $$

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

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

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

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

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

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

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

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

  • 相关阅读:
    Sass
    将100以内同时能被3和5整除的数输出
    Html小插件
    微信小程序一些demo链接地址
    .net MVC4一个登陆界面加验证
    Zeu.js
    Google 开发的、最好用、功能最强大的网页测速与网站性能分析工具
    .net基本面试题
    C#简单的九九乘法表
    请编程实现一个冒泡排序算法
  • 原文地址:https://www.cnblogs.com/kane1990/p/5679151.html
Copyright © 2011-2022 走看看