最近看了很多关于EM算法推导的文章,包括《统计学习方法(第二版)》中关于EM算法的内容,总感觉说得不够清楚。虽然公式都写得挺详细,但是没有说清楚为什么要这样算,怎么想到这样变形的,本文总结一下我理解的EM算法推导过程,尽量把EM的核心思想说清楚。
- 参考:
文章目录
0. 补充
- 极大似然估计、最大后验估计:一文看懂 “极大似然估计” 与 “最大后验估计”
- 关于Jensen不等式:Jensen不等式
1. 引入
- 根据观测性,可以把模型变量分为
观测变量
和隐变量/潜在变量
。如果模型的变量都是观测变量,可以直接使用极大似然估计或最大后验估计法估计模型参数。但当模型含有隐变量时,这些方法就不能直接使用了。 - EM算法是一种迭代算法,用于对含有隐变量的概率模型参数进行极大似然估计或最大后验概率估计。EM的适用情况和 MLE 或 MAP 一样,都是在模型确定的情况下估计模型参数,区别在于EM算法允许模型中存在隐变量
1.1 三硬币模型
- 先看一个经典的三硬币模型示例,感受变量的观测性和EM算法流程。
1.1.1 建模
- 假设有 A,B,C 三枚硬币,正面出现的概率分别为
π
,
p
,
q
\pi,p,q
π,p,q。进行如下实验:先掷硬币A,正面选B,反面选C;然后掷选出的硬币。我们不能观测到A的结果(隐变量),但是可以观测到选出硬币B或C的掷币结果(观测变量)。假如10次实验观测结果为
正 , 正 , 反 , 正 , 反 , 反 , 正 , 反 , 正 , 正 正,正,反,正,反,反,正,反,正,正 正,正,反,正,反,反,正,反,正,正
现在请估计三枚硬币掷出正面的概率,即三硬币模型的参数 - 用1表示正面,0表示反面,设随机变量
y
,
z
y,z
y,z 分别为观测变量(B/C的掷币结果)和隐变量(A的掷币结果),观测值分别为
Y
,
Z
∈
{
0
,
1
}
Y,Z \in \{0,1\}
Y,Z∈{0,1} ,模型参数为
θ
=
{
π
,
p
,
q
}
\theta = \{\pi,p,q\}
θ={π,p,q} 。注意到掷硬币是一种两点分布,则三硬币问题可以建模表示为
P ( y ∣ θ ) = ∑ z P ( y , z ∣ θ ) = ∑ z P ( z ∣ θ ) P ( y ∣ z , θ ) = π p y ( 1 − p ) 1 − y + ( 1 − π ) q y ( 1 − q ) 1 − y \begin{aligned} P(y|\theta) &= \sum_zP(y,z|\theta) = \sum_zP(z|\theta)P(y|z,\theta) \\ & = \pi p^y(1-p)^{1-y} + (1-\pi)q^y(1-q)^{1-y} \end{aligned} P(y∣θ)=z∑P(y,z∣θ)=z∑P(z∣θ)P(y∣z,θ)=πpy(1−p)1−y+(1−π)qy(1−q)1−y - 将
观测数据
和未观测数据
分别表示为来自总体 y y y 和 z z z 的容量为 n n n 的简单随机样本 y = { y 1 , y 2 , . . . , y n } T , z = { z 1 , z 2 , . . . , z n } T y = \{y_1,y_2,...,y_n\}^T,z = \{z_1,z_2,...,z_n\}^T y={y1,y2,...,yn}T,z={z1,z2,...,zn}T ,观测值和未观测值分别为 Y = { Y 1 , Y 2 , . . . , Y n } T , Z = { Z 1 , Z 2 , . . . , Z n } T Y = \{Y_1,Y_2,...,Y_n\}^T,Z = \{Z_1,Z_2,...,Z_n\}^T Y={Y1,Y2,...,Yn}T,Z={Z1,Z2,...,Zn}T,考虑求模型参数 θ \theta θ- 极大似然估计:观测数据的似然函数、对数似然函数、参数
θ
\theta
θ 估计值分别为
P ( Y ∣ θ ) = ∑ Z P ( Z ∣ θ ) P ( Y ∣ Z , θ ) = ∏ j − 1 n [ π p Y j ( 1 − p ) 1 − Y j + ( 1 − π ) q Y j ( 1 − q ) 1 − Y j ] l o g P ( Y ∣ θ ) = ∑ j = 1 n l o g [ π p Y j ( 1 − p ) 1 − Y j + ( 1 − π ) q Y j ( 1 − q ) 1 − Y j ] \begin{aligned} P(Y|\theta) &= \sum_ZP(Z|\theta)P(Y|Z,\theta) \\ &= \prod_{j-1}^n[\pi p^{Y_j}(1-p)^{1-Y_j} + (1-\pi)q^{Y_j}(1-q)^{1-Y_j}] \\ logP(Y|\theta) &= \sum_{j=1}^nlog[\pi p^{Y_j}(1-p)^{1-Y_j} + (1-\pi)q^{Y_j}(1-q)^{1-Y_j}]\\ \end{aligned} P(Y∣θ)logP(Y∣θ)=Z∑P(Z∣θ)P(Y∣Z,θ)=j−1∏n[πpYj(1−p)1−Yj+(1−π)qYj(1−q)1−Yj]=j=1∑nlog[πpYj(1−p)1−Yj+(1−π)qYj(1−q)1−Yj]
θ ^ = arg max θ l o g P ( Y ∣ θ ) \hat{\theta} = \argmax_\theta logP(Y|\theta) θ^=θargmaxlogP(Y∣θ) - 最大后验估计:参数
θ
\theta
θ 的后验概率、估计值分别为
P ( θ ∣ Y ) = P ( θ , Y ) P ( Y ) = P ( θ ) P ( Y ∣ θ ) P ( Y ) = P ( θ ) P ( Z ∣ θ ) P ( Y ∣ Z , θ ) P ( Y ) = P ( θ ) P ( Z ∣ θ ) P ( Y ∣ Z , θ ) ∫ P ( Y ∣ Z , θ ) P ( Z ∣ θ ) P ( θ ) d θ ∝ P ( θ ) P ( Z ∣ θ ) P ( Y ∣ Z , θ ) \begin{aligned} P(\theta|Y) &= \frac{P(\theta,Y)}{P(Y)} \\ &= \frac{P(\theta)P(Y|\theta)}{P(Y)} \\ &= \frac{P(\theta)P(Z|\theta)P(Y|Z,\theta)}{P(Y)} \\ &= \frac{P(\theta)P(Z|\theta)P(Y|Z,\theta)}{\int P(Y|Z,\theta)P(Z|\theta)P(\theta)d\theta}\\ &\propto P(\theta)P(Z|\theta)P(Y|Z,\theta) \end{aligned} P(θ∣Y)=P(Y)P(θ,Y)=P(Y)P(θ)P(Y∣θ)=P(Y)P(θ)P(Z∣θ)P(Y∣Z,θ)=∫P(Y∣Z,θ)P(Z∣θ)P(θ)dθP(θ)P(Z∣θ)P(Y∣Z,θ)∝P(θ)P(Z∣θ)P(Y∣Z,θ)
θ ^ = arg max θ P ( θ ) P ( Z ∣ θ ) P ( Y ∣ Z , θ ) \hat{\theta} = \argmax_\theta P(\theta)P(Z|\theta)P(Y|Z,\theta) θ^=θargmaxP(θ)P(Z∣θ)P(Y∣Z,θ)
这里需要 θ \theta θ 的先验概率 p ( θ ) p(\theta) p(θ),可以设成三个 μ = 0.5 \mu = 0.5 μ=0.5 的正态分布连乘,比较麻烦,所以这个例子后面就只写最大似然估计的过程了。
- 极大似然估计:观测数据的似然函数、对数似然函数、参数
θ
\theta
θ 估计值分别为
1.1.2 分析
- 先尝试直接极大似然估计求解。令偏导为0列方程组
{ ∂ l o g P ( Y ∣ θ ) ∂ π = ∑ j = 1 n p y j ( 1 − p ) 1 − y j − q y j ( 1 − q ) 1 − y j π p y j ( 1 − p ) 1 − y j + ( 1 − π ) q y j ( 1 − q ) 1 − y j = 令 0 ∂ l o g P ( Y ∣ θ ) ∂ p = ∑ j = 1 n π p y j − 1 ( 1 − p ) − y j ( y j − p ) π p y j ( 1 − p ) 1 − y j + ( 1 − π ) q y j ( 1 − q ) 1 − y j = 令 0 ∂ l o g P ( Y ∣ θ ) ∂ q = ∑ j = 1 n ( 1 − π ) q y j − 1 ( 1 − q ) − y j ( y j − q ) π p y j ( 1 − p ) 1 − y j + ( 1 − π ) q y j ( 1 − q ) 1 − y j = 令 0 \left\{ \begin{aligned} \frac{\partial logP(Y|\theta)}{\partial \pi} & = \sum_{j=1}^n \frac{p^{y_j}(1-p)^{1-y_j}-q^{y_j}(1-q)^{1-y_j}}{\pi p^{y_j}(1-p)^{1-y_j} + (1-\pi)q^{y_j}(1-q)^{1-y_j}} \stackrel{令}{=}0\\ \frac{\partial logP(Y|\theta)}{\partial p} & = \sum_{j=1}^n \frac{\pi p^{y_j-1}(1-p)^{-y_j}(y_j-p)}{\pi p^{y_j}(1-p)^{1-y_j} + (1-\pi)q^{y_j}(1-q)^{1-y_j}} \stackrel{令}{=}0\\ \frac{\partial logP(Y|\theta)}{\partial q} & = \sum_{j=1}^n \frac{(1-\pi) q^{y_j-1}(1-q)^{-y_j}(y_j-q)}{\pi p^{y_j}(1-p)^{1-y_j} + (1-\pi)q^{y_j}(1-q)^{1-y_j}} \stackrel{令}{=}0 \end{aligned} \right. ⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧∂π∂logP(Y∣θ)∂p∂logP(Y∣θ)∂q∂logP(Y∣θ)=j=1∑nπpyj(1−p)1−yj+(1−π)qyj(1−q)1−yjpyj(1−p)1−yj−qyj(1−q)1−yj=令0=j=1∑nπpyj(1−p)1−yj+(1−π)qyj(1−q)1−yjπpyj−1(1−p)−yj(yj−p)=令0=j=1∑nπpyj(1−p)1−yj+(1−π)qyj(1−q)1−yj(1−π)qyj−1(1−q)−yj(yj−q)=令0
带入观测数据 Y Y Y,有
{ − 10 π q 2 − 10 π p 2 + 10 q 2 + 20 π p q − 10 p q + 6 p − 6 q = 0 ( 1 ) 10 π 2 q − 10 π 2 p − 10 π q + 6 π = 0 ( 2 ) − 10 π 2 q + 10 π 2 p + 20 π q − 10 π p − 10 q − 6 π + 6 = 0 ( 3 ) \left\{ \begin{aligned} &-10\pi q^2-10\pi p^2 + 10q^2+20\pi pq-10pq+6p-6q &= 0 \space\space\space\space (1)\\ &10\pi^2 q-10\pi^2 p-10\pi q+6\pi &= 0 \space\space\space\space(2) \\ &-10\pi^2 q+10\pi^2 p + 20\pi q -10\pi p - 10q -6\pi+6 &= 0 \space\space\space\space(3) \end{aligned} \right. ⎩⎪⎨⎪⎧−10πq2−10πp2+10q2+20πpq−10pq+6p−6q10π2q−10π2p−10πq+6π−10π2q+10π2p+20πq−10πp−10q−6π+6=0 (1)=0 (2)=0 (3)
发现式子(2)(3)有关系: ( 3 ) = π 1 − π ( 2 ) (3) =\frac{\pi}{1-\pi} (2) (3)=1−ππ(2),这两个式子等价,因此有无穷解。最终结果为 p = q = 0.6 p=q= 0.6 p=q=0.6, π \pi π 取任意值,这种结果是符合直观的。由于未观测数据 Z Z Z 不可见,直接最大化观测数据 Y Y Y 的似然会导致 Z Z Z 及相关参数被当作不存在,使得模型实质上退化到了一个硬币(不存在隐变量)的情况
1.1.2 使用EM方法解
-
使用EM算法可迭代求出更好的唯一解,过程如下
- 先选取参数初值, θ ( 0 ) = { π ( 0 ) , p ( 0 ) , q ( 0 ) } \theta^{(0)} = \{\pi^{(0)},p^{(0)},q^{(0)}\} θ(0)={π(0),p(0),q(0)}
- 反复执行以下两步,迭代计算参数
θ
\theta
θ 估计值直到收敛为止。设第
i
i
i 次迭代参数估计值为
θ
(
i
)
=
{
π
(
i
)
,
p
(
i
)
,
q
(
i
)
}
\theta^{(i)} = \{\pi^{(i)},p^{(i)},q^{(i)}\}
θ(i)={π(i),p(i),q(i)},则第
i
+
1
i+1
i+1 次迭代如下
- E步:计算模型在参数
θ
(
i
)
\theta^{(i)}
θ(i) 下观测数据
y
j
y_j
yj 来自掷硬币 B 的概率
μ
j
(
i
+
1
)
\mu_j^{(i+1)}
μj(i+1)
μ j ( i + 1 ) = P ( B ∣ y j ) = P ( B , y j ) P ( y j ) = P ( B ) P ( y j ∣ B ) P ( B ) P ( y j ∣ B ) + P ( C ) P ( y j ∣ C ) = π ( 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 \begin{aligned} \mu_j^{(i+1)} = P(B|y_j) &= \frac{P(B,y_j)}{P(y_j)} = \frac{P(B)P(y_j|B)}{P(B)P(y_j|B)+P(C)P(y_j|C)} \\ &= \frac{\pi^{(i)}(p^{(i)})^{y_j}(1-p^{(i)})^{1-y_j}}{\pi^{(i)}(p^{(i)})^{y_j}(1-p^{(i)})^{1-y_j}+(1-\pi^{(i)})(q^{(i)})^{y_j}(1-q^{(i)})^{1-y_j}} \end{aligned} μj(i+1)=P(B∣yj)=P(yj)P(B,yj)=P(B)P(yj∣B)+P(C)P(yj∣C)P(B)P(yj∣B)=π(i)(p(i))yj(1−p(i))1−yj+(1−π(i))(q(i))yj(1−q(i))1−yjπ(i)(p(i))yj(1−p(i))1−yj - M步:计算模型参数的新估计值
π ( i + 1 ) = P ( B ∣ Y ) = 1 n ∑ i = 1 n μ j ( i + 1 ) p ( i + 1 ) = P ( B ∣ Y = 1 ) P ( B ∣ Y ) = ∑ i = 1 n μ j ( i + 1 ) y j ∑ i = 1 n μ j ( i + 1 ) q ( i + 1 ) = P ( C ∣ Y = 1 ) P ( C ∣ Y ) = ∑ i = 1 n ( 1 − μ j ( i + 1 ) ) y j ∑ i = 1 n ( 1 − μ j ( i + 1 ) ) \begin{aligned} \pi^{(i+1)} &= P(B|Y) = \frac{1}{n} \sum_{i=1}^n \mu_j^{(i+1)} \\ p^{(i+1)} &= \frac{P(B|Y=1)}{P(B|Y)} = \frac{\sum_{i=1}^n \mu_j^{(i+1)}y_j}{\sum_{i=1}^n \mu_j^{(i+1)}} \\ q^{(i+1)} &= \frac{P(C|Y=1)}{P(C|Y)} = \frac{\sum_{i=1}^n (1-\mu_j^{(i+1)})y_j}{\sum_{i=1}^n (1-\mu_j^{(i+1)})} \end{aligned} π(i+1)p(i+1)q(i+1)=P(B∣Y)=n1i=1∑nμj(i+1)=P(B∣Y)P(B∣Y=1)=∑i=1nμj(i+1)∑i=1nμj(i+1)yj=P(C∣Y)P(C∣Y=1)=∑i=1n(1−μj(i+1))∑i=1n(1−μj(i+1))yj
- E步:计算模型在参数
θ
(
i
)
\theta^{(i)}
θ(i) 下观测数据
y
j
y_j
yj 来自掷硬币 B 的概率
μ
j
(
i
+
1
)
\mu_j^{(i+1)}
μj(i+1)
-
带入观测值计算
- 初值选 θ ( 0 ) = { 0.5 , 0.5 , 0.5 } \theta^{(0)} = \{0.5,0.5,0.5\} θ(0)={0.5,0.5,0.5} 时,EM方法解出的估计值为 θ ^ = { 0.5 , 0.6 , 0.6 } \hat{\theta} = \{0.5,0.6,0.6\} θ^={0.5,0.6,0.6}
- 初值选 θ ( 0 ) = { 0.4 , 0.6 , 0.7 } \theta^{(0)} = \{0.4,0.6,0.7\} θ(0)={0.4,0.6,0.7} 时,EM方法解出的估计值为 θ ^ = { 0.4064 , 0.5368 , 0.6432 } \hat{\theta} = \{0.4064,0.5368,0.6432\} θ^={0.4064,0.5368,0.6432}
可见,EM方法与初值的选择有关,选择不同初值可能得到不同的参数估计值
1.2 问题形式化
- 一般地,用
Y
Y
Y 表示观测变量的数据,用
Z
Z
Z 表示隐变量的数据,用
θ
\theta
θ 表示模型参数
完全数据
:模型中所有随机变量的数据, Y Y Y 和 Z Z Z 连在一起不完全数据
:观测数据 Y Y Y 又称不完全数据
- 当完全数据已知时,可以直接使用MLE估计或MAP估计
θ
\theta
θ;只知道不完全数据时,EM算法通过迭代最大化似然函数或后验概率。每次迭代分成两步
- E步:求Q函数(期望)
- M步:求Q函数(期望)极大
2. EM算法
2.1 EM算法流程
- 输入:观测变量数据 Y Y Y,隐变量数据 Z Z Z,联合分布 P ( Y , Z ∣ θ ) P(Y,Z|\theta) P(Y,Z∣θ),条件分布 P ( Z ∣ Y , θ ) P(Z|Y,\theta) P(Z∣Y,θ)
- 输出:模型参数 θ \theta θ
- 流程:
- 选择合适的初始参数 θ ( 0 ) \theta^{(0)} θ(0),开始迭代。初值可以任意选择,但需注意EM算法是对初值敏感的
- E步:记
θ
(
i
)
\theta^{(i)}
θ(i) 为第
i
i
i 轮迭代参数估计值,在第
i
+
1
i+1
i+1 次迭代的 E 步,计算
Q ( θ , θ ( i ) ) = E Z [ l o g P ( Y , Z ∣ θ ) ∣ Y , θ ( i ) ] = P ( Z ∣ Y , θ ( i ) ) l o g P ( Y , Z ∣ θ ) \begin{aligned} Q(\theta,\theta^{(i)}) &= \mathbb{E}_Z[logP(Y,Z|\theta) | Y,\theta^{(i)}] \\ &= P(Z|Y,\theta^{(i)}) logP(Y,Z|\theta) \end{aligned} Q(θ,θ(i))=EZ[logP(Y,Z∣θ)∣Y,θ(i)]=P(Z∣Y,θ(i))logP(Y,Z∣θ)
这里 P ( Z ∣ Y , θ ( i ) ) P(Z|Y,\theta^{(i)}) P(Z∣Y,θ(i)) 是给定观测数据 Y Y Y 和当前估参数估计值 θ ( i ) \theta^{(i)} θ(i) 下隐变量数据 Z Z Z 的条件概率分布 - M步:求使得
Q
(
θ
,
θ
(
i
)
)
Q(\theta,\theta^{(i)})
Q(θ,θ(i)) 最大化的
θ
\theta
θ,确定第
i
+
1
i+1
i+1 轮的参数估计值
θ
(
i
+
1
)
\theta^{(i+1)}
θ(i+1)
θ ( i + 1 ) = arg max θ Q ( θ , θ ( i ) ) \theta^{(i+1)} = \argmax_\theta Q(\theta,\theta^{(i)}) θ(i+1)=θargmaxQ(θ,θ(i)) - 重复第 2/3 步,直到收敛。收敛条件一般是:对于给定小量
ε
1
,
ε
2
\varepsilon_1,\varepsilon_2
ε1,ε2,满足下式则收敛,停止迭代
∣ θ ( i + 1 ) − θ ( i ) ∣ ∣ < ε 1 或 ∣ ∣ Q ( θ ( i + 1 ) , θ ( i ) ) − Q ( θ ( i ) , θ ( i ) ) ∣ ∣ < ε 1 |\theta^{(i+1)} - \theta^{(i)}|| < \varepsilon_1 \space\space或 \space\space ||Q(\theta^{(i+1)},\theta^{(i)}) - Q(\theta^{(i)},\theta^{(i)}) || < \varepsilon_1 \\ ∣θ(i+1)−θ(i)∣∣<ε1 或 ∣∣Q(θ(i+1),θ(i))−Q(θ(i),θ(i))∣∣<ε1
Q函数
:定义完全数据的对数似然函数 l o g P ( Y , Z ∣ θ ) logP(Y,Z|\theta) logP(Y,Z∣θ) 关于给定观测数据 Y Y Y 和当前估计参数 θ ( i ) \theta^{(i)} θ(i) 下对未观测数据 Z Z Z 的条件概率分布 P ( Z ∣ Y , θ ( i ) ) P(Z|Y,\theta^{(i)}) P(Z∣Y,θ(i)) 的期望为Q函数,即
Q ( θ , θ ( i ) ) = E Z [ l o g P ( Y , Z ∣ θ ) ∣ Y , θ ( i ) ] = E Z ∣ Y , θ ( i ) l o g P ( Y , Z ∣ θ ) = ∑ Z P ( Z ∣ Y , θ ( i ) ) l o g P ( Y , Z ∣ θ ) = ∑ j = 1 N ∑ Z P ( Z ∣ Y j , θ ( i ) ) l o g P ( Y j , Z ∣ θ ) \begin{aligned} Q(\theta,\theta^{(i)}) &= \mathbb{E}_Z[logP(Y,Z|\theta) | Y,\theta^{(i)}] \\ &= \mathbb{E}_{Z|Y,\theta^{(i)}}logP(Y,Z|\theta) \\ &=\sum_Z P(Z|Y,\theta^{(i)})logP(Y,Z|\theta) \\ &= \sum_{j=1}^N \sum_Z P(Z|Y_j,\theta^{(i)})logP(Y_j,Z|\theta) \end{aligned} Q(θ,θ(i))=EZ[logP(Y,Z∣θ)∣Y,θ(i)]=EZ∣Y,θ(i)logP(Y,Z∣θ)=Z∑P(Z∣Y,θ(i))logP(Y,Z∣θ)=j=1∑NZ∑P(Z∣Yj,θ(i))logP(Yj,Z∣θ)
EM 算法的每次迭代,实际是在求Q函数这个期望及其极大,这也是EM算法全程 “期望最大化”(Expection-Maximization)的由来
2.2 EM算法的推导
- EM算法目标:极大化参数 θ \theta θ 下观测数据 Y Y Y 的对数似然函数(或最大后验概率)
- 方法:利用Jensen不等式推出目标对数似然函数下界,迭代优化下界以优化目标,不保证全局最优
2.2.1 EM核心思想:迭代优化
- 在推导之前,有必要探讨一下为什么直接最大化似然函数没有解析解。先看极大化目标:参数
θ
\theta
θ 下观测数据
Y
Y
Y 的对数似然函数。即
L ( θ ) = l o g P ( Y ∣ θ ) = l o g ∑ Z P ( Y , Z ∣ θ ) = l o g ( ∑ Z P ( Y ∣ Z , θ ) P ( Z ∣ θ ) ) \begin{aligned} L(\theta) &= logP(Y|\theta) = log\sum_Z P(Y,Z|\theta) \\ &= log(\sum_ZP(Y|Z,\theta)P(Z|\theta)) \end{aligned} L(θ)=logP(Y∣θ)=logZ∑P(Y,Z∣θ)=log(Z∑P(Y∣Z,θ)P(Z∣θ))
回顾极大似然估计 MLE 的一般形式,假设可以观测到完全数据 X X X,对数似然函数为
L ( θ ) = l o g ∏ X P ( X ∣ θ ) = ∑ X l o g P ( X ∣ θ ) L(\theta) = log \prod_X P(X|\theta) = \sum_X log P(X|\theta) L(θ)=logX∏P(X∣θ)=X∑logP(X∣θ)
要得到 arg max θ L ( θ ) \argmax_\theta L(\theta) θargmaxL(θ) 的解析解,需要保证 L ( θ ) L(\theta) L(θ) 中只有 θ \theta θ 一个变量。在隐变量 z z z 不能观测时,优化目标中同时存在估计量 P ( Z ∣ θ ) P(Z|\theta) P(Z∣θ) 和 θ \theta θ 两个变量,直接算自然会得到无穷多解。 - 事实上,未观测数据
Z
Z
Z 和参数
θ
\theta
θ 是相互依赖的,估计一个需要借助另一个,更新一个的估计值会导致另一个的估计值也变化,这就导致了一个先有鸡还是先有蛋的问题。还是以三硬币模型为例,如果我们知道
Z
Z
Z,就能知道哪些观测结果来自硬币B,哪些来自硬币C,进而能分别使用极大似然估计法得到
p
,
q
p,q
p,q。在只有不完全数据
Y
Y
Y 时,为了区分观测结果的来源以估计
p
,
q
p,q
p,q,我们需要先估计每一个观测数据
Y
i
Y_i
Yi 对应的
Z
i
Z_i
Zi 取值(或取值的分布),这个估计又是依赖于
p
,
q
p,q
p,q 的,如图所示
对于这种含有两个未知变量的优化问题,可以使用迭代的方法。选取一个合适的初始值开始迭代,每轮迭代过程中,先固定一个变量优化另一个,再固定另一个变量估计优化这个,直到二者逐步收敛为止。EM 算法在此思想基础上更进一步,在估计未观测数据时,不止估计其值,而是估计其分布,进而把优化目标转换完全数据似然函数为对未观测数据分布的期望形式。此处推荐参考一篇文章:如何感性地理解EM算法? - 强化学习中 model-based 方法 policy-iteration 使用了这种分步迭代思想,不妨把它的示意图贴过来
policy-iteration 的迭代分为两个阶段,evaluation步骤对当前策略下的状态价值进行评估,improvement步骤利用策略价值贪心地优化策略。可以把每个流程看成二维空间中的一条线,代表对于其目标的解决方案。每个流程都把价值 V V V 或 策略 π \pi π 推向其中一条线,由于这两条线不是正交的,所以两个目标间会产生相互作用。evaluation步会导致策略逐渐偏离最优,improvement步会导致价值偏离新策略,直接冲向某个目标会导致某种程度上偏离另一个目标,然而整体流程的结果最终会更接近最优的总目标。EM算法中的E步可以类比为evaluation步骤,M步可以类比为improvement步骤。
2.2.2 EM推导
2.2.2.1 两个难点
- 极大化目标:参数
θ
\theta
θ 下观测数据
Y
Y
Y 的对数似然函数。即
L ( θ ) = l o g P ( Y ∣ θ ) = l o g ∑ Z P ( Y , Z ∣ θ ) = l o g ( ∑ Z P ( Y ∣ Z , θ ) P ( Z ∣ θ ) ) \begin{aligned} L(\theta) &= logP(Y|\theta) = log\sum_Z P(Y,Z|\theta) \\ &= log(\sum_ZP(Y|Z,\theta)P(Z|\theta)) \\ \end{aligned} L(θ)=logP(Y∣θ)=logZ∑P(Y,Z∣θ)=log(Z∑P(Y∣Z,θ)P(Z∣θ)) - 注意到
θ
^
=
arg max
θ
L
(
θ
)
\hat{\theta} = \argmax_\theta L(\theta)
θ^=θargmaxL(θ) 这一极大化的主要困难有两个
- 需要同时完成对 P ( Z ∣ θ ) P(Z|\theta) P(Z∣θ) 的估计和 θ \theta θ 的优化,但两个目标会相互影响
- 求和符号 ∑ \sum ∑ 在 l o g log log 里,没法进一步变形处理
2.2.2.2 解难点2:Jensen不等式
- 首先处理第二个难点,我们希望能把
∑
\sum
∑ 符号拿到
l
o
g
log
log 外面,这时就要用到 jensen 不等式,即
∑ i = 1 M λ i f ( x i ) ≥ f ( ∑ i = 1 M λ i x i ) \sum_{i=1}^M \lambda_if(x_i) \geq f(\sum_{i=1}^M\lambda_ix_i) i=1∑Mλif(xi)≥f(i=1∑Mλixi)
此式要求 f f f 是凸函数, λ i ≥ 0 \lambda_i\geq0 λi≥0 且 ∑ i = 1 M λ i = 1 \sum_{i=1}^M \lambda_i = 1 ∑i=1Mλi=1,当随机变量 X X X 是常数时等号成立。由于 l o g log log 是凹函数,所以需要应用 jensen 不等式的凹函数形式,即把 ≥ \geq ≥ 换成 ≤ \leq ≤。 - 为了应用 Jensen 不等式,还要拼凑一个
λ
\lambda
λ。注意到
l
o
g
log
log 里的和是关于隐变量
Z
Z
Z 的和,而
λ
\lambda
λ 需要满足
λ
i
≥
0
\lambda_i\geq0
λi≥0 且
∑
i
=
1
M
λ
i
=
1
\sum_{i=1}^M \lambda_i = 1
∑i=1Mλi=1,不妨设
λ
\lambda
λ 为隐变量
z
z
z 的分布函数
K
(
Z
∣
θ
)
K(Z|\theta)
K(Z∣θ),于是有
L ( θ ) = l o g P ( Y ∣ θ ) = l o g ( ∑ Z P ( Y , Z ∣ θ ) ) = l o g ( ∑ Z K ( Z ∣ θ ) P ( Y , Z ∣ θ ) K ( Z ∣ θ ) ) ≥ ∑ Z K ( Z ∣ θ ) l o g P ( Y , Z ∣ θ ) K ( Z ∣ θ ) \begin{aligned} L(\theta) &= logP(Y|\theta) \\ &=log(\sum_Z P(Y,Z|\theta)) \\ &= log(\sum_Z K(Z|\theta) \frac{P(Y,Z|\theta)}{K(Z|\theta)}) \\ &\geq \sum_Z K(Z|\theta)log\frac{P(Y,Z|\theta)}{K(Z|\theta)} \end{aligned} L(θ)=logP(Y∣θ)=log(Z∑P(Y,Z∣θ))=log(Z∑K(Z∣θ)K(Z∣θ)P(Y,Z∣θ))≥Z∑K(Z∣θ)logK(Z∣θ)P(Y,Z∣θ)
这样我们就找到了似然函数的下界形式,并成功把 ∑ \sum ∑ 拿到了 l o g log log 外边,接下来我们希望通过最大化下界来间接地最大化 L ( θ ) L(\theta) L(θ)。为了保证优化效果,我们要求 ∑ Z K ( Z ∣ θ ) l o g ( P ( Y , Z ∣ θ ) K ( Z ∣ θ ) ) \sum_Z K(Z|\theta)log(\frac{P(Y,Z|\theta)}{K(Z|\theta)}) ∑ZK(Z∣θ)log(K(Z∣θ)P(Y,Z∣θ)) 是一个紧的下界,也就是至少有一点使不等式中等号成立。因为如果这个下界特别小,离似然函数太远,优化它也没有什么用 - 现在来讨论
K
(
Z
∣
θ
)
K(Z|\theta)
K(Z∣θ) 的形式,为了得到紧下界,回头看 Jensen 不等式中使得等号成立的条件,需要满足
P ( Y , Z ∣ θ ) K ( Z ∣ θ ) = C \frac{P(Y,Z|\theta)}{K(Z|\theta)} = C K(Z∣θ)P(Y,Z∣θ)=C
因为 K ( Z ∣ θ ) K(Z|\theta) K(Z∣θ) 是 Z Z Z 的分布函数,有
∵ ∑ Z K ( Z ∣ θ ) = ∑ Z P ( Y , Z ∣ θ ) C = 1 ∴ C = ∑ Z P ( Y , Z ∣ θ ) = P ( Y ∣ θ ) ∴ K ( Z ∣ θ ) = P ( Y , Z ∣ θ ) C = P ( Y , Z ∣ θ ) P ( Y ∣ θ ) = P ( Z ∣ Y , θ ) \begin{aligned} &\because \sum_ZK(Z|\theta) = \sum_Z \frac{P(Y,Z|\theta)}{C} = 1 \\ &\therefore C = \sum_Z P(Y,Z|\theta) = P(Y|\theta) \\ &\therefore K(Z|\theta) = \frac{P(Y,Z|\theta)}{C} = \frac{P(Y,Z|\theta)}{P(Y|\theta)} = P(Z|Y,\theta) \end{aligned} ∵Z∑K(Z∣θ)=Z∑CP(Y,Z∣θ)=1∴C=Z∑P(Y,Z∣θ)=P(Y∣θ)∴K(Z∣θ)=CP(Y,Z∣θ)=P(Y∣θ)P(Y,Z∣θ)=P(Z∣Y,θ) - 这样我们就得到了紧下界的表示形式,由于始终满足等号成立条件
P
(
Y
,
Z
∣
θ
)
P
(
Z
∣
Y
,
θ
)
=
P
(
Y
∣
θ
)
≡
C
\frac{P(Y,Z|\theta)}{P(Z|Y,\theta)} = P(Y|\theta) \equiv C
P(Z∣Y,θ)P(Y,Z∣θ)=P(Y∣θ)≡C,因此不等号转换为恒等号,可以证明如下
∑ Z P ( Z ∣ Y , θ ) l o g P ( Y , Z ∣ θ ) P ( Z ∣ Y , θ ) = ∑ Z P ( Z ∣ Y , θ ) l o g P ( Y ∣ θ ) = l o g P ( Y ∣ θ ) = L ( θ ) \begin{aligned} \sum_Z P(Z|Y,\theta)log\frac{P(Y,Z|\theta)}{P(Z|Y,\theta)} &= \sum_Z P(Z|Y,\theta)logP(Y|\theta) \\ &= logP(Y|\theta) \\ &= L(\theta) \end{aligned} Z∑P(Z∣Y,θ)logP(Z∣Y,θ)P(Y,Z∣θ)=Z∑P(Z∣Y,θ)logP(Y∣θ)=logP(Y∣θ)=L(θ)
2.2.2.3 解难点1:分步迭代
-
难点1的本质就是没法同时估计 P ( Z ∣ Y , θ ) P(Z|Y,\theta) P(Z∣Y,θ) 和优化 θ \theta θ ,我们上面的一堆分析并没有解决这个问题。牢记 2.2.1 节的分析,解决这种问题可以使用分步迭代法,每轮迭代先控制一个变量优化另一个变量,再控制另一个变量优化这个变量。具体到EM算法中,第 i i i 轮迭代分两步
- 控制 θ \theta θ 估计 Z Z Z:固定模型参数 θ ( i ) \theta^{(i)} θ(i),估计 Z Z Z 条件概率分布 P ( Z ∣ Y , θ ( i ) ) P(Z|Y,\theta^{(i)}) P(Z∣Y,θ(i))
- 控制
Z
Z
Z 优化
θ
\theta
θ:利用估计的
P
(
Z
∣
Y
,
θ
(
i
)
)
P(Z|Y,\theta^{(i)})
P(Z∣Y,θ(i)) 重新构造紧下界函数,最大化紧下界函数得到新的参数值
θ
(
i
+
1
)
\theta^{(i+1)}
θ(i+1)。由于
P ( Y , Z ∣ θ ) P ( Z ∣ Y , θ ( i ) ) 不 恒 等 于 C \frac{P(Y,Z|\theta)}{P(Z|Y,\theta^{(i)})} 不恒等于 C P(Z∣Y,θ(i))P(Y,Z∣θ)不恒等于C
此时等号恒成立条件不再满足,还原到不等号
L ( θ ) = l o g ( ∑ Z P ( Y , Z ∣ θ ) ) ≥ ∑ Z P ( Z ∣ Y , θ ( i ) ) l o g P ( Y , Z ∣ θ ) P ( Z ∣ Y , θ ( i ) ) L(\theta) =log(\sum_ZP(Y,Z|\theta)) \geq \sum_Z P(Z|Y,\theta^{(i)}) log\frac{P(Y,Z|\theta)}{P(Z|Y,\theta^{(i)})} L(θ)=log(Z∑P(Y,Z∣θ))≥Z∑P(Z∣Y,θ(i))logP(Z∣Y,θ(i))P(Y,Z∣θ)
不妨设紧下界为 l ( θ , θ ( i ) ) l(\theta,\theta^{(i)}) l(θ,θ(i)),即
l ( θ , θ ( i ) ) = ∑ Z P ( Z ∣ Y , θ ( i ) ) l o g P ( Y , Z ∣ θ ) P ( Z ∣ Y , θ ( i ) ) L ( θ ) ≥ l ( θ , θ ( i ) ) l(\theta,\theta^{(i)}) = \sum_Z P(Z|Y,\theta^{(i)}) log\frac{P(Y,Z|\theta)}{P(Z|Y,\theta^{(i)})} \\ L(\theta) \geq l(\theta,\theta^{(i)}) l(θ,θ(i))=Z∑P(Z∣Y,θ(i))logP(Z∣Y,θ(i))P(Y,Z∣θ)L(θ)≥l(θ,θ(i))
注意到当 θ = θ ( i ) \theta = \theta^{(i)} θ=θ(i) 时, L ( θ ( i ) ) = l ( θ ( i ) , θ ( i ) ) L(\theta^{(i)}) =l(\theta^{(i)},\theta^{(i)}) L(θ(i))=l(θ(i),θ(i)) 等号成立
如图所示,求 θ ( i + 1 ) = arg max θ l ( θ , θ ( i ) ) \theta^{(i+1)} = \argmax_\theta l(\theta,\theta^{(i)}) θ(i+1)=θargmaxl(θ,θ(i)) ,就可以通过增大紧下界间接地增大 L ( θ ) L(\theta) L(θ)
-
忽略掉对 l ( θ , θ ( i ) ) l(\theta,\theta^{(i)}) l(θ,θ(i)) 中对极大化而言无关的项,得到 Q函数如下
Q ( θ , θ ( i ) ) = ∑ Z P ( Z ∣ Y , θ ( i ) ) l o g P ( Y , Z ∣ θ ) = E Z ∣ Y , θ ( i ) l o g P ( Y , Z ∣ θ ) \begin{aligned} Q(\theta,\theta^{(i)}) &= \sum_Z P(Z|Y,\theta^{(i)}) logP(Y,Z|\theta) \\ &= \mathbb{E}_{Z|Y,\theta^{(i)}}logP(Y,Z|\theta) \end{aligned} Q(θ,θ(i))=Z∑P(Z∣Y,θ(i))logP(Y,Z∣θ)=EZ∣Y,θ(i)logP(Y,Z∣θ) -
大功告成!至此我们已经对EM算法流程有了清晰的理解,并完整地推导了EM的核心函数 Q Q Q。不妨比较一下 Q Q Q 函数和原始的优化目标 L ( θ ) L(\theta) L(θ)
Q ( θ , θ ( i ) ) = ∑ Z P ( Z ∣ Y , θ ( i ) ) l o g P ( Y , Z ∣ θ ) = E Z ∣ Y , θ ( i ) l o g ( P ( Y ∣ Z , θ ) P ( Z ∣ θ ) ) = E Z ∣ Y , θ ( i ) l o g P ( Y , Z ∣ θ ) L ( θ ) = l o g ( ∑ Z P ( Y , Z ∣ θ ) ) = l o g ( ∑ Z P ( Y ∣ Z , θ ) P ( Z ∣ θ ) ) = l o g ( E Z ∣ θ P ( Y ∣ Z , θ ) ) \begin{aligned} Q(\theta,\theta^{(i)}) &= \sum_Z P(Z|Y,\theta^{(i)}) logP(Y,Z|\theta) \\ &= \mathbb{E}_{Z|Y,\theta^{(i)}}log(P(Y|Z,\theta)P(Z|\theta)) \\ &= \mathbb{E}_{Z|Y,\theta^{(i)}}logP(Y,Z|\theta) \\ L(\theta) &= log(\sum_ZP(Y,Z|\theta)) \\ &= log(\sum_ZP(Y|Z,\theta)P(Z|\theta))\\ &= log(\mathbb{E}_{Z|\theta}P(Y|Z,\theta)) \end{aligned} Q(θ,θ(i))L(θ)=Z∑P(Z∣Y,θ(i))logP(Y,Z∣θ)=EZ∣Y,θ(i)log(P(Y∣Z,θ)P(Z∣θ))=EZ∣Y,θ(i)logP(Y,Z∣θ)=log(Z∑P(Y,Z∣θ))=log(Z∑P(Y∣Z,θ)P(Z∣θ))=log(EZ∣θP(Y∣Z,θ))
主要的变化有两个- 使用 Jensen 不等式把 ∑ \sum ∑ 拿到 l o g log log 外边
- 引入后验概率 P ( Z ∣ Y , θ ( i ) ) P(Z|Y,\theta^{(i)}) P(Z∣Y,θ(i)),使迭代求解成为可能。 这里可能会有疑惑, Q ( θ , θ ( i ) ) Q(\theta,\theta^{(i)}) Q(θ,θ(i)) 里有个 P ( Y , Z ∣ θ ) = P ( Y ∣ Z , θ ) P ( Z ∣ θ ) P(Y,Z|\theta) = P(Y|Z,\theta)P(Z|\theta) P(Y,Z∣θ)=P(Y∣Z,θ)P(Z∣θ),这不还是要用 θ \theta θ 估计未观测数据分布 P ( Z ∣ θ ) P(Z|\theta) P(Z∣θ) 吗。我个人理解是:式子中存在 P ( Z ∣ θ ) P(Z|\theta) P(Z∣θ) 不是关键,关键要看优化目标是关于什么的期望,或者说优化目标这个随机变量服从的分布是什么。
2.3 EM算法的收敛性
- EM算法提供了一种近似计算含有隐变量概率模型的极大似然估计的方法。其最大优点是简单性和普适性。
- EM算法得到的估计序列是否收敛,如果收敛,是否收敛到全局最大值或局部最大值?下面给出关于EM算法收敛性的两个定理。证明见《统计学习方法(第二版)》第九章
2.3.1 定理1
- 设
P
(
Y
∣
θ
)
P(Y|\theta)
P(Y∣θ) 为观测数据的似然函数,
θ
(
i
)
(
i
=
1
,
2
,
.
.
.
)
\theta^{(i)}(i=1,2,...)
θ(i)(i=1,2,...) 为EM算法得到的参数估计序列,
P
(
Y
∣
θ
(
i
)
)
(
i
=
1
,
2
,
.
.
.
)
P(Y|\theta^{(i)})(i=1,2,...)
P(Y∣θ(i))(i=1,2,...) 为对应的似然函数序列,则
P
(
Y
∣
θ
(
i
)
)
P(Y|\theta^{(i)})
P(Y∣θ(i)) 是单调递增的,即
P ( Y ∣ θ ( i + 1 ) ) ≥ P ( Y ∣ θ ( i ) ) P(Y|\theta^{(i+1)}) \geq P(Y|\theta^{(i)}) P(Y∣θ(i+1))≥P(Y∣θ(i))
2.3.2 定理2
-
设 P ( Y ∣ θ ) P(Y|\theta) P(Y∣θ) 为观测数据的似然函数, θ ( i ) ( i = 1 , 2 , . . . ) \theta^{(i)}(i=1,2,...) θ(i)(i=1,2,...) 为EM算法得到的参数估计序列, P ( Y ∣ θ ( i ) ) ( i = 1 , 2 , . . . ) P(Y|\theta^{(i)})(i=1,2,...) P(Y∣θ(i))(i=1,2,...) 为对应的似然函数序列, L ( θ ( i ) ) L(\theta^{(i)}) L(θ(i)) 为对应的对数似然函数序列,则
- 如果 P ( Y ∣ θ ) P(Y|\theta) P(Y∣θ) 有上界,则 L ( θ ( i ) ) = l o g P ( Y ∣ θ ( i ) ) L(\theta^{(i)}) = logP(Y|\theta^{(i)}) L(θ(i))=logP(Y∣θ(i)) 收敛到某一值 L ∗ L^* L∗
- 在函数 Q ( θ , θ ′ ) Q(\theta,\theta') Q(θ,θ′) 与 L ( θ ) L(\theta) L(θ) 满足一定条件下(大多数情况下都满足),由 EM 算法得到的参数估计序列 θ ( i ) \theta^{(i)} θ(i) 的收敛值 θ ∗ \theta^* θ∗ 是 L ( θ ) L(\theta) L(θ) 的稳定点。
-
参考文献:Wu C . On the Convergence Properties of the EM Algorithm[J]. Annals of Statistics, 1983, 11(1):95-103.
2.3.3 小结
- EM算法的收敛性包含两层意思,前者不蕴含后者
- 对数似然函数 L ( θ ( i ) ) L(\theta^{(i)}) L(θ(i)) 的收敛性
- 参数估计序列 θ ( i ) \theta^{(i)} θ(i) 的收敛性
- 定理仅保证参数估计序列 θ ( i ) \theta^{(i)} θ(i) 收敛到对数似然函数序列 L ( θ ( i ) ) L(\theta^{(i)}) L(θ(i)) 的稳定点(就是驻点,导数为0的点),不能保证收敛到极大值点。如果 L ( θ ( i ) ) L(\theta^{(i)}) L(θ(i)) 是凹的,则EM算法可以保证收敛到全局极大值,这点和梯度下降法这样的迭代算法相同。
- 在应用中,初值的选择变得非常重要,常用的办法是选取几个不同的初值进行迭代,对各个初始值加以比较,从中选择最好的。
3. 用EM算法解三硬币问题
-
了解EM算法原理之后,回看 1.1节 最后的三硬币问题求解过程,分析M步和E步的计算
-
把三硬币问题的 “观测数据” 和 “未观测数据” 分别表示为来自总体 y y y 和 z z z 的容量为 n n n 的简单随机样本 y = { y 1 , y 2 , . . . , y n } T , z = { z 1 , z 2 , . . . , z n } T y = \{y_1,y_2,...,y_n\}^T,z = \{z_1,z_2,...,z_n\}^T y={y1,y2,...,yn}T,z={z1,z2,...,zn}T ,观测值和未观测值分别为 Y = { Y 1 , Y 2 , . . . , Y n } T , Z = { Z 1 , Z 2 , . . . , Z n } T Y = \{Y_1,Y_2,...,Y_n\}^T,Z = \{Z_1,Z_2,...,Z_n\}^T Y={Y1,Y2,...,Yn}T,Z={Z1,Z2,...,Zn}T,考虑求模型参数 θ \theta θ
-
注意: y i , Y i y_i,Y_i yi,Yi 和 z i , Z i z_i,Z_i zi,Zi 都是随机变量及其观测值的关系,式子中大部分时候等价。下面这部分规范一下符号,约定
- 在带入观测值前(计算Q函数前),概率相关计算一律使用 y i , z i y_i,z_i yi,zi;带入观测值后(计算Q函数时)一律使用 Y i , Z i Y_i,Z_i Yi,Zi
- 求和符号 ∑ j = 1 N \sum_{j=1}^N ∑j=1N 是对每个随机变量 y j y_j yj的取值或观测值 Y j Y_j Yj求和; ∑ z \sum_z ∑z 是对隐变量的可能取值(0或1)求和
第1、2节符号可能有不规范的,都按这个理解
3.1 E步
- 先求
P
(
z
∣
y
j
,
θ
(
i
)
)
P(z|y_j,\theta^{(i)})
P(z∣yj,θ(i))
P ( z ∣ y j , θ ( i ) ) = { μ j ( 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 , i f z = 1 1 − μ j ( i + 1 ) , i f z = 0 P(z|y_j,\theta^{(i)}) = \left\{ \begin{aligned} &\mu_j^{(i+1)} = \frac{\pi^{(i)}(p^{(i)})^{y_j}(1-p^{(i)})^{1-y_j}}{\pi^{(i)}(p^{(i)})^{y_j}(1-p^{(i)})^{1-y_j} + (1-\pi^{(i)})(q^{(i)})^{y_j}(1-q^{(i)})^{1-y_j}} & ,if \space z = 1\\ &1-\mu_j^{(i+1)} &,if \space z=0 \end{aligned} \right. P(z∣yj,θ(i))=⎩⎪⎨⎪⎧μj(i+1)=π(i)(p(i))yj(1−p(i))1−yj+(1−π(i))(q(i))yj(1−q(i))1−yjπ(i)(p(i))yj(1−p(i))1−yj1−μj(i+1),if z=1,if z=0 - 再求
P
(
z
,
y
j
∣
θ
)
=
P
(
y
j
∣
z
,
θ
)
P
(
z
∣
θ
)
P(z,y_j|\theta) = P(y_j|z,\theta)P(z|\theta)
P(z,yj∣θ)=P(yj∣z,θ)P(z∣θ)
P ( z , y j ∣ θ ) = { π 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(z,y_j|\theta) = \left\{ \begin{aligned} &\pi p^{y_j} (1-p)^{1-y_j} & ,if \space z = 1 \\ &(1-\pi) q^{y_j} (1-q)^{1-y_j} & ,if \space z = 0 \end{aligned} \right. P(z,yj∣θ)={πpyj(1−p)1−yj(1−π)qyj(1−q)1−yj,if z=1,if z=0
3.1.1 公式法直接计算 Q 函数
- 直接带入公式计算
Q
(
θ
,
θ
(
i
)
)
Q(\theta,\theta^{(i)})
Q(θ,θ(i))
Q ( θ , θ ( i ) ) = E Z ∣ Y , θ ( i ) l o g P ( Y , Z ∣ θ ) = ∑ j = 1 N E Z ∣ Y j , θ ( i ) l o g P ( Y j , Z ∣ θ ) = ∑ j = 1 N { ∑ Z P ( Z ∣ Y j , θ ( i ) ) l o g P ( Y j , Z ∣ θ ) } = ∑ j = 1 N { P ( Z = 1 ∣ Y j , θ ( i ) ) l o g ( Y j , Z = 1 ∣ θ ) + P ( Z = 0 ∣ Y j , θ ( i ) ) l o g ( Y j , Z = 0 ∣ θ ) } = ∑ j = 1 N { μ j ( i + 1 ) l o g [ π p Y j ( 1 − p ) 1 − Y j ] + ( 1 − μ j ( i + 1 ) ) l o g [ ( 1 − π ) q Y j ( 1 − q ) 1 − Y j ] } \begin{aligned} Q(\theta,\theta^{(i)}) &= \mathbb{E}_{Z|Y,\theta^{(i)}}logP(Y,Z|\theta) \\ &= \sum_{j=1}^N \mathbb{E}_{Z|Y_j,\theta^{(i)}}logP(Y_j,Z|\theta) \\ &= \sum_{j=1}^N\{\sum_ZP(Z|Y_j,\theta^{(i)})logP(Y_j,Z|\theta)\} \\ &= \sum_{j=1}^N\{P(Z=1|Y_j,\theta^{(i)})log(Y_j,Z=1|\theta) + P(Z=0|Y_j,\theta^{(i)})log(Y_j,Z=0|\theta)\} \\ &= \sum_{j=1}^N\{\mu_j^{(i+1)}log[\pi p^{Y_j} (1-p)^{1-Y_j}] + (1-\mu_j^{(i+1)})log[(1-\pi) q^{Y_j} (1-q)^{1-Y_j}]\} \end{aligned} Q(θ,θ(i))=EZ∣Y,θ(i)logP(Y,Z∣θ)=j=1∑NEZ∣Yj,θ(i)logP(Yj,Z∣θ)=j=1∑N{Z∑P(Z∣Yj,θ(i))logP(Yj,Z∣θ)}=j=1∑N{P(Z=1∣Yj,θ(i))log(Yj,Z=1∣θ)+P(Z=0∣Yj,θ(i))log(Yj,Z=0∣θ)}=j=1∑N{μj(i+1)log[πpYj(1−p)1−Yj]+(1−μj(i+1))log[(1−π)qYj(1−q)1−Yj]}
3.1.2 从期望角度计算 Q 函数
- 从期望角度计算
∵ 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 ∴ l o g P ( y j , z ∣ θ ) = { l o g [ π p y j ( 1 − p ) 1 − y j ] , i f z = 1 l o g [ ( 1 − π ) q y j ( 1 − q ) 1 − y j ] , i f z = 0 ∴ E z ∣ y i , θ ( i ) l o g P ( y j , z ∣ θ ) = { E z = 1 ∣ y i , θ ( i ) l o g P ( y j , z ∣ θ ) , i f z = 1 E z = 0 ∣ y i , θ ( i ) l o g P ( y j , z ∣ θ ) , i f z = 0 = { P ( z = 1 ∣ y i , θ ( i ) ) l o g [ π p y j ( 1 − p ) 1 − y j ] , i f z = 1 P ( z = 0 ∣ y i , θ ( i ) ) l o g [ ( 1 − π ) q y j ( 1 − q ) 1 − y j ] , i f z = 0 = { μ j ( i + 1 ) l o g [ π p y j ( 1 − p ) 1 − y j ] , i f z = 1 ( 1 − μ j ( i + 1 ) ) l o g [ ( 1 − π ) q y j ( 1 − q ) 1 − y j ] , i f z = 0 ∴ Q ( θ , θ ( i ) ) = E Z ∣ Y , θ ( i ) l o g P ( Y , Z ∣ θ ) = ∑ j = 1 N { E Z = 0 ∣ Y j , θ ( i ) l o g P ( Y j , Z ∣ θ ) + E Z = 1 ∣ Y j , θ ( i ) l o g P ( Y j , Z ∣ θ ) } = ∑ j = 1 N { μ j ( i + 1 ) l o g [ π p Y j ( 1 − p ) 1 − Y j ] + ( 1 − μ j ( i + 1 ) ) l o g [ ( 1 − π ) q Y j ( 1 − q ) 1 − Y j ] } \begin{aligned} \because P(y_j,z|\theta) &= \left\{ \begin{aligned} &\pi p^{y_j} (1-p)^{1-y_j} & ,if \space z= 1 \\ &(1-\pi) q^{y_j} (1-q)^{1-y_j} & ,if \space z= 0 \end{aligned} \right. \\ \therefore logP(y_j,z|\theta) &= \left\{ \begin{aligned} &log[\pi p^{y_j} (1-p)^{1-y_j}] & ,if \space z= 1 \\ &log[(1-\pi) q^{y_j} (1-q)^{1-y_j}] & ,if \space z= 0 \end{aligned} \right. \\ \therefore \mathbb{E}_{z|y_i,\theta^{(i)}}logP(y_j,z|\theta) &= \left\{ \begin{aligned} & \mathbb{E}_{z=1|y_i,\theta^{(i)}}logP(y_j,z|\theta) & ,if \space z= 1 \\ & \mathbb{E}_{z=0|y_i,\theta^{(i)}}logP(y_j,z|\theta) & ,if \space z= 0 \end{aligned} \right. \\ &= \left\{ \begin{aligned} & P(z=1|y_i,\theta^{(i)}) log[\pi p^{y_j} (1-p)^{1-y_j}] & ,if \space z= 1 \\ & P(z=0|y_i,\theta^{(i)}) log[(1-\pi) q^{y_j} (1-q)^{1-y_j}] & ,if \space z= 0 \end{aligned} \right. \\ &= \left\{ \begin{aligned} & \mu_j^{(i+1)} log[\pi p^{y_j} (1-p)^{1-y_j}] & ,if \space z= 1 \\ & (1-\mu_j^{(i+1)}) log[(1-\pi) q^{y_j} (1-q)^{1-y_j}] & ,if \space z= 0 \end{aligned} \right. \\ \therefore Q(\theta,\theta^{(i)}) &= \mathbb{E}_{Z|Y,\theta^{(i)}}logP(Y,Z|\theta) \\ &= \sum_{j=1}^N\{\mathbb{E}_{Z=0|Y_j,\theta^{(i)}}logP(Y_j,Z|\theta)+ \mathbb{E}_{Z=1|Y_j,\theta^{(i)}}logP(Y_j,Z|\theta)\}\\ &= \sum_{j=1}^N\{\mu_j^{(i+1)}log[\pi p^{Y_j} (1-p)^{1-Y_j}] + (1-\mu_j^{(i+1)})log[(1-\pi) q^{Y_j} (1-q)^{1-Y_j}]\} \end{aligned} ∵P(yj,z∣θ)∴logP(yj,z∣θ)∴Ez∣yi,θ(i)logP(yj,z∣θ)∴Q(θ,θ(i))={πpyj(1−p)1−yj(1−π)qyj(1−q)1−yj,if z=1,if z=0={log[πpyj(1−p)1−yj]log[(1−π)qyj(1−q)1−yj],if z=1,if z=0={Ez=1∣yi,θ(i)logP(yj,z∣θ)Ez=0∣yi,θ(i)logP(yj,z∣θ),if z=1,if z=0={P(z=1∣yi,θ(i))log[πpyj(1−p)1−yj]P(z=0∣yi,θ(i))log[(1−π)qyj(1−q)1−yj],if z=1,if z=0=⎩⎨⎧μj(i+1)log[πpyj(1−p)1−yj](1−μj(i+1))log[(1−π)qyj(1−q)1−yj],if z=1,if z=0=EZ∣Y,θ(i)logP(Y,Z∣θ)=j=1∑N{EZ=0∣Yj,θ(i)logP(Yj,Z∣θ)+EZ=1∣Yj,θ(i)logP(Yj,Z∣θ)}=j=1∑N{μj(i+1)log[πpYj(1−p)1−Yj]+(1−μj(i+1))log[(1−π)qYj(1−q)1−Yj]}
3.2 M步
- 对
Q
(
θ
,
θ
(
i
)
)
Q(\theta,\theta^{(i)})
Q(θ,θ(i)) 求偏导
∂ Q ( θ , θ ( i ) ) ∂ π = ∑ j = 1 N { μ j ( i + 1 ) p Y j ( 1 − p ) 1 − Y j π p Y j ( 1 − p ) 1 − Y j + ( 1 − μ j ( i + 1 ) ) − q Y j ( 1 − q ) 1 − Y j ( 1 − π ) q Y j ( 1 − q ) 1 − Y j } = ∑ j = 1 N { μ j ( i + 1 ) − π π ( 1 − π ) } = ( ∑ j = 1 N μ j ( i + 1 ) ) − N π π ( 1 − π ) ∂ Q ( θ , θ ( i ) ) ∂ p = ∑ j = 1 N { μ j ( i + 1 ) π p Y j − 1 ( 1 − p ) − Y j ( Y j − p ) π p Y j ( 1 − p ) 1 − Y j } = ∑ j = 1 N { μ j ( i + 1 ) ( Y j − p ) p ( 1 − p ) } = ( ∑ j = 1 N μ j ( i + 1 ) Y j ) − ( p ∑ j = 1 N μ j ( i + 1 ) ) p ( 1 − p ) \begin{aligned} \frac{\partial Q(\theta,\theta^{(i)})}{\partial \pi} &= \sum_{j=1}^N\{\mu_j^{(i+1)}\frac{p^{Y_j}(1-p)^{1-Y_j} }{\pi p^{Y_j}(1-p)^{1-Y_j}} + (1-\mu_j^{(i+1)}) \frac{-q^{Y_j}(1-q)^{1-Y_j}}{(1-\pi)q^{Y_j}(1-q)^{1-Y_j}}\} \\ &= \sum_{j=1}^N\{\frac{\mu_j^{(i+1)}-\pi}{\pi(1-\pi)}\} \\ &=\frac{(\sum_{j=1}^N\mu_j^{(i+1)})-N\pi}{\pi(1-\pi)}\\ \frac{\partial Q(\theta,\theta^{(i)})}{\partial p} &= \sum_{j=1}^N\{\mu_j^{(i+1)}\frac{\pi p^{Y_j-1}(1-p)^{-Y_j}(Y_j-p) }{\pi p^{Y_j}(1-p)^{1-Y_j}}\} \\ &= \sum_{j=1}^N\{\frac{\mu_j^{(i+1)}(Y_j-p)}{p(1-p)}\} \\ &=\frac{(\sum_{j=1}^N\mu_j^{(i+1)}Y_j)-(p\sum_{j=1}^N\mu_j^{(i+1)})}{p(1-p)}\\ \end{aligned} ∂π∂Q(θ,θ(i))∂p∂Q(θ,θ(i))=j=1∑N{μj(i+1)πpYj(1−p)1−YjpYj(1−p)1−Yj+(1−μj(i+1))(1−π)qYj(1−q)1−Yj−qYj(1−q)1−Yj}=j=1∑N{π(1−π)μj(i+1)−π}=π(1−π)(∑j=1Nμj(i+1))−Nπ=j=1∑N{μj(i+1)πpYj(1−p)1−YjπpYj−1(1−p)−Yj(Yj−p)}=j=1∑N{p(1−p)μj(i+1)(Yj−p)}=p(1−p)(∑j=1Nμj(i+1)Yj)−(p∑j=1Nμj(i+1)) - 令偏导为 0 解
θ
(
i
+
1
)
\theta^{(i+1)}
θ(i+1)
∂ Q ( θ , θ ( i ) ) ∂ π = 令 0 ⇒ π ( i + 1 ) = 1 n ∑ i = 1 n μ j ( i + 1 ) ∂ Q ( θ , θ ( i ) ) ∂ p = 令 0 ⇒ { p ( i + 1 ) = ∑ i = 1 n μ j ( i + 1 ) Y j ∑ i = 1 n μ j ( i + 1 ) q ( i + 1 ) = ∑ i = 1 n ( 1 − μ j ( i + 1 ) ) Y j ∑ i = 1 n ( 1 − μ j ( i + 1 ) ) ( 对 称 性 ) \begin{aligned} &\frac{\partial Q(\theta,\theta^{(i)})}{\partial \pi} \stackrel{令}{=}0 \Rightarrow \pi^{(i+1)} = \frac{1}{n} \sum_{i=1}^n \mu_j^{(i+1)} \\ &\frac{\partial Q(\theta,\theta^{(i)})}{\partial p}\stackrel{令}{=}0 \Rightarrow \left\{ \begin{aligned} &p^{(i+1)} = \frac{\sum_{i=1}^n \mu_j^{(i+1)}Y_j}{\sum_{i=1}^n \mu_j^{(i+1)}} \\ &q^{(i+1)} = \frac{\sum_{i=1}^n (1-\mu_j^{(i+1)})Y_j}{\sum_{i=1}^n (1-\mu_j^{(i+1)})} (对称性) \end{aligned} \right. \end{aligned} ∂π∂Q(θ,θ(i))=令0⇒π(i+1)=n1i=1∑nμj(i+1)∂p∂Q(θ,θ(i))=令0⇒⎩⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎧p(i+1)=∑i=1nμj(i+1)∑i=1nμj(i+1)Yjq(i+1)=∑i=1n(1−μj(i+1))∑i=1n(1−μj(i+1))Yj(对称性)
3.3 对比
- 对比 EM 和直接最大似然估计的优化目标
Q ( θ , θ ( i ) ) = ∑ j = 1 N { μ j ( i + 1 ) l o g [ π p Y j ( 1 − p ) 1 − Y j ] + ( 1 − μ j ( i + 1 ) ) l o g [ ( 1 − π ) q Y j ( 1 − q ) 1 − Y j ] } l o g P ( Y ∣ θ ) = ∑ j = 1 N l o g [ π p Y j ( 1 − p ) 1 − Y j + ( 1 − π ) q Y j ( 1 − q ) 1 − Y j ] \begin{aligned} &Q(\theta,\theta^{(i)}) = \sum_{j=1}^N\{\mu_j^{(i+1)}log[\pi p^{Y_j} (1-p)^{1-Y_j}] + (1-\mu_j^{(i+1)})log[(1-\pi) q^{Y_j} (1-q)^{1-Y_j}]\} \\ &logP(Y|\theta) = \sum_{j=1}^Nlog[\pi p^{Y_j}(1-p)^{1-Y_j} + (1-\pi)q^{Y_j}(1-q)^{1-Y_j}]\\ \end{aligned} Q(θ,θ(i))=j=1∑N{μj(i+1)log[πpYj(1−p)1−Yj]+(1−μj(i+1))log[(1−π)qYj(1−q)1−Yj]}logP(Y∣θ)=j=1∑Nlog[πpYj(1−p)1−Yj+(1−π)qYj(1−q)1−Yj] - 对比 EM 和直接最大似然估计的偏导数方程组(因为最后要令等于0,重点对比分子即可)
{ ∂ Q ( θ , θ ( i ) ) ∂ π = ∑ j = 1 N { μ j ( i + 1 ) p Y j ( 1 − p ) 1 − Y j π p Y j ( 1 − p ) 1 − Y j + ( 1 − μ j ( i + 1 ) ) − q Y j ( 1 − q ) 1 − Y j ( 1 − π ) q Y j ( 1 − q ) 1 − Y j } ∂ Q ( θ , θ ( i ) ) ∂ p = ∑ j = 1 N { μ j ( i + 1 ) π p Y j − 1 ( 1 − p ) − Y j ( Y j − p ) π p Y j ( 1 − p ) 1 − Y j } { ∂ l o g P ( Y ∣ θ ) ∂ π = ∑ j = 1 n p Y j ( 1 − p ) 1 − Y j − q Y j ( 1 − q ) 1 − Y j π p Y j ( 1 − p ) 1 − Y j + ( 1 − π ) q Y j ( 1 − q ) 1 − Y j ∂ l o g P ( Y ∣ θ ) ∂ p = ∑ j = 1 n π p Y j − 1 ( 1 − p ) − Y j ( Y j − p ) π p Y j ( 1 − p ) 1 − Y j + ( 1 − π ) q Y j ( 1 − q ) 1 − Y j \begin{aligned} &\left\{ \begin{aligned} &\frac{\partial Q(\theta,\theta^{(i)})}{\partial \pi} = \sum_{j=1}^N\{\mu_j^{(i+1)}\frac{p^{Y_j}(1-p)^{1-Y_j} }{\pi p^{Y_j}(1-p)^{1-Y_j}} + (1-\mu_j^{(i+1)}) \frac{-q^{Y_j}(1-q)^{1-Y_j}}{(1-\pi)q^{Y_j}(1-q)^{1-Y_j}}\} \\ &\frac{\partial Q(\theta,\theta^{(i)})}{\partial p} = \sum_{j=1}^N\{\mu_j^{(i+1)}\frac{\pi p^{Y_j-1}(1-p)^{-Y_j}(Y_j-p) }{\pi p^{Y_j}(1-p)^{1-Y_j}}\} \end{aligned} \right.\\ &\left\{ \begin{aligned} \frac{\partial logP(Y|\theta)}{\partial \pi} & = \sum_{j=1}^n \frac{p^{Y_j}(1-p)^{1-Y_j}-q^{Y_j}(1-q)^{1-Y_j}}{\pi p^{Y_j}(1-p)^{1-Y_j} + (1-\pi)q^{Y_j}(1-q)^{1-Y_j}}\\ \frac{\partial logP(Y|\theta)}{\partial p} & = \sum_{j=1}^n \frac{\pi p^{Y_j-1}(1-p)^{-Y_j}(Y_j-p)}{\pi p^{Y_j}(1-p)^{1-Y_j} + (1-\pi)q^{Y_j}(1-q)^{1-Y_j}} \end{aligned} \right. \end{aligned} ⎩⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎧∂π∂Q(θ,θ(i))=j=1∑N{μj(i+1)πpYj(1−p)1−YjpYj(1−p)1−Yj+(1−μj(i+1))(1−π)qYj(1−q)1−Yj−qYj(1−q)1−Yj}∂p∂Q(θ,θ(i))=j=1∑N{μj(i+1)πpYj(1−p)1−YjπpYj−1(1−p)−Yj(Yj−p)}⎩⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎧∂π∂logP(Y∣θ)∂p∂logP(Y∣θ)=j=1∑nπpYj(1−p)1−Yj+(1−π)qYj(1−q)1−YjpYj(1−p)1−Yj−qYj(1−q)1−Yj=j=1∑nπpYj(1−p)1−Yj+(1−π)qYj(1−q)1−YjπpYj−1(1−p)−Yj(Yj−p)
3.4 代码
-
最后给出三硬币问题的代码。网上搜到的基本都是同一份代码的复制粘贴,其实那份代码是适用于 jupyter notebook 那种交互式环境的,用了比较少见的
yield
关键字,可读性也比较差 -
我按照 1.1.2 节给出的流程重新写了一遍,如下
import numpy as np import math class EM: def __init__(self, theta, y): self.theta = theta self.y = y self.mu = [0]*len(y) print('init pi={:.3f}; p={:.3f}; q={:.3f}'.format(theta[0],theta[1],theta[2])) # E_step def EStep(self): for j in range(len(self.y)): yj = self.y[j] pi,p,q = self.theta P_B_yj = pi * math.pow(p, yj) * math.pow((1-p), 1-yj) P_C_yj = (1-pi) * math.pow(q, yj) * math.pow((1-q), 1-yj) self.mu[j] = P_B_yj/(P_B_yj+P_C_yj) # m_step def MStep(self): sum_mu,sum_muy,sum_y = 0,0,0 N = len(self.y) for j in range(N): sum_mu += self.mu[j] sum_muy += self.mu[j]*self.y[j] sum_y += self.y[j] self.theta[0] = sum_mu/N # pi self.theta[1] = sum_muy/sum_mu # p self.theta[2] = (sum_y-sum_muy)/(N-sum_mu) # q def em(self): num = 1 while True: delta = self.theta.copy() self.EStep() self.MStep() print('ite{} pi={:.3f}; p={:.3f}; q={:.3f}'.format(num,self.theta[0],self.theta[1],self.theta[2])) num += 1 # 退出条件:theta变化量二范数小于阈值 for i in range(3): delta[i] -= self.theta[i] if np.linalg.norm(delta) < 0.005: print('') break data=[1,1,0,1,0,0,1,0,1,1] test1 = EM([0.5, 0.5, 0.5],data) test1.em() test2 = EM([0.4, 0.6, 0.7],data) test2.em() ''' init pi=0.500; p=0.500; q=0.500 ite1 pi=0.500; p=0.600; q=0.600 ite2 pi=0.500; p=0.600; q=0.600 init pi=0.400; p=0.600; q=0.700 ite1 pi=0.406; p=0.537; q=0.643 ite2 pi=0.406; p=0.537; q=0.643 '''