为什么不把EM算法说清楚?

EM算法在很多博客中都被描述成最为简单的算法,甚至不能称之为算法。但是我却花费了很长时间试图来理解这个70年代就被提出来的概念,却也是雾里看花,似懂非懂的状态。其中很大的一个原因就在于虽然讲述Expectation-Maximization文章虽然很多,但是其中很多作者都是在不加咀嚼地转述Andrew Ng视频,或者就是把Jensen不等式一列,炫技一把就撤了。每次都是眼看着要明白了,结果突然之间就戛然而止,让人唏嘘不已,直到有一天我实在是无法忍受这种感受,便学着Kevin Knight斗胆来说一说我理解的EM算法。

1. 参数估计

说到EM算法,最为原始的冲动在于参数估计,也就是我们对某个系统yy了一个公式,然后希望用一套科学的方法来推算出公式中的未知参数。这时候你脑子里可能就翻出了陈希孺老师在《概率论与数理统计》里面讲述的点估计、极大似然估计(MLE)、贝叶斯估计以及最大后验估计(MAP),实际上EM算法也没有跳脱出这个范围,只是EM给我们提出了新的挑战:如果我们观测到数据不是事情的真相,而只是浮在海面上的冰山一角,或者说是只见花开,而不知春天的到来,在这种情况下我们该怎么去参数估计呢?
首先我们看一下最为简单的最大似然估计,通过最大化样本出现的概率从而获得参数 θ θ 的估计值,也就是 argmaxθlogip(xi;θ) arg ⁡ max θ ⁡ log ⁡ ∏ i p ( x i ; θ ) ,这个神奇的想法是参数估计中一个重要的发展。 既然说到这里就不得不说起贝叶斯学派的思想(为后面介绍MAP奠定一点基础):第一个变态的想法就是所有的参数都需要服从一个分布 h(θ) h ( θ ) ;第二个假设在很多文章中都没有提到:所有的样本的概率是确定的,关于这个假设大家可以参考一下陈希孺先生写的《数理统计学简史》。不得不承认这一点确实很高明,因为如果样本的概率是确定,这里以贝叶斯参数估计模型:

h(θ|X)=p(X|θ)p(θ)p(X) h ( θ | X ) = p ( X | θ ) ⋅ p ( θ ) p ( X )

注意到上面公式两个很巧妙的地方没有, h(θ|X) h ( θ | X ) 是一个关于 θ θ 分布,而 p(X) p ( X ) 又是确定的,既然是确定的,那么我们就可以只考虑联合分布函数: p(X,θ)=p(X|θ)p(θ) p ( X , θ ) = p ( X | θ ) ⋅ p ( θ ) 的概率,归一化之后就是 h(θ|X) h ( θ | X ) 的分布了,有了 θ θ 的分布,那么参数估计也就成功了。只不过这里需要引入一个人为制定的先验概率 p(θ) p ( θ ) ,也就是先验知识。在这种情况下借鉴一下MLE的思路,我们是否可以找到一个 θ^ θ ^ 使后验概率 logp(X|θ)p(θ)=logp(X|θ)+logp(θ) log ⁡ p ( X | θ ) p ( θ ) = log ⁡ p ( X | θ ) + log ⁡ p ( θ ) 最大,把 θ^ θ ^ 看做是 θ θ 的一个点估计,MAP就是这样一个点估计参数的模型,只不过较之MLE增加了后验概率 p(θ) p ( θ ) ,作用就相当于一个平滑,让模型不要太过相信样本量比较少的估计值。

2. 隐变量的参数估计

写了这么一大段,EM算法与上述MLE和MAP有什么关系呢?其实这些问题最后都是转换为一个最优化问题,找到那个最理想的 θ θ ∗ 让目标函数最大,只不过MLE是 argmaxθp(X;θ) argmax θ p ( X ; θ ) ,而MAP是 argmaxθp(X,θ) argmax θ p ( X , θ ) 。如果你理解了以上的简明介绍,这里可以悄悄地告诉你EM可以算是MLE的私生子,都是 argmaxθlogp(X;θ) argmax θ log ⁡ p ( X ; θ ) ,那么区别在哪儿呢?其实特别简单,那就是 θ θ X X 之间不存在一个直接的关系,而是需要通过一个隐变量z才能建立联系。如果这里把 θ θ X X 比作潘金莲和西门庆,那么z就是那位伟大的女性王婆了。如果理解了这样的关系,后面你就不会疑惑为什么要搞一个关于隐变量 z z 的联合概率了。把一个问题转换成一个带中间隐变量的问题向来是各路算法流派中重要的套路,比如PCA、SVD、MF、pLSA以及LDA,这种思路其实就是某种意义上Factorization。如果你拿着Factorization的有色眼镜去观察DNN、Inception在某些细节,会发现其实都是这个套路:把一个复杂的问题通过有限的隐变量来表示,可以让原始问题更加容易解,并且得到的模型泛化能力更强。
既然前面介绍了为什么要引入隐变量z p(z) p ( z ) z z 的概率分布函数,那么概率公式就需要改变一下了:

