EM算法及算例详解

最近在看贝叶斯相关的论文,里面讲到了EM算法,就把李航的统计学习方法这本书里的有关EM算法的详细推导过程仔细研读一遍,收获颇丰!
数理统计的基本问题就是根据样本所提供的信息,对总体的分布或者分布的数字特征作出统计推断。所谓总体,就是一个具有确定分布的随机变量,来自总体的每一个iid样本都是一个与总体有相同分布的随机变量。
EM算法是一种迭代算法,用于含有隐变量的概率模型参数的极大似然估计,或极大后验概率估计。EM算法的每次迭代由两步组成:E步,求期望。M步:求极大值。所以这一算法称为期望极大算法,简称EM算法。
概率模型有时既含有观测变量,又含有隐变量或潜在变量。如果概率模型的变量都是观测变量,那么给定数据,可以直接用极大似然估计法,或贝叶斯估计法估计模型参数。但是当模型中含有隐变量时,就不能简单的使用这些估计方法。EM算法就是含有隐变量的概率模型参数的极大似然估计,或极大后验概率估计法。

EM算法推导
Y 表示观测随机变量的数据, Z 表示隐随机变量的数据。 Y Z 连在一起称为完全数据,观测数据 Y 又称为不完全数据。假设给定观测数据 Y ,其概率分布是 P ( Y | θ ) ,其中 θ 是需要估计的模型参数,那么不完全数据 Y 的似然函数是 P ( Y | θ ) ,对数似然函数是 L ( θ ) = log P ( Y | θ ) ;假设 Y Z 的联合概率分布是 P ( Y , Z | θ ) ,那么完全数据的对数似然函数是 log P ( Y , Z | θ )
EM算法通过迭代求 L ( θ ) = log P ( Y | θ ) 的极大似然估计,每次迭代包含两步:E步,求期望;M步,求极大化。
下面给出详细的推导过程,如何体现E和M两个步骤:
我们的目的是极大化观测数据 Y 关于参数 θ 的对数似然函数,所以目标函数为:

L ( θ ) = log P ( Y | θ ) ( 1 )

又因为 P ( Y | θ ) = Z P ( Y , Z | θ ) = Z P ( Y | Z , θ ) P ( Z | θ ) ,所以公式(1)又可以写成公式(2)
L ( θ ) = log P ( Y | θ ) = log ( Z P ( Y , Z | θ ) ) = log ( Z P ( Y | Z , θ ) P ( Z | θ ) ) ( 2 )

公式(2)难以极大化的主要困难是其中含有未观测数据并包含和的对数,可以把公式(2) L ( θ ) 想象成如下公式(3)就知道难以求得闭式解。
L ( θ ) = log P ( Y | θ ) = log ( Z P ( Y , Z | θ ) ) = log ( Z P ( Y | Z , θ ) P ( Z | θ ) ) = log ( f 1 ( θ ) + f 2 ( θ ) + ) ( 3 )

EM算法是通过迭代逐步近似极大化 L ( θ ) 的。为了方便推导和叙述,符号的使用和统计学习方法这本书中保持一致。我们假设在第 i 次迭代后 θ 的估计值是 θ ( i ) ,我们希望下一次迭代的新估计值能使 L ( θ ) 变大,即 L ( θ ) > L ( θ ( i ) ) 。故考虑下一次迭代的 L ( θ ) 和当前迭代的 L ( θ ( i ) ) 之间的差:
L ( θ ) L ( θ ( i ) ) = log P ( Y | θ ) log P ( Y | θ ( i ) ) = log ( Z P ( Y | Z , θ ) P ( Z | θ ) ) log P ( Y | θ ( i ) ) ( 4 )

