文章目录
1. EM算法
1.1 简介与定义
E M {\rm EM} EM算法是一种迭代算法,用于含有隐变量的概率模型参数的极大似然估计,或极大后验概率估计。 E M {\rm EM} EM算法的每次迭代由两步组成: E {\rm E} E步:求期望, M {\rm M} M步:求极大。首先根据一个例子引入 E M {\rm EM} EM算法。
例题 假设有 3 3 3枚硬币,分别记作 A , B , C {\rm A,B,C} A,B,C。这些硬币正面出现的概率分别是 π , p , q \pi,p,q π,p,q。进行如下掷硬币实验:先掷硬币 A {\rm A} A,根据其结果选出硬币 B {\rm B} B或 C {\rm C} C,正面选择 B {\rm B} B,反面选择 C {\rm C} C;然后掷选出的硬币,掷硬币的结果出现正面,记为 1 1 1,出现反面记为 0 0 0。现独立地重复 n = 10 n=10 n=10次实验,观测结果为 1 , 1 , 0 , 1 , 0 , 0 , 1 , 0 , 1 , 1 1,1,0,1,0,0,1,0,1,1 1,1,0,1,0,0,1,0,1,1。现在问如何估计三硬币正面出现的概率,即三硬币模型的参数。
解 三硬币模型可以写作: 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 y ( 1 − p ) 1 − y + ( 1 − π ) q y ( 1 − q ) 1 − y (1) \begin{aligned} P(y|\theta)&=\sum_zP(y,z|\theta)=\sum_zP(z|\theta)P(y|z,\theta)\\&=P(z=1|\theta)P(y|z=1,\theta)+P(z=0|\theta)P(y|z=0,\theta)\\&=\pi p^y(1-p)^{1-y}+(1-\pi)q^y(1-q)^{1-y} \end{aligned}\tag{1} 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,θ)=πpy(1−p)1−y+(1−π)qy(1−q)1−y(1)
这里的 y y y表示观测变量,表示一次实验观测的结果是 1 1 1或 0 0 0;随机变量 z z z是隐变量,表示为观测到 A {\rm A} A的结果; θ = ( π , p , q ) \theta=(\pi,p,q) θ=(π,p,q)是模型参数。将观测数据表示为 Y = { Y 1 , Y 2 , . . . , Y n } T Y=\{Y_1,Y_2,...,Y_n\}^{\rm T} Y={Y1,Y2,...,Yn}T,未观测数据表示为 Z = { Z 1 , Z 2 , . . . , Z n } T Z=\{Z_1,Z_2,...,Z_n\}^{\rm T} Z={Z1,Z2,...,Zn}T。则观测数据的似然函数为: P ( Y ∣ θ ) = ∑ Z P ( Z ∣ θ ) P ( Y ∣ Z , θ ) (2) P(Y|\theta)=\sum_ZP(Z|\theta)P(Y|Z,\theta)\tag{2} P(Y∣θ)=Z∑P(Z∣θ)P(Y∣Z,θ)(2)
即: P ( Y ∣ θ ) = ∏ j = 1 n [ π p y j ( 1 − p ) 1 − y j + ( 1 − π ) q y j ( 1 − q ) 1 − y j ] (3) P(Y|\theta)=\prod_{j=1}^n[\pi p^{y_j}(1-p)^{1-y_j}+(1-\pi)q^{y_j}(1-q)^{1-y_j}]\tag{3} P(Y∣θ)=j=1∏n[πpyj(1−p)1−yj+(1−π)qyj(1−q)1−yj](3)
考虑求模型 θ = ( π , p , q ) \theta=(\pi,p,q) θ=(π,p,q)的极大似然估计,即: θ ^ = arg max θ log P ( Y ∣ θ ) \hat\theta=\arg\max_{\theta}\log P(Y|\theta) θ^=argθmaxlogP(Y∣θ)
这个问题没有解析解,只有通过迭代的方法求解。 E M {\rm EM} EM算法就是可以用求解这个问题的一种迭代算法。 E M {\rm EM} EM算法首先选取参数的初值,记作 θ ( 0 ) = ( π ( 0 ) , p ( 0 ) , q ( 0 ) ) \theta^{(0)}=(\pi^{(0)},p^{(0)},q^{(0)}) θ(0)=(π(0),p(0),q(0)),然后通过下面的步骤迭代计算估计值,直到收敛为止。第 i i i次迭代的估计值为 θ ( i ) = ( π ( i ) , p ( i ) , q ( i ) ) \theta^{(i)}=(\pi^{(i)},p^{(i)},q^{(i)}) θ(i)=(π(i),p(i),q(i)), E M {\rm EM} EM算法第 i + 1 i+1 i+1次迭代如下。
E步: 计算在模型参数 π ( i ) , p ( i ) , q ( i ) \pi^{(i)},p^{(i)},q^{(i)} π(i),p(i),q(i)下观测数据 y j y_j yj来自掷硬币 B {\rm B} B的概率: μ 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 (4) \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}}\tag{4} μ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−yj(4)
M步: 计算模型参数的新估计值: π ( i + 1 ) = 1 n ∑ j = 1 n μ j ( i + 1 ) (5) \pi^{(i+1)}=\frac{1}{n}\sum_{j=1}^n\mu_j^{(i+1)}\tag{5} π(i+1)=n1j=1∑nμj(i+1)(5)
p ( i + 1 ) = ∑ j = 1 n μ j ( i + 1 ) y j ∑ j = 1 n μ j ( i + 1 ) (6) p^{(i+1)}=\frac{\sum \limits_{j=1}^n\mu_j^{(i+1)}y_j}{\sum \limits_{j=1}^n\mu_j^{(i+1)}}\tag{6} p(i+1)=j=1∑nμj(i+1)j=1∑nμj(i+1)yj(6)
q ( i + 1 ) = ∑ j = 1 n ( 1 − μ j ( i + 1 ) ) y j ∑ j = 1 n ( 1 − μ j ( i + 1 ) ) (7) q^{(i+1)}=\frac{\sum \limits_{j=1}^n(1-\mu_j^{(i+1)})y_j}{\sum \limits_{j=1}^n(1-\mu_j^{(i+1)})}\tag{7} q(i+1)=j=1∑n(1−μj(i+1))j=1∑n(1−μj(i+1))yj(7)
现在进行数值计算。假设模型的参数初始取值为: π ( 0 ) = 0.5 , p ( 0 ) = 0.5 , q ( 0 ) = 0.5 \pi^{(0)}=0.5,\ \ p^{(0)}=0.5,\ \ q^{(0)}=0.5 π(0)=0.5, p(0)=0.5, q(0)=0.5
由式(4),对于 y i = 1 y_i=1 yi=1和 y i = 0 y_i=0 yi=0均有 μ j ( 1 ) = 0.5 \mu^{(1)}_j=0.5 μj(1)=0.5。则更新的参数为: π ( 1 ) = 0.5 , p ( 1 ) = 0.6 , q ( 1 ) = 0.6 \pi^{(1)}=0.5,\ \ p^{(1)}=0.6,\ \ q^{(1)}=0.6 π(1)=0.5, p(1)=0.6, q(1)=0.6
下一次更新的参数为: π ( 2 ) = 0.5 , p ( 2 ) = 0.6 , q ( 2 ) = 0.6 \pi^{(2)}=0.5,\ \ p^{(2)}=0.6,\ \ q^{(2)}=0.6 π(2)=0.5, p(2)=0.6, q(2)=0.6
于是得到模型参数 θ \theta θ的极大似然估计: π ^ = 0.5 , p ^ = 0.6 , q ^ = 0.6 \hat\pi=0.5,\ \ \hat p=0.6,\ \ \hat q=0.6 π^=0.5, p^=0.6, q^=0.6
如果取初值为 π ( 0 ) = 0.4 , p ( 0 ) = 0.6 , q ( 0 ) = 0.7 \pi^{(0)}=0.4,\ \ p^{(0)}=0.6,\ \ q^{(0)}=0.7 π(0)=0.4, p(0)=0.6, q(0)=0.7,那么得到的模型参数的极大似然估计是 π ^ = 0.4064 , p ^ = 0.5368 , q ^ = 0.6432 \hat\pi=0.4064,\ \ \hat p=0.5368,\ \ \hat q=0.6432 π^=0.4064, p^=0.5368, q^=0.6432。即, E M {\rm EM} EM算法与初值的选择有关,选择不同的初值可能得到不同的参数估计值。
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 θ。
(1)选择参数的初值 θ ( 0 ) \theta^{(0)} θ(0),开始迭代;
(2) E {\rm E} E步,记 θ ( i ) \theta^{(i)} θ(i)为第 i i i次迭代参数 θ \theta θ的估计值,在第 i + 1 i+1 i+1次迭代的 E {\rm E} E步,计算 Q ( θ , θ ( i ) ) = E Z [ log P ( Y , Z ∣ θ ) ∣ Y , θ ( i ) ] = ∑ Z log P ( Y , Z ∣ θ ) P ( Z ∣ Y , θ ( i ) ) (8) \begin{aligned} Q(\theta,\theta^{(i)})&=E_Z[\log P(Y,Z|\theta)|Y,\theta^{(i)}]\\&=\sum_Z\log P(Y,Z|\theta)P(Z|Y,\theta^{(i)}) \end{aligned}\tag{8} Q(θ,θ(i))=EZ[logP(Y,Z∣θ)∣Y,θ(i)]=Z∑logP(Y,Z∣θ)P(Z∣Y,θ(i))(8)
这里, P ( Z ∣ Y , θ ( i ) ) P(Z|Y,\theta^{(i)}) P(Z∣Y,θ(i))是在给定观测数据 Y Y Y和当前参数估计 θ ( i ) \theta^{(i)} θ(i)下隐变量数据 Z Z Z的条件概率分布;
(3) M {\rm M} 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 ) ) (9) \theta^{(i+1)}=\arg\max_{\theta}Q(\theta,\theta^{(i)})\tag{9} θ(i+1)=argθmaxQ(θ,θ(i))(9)
(4)重复第(2)步和第(3)步,直到收敛。
式(8)的函数 Q ( θ , θ ( i ) ) Q(\theta,\theta^{(i)}) Q(θ,θ(i))是 E M {\rm EM} EM算法的核心,称为Q函数。
Q函数 完全数据的对数似然函数 log P ( Y , Z ∣ θ ) \log P(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 Q函数,即: Q ( θ , θ ( i ) ) = E Z [ log P ( Y , Z ∣ θ ) ∣ Y , θ ( i ) ] Q(\theta,\theta^{(i)})=E_Z[\log P(Y,Z|\theta)|Y,\theta^{(i)}] Q(θ,θ(i))=EZ[logP(Y,Z∣θ)∣Y,θ(i)]
关于EM算法的几点:
- 参数的初值可以任意选择,但 E M {\rm EM} EM算法对初值敏感;
- E {\rm E} E步求 Q ( θ , θ ( i ) ) Q(\theta,\theta^{(i)}) Q(θ,θ(i))。 Q Q Q函数中 Z Z Z是未观测数据, Y Y Y是观测数据。 Q ( θ , θ ( i ) ) Q(\theta,\theta^{(i)}) Q(θ,θ(i))的第一个元表示要极大化的参数,第二个元表示参数的当前估计值。每次迭代实际在求 Q Q Q函数及其极大;
- M {\rm M} M步求 Q ( θ , θ ( i ) ) Q(\theta,\theta^{(i)}) Q(θ,θ(i))的极大化,得到 θ ( i + 1 ) \theta^{(i+1)} θ(i+1),完成一次迭代 θ ( i ) → θ ( i + 1 ) \theta^{(i)}\rightarrow\theta^{(i+1)} θ(i)→θ(i+1);
- 给出停止迭代的条件,一般是对较小的正数
ε
1
,
ε
2
\varepsilon_1,\varepsilon_2
ε1,ε2,若满足:
∣
∣
θ
(
i
+
1
)
−
θ
(
i
)
∣
∣
<
ε
1
∣
∣
∣
∣
Q
(
θ
(
i
+
1
)
,
θ
(
i
)
)
−
Q
(
θ
(
i
)
,
θ
(
i
)
)
∣
∣
<
ε
2
||\theta^{(i+1)}-\theta^{(i)}||<\varepsilon_1\ \ ||\ \ ||Q(\theta^{(i+1)},\theta^{(i)})-Q(\theta^{(i)},\theta^{(i)})||<\varepsilon_2
∣∣θ(i+1)−θ(i)∣∣<ε1 ∣∣ ∣∣Q(θ(i+1),θ(i))−Q(θ(i),θ(i))∣∣<ε2
则停止迭代。
1.2 EM算法的收敛性
定理 设 P ( Y ∣ θ ) P(Y|\theta) P(Y∣θ)为观测数据的似然函数, θ ( i ) ( i = 1 , 2 , . . . ) \theta^{(i)}(i=1,2,...) θ(i)(i=1,2,...)为 E M {\rm EM} EM算法得到的参数估计序列, P ( Y ∣ θ ( i ) ) P(Y|\theta^{(i)}) P(Y∣θ(i))为对应的似然函数序列,则 P ( Y ∣ θ ( i ) ) ( i = 1 , 2 , . . . ) P(Y|\theta^{(i)})(i=1,2,...) P(Y∣θ(i))(i=1,2,...)是单调递增的,即: P ( Y ∣ θ ( i + 1 ) ) ≥ P ( Y ∣ θ ( i ) ) (10) P(Y|\theta^{(i+1)})\geq P(Y|\theta^{(i)})\tag{10} P(Y∣θ(i+1))≥P(Y∣θ(i))(10)
定理 设 L ( θ ) = log P ( Y ∣ θ ) L(\theta)=\log P(Y|\theta) L(θ)=logP(Y∣θ)为观测数据的对数似然函数, θ ( i ) ( i = 1 , 2 , . . . ) \theta^{(i)}(i=1,2,...) θ(i)(i=1,2,...)为 E M {\rm EM} EM算法得到的参数估计序列, L ( θ ( i ) ) ( i = 1 , 2 , . . . ) L(\theta^{(i)})(i=1,2,...) L(θ(i))(i=1,2,...)为对应的对数似然函数序列。则:
(1)如果 P ( Y ∣ θ ) P(Y|\theta) P(Y∣θ)有上界,则 L ( θ ( i ) ) = log P ( Y ∣ θ ( i ) ) L(\theta^{(i)})=\log P(Y|\theta^{(i)}) L(θ(i))=logP(Y∣θ(i))收敛到某一值 L ∗ L^* L∗;
(2)在函数 Q ( θ , θ ′ ) Q(\theta,\theta') Q(θ,θ′)与 L ( θ ) L(\theta) L(θ)满足一定条件下,由 E M {\rm EM} EM算法得到的参数估计序列 θ ( i ) \theta^{(i)} θ(i)的收敛值 θ ∗ \theta^* θ∗是 L ( θ ) L(\theta) L(θ)的稳定点。
上述定理只能保证参数估计序列收敛到对数似然函数的稳定点,不能保证收敛到极大值点。所以在实际应用中,初值的选择变得非常重要,常用的办法是选取几个不同的初值进行迭代,然后对得到的各个估计值加以比较,从中选择最好的。
1.3 EM算法在高斯混合模型中的应用
1.3.1 高斯混合模型
高斯混合模型 高斯混合模型是指具有如下形式的概率分布模型: P ( y ∣ θ ) = ∑ k = 1 K α k ϕ ( y ∣ θ k ) (11) P(y|\theta)=\sum_{k=1}^K\alpha_k\phi(y|\theta_k)\tag{11} P(y∣θ)=k=1∑Kαkϕ(y∣θk)(11)
其中 α k \alpha_k αk是系数, α k ≥ 0 \alpha_k\geq 0 αk≥0, ∑ k = 1 K α k = 1 \sum \limits_{k=1}^K\alpha_k=1 k=1∑Kαk=1; ϕ ( y ∣ θ k ) \phi(y|\theta_k) ϕ(y∣θk)是高斯分布密度, θ k = ( μ k , σ k 2 ) \theta_k=(\mu_k,\sigma_k^2) θk=(μk,σk2): ϕ ( y ∣ θ k ) = 1 2 π σ k exp ( − ( y − μ k ) 2 2 σ k 2 ) (12) \phi(y|\theta_k)=\frac{1}{\sqrt{2\pi}\sigma_k}\exp\left(-\frac{(y-\mu_k)^2}{2\sigma_k^2}\right)\tag{12} ϕ(y∣θk)=2πσk1exp(−2σk2(y−μk)2)(12)
称为第 k k k个分模型。
1.3.2 高斯混合模型参数估计的EM算法
假设观测数据 y 1 , y 2 , . . . , y N y_1,y_2,...,y_N y1,y2,...,yN由高斯混合模型生成: P ( y ∣ θ ) = ∑ k = 1 K α k ϕ ( y ∣ θ k ) (13) P(y|\theta)=\sum_{k=1}^K\alpha_k\phi(y|\theta_k)\tag{13} P(y∣θ)=k=1∑Kαkϕ(y∣θk)(13)
其中, θ = ( α 1 , α 2 , . . . , α K ; θ 1 , θ 2 , . . . , θ K ) \theta=(\alpha_1,\alpha_2,...,\alpha_K;\theta_1,\theta_2,...,\theta_K) θ=(α1,α2,...,αK;θ1,θ2,...,θK)。使用 E M {\rm EM} EM算法估计高斯混合模型的参数 θ \theta θ。
明确隐变量,写出完全数据的对数似然函数 设想观测数据
y
i
,
j
=
1
,
2
,
.
.
.
,
N
y_i,j=1,2,...,N
yi,j=1,2,...,N是这样产生的:首先依概率
α
k
\alpha_k
αk选择第
k
k
k个高斯分布模型
ϕ
(
y
∣
θ
k
)
\phi(y|\theta_k)
ϕ(y∣θk),然后依第
k
k
k个分模型的概率分布
ϕ
(
y
∣
θ
k
)
\phi(y|\theta_k)
ϕ(y∣θk)生成观测数据
y
j
y_j
yj。这是观测数据
y
i
,
j
=
1
,
2
,
.
.
.
,
N
y_i,j=1,2,...,N
yi,j=1,2,...,N是已知的;反映观测数据
y
j
y_j
yj来自第
k
k
k个分模型的数据是未知的,
k
=
1
,
2
,
.
.
.
,
K
k=1,2,...,K
k=1,2,...,K,以隐变量
γ
j
k
\gamma_{jk}
γjk表示,其定义如下:
γ
j
k
=
{
1
,
第
j
个
观
测
来
自
第
k
个
分
模
型
0
,
否
则
j
=
1
,
2
,
.
.
.
,
N
;
k
=
1
,
2
,
.
.
.
,
K
(14)
\gamma_{jk}=\left\{ \begin{aligned} 1, \ \ \ & 第j个观测来自第k个分模型 \\ 0, \ \ \ & 否则 \end{aligned}\ \ j=1,2,...,N;\ \ \ k=1,2,...,K \right. \tag{14}
γjk={1, 0, 第j个观测来自第k个分模型否则 j=1,2,...,N; k=1,2,...,K(14)
有了观测数据 y j y_j yj及未观测数据 γ j k \gamma_{jk} γjk,那么完全数据是: ( y j , γ j 2 , , . . . , γ j K ) , j = 1 , 2 , . . . , N (y_j,\gamma_{j2},,...,\gamma_{jK}),\ \ \ j=1,2,...,N (yj,γj2,,...,γjK), j=1,2,...,N
于是,完全数据的对数似然函数为: P ( y , γ ∣ θ ) = ∏ j = 1 N P ( y j , γ j 2 , , . . . , γ j K ∣ θ ) = ∏ k = 1 K ∏ j = 1 N [ α k ϕ ( y j ∣ θ k ) ] γ j k = ∏ k = 1 K α k n k ∏ j = 1 N [ ϕ ( y j ∣ θ k ) ] γ j k = ∏ k = 1 K α k n k ∏ j = 1 N [ 1 2 π σ k exp ( − ( y − μ k ) 2 2 σ k 2 ) ] γ j k \begin{aligned} P(y,\gamma|\theta)&=\prod_{j=1}^NP(y_j,\gamma_{j2},,...,\gamma_{jK}|\theta)\\&=\prod_{k=1}^K\prod_{j=1}^N[\alpha_k\phi(y_j|\theta_k)]^{\gamma_{jk}}\\&=\prod_{k=1}^K\alpha_k^{n_k}\prod_{j=1}^N[\phi(y_j|\theta_k)]^{\gamma_{jk}}\\&=\prod_{k=1}^K\alpha_k^{n_k}\prod_{j=1}^N\left[\frac{1}{\sqrt{2\pi}\sigma_k}\exp\left(-\frac{(y-\mu_k)^2}{2\sigma_k^2}\right)\right]^{\gamma_{jk}} \end{aligned} P(y,γ∣θ)=j=1∏NP(yj,γj2,,...,γjK∣θ)=k=1∏Kj=1∏N[αkϕ(yj∣θk)]γjk=k=1∏Kαknkj=1∏N[ϕ(yj∣θk)]γjk=k=1∏Kαknkj=1∏N[2πσk1exp(−2σk2(y−μk)2)]γjk
式中: n k = ∑ j = 1 N γ j k , ∑ k = 1 K n k = N n_k=\sum_{j=1}^N\gamma_{jk},\ \ \sum_{k=1}^Kn_k=N nk=j=1∑Nγjk, k=1∑Knk=N
那么,完全数据的对数似然函数为: log P ( y , γ ∣ θ ) = ∑ k = 1 K { n k log α k + ∑ j = 1 N γ j k [ log ( 1 2 π ) − log σ k − 1 2 σ k 2 ( y j − μ k ) 2 ] } \log P(y,\gamma|\theta)=\sum_{k=1}^K\left\{n_k\log \alpha_k+\sum_{j=1}^N\gamma_{jk}\left[\log\left(\frac{1}{\sqrt{2\pi}}\right)-\log\sigma_k-\frac{1}{2\sigma_k^2}(y_j-\mu_k)^2\right]\right\} logP(y,γ∣θ)=k=1∑K{nklogαk+j=1∑Nγjk[log(2π1)−logσk−2σk21(yj−μk)2]}
EM算法的E步:确定Q函数
Q ( θ , θ ( i ) ) = E [ log P ( y , γ ∣ θ ) y , θ ( i ) ] = E { ∑ k = 1 K { n k log α k + ∑ j = 1 N γ j k [ log ( 1 2 π ) − log σ k − 1 2 σ k 2 ( y j − μ k ) 2 ] } } = ∑ k = 1 K { ∑ j = 1 N ( E γ j k ) log α k + ∑ j = 1 N ( E γ j k ) [ log ( 1 2 π ) − log σ k − 1 2 σ k 2 ( y j − μ k ) 2 ] } (15) \begin{aligned} Q(\theta,\theta^{(i)})&=E[\log P(y,\gamma|\theta)y,\theta^{(i)}]\\&=E\left\{\sum_{k=1}^K\left\{n_k\log \alpha_k+\sum_{j=1}^N\gamma_{jk}\left[\log\left(\frac{1}{\sqrt{2\pi}}\right)-\log\sigma_k-\frac{1}{2\sigma_k^2}(y_j-\mu_k)^2\right]\right\}\right\}\\&=\sum_{k=1}^K\left\{\sum_{j=1}^N(E_{\gamma_{jk}})\log\alpha_k+\sum_{j=1}^N(E_{\gamma_{jk}})\left[\log\left(\frac{1}{\sqrt{2\pi}}\right)-\log\sigma_k-\frac{1}{2\sigma_k^2}(y_j-\mu_k)^2\right]\right\} \end{aligned}\tag{15} Q(θ,θ(i))=E[logP(y,γ∣θ)y,θ(i)]=E{k=1∑K{nklogαk+j=1∑Nγjk[log(2π1)−logσk−2σk21(yj−μk)2]}}=k=1∑K{j=1∑N(Eγjk)logαk+j=1∑N(Eγjk)[log(2π1)−logσk−2σk21(yj−μk)2]}(15)
这里需要计算 E ( γ j k ∣ y , θ ) E(\gamma_{jk}|y,\theta) E(γjk∣y,θ),记为 γ ^ j k \hat\gamma_{jk} γ^jk: γ ^ j k = E ( γ j k ∣ y , θ ) = P ( γ j k = 1 ∣ y , θ ) = P ( γ j k = 1 , y j ∣ θ ) ∑ k = 1 K P ( γ j k = 1 , y j θ ) = P ( γ j k = 1 , y j ∣ θ ) P ( γ j k = 1 ∣ θ ) ∑ k = 1 K P ( γ j k = 1 , y j θ ) P ( γ j k = 1 ∣ θ ) = α k ϕ ( y j ∣ θ k ) ∑ k = 1 K α k ϕ ( y j ∣ θ k ) \begin{aligned} \hat\gamma_{jk}&=E(\gamma_{jk}|y,\theta)=P(\gamma_{jk}=1|y,\theta)\\&=\frac{P(\gamma_{jk}=1,y_j|\theta)}{\sum \limits_{k=1}^KP(\gamma_{jk}=1,y_j\theta)}\\&=\frac{P(\gamma_{jk}=1,y_j|\theta)P(\gamma_{jk}=1|\theta)}{\sum \limits_{k=1}^KP(\gamma_{jk}=1,y_j\theta)P(\gamma_{jk}=1|\theta)}\\&=\frac{\alpha_k\phi(y_j|\theta_k)}{\sum \limits_{k=1}^K\alpha_k\phi(y_j|\theta_k)} \end{aligned} γ^jk=E(γjk∣y,θ)=P(γjk=1∣y,θ)=k=1∑KP(γjk=1,yjθ)P(γjk=1,yj∣θ)=k=1∑KP(γjk=1,yjθ)P(γjk=1∣θ)P(γjk=1,yj∣θ)P(γjk=1∣θ)=k=1∑Kαkϕ(yj∣θk)αkϕ(yj∣θk)
γ ^ j k \hat\gamma_{jk} γ^jk表示当前模型参数下第 j j j个观测数据来自第 k k k个分模型的概率,称为分模型 k k k对观测数据 y j y_j yj的响应度。则综合上式,最后得到的 Q Q Q函数为: Q ( θ , θ ( i ) ) = ∑ k = 1 K { n k log α k + ∑ j = 1 N γ ^ j k [ log ( 1 2 π ) − log σ k − 1 2 σ k 2 ( y j − μ k ) 2 ] } (16) Q(\theta,\theta^{(i)})=\sum_{k=1}^K\left\{n_k\log\alpha_k+\sum_{j=1}^N\hat\gamma_{jk}\left[\log\left(\frac{1}{\sqrt{2\pi}}\right)-\log\sigma_k-\frac{1}{2\sigma_k^2}(y_j-\mu_k)^2\right]\right\} \tag{16} Q(θ,θ(i))=k=1∑K{nklogαk+j=1∑Nγ^jk[log(2π1)−logσk−2σk21(yj−μk)2]}(16)
确定EM算法的M步
迭代的 M {\rm M} M步是求函数 Q ( θ , θ ( i ) ) Q(\theta,\theta^{(i)}) Q(θ,θ(i))对 θ \theta θ的极大值,即求新一轮迭代的模型参数: θ ( i + 1 ) = arg max θ Q ( θ , θ ( i ) ) \theta^{(i+1)}=\arg\max_{\theta}Q(\theta,\theta^{(i)}) θ(i+1)=argθmaxQ(θ,θ(i))
用 μ ^ k , σ ^ k 2 \hat\mu_k,\hat\sigma_k^2 μ^k,σ^k2和 α ^ k \hat\alpha_k α^k, k = 1 , 2 , . . . , K k=1,2,...,K k=1,2,...,K表示 θ ( i + 1 ) \theta^{(i+1)} θ(i+1)的各参数。求 μ ^ k , σ ^ k 2 \hat\mu_k,\hat\sigma_k^2 μ^k,σ^k2只需将式(16)分别对 μ k , σ k 2 \mu_k,\sigma_k^2 μk,σk2求偏导数并令其为 0 0 0即可得到;求 α ^ k \hat\alpha_k α^k是在 ∑ k = 1 K α k = 1 \sum \limits_{k=1}^K\alpha_k=1 k=1∑Kαk=1条件下求偏导数并令其为 0 0 0得到的。求得的结果如下: μ ^ k = ∑ j = 1 N γ ^ j k y j ∑ j = 1 N γ ^ j k , k = 1 , 2 , . . . , K (17) \hat\mu_k=\frac{\sum \limits_{j=1}^N\hat\gamma_{jk}y_j}{\sum \limits_{j=1}^N\hat\gamma_{jk}},\ \ \ k=1,2,...,K\tag{17} μ^k=j=1∑Nγ^jkj=1∑Nγ^jkyj, k=1,2,...,K(17)
σ ^ k 2 = ∑ j = 1 N γ ^ j k ( y j − μ k ) 2 ∑ j = 1 N γ ^ j k , k = 1 , 2 , . . . , K (18) \hat\sigma_k^2=\frac{\sum \limits_{j=1}^N\hat\gamma_{jk}(y_j-\mu_k)^2}{\sum \limits_{j=1}^N\hat\gamma_{jk}},\ \ \ k=1,2,...,K\tag{18} σ^k2=j=1∑Nγ^jkj=1∑Nγ^jk(yj−μk)2, k=1,2,...,K(18)
α ^ k = n k N = ∑ j = 1 N γ ^ j k N (19) \hat\alpha_k=\frac{n_k}{N}=\frac{\sum \limits_{j=1}^N\hat\gamma_{jk}}{N}\tag{19} α^k=Nnk=Nj=1∑Nγ^jk(19)
重复以上计算,直到对数似然函数值不再有明显的变化为止。
高斯混合模型参数估计的EM算法
输入 观测数据 y 1 , y 2 , . . . , y N y_1,y_2,...,y_N y1,y2,...,yN,高斯混合模型;
输出 高斯混合模型参数。
(1)
E
{\rm E}
E步,根据当前模型参数,计算分模型
k
k
k对观测数据
y
j
y_j
yj的响应度:
γ
^
j
k
=
α
k
ϕ
(
y
j
∣
θ
k
)
∑
k
=
1
K
α
k
ϕ
(
y
j
∣
θ
k
)
,
j
=
1
,
2
,
.
.
.
,
N
;
k
=
1
,
2
,
.
.
.
,
K
\hat\gamma_{jk}=\frac{\alpha_k\phi(y_j|\theta_k)}{\sum \limits_{k=1}^K\alpha_k\phi(y_j|\theta_k)},\ \ \ j=1,2,...,N;\ \ \ k=1,2,...,K
γ^jk=k=1∑Kαkϕ(yj∣θk)αkϕ(yj∣θk), j=1,2,...,N; k=1,2,...,K
(2) M {\rm M} M步,计算新一轮迭代的模型参数: μ ^ k = ∑ j = 1 N γ ^ j k y j ∑ j = 1 N γ ^ j k , k = 1 , 2 , . . . , K \hat\mu_k=\frac{\sum \limits_{j=1}^N\hat\gamma_{jk}y_j}{\sum \limits_{j=1}^N\hat\gamma_{jk}},\ \ \ k=1,2,...,K μ^k=j=1∑Nγ^jkj=1∑Nγ^jkyj, k=1,2,...,K
σ ^ k 2 = ∑ j = 1 N γ ^ j k ( y j − μ k ) 2 ∑ j = 1 N γ ^ j k , k = 1 , 2 , . . . , K \hat\sigma_k^2=\frac{\sum \limits_{j=1}^N\hat\gamma_{jk}(y_j-\mu_k)^2}{\sum \limits_{j=1}^N\hat\gamma_{jk}},\ \ \ k=1,2,...,K σ^k2=j=1∑Nγ^jkj=1∑Nγ^jk(yj−μk)2, k=1,2,...,K
α ^ k = n k N = ∑ j = 1 N γ ^ j k N \hat\alpha_k=\frac{n_k}{N}=\frac{\sum \limits_{j=1}^N\hat\gamma_{jk}}{N} α^k=Nnk=Nj=1∑Nγ^jk
(4)重复第(2)步和第(3)步,直到收敛。
2. EM算法的推广
2.1 F函数的极大-极大算法
F函数 假设隐变量数据 Z Z Z的概率分布 P ~ ( Z ) \tilde{P}(Z) P~(Z),定义分布 P ~ \tilde{P} P~与参数 θ \theta θ的函数 F ( P ~ , θ ) F(\tilde{P},\theta) F(P~,θ)如下: F ( P ~ , θ ) = E P ~ [ log P ( Y , Z ∣ θ ) ] + H ( P ~ ) (20) F(\tilde{P},\theta)=E_{\tilde P}[\log P(Y,Z|\theta)]+H(\tilde P)\tag{20} F(P~,θ)=EP~[logP(Y,Z∣θ)]+H(P~)(20)
称为 F F F函数,式中 H ( P ~ ) = − E P ~ log P ~ ( Z ) H(\tilde P)=-E_{\tilde P}\log\tilde P(Z) H(P~)=−EP~logP~(Z)是分布 P ~ ( Z ) \tilde{P}(Z) P~(Z)的熵。
引理 对于固定的 θ \theta θ,存在唯一的分布 P ~ θ \tilde{P}_{\theta} P~θ极大化 F ( P ~ , θ ) F(\tilde{P},\theta) F(P~,θ),这时 P ~ θ \tilde{P}_{\theta} P~θ由以下式子给出: P ~ θ ( Z ) = P ( Z ∣ Y , θ ) (21) \tilde{P}_{\theta}(Z)=P(Z|Y,\theta)\tag{21} P~θ(Z)=P(Z∣Y,θ)(21)
并且 P ~ θ \tilde{P}_{\theta} P~θ随 θ \theta θ连续变化。
引理 若 P ~ θ ( Z ) = P ( Z ∣ Y , θ ) \tilde{P}_{\theta}(Z)=P(Z|Y,\theta) P~θ(Z)=P(Z∣Y,θ),则: F ( P ~ , θ ) = log P ( Y ∣ θ ) (22) F(\tilde{P},\theta)=\log P(Y|\theta)\tag{22} F(P~,θ)=logP(Y∣θ)(22)
定理 设 L ( θ ) = log P ( Y ∣ θ ) L(\theta)=\log P(Y|\theta) L(θ)=logP(Y∣θ)为观测数据的对数似然函数, θ ( i ) ( i = 1 , 2 , . . . ) \theta^{(i)}(i=1,2,...) θ(i)(i=1,2,...)为 E M {\rm EM} EM算法得到的参数估计序列,函数 F ( P ~ , θ ) F(\tilde{P},\theta) F(P~,θ)由式(20)定义。如果 F ( P ~ , θ ) F(\tilde{P},\theta) F(P~,θ)在 P ~ ∗ \tilde{P}^* P~∗和 θ ∗ \theta^* θ∗有局部极大值,那么 L ( θ ) L(\theta) L(θ)在 θ ∗ \theta^* θ∗也有局部极大值。类似地,如果 F ( P ~ , θ ) F(\tilde{P},\theta) F(P~,θ)在 P ~ ∗ \tilde{P}^* P~∗和 θ ∗ \theta^* θ∗达到全局最大值,那么 L ( θ ) L(\theta) L(θ)在 θ ∗ \theta^* θ∗也达到全局最大值。
定理 E M {\rm EM} EM算法的一次迭代可由 F F F函数的极大-极大算法实现。设 θ ( i ) \theta^{(i)} θ(i)为第 i i i次迭代参数 θ \theta θ的估计, P ~ ( i ) \tilde{P}^{(i)} P~(i)为第 i i i次迭代函数 P ~ \tilde{P} P~的估计。在第 i + 1 i+1 i+1次迭代的两步为:
(1)对固定的 θ ( i ) \theta^{(i)} θ(i),求 P ~ ( i + 1 ) \tilde{P}^{(i+1)} P~(i+1)使 F ( P ~ , θ ( i ) ) F(\tilde{P},\theta^{(i)}) F(P~,θ(i))极大化;
(2)对固定的 P ~ ( i + 1 ) \tilde{P}^{(i+1)} P~(i+1),求 θ ( i + 1 ) \theta^{(i+1)} θ(i+1)使 F ( P ~ ( i + 1 ) , θ ) F(\tilde{P}^{(i+1)},\theta) F(P~(i+1),θ)极大化。
2.2 GEM算法
GEM算法1
输入 观测数据, F F F函数;
输出 模型参数。
(1)初始化参数 θ ( 0 ) \theta^{(0)} θ(0),开始迭代;
(2)第 i + 1 i+1 i+1次迭代,第 1 1 1步:记 θ ( i ) \theta^{(i)} θ(i)为参数 θ \theta θ的估计值, P ~ ( i ) \tilde{P}^{(i)} P~(i)为函数 P ~ \tilde{P} P~的估计,求 P ~ ( i + 1 ) \tilde{P}^{(i+1)} P~(i+1)使 P ~ \tilde{P} P~极大化 F ( P ~ , θ ( i ) ) F(\tilde{P},\theta^{(i)}) F(P~,θ(i));
(3)第 2 2 2步:求 θ ( i + 1 ) \theta^{(i+1)} θ(i+1)使 F ( P ~ ( i + 1 ) , θ ) F(\tilde{P}^{(i+1)},\theta) F(P~(i+1),θ)极大化;
(4)重复(2)和(3),直到收敛。
GEM算法2
输入 观测数据, F F F函数;
输出 模型参数。
(1)初始化参数 θ ( 0 ) \theta^{(0)} θ(0),开始迭代;
(2)第 i + 1 i+1 i+1次迭代,第 1 1 1步:记 θ ( i ) \theta^{(i)} θ(i)为参数 θ \theta θ的估计值,计算: Q ( θ , θ ( i ) ) = E Z [ log P ( Y , Z ∣ θ ) ∣ Y , θ ( i ) ] = ∑ Z log P ( Y , Z ∣ θ ) P ( Z ∣ Y , θ ( i ) ) \begin{aligned} Q(\theta,\theta^{(i)})&=E_Z[\log P(Y,Z|\theta)|Y,\theta^{(i)}]\\&=\sum_Z\log P(Y,Z|\theta)P(Z|Y,\theta^{(i)}) \end{aligned} Q(θ,θ(i))=EZ[logP(Y,Z∣θ)∣Y,θ(i)]=Z∑logP(Y,Z∣θ)P(Z∣Y,θ(i))
(3)第 2 2 2步:求 θ ( i + 1 ) \theta^{(i+1)} θ(i+1)使: Q ( θ ( i + 1 ) , θ ( i ) ) > Q ( θ ( i ) , θ ( i ) ) Q(\theta^{(i+1)},\theta^{(i)})>Q(\theta^{(i)},\theta^{(i)}) Q(θ(i+1),θ(i))>Q(θ(i),θ(i))
(4)重复(2)和(3),直到收敛。
GEM算法3
输入 观测数据, F F F函数;
输出 模型参数。
(1)初始化参数 θ ( 0 ) = ( θ 1 ( 0 ) , θ 2 ( 0 ) , . . . , θ d ( 0 ) ) \theta^{(0)}=(\theta^{(0)}_1,\theta^{(0)}_2,...,\theta^{(0)}_d) θ(0)=(θ1(0),θ2(0),...,θd(0)),开始迭代;
(2)第 i + 1 i+1 i+1次迭代,第 1 1 1步:记 θ ( i ) = ( θ 1 ( i ) , θ 2 ( i ) , . . . , θ d ( i ) ) \theta^{(i)}=(\theta^{(i)}_1,\theta^{(i)}_2,...,\theta^{(i)}_d) θ(i)=(θ1(i),θ2(i),...,θd(i))为参数 θ = ( θ 1 , θ 2 , . . . , θ d ) \theta=(\theta_1,\theta_2,...,\theta_d) θ=(θ1,θ2,...,θd)的估计值,计算: Q ( θ , θ ( i ) ) = E Z [ log P ( Y , Z ∣ θ ) ∣ Y , θ ( i ) ] = ∑ Z log P ( Y , Z ∣ θ ) P ( Z ∣ Y , θ ( i ) ) \begin{aligned} Q(\theta,\theta^{(i)})&=E_Z[\log P(Y,Z|\theta)|Y,\theta^{(i)}]\\&=\sum_Z\log P(Y,Z|\theta)P(Z|Y,\theta^{(i)}) \end{aligned} Q(θ,θ(i))=EZ[logP(Y,Z∣θ)∣Y,θ(i)]=Z∑logP(Y,Z∣θ)P(Z∣Y,θ(i))
(3)第 2 2 2步:进行 d d d次条件极大化。首先,在 θ 2 ( i ) , . . . , θ d ( i ) \theta^{(i)}_2,...,\theta^{(i)}_d θ2(i),...,θd(i)保持不变的条件下求使 Q ( θ , θ ( i ) ) Q(\theta,\theta^{(i)}) Q(θ,θ(i))达到极大的 θ 1 ( i + 1 ) \theta^{(i+1)}_1 θ1(i+1);然后在 θ 1 = θ 1 ( i + 1 ) , θ j = θ j ( i ) , j = 3 , 4 , . . . , d \theta_1=\theta^{(i+1)}_1,\theta_j=\theta_j^{(i)},j=3,4,...,d θ1=θ1(i+1),θj=θj(i),j=3,4,...,d的条件下求使 Q ( θ , θ ( i ) ) Q(\theta,\theta^{(i)}) Q(θ,θ(i))达到极大的 θ 2 ( i + 1 ) \theta^{(i+1)}_2 θ2(i+1);如此继续,经过 d d d次条件极大化,求得 θ ( i + 1 ) = ( θ 1 ( i + 1 ) , θ 2 ( i + 1 ) , . . . , θ d ( i + 1 ) ) \theta^{(i+1)}=(\theta^{(i+1)}_1,\theta^{(i+1)}_2,...,\theta^{(i+1)}_d) θ(i+1)=(θ1(i+1),θ2(i+1),...,θd(i+1))使得: Q ( θ ( i + 1 ) , θ ( i ) ) > Q ( θ ( i ) , θ ( i ) ) Q(\theta^{(i+1)},\theta^{(i)})>Q(\theta^{(i)},\theta^{(i)}) Q(θ(i+1),θ(i))>Q(θ(i),θ(i))
(4)重复(2)和(3),直到收敛。
3. Python实现EM算法
这里实现 E M {\rm EM} EM算法在高斯混合模型中的应用。首先,我们需要自定义伪造的满足高斯分布的输入数据集:
def load_data(mu0, sigma0, alpha0, mu1, sigma1, alpha1):
# 使用高斯分布生成伪造数据集,0和1分别代表两个高斯分布的参数且数据集长度为1000
len_data = 1000
# 第一个高斯分布
data0 = np.random.normal(mu0, sigma0, int(len_data * alpha0))
# 第二个高斯分布
data1 = np.random.normal(mu1, sigma1, int(len_data * alpha1))
# 总数据集
data_set = []
data_set.extend(data0)
data_set.extend(data1)
# 返回打乱后的数据
random.shuffle(data_set)
return data_set
根据高斯函数的概率密度形式计算:
def cal_gauss(data_set_arr, mu, sigma):
# 根据高斯函数的概率密度函数形式,式(11)
result = 1 / (math.sqrt(2 * math.pi) * sigma) * \
np.exp(-1 * (data_set_arr - mu) ** 2 / 2 * sigma ** 2)
# 返回
return result
E M {\rm EM} EM算法的 E {\rm E} E步:
def e_step(data_set_arr, alpha0, mu0, sigma0, alpha1, mu1, sigma1):
# EM算法的E步,首先计算分模型k对观测数据yi的响应度
gamma0 = alpha0 * cal_gauss(data_set_arr, mu0, sigma0)
gamma1 = alpha1 * cal_gauss(data_set_arr, mu1, sigma1)
# 根据公式计算各自的响应度
su = gamma0 + gamma1
gamma0 = gamma0 / su
gamma1 = gamma1 / su
# 返回
return gamma0, gamma1
E M {\rm EM} EM算法的 M {\rm M} M步:
def m_step(data_set_arr, mu0, mu1, gamma0, gamma1):
# 根据高斯混合模型参数估计的EM算法中的M步,计算新的mu值
new_mu_0 = np.dot(gamma0, data_set_arr) / np.sum(gamma0)
new_mu_1 = np.dot(gamma1, data_set_arr) / np.sum(gamma1)
# 计算新的sigma值
new_sigma_0 = math.sqrt(np.dot(gamma0, (data_set_arr - mu0) ** 2) / np.sum(gamma0))
new_sigma_1 = math.sqrt(np.dot(gamma1, (data_set_arr - mu1) ** 2) / np.sum(gamma1))
# 计算新的alpha值
new_alpha_0 = np.sum(gamma0) / len(gamma0)
new_alpha_1 = np.sum(gamma1) / len(gamma1)
# 返回
return new_mu_0, new_mu_1, new_sigma_0, new_sigma_1, new_alpha_0, new_alpha_1
模型训练并返回预测结果:
def model_train(data_set, it=500):
# 转换数据格式
data_set = np.array(data_set)
# 给定初始值
alpha0 = 0.5
mu0 = 0
sigma0 = 1
alpha1 = 0.5
mu1 = 1
sigma1 = 1
# 开始迭代
s = 0
while s < it:
s += 1
# E步,计算响应度
gamma0, gamma1 = e_step(data_set, alpha0, mu0, sigma0, alpha1, mu1, sigma1)
# M步,更新参数
mu0, mu1, sigma0, sigma1, alpha0, alpha1 = m_step(data_set, mu0, mu1, gamma0, gamma1)
# 返回迭代后的结果
return alpha0, mu0, sigma0, alpha1, mu1, sigma1
4. EM算法总结
E M {\rm EM} EM算法是含有隐变量的概率模型极大似然估计或极大后验概率估计迭代算法。含有隐变量的概率模型的数据表示为 P ( Y , Z ∣ θ ) P(Y,Z|\theta) P(Y,Z∣θ),其中 Y Y Y是观测变量的数据, Z Z Z是隐变量的数据, θ \theta θ是模型参数。 E M {\rm EM} EM算法的每次迭代包括两步: E {\rm E} E步:求期望, M {\rm M} M步:求极大。 E M {\rm EM} EM算法的应用及其广泛,高斯混合模型的参数估计是 E M {\rm EM} EM算法的一个重要应用,后面介绍的隐马尔可夫的无监督学习也是 E M {\rm EM} EM算法的一个重要应用。
参考
- 统计学习方法/李航著。—2版。—北京:清华大学出版社,2019(2019.6重印).
- https://github.com/Dod-o/Statistical-Learning-Method_Code(EM算法代码).