p(X,z;θ)

这个形式的东西我们自然是不习惯了,是一个Generative的假设,至于为什么要这样做假设,其实就是为了后面做积分方便。既然EM最优化公式是: argmaxθlogp(X;θ) argmax θ log ⁡ p ( X ; θ ) ,那么与上面的公式是怎么联系起来的呢?
其实一个简单的积分就可以求得:

p(X;θ)=p(X,z;θ)dz p ( X ; θ ) = ∫ p ( X , z ; θ ) d z

好了,我们已经通过一个简单的操作把隐变量 z z 引入进来了,这里 z 是一个连续的变量,对于人类来说不是特别容易理解,所以很多情况下我们把 z z 简化成离散的变量,比如GMM就是不同的高斯函数分布,那么上面的积分公式就可以表示成下面的公式了:
p(X;θ)=zp(X,z;θ)=izp(xi,zi;θ)

上面式子中的 i i 表示的是样本 i,样本概率之间的独立的,所以就变成了一个连乘的式子。好了,最优化的目标总算是确定了,那就是:
logp(X;θ)=logizp(xi,zi;θ)=ilogzp(xi,zi;θ)(1) log ⁡ p ( X ; θ ) = log ⁡ ∏ i ∑ z p ( x i , z i ; θ ) (1) = ∑ i log ⁡ ∑ z p ( x i , z i ; θ )

3. 最优化求解

写到这里我也有摆出Jensen不等式的冲动了,在打消了这个罪恶的念头之后,我觉得我们需要先来看一下上面公式中让人很为难的部分:

logzp(xi,zi;θ) log ⁡ ∑ z p ( x i , z i ; θ )

为什么说这个问题让我们为难呢?
首先 p(xi,zi;θ) p ( x i , z i ; θ ) 是个什么玩意?或者说我们在用EM算法的时候这个联合概率分布到底是个什么鬼?其实大家不要被它的数学表达式唬住了,本质上这个东西就是一个假设,是我们对于数据服从什么分布的一种假设,例如如果是GMM模型,这个假设就是: p(xi,zi;θ)=kπkN(x|uk,Σk) p ( x i , z i ; θ ) = ∑ k π k N ( x | u k , Σ k ) z z 表示的是不同的正态分布N(xi|uk,Σk),而 θ θ 就是 {π,u,Σ} { π , u , Σ } 组成的集合(注意这里是没有下标 k k 的)。如果是HMM问题呢?我们需要求的是一个序列问题,而不是一个一个独立分布的样本了,这个时候x z z 都变成序列x z z 了,所以p(xi,zi;θ)=p(xi,zi|π,E,T),这里面看起确实复杂了很多,但是HMM做了一些简化:同一个序列中输出只与当前状态有关,当前状态只依赖前一个状态,这样我们在求序列概率时就可以用动态规划来求解了。 π,E,T π , E , T 分别是其实状态概率、emit矩阵和transfor矩阵,也就是我们需要估计的参数 θ θ ,注意这里不同词的隐变量之间并不是独立的,而是存在一个转移概率的。
这里涉及到了两个常见的模型,如果没有对应的知识,看起来确实蛮累的,不过我有点偷懒了,不熟悉的同学看看我的其他笔记吧。既然是一个假设,意思就是怎么着都是合理的,你也不必太纠结,唯一要时刻牢记的是:这里面有一个隐变量 z z 以及要估计的一堆参数θ
其次让我们为难的地方就是 log l o g 里面有一个求和的公式,这个东西实在不是很友好,如果是连乘那模型是不是就可以得到简化很多了呢?所以EM算法也是想到了这点,并且做到了这点。在进入到EM算法描述之前,我们需要提一下Jensen不等式了,只能说能够想到这个公式的同学真是大神,可见数学功底是多么得重要。一般人推到公式 (1) ( 1 ) 就没什么办法了,因为这个公式是一个 log log 里面的运算,无法化简了。于是就有人想是不是可以把 log log 交换一下位置,这样不就可以搞成一个更加和谐的模型,于是大神就想到了,Jensen不等式好像可以处理这个问题啊,我们不妨列出Jensen不等式:
F(kpkx)kpkF(x) F ( ∑ k p k x ) ≥ ∑ k p k F ( x )

