http://blog.csdn.net/xmu_jupiter/article/details/50936177

最近在写毕业论文,由于EM算法在我的研究方向中经常用到,所以把相关的资料又拿出来看了一下,有了一些新的理解与感悟。在此总结一下。

EM算法即“期望极大算法”。学过机器学习的朋友都知道EM算法分两步:E步求期望,M步求极大。但是期望是求谁的期望,极大是求谁的极大呢?这里面其实有两种解读角度。

“通俗”角度

通俗角度的话,求极大肯定是求似然函数的极大了,而且一般都是对数似然。我们一般解决模型参数求解问题,都是在给定数据的情况下,求解使得似然函数最大的参数的取值。用公式表示就是:

θ^=arg maxθ log P(X|θ)

通常的做法是对似然函数求偏导,然后令偏导等于零,参数取得的数值就是近似最优值。但是,有些含有隐变量的模型没办法直接进行似然函数的偏导,但是如果假设已经知道隐变量的值,就可以将似然函数简化进行下一步的求偏导。

因此,我们需要引入一个隐变量,求这个隐变量的期望就成了这种理解角度下E步骤。然后将隐变量的期望代入到经过隐变量改写的对数似然函数中,就可以按照通常的极大似然估计求解参数了。不过需要不断迭代才能达到近似最优。

总结起来,这种角度的EM算法框架如下:

loop

  • E-step:求在观测数据的前提下隐变量的期望;
  • M-step:求经过隐变量改写的似然函数的极大;

end

这种角度的好处是由一般的极大似然估计自然地引入到EM方法,比较容易理解;但是缺点是一般很难写出引入隐变量的似然函数的改写。实际上,这种改写很多情况下是依据EM算法的另一个理解角度而直接写出来的。

“正式”角度

看过EM算法推导过程的朋友应该都知道,有一个概念叫做“Q函数”;还有EM算法是通过不断求解下界的极大化逼近求解对数似然函数的极大化。那么,这个Q函数是怎么来的呢?EM算法是怎么不断求解下界的极大化呢?

EM算法通过迭代逐步近似极大化L(θ)。假设在第i次迭代后θ的估计值是θ(i)。我们希望新估计值θ能使L(θ)增加,即L(θ)>L(θ(i)),并逐步达到极大值。为此,考虑两者的差:

L(θ)−L(θ(i))

然后,利用Jensen不等式得到其下界:B(θ,θ(i))。具体怎么得到的可以参考《统计学习方法》。

因此,任何可以使B(θ,θ(i))增大的θ,也可以使L(θ)增大。为了使L(θ)有尽可能的增长,选择θ(i)使B(θ,θ(i))达到极大。在使B(θ,θ(i))达到极大的过程中,省去对θ的极大化而言是常数的项,剩下的部分,我们给它起了一个名字,就叫做:Q函数。

从形式上看,Q函数是完全数据的对数似然函数关于在给定观测数据和当前参数下对未观测数据的条件概率分布的期望。

总结起来,这种角度的EM算法框架如下:

loop

  • E-step:求Q函数;
  • M-step:求使Q函数极大的当前参数的取值;

end

这里面有几个细节需要说明一下;

细节一:

在使用Jensen不等式的时候,需要假设隐变量服从某种形式的概率分布,才可以将推导过程的一部分看成是期望的表达形式从而应用Jensen不等式。然而这个分布不是随便指定的。我们令Jensen不等式取等号的时候,可以计算出这个分布其实就是:已知观测数据的隐变量的后验概率分布。由于求Q函数需要先求出隐变量的后验概率的期望,因此,这就可以解释为什么EM算法的“通俗”理解角度的E步骤是求隐变量的期望了。

细节二:Q函数与完全数据的对数似然函数的关系

有时候在用EM算法解决某个具体问题的时候,会发现M步骤极大化的居然是完全数据的对数似然函数。这是因为,Q函数虽然是完全数据的对数似然函数的某种期望,但是求这个期望的过程有时其实就是将隐变量的后验概率的期望代入就可以了。因此,本质上我们其实还是在求Q函数的极大。