利用Jensen不等式( 参考这篇博文 log j λ j y j j λ j log y j ,其中 λ j 0 , j λ j = 1 ,可以得到:
L ( θ ) L ( θ ( i ) ) = log ( Z P ( Z | Y , θ ( i ) ) P ( Y | Z , θ ) P ( Z | θ ) P ( Z | Y , θ ( i ) ) ) log P ( Y | θ ( i ) ) Z P ( Z | Y , θ ( i ) ) log P ( Y | Z , θ ) P ( Z | θ ) P ( Z | Y , θ ( i ) ) log P ( Y | θ ( i ) ) = Z P ( Z | Y , θ ( i ) ) log P ( Y | Z , θ ) P ( Z | θ ) P ( Z | Y , θ ( i ) ) Z P ( Z | Y , θ ( i ) ) log P ( Y | θ ( i ) ) = Z P ( Z | Y , θ ( i ) ) log P ( Y | Z , θ ) P ( Z | θ ) P ( Z | Y , θ ( i ) ) P ( Y | θ ( i ) ) ( 4 )

注意这里的 Z P ( Z | Y , θ ( i ) ) = 1 ,相当于 log j λ j y j j λ j log y j 中的 λ j 0 , j λ j = 1 P ( Z | Y , θ ( i ) ) 对应于 λ j
B ( θ , θ ( i ) ) = Δ L ( θ ( i ) ) + Z P ( Z | Y , θ ( i ) ) log P ( Y | Z , θ ) P ( Z | θ ) P ( Z | Y , θ ( i ) ) P ( Y | θ ( i ) ) ( 5 )
L ( θ ) B ( θ , θ ( i ) ) ( 6 )

即函数 B ( θ , θ ( i ) ) L ( θ ) 的一个下界。因此。任何使 B ( θ , θ ( i ) ) 增大的 θ 也可以使 L ( θ ) 增大,为了使 L ( θ ) 有尽可能大的增长,选择 θ ( i + 1 ) 使 B ( θ , θ ( i ) ) 达到极大,即
θ ( i + 1 ) = arg max θ B ( θ , θ ( i ) ) ( 7 )

现在转化为求公式(7)的极大值, θ ( i ) 在这里是当前迭代的估计值,为已知的,所以将公式(7)中含有 θ ( i ) 的常数项表达式去掉,并不影响极大值的求解。由此可得:
θ ( i + 1 ) = arg max θ ( L ( θ ( i ) ) + Z P ( Z | Y , θ ( i ) ) log P ( Y | Z , θ ) P ( Z | θ ) P ( Z | Y , θ ( i ) ) P ( Y | θ ( i ) ) ) = arg max θ ( L ( θ ( i ) ) + Z P ( Z | Y , θ ( i ) ) log P ( Y , Z | θ ) P ( Z , Y | θ ( i ) ) ) = arg max θ ( Z P ( Z | Y , θ ( i ) ) ( log P ( Y , Z | θ ) log P ( Z , Y | θ ( i ) ) ) ) = arg max θ ( Z P ( Z | Y , θ ( i ) ) log P ( Y , Z | θ ) ) ( 8 )

公式(8)中 L ( θ ( i ) ) P ( Z | Y , θ ( i ) ) 以及 log P ( Z , Y | θ ( i ) ) 都是常数项,所以可以省略,不影响求极值。
回顾一下随机变量的期望的表达式:
E [ Z ] = k P ( Z = z k ) z k E [ g ( Z ) ] = k P ( Z = z k ) g ( z k ) E [ g ( Z ) | Y ] = k P ( Z | Y ) g ( z k )

注意观察公式(8)最终化简结果,把 P ( Z | Y , θ ( i ) ) 看成是 P ( Z | Y ) ,把 log P ( Y , Z | θ ) 看成是 g ( Z ) ,所以公式(8)的最终化简结果表达的含义是对 Z 求期望,这也是EM算法的E步。
Q ( θ , θ ( i ) ) = Z P ( Z | Y , θ ( i ) ) log P ( Y , Z | θ ) = E Z ( log P ( Y , Z | θ ) | Y , θ ( i ) )
则:
θ ( i + 1 ) = arg max θ Q ( θ , θ ( i ) ) ( 9 )

公式(9)是求Q函数(也就是 Z 的期望)的极大值,这是EM算法的M步。
公式(9)等价于EM算法的一次迭代,即求Q函数及其极大值。EM算法就是通过不断求解下界的极大化逼近求解对数似然函数极大值的算法。

下面给出EM算法的具体实现流程:
输入:观测变量数据Y,隐变量数据Z,联合分布 P ( Y , Z | θ ) ,条件分布 P ( Z | Y , θ )
输出:模型参数 θ
(1)选择参数的初值 θ ( 0 ) ,开始迭代;
(2)E步:记 θ ( i ) 为第 i 次迭代参数 θ 的估计值,在第 i + 1 次迭代的E步,计算

Q ( θ , θ ( i ) ) = E Z ( log P ( Y , Z | θ ) | Y , θ ( i ) ) = Z P ( Z | Y , θ ( i ) ) log P ( Y , Z | θ )

这里, P ( Z | Y , θ ( i ) ) 是在给定观测数据Y和当前的参数估计 θ ( i ) 下隐变量数据Z的条件概率分布;
(3)M步:求使 Q ( θ , θ ( i ) ) 极大化的 θ ,确定第 i + 1 次迭代的参数的估计值 θ ( i + 1 )
θ ( i + 1 ) = arg max θ Q ( θ , θ ( i ) )

(4)重复第(2)和第(3)步,直到收敛。
函数 Q ( θ , θ ( i ) ) 是EM算法的核心,称为Q函数。

下面给出Q函数的定义:
完全数据的对数似然函数 log P ( Y , Z | θ ) 关于在给定观测数据Y和当前参数 θ ( i ) 下对未观测数据Z的条件概率分布 P ( Z | Y , θ ( i ) ) 的期望称为Q函数,即

Q ( θ , θ ( i ) ) = E Z ( log P ( Y , Z | θ ) | Y , θ ( i ) )

关于EM算法作几点说明:
步骤(1):参数的初值可以任意选择,但需要注意EM算法对初值是敏感的。
步骤(2):E步求 Q ( θ , θ ( i ) ) ,Q函数中的Z是未观测数据,Y是观测数据。注意, Q ( θ , θ ( i ) ) 的第一个变元表示要极大化的参数,第2个变元表示参数当前估计值,每次迭代实际在求Q函数及其极大。
步骤(3):M步求 Q ( θ , θ ( i ) ) 的极大化,得到 θ ( i + 1 ) ,完成一次迭代 θ ( i ) θ ( i + 1 )
步骤(4):给出停止迭代的条件,一般是对较小的正数 ε 1 , ε 2 ,若满足

θ ( i + 1 ) θ ( i ) < ε 1 o r Q ( θ ( i + 1 ) , θ ( i ) ) Q ( θ ( i ) , θ ( i ) ) < ε 2
则停止迭代。

算例:三硬币模型

假设有三枚硬币A、B、C,这些硬币正面出现的概率分别是 π p q 。进行如下掷硬币试验:先掷A,如果A是正面则再掷B,如果A是反面则再掷C。对于B或C的结果,如果是正面则记为1,如果是反面则记为0。进行N次独立重复实验,得到结果。现在只能观测到结果,不能观测到掷硬币的过程,估计模型参数 θ = ( π , p , q )
概率模型可以写成

p ( y | θ ) = z p ( y , z | θ ) = z p ( z | θ ) p ( y | z , θ ) = p ( z = 1 | θ ) p ( y | z = 1 , θ ) + p ( z = 0 | θ ) p ( y | z = 0 , θ ) = { π p + ( 1 π ) q y = 1 π ( 1 p ) + ( 1 π ) ( 1 q ) y = 0 = π p y ( 1 p ) 1 y + ( 1 π ) q y ( 1 q ) 1 y

这里,随机变量 y 是观测变量,表示一次实验观测的结果是1或0。随机变量 z 是隐变量,表示未观测到的掷硬币A的结果。将观测数据表示为 Y = ( Y 1 , Y 2 , , Y n ) ,未观测数据表示为 Z = ( Z 1 , Z 2 , , Z n ) ,且 Z 只有两种可能取值1和0。则观测数据的似然函数为
P ( Y | θ ) = Z P ( Z | θ ) log P ( Y | Z , θ )

P ( Y | θ ) = j = 1 n P ( y j | θ ) = j = 1 n [ π p y j ( 1 p ) 1 y j + ( 1 π ) q y j ( 1 q ) 1 y j ]

1、E步,求期望即Q函数
Q ( θ , θ ( i ) ) = E Z ( log P ( Y , Z | θ ) | Y , θ ( i ) ) = E Z { log ( P ( y 1 , Z | θ ) P ( y n , Z | θ ) ) | Y , θ ( i ) } = E Z { log P ( y 1 , Z | θ ) + + log P ( y n , Z | θ ) | Y , θ ( i ) } = E Z { j = 1 n log P ( y j , Z | θ ) | Y , θ ( i ) } = j = 1 n E Z { log P ( y j , Z | θ ) | Y , θ ( i ) } = j = 1 n Z P ( Z | y j , θ ( i ) ) log P ( y j , Z | θ ) = j = 1 n { P ( Z = 1 | y j , θ ( i ) ) log P ( y j , Z = 1 | θ ) + P ( Z = 0 | y j , θ ( i ) ) log P ( y j , Z = 0 | θ ) }

其中:
P ( Z = 1 | y j , θ ( i ) ) = P ( y j | Z = 1 , θ ( i ) ) P ( Z = 1 ) P ( y j | θ ( i ) ) = π i p i y j ( 1 p i ) 1 y j π i p i y j ( 1 p i ) 1 y j + ( 1 π i ) q i y j ( 1 q i ) 1 y j

P ( Z = 0 | y j , θ ( i ) ) = 1 P ( Z = 1 | y j , θ ( i ) ) = ( 1 π i ) q i y j ( 1 q i ) 1 y j π i p i y j ( 1 p i ) 1 y j + ( 1 π i ) q i y j ( 1 q i ) 1 y j

这里的 π i , p i , q i 为第 i 次迭代的模型参数,为已知值。
P ( y j , Z | θ ) = P ( Z | θ ) P ( y j | Z , θ ) = { π p y j ( 1 p ) 1 y j i f Z = 1 ( 1 π ) q y j ( 1 q ) 1 y j i f Z = 0

这里的 π , p , q 为第 i + 1 次迭代的参数估计值。
所以Q函数为:
Q ( θ , θ ( i ) ) = j = 1 n { π i p i y j ( 1 p i ) 1 y j π i p i y j ( 1 p i ) 1 y j + ( 1 π i ) q i y j ( 1 q i ) 1 y j log [ π p y j ( 1 p ) 1 y j ] + ( 1 π i ) q i y j ( 1 q i ) 1 y j π i p i y j ( 1 p i ) 1 y j + ( 1 π i ) q i y j ( 1 q i ) 1 y j log [ ( 1 π ) q y j ( 1 q ) 1 y j ] }

2、M步,求Q函数的极大值,即计算模型参数新的估计值。
Q函数分别对 π , p , q 求偏导数,并令其等于0。
Q ( θ , θ ( i ) ) π = j = 1 n ( π i p i y j ( 1 p i ) 1 y j π i p i y j ( 1 p i ) 1 y j + ( 1 π i ) q i y j ( 1 q i ) 1 y j π ) = 0 π = 1 n j = 1 n π i p i y j ( 1 p i ) 1 y j π i p i y j ( 1 p i ) 1 y j + ( 1 π i ) q i y j ( 1 q i ) 1 y j Q ( θ , θ ( i ) ) p = j = 1 n π i p i y j ( 1 p i ) 1 y j π i p i y j ( 1 p i ) 1 y j + ( 1 π i ) q i y j ( 1 q i ) 1 y j y j p p ( 1 p ) = 0 p = j = 1 n π i p i y j ( 1 p i ) 1 y j π i p i y j ( 1 p i ) 1 y j + ( 1 π i ) q i y j ( 1 q i ) 1 y j y j j = 1 n π i p i y j ( 1 p i ) 1 y j π i p i y j ( 1 p i ) 1 y j + ( 1 π i ) q i y j ( 1 q i ) 1 y j Q ( θ , θ ( i ) ) q = 0 q = j = 1 n ( 1 π i p i y j ( 1 p i ) 1 y j π i p i y j ( 1 p i ) 1 y j + ( 1 π i ) q i y j ( 1 q i ) 1 y j ) y j j = 1 n ( 1 π i p i y j ( 1 p i ) 1 y j π i p i y j ( 1 p i ) 1 y j + ( 1 π i ) q i y j ( 1 q i ) 1 y j )

u i + 1 = π i p i y j ( 1 p i ) 1 y j π i p i y j ( 1 p i ) 1 y j + ( 1 π i ) q i y j ( 1 q i ) 1 y j
π , p , q 的迭代公式为
π i + 1 = 1 n j = 1 n u j i + 1 p i + 1 = j = 1 n u j i + 1 y j j = 1 n u j i + 1 q i + 1 = j = 1 n ( 1 u j i + 1 ) y j j = 1 n ( 1 u j i + 1 )

有了迭代公式,给定模型参数的初始值,便可迭代求解模型参数了。

参考文献:
1、http://www.cnblogs.com/Determined22/p/5776791.html
2、《统计学习方法》李航著

猜你喜欢

转载自blog.csdn.net/qq_16000815/article/details/80384024