当然这个不等式要是成立还需要一些条件:第一个条件就是 kqk=1 ∑ k q k = 1 ;第二个条件是 F(x) F ( x ) 要是一个Convex Function(这里不说凸函数是由于我们的学术先贤们把这个概念翻译地脑裂了,有次我看到公务员考试竟然考这个到底是凸函数还是凹函数,实在不知道纠结翻译这种东西有什么意思),也就是Hessian矩阵是个正定矩阵;另外什么时候可以取到 = = 呢?这样就可以找到一个最大的下界了,等式条件成立的条件就是:x是个常数。

我们发现 log l o g 就是满足Jensen不等式要求的函数 F F ,但是不等式中需要一个pk的存在,但是公式 (1) ( 1 ) 好像什么都没有啊,别着急如果没有我们可以强势加入一个 pk p k ,是时候来一波转换了:

p(xi,zi;θ)=pkp(xi,zi;θ)pk p ( x i , z i ; θ ) = p k p ( x i , z i ; θ ) p k

所以我们就可以来写一下这个不等式在公式 (1) ( 1 ) 中的表现形式了:
ilogzp(xi,zi;θ)izpklogp(xi,zi;θ)pk(2) (2) ∑ i log ⁡ ∑ z p ( x i , z i ; θ ) ≥ ∑ i ∑ z p k log ⁡ p ( x i , z i ; θ ) p k

公式 (2) ( 2 ) 给出了一个所有样本出现概率的下界,而且需要注意到的是:这个下界竟然还有取 = = 的时候。如果我们贪心一点,把等号的条件满足了,那我们是不是就拿到了最优化目标函数的最大下界呢?有了这样的一种设定之后,我们再来看看等式成立的条件:
p(xi,zi;θ)pk=p(zi|xi;θ)p(xi)pk=C

这里你有没有想起来贝叶斯估计里面的第二个假设:样本出现的概率 p(xi) p ( x i ) 是已知的,所以 p(zi|xi;θ)pk=C^ p ( z i | x i ; θ ) p k = C ^ ,同时 kpk=1 ∑ k p k = 1 ,所以我们惊喜地发现我们只需要把 pk p k 取成 pk=p(zi|xi;θ) p k = p ( z i | x i ; θ ) 不就可以让不等式成立了嘛,所以 ilogzp(xi,zi;θ)=izp(zi|xi;θ)logp(xi,zi;θ)p(zi|xi;θ) ∑ i log ⁡ ∑ z p ( x i , z i ; θ ) = ∑ i ∑ z p ( z i | x i ; θ ) log ⁡ p ( x i , z i ; θ ) p ( z i | x i ; θ ) 。你有没有感觉这个公式好像有点问题啊,我们还不知道最优的 θ θ 应该取什么值,做了这么长时间的变换以及推导好像并没有解决最优化的问题啊,毕竟直接对 izp(zi|xi;θ)logp(xi,zi;θ)p(zi|xi;θ)=izp(zi|xi;θ)logp(xi) ∑ i ∑ z p ( z i | x i ; θ ) log ⁡ p ( x i , z i ; θ ) p ( z i | x i ; θ ) = ∑ i ∑ z p ( z i | x i ; θ ) log ⁡ p ( x i ) 做最优化时还需要知道 p(xi) p ( x i ) 的具体值,而显然我们是不知道的。
该怎么办呢?这就是EM大法施展魔法的时刻了,我们把最优化的公式变动一下:
izp(zi|xi;θ^)logp(xi,zi;θ)p(zi|xi;θ^)(3) (3) ∑ i ∑ z p ( z i | x i ; θ ^ ) log ⁡ p ( x i , z i ; θ ) p ( z i | x i ; θ ^ )

