EM算法简易推导


EM算法推导

网上和书上有关于EM算法的推导,都比较复杂,不便于记忆,这里给出一个更加简短的推导,用于备忘。

在不包含隐变量的情况下,我们求最大似然的时候只需要进行求导使导函数等于0,求出参数即可。但是包含隐变量,直接求导就变得异常复杂,此时需要EM算法,首先求出隐变量的期望值(E步),然后,把隐变量当中常数,按照不包含隐变量的求解最大似然的方法解出参数(M步),反复迭代,最终收敛到局部最优。下面给出EM算法的推导

我们有对数似然函数
\[ L(\theta)=\log P(y|\theta) = \log\sum_zp(y,z|\theta) \]
可以表示成包含隐变量\(z\)的形式,然后通过边缘化再消除\(z\),效果是一样的。

由于是迭代,我们需要每次得到的新的似然结果比上一次的似然结果要大,于是我们的目标是下式
\[ \theta = \arg\max_\theta L(\theta) - L(\theta') \]
由于$L(\theta') $ 是常量,所以,使得\(L(\theta)\)最大化即可。下面看看如何最大化 \(L(\theta)\) :
\[ \begin{split} \theta &= \arg\max_\theta L(\theta)\\ &= \arg\max_\theta \log\sum_zp(y,z|\theta)\\ &= \arg\max_\theta \log\sum_zp(z|y, \theta')\dfrac{p(y, z|\theta)}{p(z|y, \theta')}\\ &= \arg\max_\theta \sum_zp(z|y,\theta')\log\dfrac{p(y,z| \theta)}{p(z|y,\theta')}\\ &= \arg\max_\theta\sum_zp(z|y,\theta')\log(p(y, z|\theta))\\ &= \arg\max_\theta Q(\theta, \theta') \end{split} \]

至此,得到传说中的Q函数,然后求解出参数\(\theta\)即可

优质内容筛选与推荐>>
1、Getting Started(The Definitive Guild to Django)
2、python 成员资格
3、Response.Write 出来的 弹出窗口 主要是window.open()方法的应用
4、[自制简单操作系统] 5、杂七杂八(高分辨率和键盘输入)
5、Effective C++ -----条款36:绝不重新定义继承而来的non-virtual函数


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号