浅谈EM算法的两个理解角度的更多相关文章

  1. 浅谈分词算法(5)基于字的分词方法(bi-LSTM)

    目录 前言 目录 循环神经网络 基于LSTM的分词 Embedding 数据预处理 模型 如何添加用户词典 前言 很早便规划的浅谈分词算法,总共分为了五个部分,想聊聊自己在各种场景中使用到的分词方法做 ...

  2. 浅谈分词算法(4)基于字的分词方法(CRF)

    目录 前言 目录 条件随机场(conditional random field CRF) 核心点 线性链条件随机场 简化形式 CRF分词 CRF VS HMM 代码实现 训练代码 实验结果 参考文献 ...

  3. 浅谈分词算法(3)基于字的分词方法(HMM)

    目录 前言 目录 隐马尔可夫模型(Hidden Markov Model,HMM) HMM分词 两个假设 Viterbi算法 代码实现 实现效果 完整代码 参考文献 前言 在浅谈分词算法(1)分词中的 ...

  4. [原创]浅谈在创业公司对PMF的理解

    [原创]浅谈在创业公司对PMF的理解 在创业时,大多数人都常谈一个词叫"MVP“,但PMF谈的比较少,PMF在创业公司尤为重要,以下谈谈个人一些看法. 1.什么是PMF? 创业公司:一种是找 ...

  5. 浅谈分词算法基于字的分词方法(HMM)

    前言 在浅谈分词算法(1)分词中的基本问题我们讨论过基于词典的分词和基于字的分词两大类,在浅谈分词算法(2)基于词典的分词方法文中我们利用n-gram实现了基于词典的分词方法.在(1)中,我们也讨论了 ...

  6. [原创]浅谈在创业公司对MVP的理解

    [原创]浅谈在创业公司对MVP的理解 目前自已所处的公司类似一个创业平台,我们内部会不断的去孵化不同方向的产品,产品经理经常谈到的一个词就是MVP,所以有必需要去了解下什么是MVP? 1 什么是MVP ...

  7. 浅谈KMP算法及其next[]数组

    KMP算法是众多优秀的模式串匹配算法中较早诞生的一个,也是相对最为人所知的一个. 算法实现简单,运行效率高,时间复杂度为O(n+m)(n和m分别为目标串和模式串的长度) 当字符串长度和字符集大小的比值 ...

  8. 浅谈 Johnson 算法

    目录 前言 引入 算法概述 算法流程 正确性证明 代码实现 结语 前言 Johnson 和 Floyd 一样是用来解决无负环图上的全源最短路. 在稀疏图上的表现远远超过 Floyd,时间复杂度 \(O ...

  9. 浅谈Manacher算法与扩展KMP之间的联系

    首先,在谈到Manacher算法之前,我们先来看一个小问题:给定一个字符串S,求该字符串的最长回文子串的长度.对于该问题的求解.网上解法颇多.时间复杂度也不尽同样,这里列述几种常见的解法. 解法一   ...

随机推荐

  1. Android控件开发——ListView

    上篇博客解决了Android客户端通过WebService与服务器端程序进行交互的问题,这篇博客重点关注两个问题,一个是Android应用程序如何与本机文件型数据库SQLite进行交互,另一问题则是如 ...

  2. VS2003安装Opencv1.0 windows系统 win7

    一.步骤 下载安装opencv1.0     安装文件我上传到百度网盘分享连接 http://pan.baidu.com/s/1o8na0aA 配置电脑windows环境变量 配置VS2003全局设置 ...

  3. DXP 内电层分割

    多层电路板中间层设置与内电层如何分割 多层电路板与一般的电路板不同之处在于,多层电路板除了顶层和底层之外,还有若干中间层,这些中间层可以是信号层(mid layer),也可以是内部电源/接地层(int ...

  4. 一个简单web系统的接口性能分析及调优过程

    在测试一个简单系统接口性能压力时,压到一定数量,程序总是崩溃,查看相关机器相关数据时,CPU.内存.IO占用均不高,问题自然出现在其它地方先介绍下系统部件架构 Resin版本为:[root@local ...

  5. Function学习

    ---恢复内容开始--- Function的定义: 1.函数声明 function sum1(){ alert("sum1") } 2.函数表达式 var sum2 = funct ...

  6. FileStream实现多线程断点续传(已封装)

    处理文件分片 处理缺失的分片文件 合并分片文件 MD5验证文件 using System; using System.Collections.Generic; using System.IO; usi ...

  7. FastJson 对enum的 序列化(ordinal)和反序列化

    目前版本的fastjon默认对enum对象使用WriteEnumUsingName属性,因此会将enum值序列化为其Name. 使用WriteEnumUsingToString方法可以序列化时将Enu ...

  8. POJ-2181 Jumping Cows(贪心)

    Jumping Cows Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7329 Accepted: 4404 Descript ...

  9. TensorFlow 度量张量和张量或者和零之间的误差值

    用于一个回归任务或者正则问题 # l2损失,output= sum(x ** 2)/2 inputdata = tf.Variable(np.random.rand(2,3), dtype=np.fl ...

  10. CodeForces - 768C Jon Snow and his Favourite Number 桶排

    https://vjudge.net/problem/CodeForces-768C 题意:n个数,k次操作,x.每次操作先排序,再让奇数位置上的数据a[i]:=a[i] XOR x;   k< ...