看出来没有,公式 (3) ( 3 ) 实际上只是把 p(zi|xi;θ) p ( z i | x i ; θ ) 换成了 p(zi|xi;θ^) p ( z i | x i ; θ ^ ) 了,而且我们假设这里面的 θ^ θ ^ 是一个固定值,那么我们就可以求得:
p(zi|xi;θ^)=p(xi,zi;θ^)zip(xi,zi;θ^) p ( z i | x i ; θ ^ ) = p ( x i , z i ; θ ^ ) ∑ z i p ( x i , z i ; θ ^ )

上面的公式我们可以看到 p(zi|xi;θ^) p ( z i | x i ; θ ^ ) 也是一个定值了。这个时候最优化的问题变成了:
=izp(zi|xi;θ^)logp(xi,zi;θ)iEp(zi|xi;θ^)(logp(xi,zi;θ))(4) ∑ i ∑ z p ( z i | x i ; θ ^ ) log ⁡ p ( x i , z i ; θ ) (4) = ∑ i E p ( z i | x i ; θ ^ ) ( log ⁡ p ( x i , z i ; θ ) )

貌似我们就可以做最优化了,从而求得最优解 θ θ ∗ ,但是其实我们也太乐观了,因为目前为止 p(xi,zi;θ) p ( x i , z i ; θ ) 是否能够给出一个完美的数学表达也影响我们是否可以直接求得解析解,或者利用随机梯度下降才能够求得最优解,甚至有些假设太过复杂无法用数学公式给出,所以重点又回到了:如何构造这个假设呢?

4. Expection-Maximization

写到这里你有没有一点点感受,我们好像抓到了EM的脉络了,公式 (4) ( 4 ) 不就是我们经常提起的EM中Expectation吗?那么Maximization不就是我上面提到的最优化的过程吗?哇喔,一切是不是就变得特别清晰了啊。
在Expection阶段,我们把最优化的问题搞成一个期望,这个是目标函数的一个最优下界:

iEp(zi|xi;θ^)(logp(xi,zi;θ))(5) (5) ∑ i E p ( z i | x i ; θ ^ ) ( log ⁡ p ( x i , z i ; θ ) )

然后在Maximization阶段,我们把公式 (5) ( 5 ) 当做一个关于 θ θ 的最优化问题:
θ=argmaxθiEp(zi|xi;θ^)(logp(xi,zi;θ)) θ ∗ = arg ⁡ max θ ⁡ ∑ i E p ( z i | x i ; θ ^ ) ( log ⁡ p ( x i , z i ; θ ) )

现在就只剩下一个问题了, θ^ θ ^ 该怎么取值呢?其实如果你知道EM算法是个迭代的过程,那么取值也就迎刃而解了:一开始我们可以随机给个值,然后每次迭代中我们取上一次迭代最优化的结果 θ^t=θt1 θ ^ t = θ t − 1 ∗
好了写到了这里,我们大概就知道EM是怎么运作的了,但是又有一个问题浮现了:这样的Expection-Maximization不断交替迭代的过程为什么能够保证我们最终能够取得最优值呢?其实这个里面蕴含着一个朴实的道理:当一个Convex的目标函数有两个不可知的变量 α α β β ,我们可以事先固定一个参数 α α ,然后最优化计算另外一个参数 β β ,然后固定 β β 最优化求解 α α ,依次迭代交替,我们每次都选择一个最好的选择(Coordinate Descent),最终我们就可以找到那个终极的目标值,好像跟我们人类做决策也是有异曲同工之妙。类似上述的最优化过程,在EM中每次Expection的过程实际上最大化下界,接着固定好这个下界,利用Maximation去最优化估计 θ θ 这个参数,最优化参数 θ θ 把下限函数推向一个更优的方向,接着我们又在这个最优的方向上再估计一个下界函数,以此类推迭代下去。如果目标函数是一个Convex Function,随着迭代的进行,我们每次进步一点,最终就可以到达那个最优解了。

5. 用EM来理解HMM

