zoukankan      html  css  js  c++  java
  • Machine Learning系列--EM算法理解与推导

     

    EM算法,全称Expectation Maximization Algorithm,译作最大期望化算法或期望最大算法,是机器学习十大算法之一,吴军博士在《数学之美》书中称其为“上帝视角”算法,其重要性可见一斑。

    EM算法是一种迭代算法,用于含有隐变量(hidden variable)的概率参数模型的最大似然估计或极大后验概率估计。它与极大似然估计的区别就是它在迭代过程中依赖极大似然估计方法。极大似然估计是在模型已知的情况下,求解模型的参数$ heta$,让抽样出现的概率最大。类似于求解一元方程,所以极大似然估计参数值是稳定的。而对于EM算法,由于有隐藏变量(可视为多元参数)的存在,所以往往初始参数设置的不同会导致最后收敛的结果不同,使得陷入局部最优解,而非全局最优解)。但在隐藏变量$X$未知的情况下,通过计算其数学期望(E步),再利用极大似然求解(M步),为问题的近似解决提供了可能。

    一、Jensen不等式

     在完善EM算法之前,首先来了解下Jensen不等式,因为在EM算法的推导过程中会用到。

    Jensen不等式在高中时我们就接触过,文字描述如下:

    • 如果$f(X)$是凸函数,$X$是随机变量,则$E[f(X)] ge f(E[X])$,特别地,如果$f$是严格凸函数,$E[f(X)] ge f(E[X])$,那么当且仅当$p(x=E[X])=1$时(也就是说$X$是常量),$E[f(x)]=f(E[X])$;
    • 如果$f(X)$是凹函数,$X$是随机变量,则$f(E[X]) le E[f(X)]$,当$f(X)$是(严格)凹函数当且仅当$-f(X)$是(严格)凸函数。

    Jensen不等式图形化表达

     

     

    二、 EM算法推导


    给定$m$个训练样本(或观测变量数据)${x^{(1)},x^{(2)},ldots,x^{(m)}}$,$n$个隐变量${z^{(1)},z^{(2)},ldots,z^{(n)}}$,联合分布$P(X,Z| heta)$,条件分布$P(Z|X, heta)$。假设样本间相互独立,我们想要拟合模型$P(X,Z| heta)$得到模型参数$ heta$。

    首先,根据极大似然求解步骤(对似然函数取对数,求导数,令导数为0,得到似然方程,解似然方程后,得到的参数即为所求),我们列出如下似然函数:

    egin{align*}
    lleft( heta ight) &= sumlimits_{i = 1}^m {log pleft( {x; heta } ight)} \
    &= sumlimits_{i = 1}^m {log sum olimits_z {pleft( {x,z; heta } ight).} }
    end{align*}

    上式中,第一步是对极大似然函数取对数,第二步是对每个样本实例的每个可能的类别$z$求联合分布概率之和。然而,求这个参数$ heta$很困难,因为存在一个隐含随机变量$z$。如果能通过计算$z$的数学期望来估计$z$,代入式中后,再使用极大似然估计来解$ heta$就水到渠成。这也就是EM算法所要解决的问题场景。

    接下来,我们引入$Q_i$函数,$Q_i$函数表示样本实例隐含变量z的某种分布,且$Q_i$满足条件$sum_zQ_i(z)=1,Q_i(z)>=0$,如果$Q_i$是连续性的,则$Q_i$表示概率密度函数,需要将求和符号换成积分符号。

    值得注意的是,此处的$Q_i$函数是分布,不是《统计学习方法》书中的期望$Q$函数(在给定观测数据$X$和当前参数$ heta^{(i)}$下对未观测数据$Z$的条件概率分布$P(Z|X, heta)$的数学期望)。计算分布函数$Q_i$和计算期望$Q$函数是等价的。

    计算$Q_i$函数或$Q$函数的过程就是E步,我们接着上面的推导过程继续:

    egin{align*}
    sumlimits_i {log pleft( {{x^{left( i ight)}}; heta } ight)} &= sumlimits_i {log sumlimits_{{z^{left( i ight)}}} {pleft( {{x^{left( i ight)}},{z^{left( i ight)}}; heta } ight)} } \
    &= sumlimits_i {log sumlimits_{{z^{left( i ight)}}} {{Q_i}left( {{z^{left( i ight)}}} ight)frac{{pleft( {{x^{left( i ight)}},{z^{left( i ight)}}; heta } ight)}}{{{Q_i}left( {{z^{left( i ight)}}} ight)}}} } \
    &ge sumlimits_i {sumlimits_{{z^{left( i ight)}}} {{Q_i}left( {{z^{left( i ight)}}} ight)log frac{{pleft( {{x^{left( i ight)}},{z^{left( i ight)}}; heta } ight)}}{{{Q_i}left( {{z^{left( i ight)}}} ight)}}} }
    end{align*}

    上式中,第一步根据联合概率密度下某个变量的边缘密度函数求解展开,但式中求解隐变量$z$困难,于是第二步引入$Q_{i}(z^{(i)})$使分子分母平衡。

    第三步根据Jensen不等式,已知$log(x)$的二阶导数为$-frac{1}{x^2}$,属于凹函数,所以有$f(E[X])>=E[f(x)]$。

    第三步具体的推导过程是:

    a. 根据《概率论》中的期望公式$E(x)=sum g(x)*p(x)$,$Y=g(x)$为随机变量$x$的函数,$P(X=x_k)=p_k$为分布律。将$Q_{i}(z^{(i)})$看成分布律$p(x)$,$frac{p(x^{i},z^{(i)}; heta)}{Q_i(z^{(i)})}$看成值域$g(x)$,有:
    egin{align*}
    Eleft( {frac{{pleft( {{x^{left( i ight)}},{z^{left( i ight)}}; heta } ight)}}{{{Q_i}left( {{z^{left( i ight)}}} ight)}}} ight) = sumlimits_{{z^{left( i ight)}}} {{Q_i}left( {{z^{left( i ight)}}} ight)frac{{pleft( {{x^{left( i ight)}},{z^{left( i ight)}}; heta } ight)}}{{{Q_i}left( {{z^{left( i ight)}}} ight)}}}
    end{align*}

    b. 根据Jensen不等式的性质,对于凹函数有:
    egin{align*}
    fleft( {{E_{{z^{left( i ight)}} sim {Q_i}}}left( {frac{{pleft( {{x^{left( i ight)}},{z^{left( i ight)}}; heta } ight)}}{{{Q_i}left( {{z^{left( i ight)}}} ight)}}} ight)} ight) ge {E_{{z^{left( i ight)}} sim {Q_i}}}left( {fleft( {frac{{pleft( {{x^{left( i ight)}},{z^{left( i ight)}}; heta } ight)}}{{{Q_i}left( {{z^{left( i ight)}}} ight)}}} ight)} ight)
    end{align*}

    因此便得到了第三步。上述推导过程最后变为$L( heta)>=J(z,Q)$的形式($z$为隐含变量),那么我们可以通过不断的最大化$J$的下界,来使得$L( heta)$不断提高,最终达到它的最大值。

     

    接下来,我们需要推导出$Q_{i}(z^{(i)})$的具体表达形式,即隐变量$z$的分布或期望。

    $Q_i$函数是隐变量$z$的分布,那么有下式:

    egin{align*}
    {Q_i}left( {{z^{left( i ight)}}} ight) &= frac{{pleft( {{x^{left( i ight)}},{z^{left( i ight)}}; heta } ight)}}{{sum olimits_z {pleft( {{x^{left( i ight)}},z; heta } ight)} }}\
    &= frac{{pleft( {{x^{left( i ight)}},{z^{left( i ight)}}; heta } ight)}}{{pleft( {{x^{left( i ight)}}; heta } ight)}}\
    &= pleft( {{z^{left( i ight)}}|{x^{left( i ight)}}; heta } ight)
    end{align*}

    $Q$函数是隐变量$z$的期望,那么有下式:
    $$ Qleft( heta ight) = {E_Z}left[ {log Pleft( {X,Z| heta } ight)|X,{ heta ^{left( i ight)}}} ight] $$

    至此,我们推出了$Q(z)$的计算公式(后验概率或条件概率)。此步就是EM算法的E步,目的是建立$L( heta)$的下界。

    接下来的M步,目的是在给定$Q(z)$后,调整$ heta$,从而极大化$L( heta)$的下界$J$(在固定$Q(z)$后,下界还可以调整的更大)。

    到此,可以说是完美的展现了EM算法的E-step & M-step,完整的流程如下:

    (1). 选择参数的初值$ heta^{(0)}$,开始迭代;
    (2). E步:记$ heta^{(i)}$为第$i$次迭代参数$ heta$的估计值,在第$i+1$次迭代的E步,计算隐变量期望$Q$函数:
    egin{align*}
    Qleft( heta ight) &= {E_Z}left[ {log Pleft( {X,Z| heta } ight)|X,{ heta ^{left( i ight)}}} ight]\
    &= sumlimits_Z {log P} left( {X,Z| heta } ight)Pleft( {Z|X,{ heta ^{left( i ight)}}} ight)
    end{align*}
    这里,$Pleft( {Z|X,{ heta ^{left( i ight)}}} ight)$是在给定观测数据$X$和当前的参数估计$ heta^{(i)}$下隐变量$Z$的条件概率分布,也就是$Q_i$函数。
    (3). M步: 求使$Qleft( heta ight)$极大化的$ heta$,确定第$i+1$次迭代的参数估计值$ heta^{(i+1)}$.
    $$ heta^{(i+1)} = arg mathop {max }limits_Q Qleft( heta ight) $$
    (4). 重复第(2)和第(3)步,直到收敛。

    三、 EM算法的收敛性

    如何保证EM最终是收敛的呢?

    由极大似然估计的迭代过程:

    egin{align*}
    lleft( {{ heta ^{left( {t + 1} ight)}}} ight) &ge sumlimits_i {sumlimits_{{z^{left( i ight)}}} {{Q_i}^{left( t ight)}left( {{z^{left( i ight)}}} ight)log frac{{pleft( {{x^{left( i ight)}},{z^{left( i ight)}};{ heta ^{left( {t + 1} ight)}}} ight)}}{{{Q_i}^{left( t ight)}left( {{z^{left( i ight)}}} ight)}}} } \
    &ge sumlimits_i {sumlimits_{{z^{left( i ight)}}} {{Q_i}^{left( t ight)}left( {{z^{left( i ight)}}} ight)log frac{{pleft( {{x^{left( i ight)}},{z^{left( i ight)}};{ heta ^{left( t ight)}}} ight)}}{{{Q_i}^{left( t ight)}left( {{z^{left( i ight)}}} ight)}}} } \
    &= lleft( {{ heta ^{left( t ight)}}} ight)
    end{align*}

    这样就证明了$l( heta)$会单调增加。如果要判断收敛情况,可以这样来做:一种收敛方法是$l( heta)$不再变化,还有一种就是变化幅度很小,即根据$l( heta)^{(t+1)}-l( heta)^{(t)}$的值来决定

    EM算法类似于坐标上升法(coordinate ascent):E步:计算隐变量期望$Q$;M步:将期望$Q$代入极大似然估计中,估算$ heta$;交替将极值推向最大。

    参考博文:

  • 相关阅读:
    Remote Procedure Call (RPC) Locator与X3
    Delphi的悬浮窗口
    改变CSS样式
    JavaScript 打印Web页面指定区域的信息
    判断页面元素存在与否
    如何处理HTML标签属性
    jQuery 获取和设置表单元素
    如何添加/移除CSS类
    处理网页内容
    正则表达式 收集
  • 原文地址:https://www.cnblogs.com/shixiangwan/p/8990522.html
Copyright © 2011-2022 走看看