按照常规的套路这里我们应该举一个GMM(Gaussian Mixture Model)的例子结束,然后根据GMM的假设我们竟然可以求得解析解,哇喔皆大欢喜。但是事实上EM应用的场景肯定不是这么简单任性的,问题假设也不会像GMM那样是一个高斯函数的线性组合。所以这里我最想讲的一个例子是:HMM(Hidden Markov Model),这是一个很典型的具有隐变量,同时又是一个Generative Model的假设,而且我们在训练HMM的时候用的最常见的方法是Baum-Welch算法。有很多文章点出来Baum-Welch算法其实就是一个EM算法的一个特例,但是两者该怎么联系到一起呢?所以接下来的内容我想要的做的事就是用EM来估计HMM的参数。
这里写图片描述
首先我们来看一下HMM的模型假设,类似于图中所描述的, x x 表示的是我们观测到一个序列(一句话或者是一条语音),z就是我们想要求得隠变量,在分词问题中 z z 表示的是BIES(B-开头词,I-中间词,E-末尾词,S-单独成为词)标注中的4种状态。不同变量之间的依赖关系用带有箭头的直线表示,那么这个模型的参数就包含了3个部分:

  • 起始状态的分布:π(z0),也就是图中的 z0 z 0 节点的概率分布

    • 状态之间的transfor概率: p(zs|x1...s1,z1...s1)=p(zs|zs1) p ( z s | x 1... s − 1 , z 1... s − 1 ) = p ( z s | z s − 1 ) ,表示当前节点的转态分布只跟前一个节点的转态相关
    • 输出的Emition概率: p(xt|x1...s1,z1...s1,zs)=p(xs|zs) p ( x t | x 1... s − 1 , z 1... s − 1 , z s ) = p ( x s | z s ) ,表示当前节点的输出只跟当前节点的状态有关
    • 有了模型的假设之后,我们就可以做一件无脑套公式的事了,把EM算法中的 p(xi,zi;θ) p ( x i , z i ; θ ) 替换成HMM的模型假设就可以了:

      iEp(zi|xi;θ^)(logp(xi,zi;θ)) ∑ i E p ( z i | x i ; θ ^ ) ( log ⁡ p ( x i , z i ; θ ) )

      这里假设把 i i 看做是一个一个不同的序列,那么p(xi,zi)表示的就是这个序列以及它的隐变量的联合概率 分布了。按照HMM的模型假设,我们可以直接给出:
      p(xi,zi;θ)=πziot=1Tp(xit|zit)p(zit|zit1) p ( x i , z i ; θ ) = π z o i ∏ t = 1 T p ( x t i | z t i ) p ( z t i | z t − 1 i )

      除了上面的联合概率公式,我们还需要计算一个概率分布,也就是 p(zi|xi;θ^) p ( z i | x i ; θ ^ ) ,这里的 θ^ θ ^ 是上轮优化得到的最优化的 θt1 θ t − 1 ∗ ,是个定值,这个地方值得注意的是 zi z i 是个序列,所以 p(zi|xi;θ) p ( z i | x i ; θ ) 指的是所有可能出现的序列的具体概率。这个概率该如何来求解呢?聪明的同学应该立刻就回忆起HMM中的forward-backward算法了,其实就是简单的动态规划问题,这里就不继续展开了。如果你不了解这个算法也没有关系,你只需要知道有一个算法能够根据已经给定的参数 θ^ θ ^ 和输出的数据计算出两类参数 α(t,s) α ( t , s ) β(t,s) β ( t , s ) ,分别表示:
      α(t,s)=p(xi1...t,zit=s;θ^)β(t,s)=p(xit+1...T|zit=s;θ^) α ( t , s ) = p ( x 1... t i , z t i = s ; θ ^ ) β ( t , s ) = p ( x t + 1... T i | z t i = s ; θ ^ )

      这两个类参数我们已经通过某个算法求得了具体的值,就是两个关于 (t,s) ( t , s ) 的查询表,根据上面的公式,我们还可以得到在序列 t t 位置,状态为s的概率如下:
      p(zit=s,xi1...T;θ^)=p(xit+1...T|zit=s,xi1...t;θ^)p(zit=s,xi1...t;θ^)=p(zit=s,xi1...t;θ^)p(xit+1...T|zit=s;θ^)=α(t,s)β(t,s)(6) p ( z t i = s , x 1... T i ; θ ^ ) = p ( x t + 1... T i | z t i = s , x 1... t i ; θ ^ ) p ( z t i = s , x 1... t i ; θ ^ ) = p ( z t i = s , x 1... t i ; θ ^ ) p ( x t + 1... T i | z t i = s ; θ ^ ) (6) = α ( t , s ) β ( t , s )

      p(zit=s,zit+1=s,xi1...T;θ^)=p(xit+1...T,zit+1=s|zit=s,xi1...t;θ^)p(zit=s,xi1...t;θ^)=p(zit=s,xi1...t;θ^)p(zit+1=s|zit=s;θ^)p(xit+1...T|zit+1=s;θ^)=p(zit=s,xi1...t;θ^)p(zit+1=s|zit=s;θ^)p(xit+1|zit+1=s)p(xit+2...T|zit+1=s;θ^)=α(t,s)t(s|s)e(xit+1|s)β(t+1,s)(7) p ( z t i = s , z t + 1 i = s ′ , x 1... T i ; θ ^ ) = p ( x t + 1... T i , z t + 1 i = s ′ | z t i = s , x 1... t i ; θ ^ ) p ( z t i = s , x 1... t i ; θ ^ ) = p ( z t i = s , x 1... t i ; θ ^ ) p ( z t + 1 i = s ′ | z t i = s ; θ ^ ) p ( x t + 1... T i | z t + 1 i = s ′ ; θ ^ ) = p ( z t i = s , x 1... t i ; θ ^ ) p ( z t + 1 i = s ′ | z t i = s ; θ ^ ) p ( x t + 1 i | z t + 1 i = s ′ ) p ( x t + 2... T i | z t + 1 i = s ′ ; θ ^ ) (7) = α ( t , s ) t ( s | s ′ ) e ( x t + 1 i | s ′ ) β ( t + 1 , s ′ )

      上面这些就是HMM最为重要的背景知识,本质上就是两个不同维度推导出来的联合概率,有了这两个联合概率,我们回过头来再来看一下最大似然函数:
      iNEp(zi|xi;θ^)(logp(xi,zi;θ))=iNEp(zi|xi;θ^)(log(πzi0t=1Tp(xit|zit)p(zit|zit1)))=iNEp(zi|xi;θ^)(logπzi0+t=1Tlogp(xit|zit)+t=1Tlogp(zit|zit1))=iNEp(zi|xi;θ^)(logπzi0)+iNt=1TEp(zi|xi;θ^)(logp(xit|zit))+iNt=1TEp(zi|xi;θ^)(logp(zit|zit1)) ∑ i N E p ( z i | x i ; θ ^ ) ( log ⁡ p ( x i , z i ; θ ) ) = ∑ i N E p ( z i | x i ; θ ^ ) ( log ⁡ ( π z 0 i ∏ t = 1 T p ( x t i | z t i ) p ( z t i | z t − 1 i ) ) ) = ∑ i N E p ( z i | x i ; θ ^ ) ( l o g π z 0 i + ∑ t = 1 T log ⁡ p ( x t i | z t i ) + ∑ t = 1 T log ⁡ p ( z t i | z t − 1 i ) ) = ∑ i N E p ( z i | x i ; θ ^ ) ( l o g π z 0 i ) + ∑ i N ∑ t = 1 T E p ( z i | x i ; θ ^ ) ( log ⁡ p ( x t i | z t i ) ) + ∑ i N ∑ t = 1 T E p ( z i | x i ; θ ^ ) ( log ⁡ p ( z t i | z t − 1 i ) )

      上面的式子如果我们换一个角度来看,比如以 π π zit z t i 以及 xit x t i 的在样本中所有的可能取值进行求和,本质上面的式子没有变换,只是换了个角度求和而已:
      iNEp(zi|xi;θ^)(logπzi0)+iNt=1TEp(zi|xi;θ^)(logp(xit|zit))+iNt=1TEp(zi|xi;θ^)(logp(zit|zit1))=vπVπczit=vπEp(zi=vπ|xi;θ^)(logvπ)+vsVsvoVoczit=vs,xit=voEp(zi=vs|xi;θ^)(logp(xit=vo|zit=vs))+vsVsv^sVsczit=vs,zit1=v^sEp(zi|xi;θ^)(logp(zit=vs|zit1=v^s)) ∑ i N E p ( z i | x i ; θ ^ ) ( l o g π z 0 i ) + ∑ i N ∑ t = 1 T E p ( z i | x i ; θ ^ ) ( log ⁡ p ( x t i | z t i ) ) + ∑ i N ∑ t = 1 T E p ( z i | x i ; θ ^ ) ( log ⁡ p ( z t i | z t − 1 i ) ) = ∑ v π V π c z t i = v π E p ( z i = v π | x i ; θ ^ ) ( log ⁡ v π ) + ∑ v s V s ∑ v o V o c z t i = v s , x t i = v o E p ( z i = v s | x i ; θ ^ ) ( log ⁡ p ( x t i = v o | z t i = v s ) ) + ∑ v s V s ∑ v ^ s V s c z t i = v s , z t − 1 i = v ^ s E p ( z i | x i ; θ ^ ) ( log ⁡ p ( z t i = v s | z t − 1 i = v ^ s ) )

      如果你观察上面的公式,其实就是三个不同状态的计数 czit=vπ c z t i = v π czit=vs,xit=vo c z t i = v s , x t i = v o 以及 czit=vs,zit1=v^s c z t i = v s , z t − 1 i = v ^ s 而已。上面式子其实也很清晰了,只是剩下一个 Ep(zi|xi;θ^) E p ( z i | x i ; θ ^ ) 悬而未决了,这个式子表达的含义:假设参数已经求解出来了,是给定一个输出 xi x i ,对应的隐变量序列 zi z i 的概率。有同学一看到前面搞的一堆公式,心里可能就有点犯怵,事实上要想完整地推导出 Ep(zi|xi;θ^) E p ( z i | x i ; θ ^ ) 这个概率还是不太容易的。这个时候我们还是要回到EM算法的本质上来,回想一下我们每次只需要找一个下界函数,然后优化下界函数,至于这个下界函数是不是非要符合一个完整统一的定义,其实并不特别重要。那么我们是不是考虑把优化函数中的三个式子改造一下,分别搞一个我们能够通过forward-backward计算出来的条件概率,三个条件概率的形式不同:
      vπVπczi0=vπEp(zi0=vπ|xi;θ^)(logp(π=vπ))vsVsvoVoczit=vs,xit=voEp(zit=vs|xi;θ^)(logp(xit=vo|zit=vs))vsVsv^sVsczit=vs,zit1=v^sEp(zit=vs,zit1=v^s|xi;θ^)(logp(zit=vs|zit1=v^s)) ∑ v π V π c z 0 i = v π E p ( z 0 i = v π | x i ; θ ^ ) ( log ⁡ p ( π = v π ) ) ∑ v s V s ∑ v o V o c z t i = v s , x t i = v o E p ( z t i = v s | x i ; θ ^ ) ( log ⁡ p ( x t i = v o | z t i = v s ) ) ∑ v s V s ∑ v ^ s V s c z t i = v s , z t − 1 i = v ^ s E p ( z t i = v s , z t − 1 i = v ^ s | x i ; θ ^ ) ( log ⁡ p ( z t i = v s | z t − 1 i = v ^ s ) )

      这样做的目的其实也非常简单:我们搞一个可以根据前面公式 (6) ( 6 ) (7) ( 7 ) 求得的条件概率(已知联合分布,归一化一下就可以求得条件概率了)。虽然看起来不是一个我们期待的EM算法公式,特别是求期望的时候用到了3种不同的条件概率,仔细考虑一下:这种改变实际上还是一个函数下界,还是可以纳入EM这个大的框架下的。所以在应用EM算法的时候不要照本宣科,重要的是把握EM这种思想,这也是为什么很多同学不把EM看做一个算法,而只是一种思想。
      其实写到这里问题已经讲的很明白了,如果大家再看看Baum-Welch算法或者其他的博客内容,大家应该就容易理解这些内容了,后面的流程无非是根据三个概率总和等于1的约束条件,利用拉格朗日乘子就可以求得不同参数的解析解了。这个不是我讲EM算法的重点,后面的内容我就偷懒一下了。还是回到前面的那句话:EM算法的精髓在于逐渐逼急最优的思想,而不是Jensen不等式或者是最优化过程,这样你就能理解为什么K-Means也可以被称为EM算法了,所以懂得利用这种思想远比懂得推导本身要来得重要得多。

      6. 总结

      其实说到EM算法的理解,你可以延伸到很多领域,某种程度上它就是非监督学习的一个重要的基石,有一篇很好的导引《EM算法的九层境界》,按照上面的说法这里最多也只是介绍了功法的前三重,后面还有很多融汇贯通,打通任督二脉的事。理解EM算法也是修炼非监督学习重要基石之一,后面如果有时间我会再来介绍一下后面的六重天,祈祷我也能打通EM的任督二脉吧。

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值