前言
EM算法是机器学习十大算法之一,它很简单,但是也同样很有深度,简单是因为它就分两步求解问题,
- E步:求期望(expectation)
- M步:求极大(maximization)
深度在于它的数学推理涉及到比较繁杂的概率公式等,所以本文会介绍很多概率方面的知识,不懂的同学可以先去了解一些知识,当然本文也会尽可能的讲解清楚这些知识,讲的不好的地方麻烦大家评论指出,后续不断改进完善。
EM算法引入
概率模型有时候既含有观测变量,又含有隐变量或潜在变量,如果概率模型的变量都是观测变量,那么给定数据,可以直接用极大似然估计法,或贝叶斯估计方法估计模型参数,但是当模型含有隐变量时,就不能简单的使用这些方法,EM算法就是含有隐变量的概率模型参数的极大似然估计法,或极大后验概率估计法,我们讨论极大似然估计,极大后验概率估计与其类似。
参考统计学习方法书中的一个例子来引入EM算法, 假设有3枚硬币,分别记做A、B、C,这些硬币正面出现的概率分别是
π
\pi
π、
p
p
p、
q
q
q,进行如下实验:
-
先掷硬币A,根据结果选出硬币B和硬币C,正面选硬币B,反面选硬币C
-
通过选择出的硬币,掷硬币的结果出现正面为1,反面为0
如此独立地重复n次实验,我们当前规定n=10,则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 y ( 1 − p ) 1 − y + ( 1 − π ) q y ( 1 − q ) 1 − y \begin{aligned} P(y|\theta) &=\sum_{z}P(y,z|\theta)=\sum_{z}P(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 = 1 y=1 y=1,表示这此看到的是正面,这个正面有可能是B的正面,也可能是C的正面,则 P ( 1 ∣ θ ) = π p + ( 1 − π ) q P(1|\theta)=\pi p+(1-\pi)q P(1∣θ)=πp+(1−π)q
-
若 y = 0 y=0 y=0,则 P ( 0 ∣ θ ) = π ( 1 − p ) + ( 1 − π ) ( 1 − q ) P(0|\theta)=\pi (1-p)+(1-\pi)(1-q) P(0∣θ)=π(1−p)+(1−π)(1−q)
y是观测变量,表示一次观测结果是1或0,z是隐藏变量,表示掷硬币A的结果,这个是观测不到结果的,
θ
=
(
π
,
p
,
q
)
\theta=(\pi,p,q)
θ=(π,p,q)表示模型参数,将观测数据表示为
Y
=
(
Y
1
,
Y
2
,
.
.
.
,
Y
n
)
T
Y=(Y_1,Y_2,...,Y_n)^{T}
Y=(Y1,Y2,...,Yn)T,未观测的数据表示为
Z
=
(
Z
1
,
Z
2
,
.
.
.
,
Z
n
)
T
Z=(Z_1,Z_2,...,Z_n)^{T}
Z=(Z1,Z2,...,Zn)T,则观测函数的似然函数是:
P
(
Y
∣
θ
)
=
∑
Z
P
(
Z
∣
θ
)
P
(
Y
∣
Z
,
θ
)
=
∏
i
=
0
(
π
p
y
i
(
1
−
p
)
1
−
y
i
+
(
1
−
π
)
q
y
i
(
1
−
q
)
1
−
y
i
)
\begin{aligned} P(Y|\theta)&=\sum_{Z}P(Z|\theta)P(Y|Z,\theta)\\ &=\prod_{i=0} ( \pi p^{y_i}(1-p)^{1-y_{i}}+(1-\pi)q^{y_{i}}(1-q)^{1-y_{i}}) \end{aligned}
P(Y∣θ)=Z∑P(Z∣θ)P(Y∣Z,θ)=i=0∏(πpyi(1−p)1−yi+(1−π)qyi(1−q)1−yi)
考虑求模型参数
θ
=
(
π
,
p
,
q
)
\theta=(\pi,p,q)
θ=(π,p,q)的极大似然估计,即:
θ
^
=
a
r
g
max
θ
l
o
g
P
(
Y
∣
θ
)
\hat{\theta}=arg\max_{\theta}logP(Y|\theta)
θ^=argθmaxlogP(Y∣θ)
这个问题没有解析解,只有通过迭代方法来求解,EM算法就是可以用于求解这个问题的一种迭代算法,下面给出EM算法的迭代过程:
-
首先选取初始值,记做 θ 0 = ( π 0 , p 0 , q 0 ) \theta^{0}=(\pi^{0},p^{0},q^{0}) θ0=(π0,p0,q0),第i次的迭代参数的估计值为 θ i = ( π i , p i , q i ) \theta^{i}=(\pi^{i},p^{i},q^{i}) θi=(πi,pi,qi)
-
E步:计算在模型参数 π i , p i , q i \pi^{i},p^{i},q^{i} πi,pi,qi下观测变量 y i y_i yi来源于硬币B的概率:
μ i + 1 = π i ( p i ) y i ( 1 − p i ) 1 − y i π i ( p i ) y i ( 1 − p i ) 1 − y i + ( 1 − π i ) ( q i ) y i ( 1 − p i ) 1 − y i \mu^{i+1}=\frac{\pi^{i}(p^{i})^{y_i}(1-p^i)^{1-y_i}}{\pi^{i}(p^{i})^{y_i}(1-p^i)^{1-y_i}+(1-\pi^{i})(q^{i})^{y_i}(1-p^i)^{1-y_i}} μi+1=πi(pi)yi(1−pi)1−yi+(1−πi)(qi)yi(1−pi)1−yiπi(pi)yi(1−pi)1−yi
备注一下:这个公式的分母是 P ( Y ∣ θ ) P(Y|\theta) P(Y∣θ),分子表示是来源与B硬币的概率。 -
M步:计算模型参数的新估计值:
π i + 1 = 1 n ∑ j = 1 n μ j i + 1 \pi^{i+1}=\frac{1}{n}\sum_{j=1}^{n}\mu_{j}^{i+1} πi+1=n1j=1∑nμji+1
因为B硬币A硬币出现正面的结果,所以A硬币概率就是 μ j \mu_{j} μj的平均值。
p i + 1 = ∑ j = 1 n μ j i + 1 y j ∑ j = 1 n μ j i + 1 p^{i+1}=\frac{\sum_{j=1}^{n}\mu_{j}^{i+1}y_j}{\sum_{j=1}^{n}\mu_{j}^{i+1}} pi+1=∑j=1nμji+1∑j=1nμji+1yj
分子乘以 y i y_{i} yi,所以其实是计算B硬币出现正面的概率。
q i + 1 = ∑ j = 1 n ( 1 − μ j i + 1 ) y j ∑ j = 1 n ( 1 − μ j i + 1 ) q^{i+1}=\frac{\sum_{j=1}^{n}(1-\mu_{j}^{i+1})y_j}{\sum_{j=1}^{n}(1-\mu_{j}^{i+1})} qi+1=∑j=1n(1−μji+1)∑j=1n(1−μji+1)yj
( 1 − μ j i + 1 ) (1-\mu_{j}^{i+1}) (1−μji+1)表示出现C硬币的概率。
闭环形成,从
P
(
Y
∣
θ
)
P(Y|\theta)
P(Y∣θ) 到
π
、
p
、
q
\pi、p、q
π、p、q一个闭环流程,接下来可以通过迭代法来做完成。针对上述例子,我们假设初始值为
π
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,p0=0.5,q0=0.5,因为对
y
i
=
1
y_i=1
yi=1和
y
i
=
0
y_i=0
yi=0均有
μ
j
1
=
0.5
\mu_j^{1}=0.5
μj1=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,p1=0.6,q1=0.6,继续迭代得到最终的参数:
π
0
^
=
0.5
,
p
0
^
=
0.6
,
q
0
^
=
0.6
\widehat{\pi^{0}}=0.5,\widehat{p^{0}}=0.6,\widehat{q^{0}}=0.6
π0
=0.5,p0
=0.6,q0
=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,p0=0.6,q0=0.7,那么得到的模型参数的极大似然估计是
π
^
=
0.4064
,
p
^
=
0.5368
,
q
^
=
0.6432
\widehat{\pi}=0.4064,\widehat{p}=0.5368,\widehat{q}=0.6432
π
=0.4064,p
=0.5368,q
=0.6432,这说明EM算法与初值的选择有关,选择不同的初值可能得到不同的参数估计值。
这个例子中你只观察到了硬币抛完的结果,并不了解A硬币抛完之后,是选择了B硬币抛还是C硬币抛,这时候概这就成了一个先有鸡还是先有蛋的问题了。鸡说:没有我,谁把你生出来的啊。蛋不服,说:没有我,你从哪蹦出来啊。为了解决这个你依赖我,我依赖你的循环依赖问题,总得有一方要先打破僵局,不管了,我先随便整一个值出来,看你怎么变,然后我再根据你的变化调整我的变化。
EM算法
输入:观测变量数据Y,隐变量数据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步:记 θ i \theta^i θi为第i次迭代参数 θ \theta θ的估计值,在第i+1次迭代的E步,计算
Q ( θ , θ i ) = E Z [ l o g P ( Y , Z ∣ θ ) ∣ Y , θ i ] = ∑ Z l o g P ( Y , Z ∣ θ ) P ( Z ∣ Y , θ i ) \begin{aligned} Q(\theta,\theta^i)&=E_{Z}[logP(Y,Z|\theta)|Y,\theta^i]\\ &=\sum_{Z}logP(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)
这里, P ( Z ∣ Y , θ i ) P(Z|Y,\theta^i) P(Z∣Y,θi)是在给定观测数据Y和当前的参数估计 θ i \theta^i θi下隐变量数据Z的条件概率分布; -
(3) M步:求使 Q ( θ , θ i ) Q(\theta,\theta^i) Q(θ,θi)极大化的 θ \theta θ,确定第i+1次迭代的参数的估计值 θ i + 1 \theta^{i+1} θi+1,
θ i + 1 = a r g max θ Q ( θ , θ i ) \theta^{i+1}=arg \max \limits_{\theta}Q(\theta,\theta^{i}) θi+1=argθmaxQ(θ,θi)
Q ( θ , θ i ) Q(\theta,\theta^{i}) Q(θ,θi)是EM算法的核心,称为Q函数(Q function),这个是需要自己构造的。 -
(4) 重复第(2)步和第(3)步,直到收敛,收敛条件:
∣ ∣ θ i + 1 − θ i ∣ ∣ < ε 1 || \theta^{i+1}-\theta^{i} || < \varepsilon_1 ∣∣θi+1−θi∣∣<ε1
或者:
∣ ∣ Q ( θ i + 1 , θ i ) − Q ( θ i , θ i ) ∣ ∣ < ε 2 ||Q(\theta^{i+1},\theta^{i})-Q(\theta^{i},\theta^{i})|| <\varepsilon_2 ∣∣Q(θi+1,θi)−Q(θi,θi)∣∣<ε2
收敛迭代就结束了。其实这里应该思考一个问题,E步到底在做什么事情,如果只是定义 Q Q Q函数,那么可以在M步来操作就行,完全不要这个E步。于是在找来了一些资料来了解一下,其中有一篇博客讲解的非常好,我这里简约一些流程,并做一些注释。部分内容在推导逼近里有讲到,我们这里超前讲解一下,增加隐藏变量之后似然函数如下:
L ( θ , z ) = ∑ i = 1 m l o g ∑ z i P ( x i , z i ∣ θ ) L(\theta,z)=\sum_{i=1}^{m}log\sum_{z^{i}}P(x^{i},z^{i}|\theta) L(θ,z)=i=1∑mlogzi∑P(xi,zi∣θ)
我们需要对此公式求最大值时的变量 z , θ z,\theta z,θ,所以完整的公式是:
z , θ = a r g m a x L ( θ , z ) = a r g m a x ∑ i = 1 m l o g ∑ z i P ( x i , z i ∣ θ ) z,\theta = arg max L(\theta,z)=arg max \sum_{i=1}^{m}log\sum_{z^{i}}P(x^{i},z^{i}|\theta) z,θ=argmaxL(θ,z)=argmaxi=1∑mlogzi∑P(xi,zi∣θ)
利用由于“和的对数”求解过于复杂,用jensen不等式来转换为“对数的和”,于是有:
L ( θ , z ) = ∑ i = 1 m l o g ∑ z i P ( x i , z i ∣ θ ) = ∑ i = 1 m l o g ∑ z i Q ( z i ) P ( x i , z i ∣ θ ) Q ( z i ) ≥ ∑ i = 1 m ∑ z i Q ( z i ) l o g P ( x i , z i ∣ θ ) Q ( z i ) L(\theta,z)=\sum_{i=1}^{m}log\sum_{z^{i}}P(x^{i},z^{i}|\theta) \\ =\sum_{i=1}^{m}log\sum_{z^{i}}Q(z^{i})\frac{P(x^{i},z^{i}|\theta)}{Q(z^{i})} \\ \ge \sum_{i=1}^{m}\sum_{z^{i}}Q(z^{i})log\frac{P(x^{i},z^{i}|\theta)}{Q(z^{i})} L(θ,z)=i=1∑mlogzi∑P(xi,zi∣θ)=i=1∑mlogzi∑Q(zi)Q(zi)P(xi,zi∣θ)≥i=1∑mzi∑Q(zi)logQ(zi)P(xi,zi∣θ)
其实这里是把 Q ( z i ) Q(z^{i}) Q(zi)作为权重,利用了期望函数来做jensen不等式转换:
l o g E ( y ) ≥ E ( l o g ( y ) ) logE(y) \ge E(log(y)) logE(y)≥E(log(y))
那什么时候不等式相等呢?只有当y等于常数的时候,也就是:
y = c = P ( x i , z i ∣ θ ) Q ( z i ) c Q ( z i ) = P ( x i , z i ∣ θ ) y=c=\frac{P(x^{i},z^{i}|\theta)}{Q(z^{i})} \\ cQ(z^{i}) = P(x^{i},z^{i}|\theta) y=c=Q(zi)P(xi,zi∣θ)cQ(zi)=P(xi,zi∣θ)
对其做累计和,由于有 ∑ z i Q ( z i ) = 1 \sum_{z^i} Q(z^{i}) =1 ∑ziQ(zi)=1,于是有:
∑ c Q ( z i ) = ∑ z i P ( x i , z i ∣ θ ) c = ∑ z i P ( x i , z i ∣ θ ) \begin{aligned} \sum cQ(z^{i}) &= \sum_{z^i} P(x^{i},z^{i}|\theta) \\ c &=\sum_{z^i} P(x^{i},z^{i}|\theta) \end{aligned} ∑cQ(zi)c=zi∑P(xi,zi∣θ)=zi∑P(xi,zi∣θ)
所以 Q ( z i ) Q(z^{i}) Q(zi)的形式其实是:
Q ( z i ) = P ( x i , z i ∣ θ ) ∑ z i P ( x i , z i ∣ θ ) Q(z^{i}) = \frac{P(x^{i},z^{i}|\theta)}{\sum_{z^i} P(x^{i},z^{i}|\theta)} Q(zi)=∑ziP(xi,zi∣θ)P(xi,zi∣θ)
这也是E步要做的计算,计算得到了 Q ( z i ) Q(z^{i}) Q(zi),接下来算M步,原公式固定 Q ( z i ) Q(z^{i}) Q(zi),将其作为常数,去掉坟分母中的 Q ( z i ) Q(z^{i}) Q(zi),利用极值求解 θ \theta θ,则原公式变为:
θ = a r g m a x ∑ i = 1 m ∑ z i Q ( z i ) l o g P ( x i , z i ∣ θ ) \theta=arg max \sum_{i=1}^{m}\sum_{z^{i}}Q(z^{i})log P(x^{i},z^{i}|\theta) θ=argmaxi=1∑mzi∑Q(zi)logP(xi,zi∣θ)
聊一下为啥不去掉另一个 Q ( z i ) Q(z^{i}) Q(zi),主要是另一个对求极值导数,影响值,如下:
Q ( z i ) l o g P ( x i , z i ∣ θ ) − Q ( z i ) l o g Q ( z i ) Q(z^{i})log P(x^{i},z^{i}|\theta) - Q(z^{i})log Q(z^{i}) Q(zi)logP(xi,zi∣θ)−Q(zi)logQ(zi)
求导数,后面的公式等于0,所以直接去掉分母中的 Q ( z i ) Q(z^{i}) Q(zi)
推导逼近
主要讲解Jensen不等式,这个公式在推导和收敛都用到,主要是如下的结论:
-
f
(
x
)
f(x)
f(x)是凸函数
f ( E ( X ) ) ≤ E ( f ( x ) ) f(E(X)) \le E(f(x)) f(E(X))≤E(f(x)) -
f
(
x
)
f(x)
f(x)是凹函数
f ( E ( X ) ) ≥ E ( f ( x ) ) f(E(X)) \ge E(f(x)) f(E(X))≥E(f(x))
推导出Em算法可以近似实现对观测数据的极大似然估计的办法是找到E步骤的下界,让下届最大,通过逼近的方式实现对观测数据的最大似然估计。统计学习基础中采用的是相减方式,我们来看下具体的步骤。
- 增加隐藏变量
L ( θ ) = ∑ Z l o g P ( Y ∣ Z , θ ) P ( Z , θ ) L(\theta)=\sum_{Z}logP(Y|Z,\theta)P(Z,\theta) L(θ)=Z∑logP(Y∣Z,θ)P(Z,θ)
则 L ( θ ) − L ( θ i ) L(\theta)-L(\theta^{i}) L(θ)−L(θi)为:
L ( θ ) − L ( θ i ) = l o g ( ∑ Z P ( Y ∣ Z , θ i ) P ( Y ∣ Z , θ ) P ( Z , θ ) P ( Y ∣ Z , θ i ) ) − L ( θ i ) ≥ ∑ Z P ( Y ∣ Z , θ i ) l o g ( P ( Y ∣ Z , θ ) P ( Z , θ ) P ( Y ∣ Z , θ i ) ) − L ( θ i ) \begin{aligned} L(\theta)-L(\theta^{i})=log(\sum_{Z} P(Y|Z,\theta^i)\frac{P(Y|Z,\theta)P(Z,\theta)}{P(Y|Z,\theta^i)})-L(\theta^{i})\\ \ge \sum_{Z} P(Y|Z,\theta^i)log(\frac{P(Y|Z,\theta)P(Z,\theta)}{P(Y|Z,\theta^i)})-L(\theta^{i}) \end{aligned} L(θ)−L(θi)=log(Z∑P(Y∣Z,θi)P(Y∣Z,θi)P(Y∣Z,θ)P(Z,θ))−L(θi)≥Z∑P(Y∣Z,θi)log(P(Y∣Z,θi)P(Y∣Z,θ)P(Z,θ))−L(θi)
≥ \ge ≥这一个步骤就是采用了凹函数的Jensen不等式做转换。因为 Z Z Z是隐藏变量,所以有 ∑ Z P ( Y ∣ Z , θ i ) = = 1 , P ( Y ∣ Z , θ i ) > 0 \sum_{Z} P(Y|Z,\theta^i)==1,P(Y|Z,\theta^i)>0 ∑ZP(Y∣Z,θi)==1,P(Y∣Z,θi)>0,于是继续变:
L
(
θ
)
−
L
(
θ
i
)
=
l
o
g
(
∑
Z
P
(
Y
∣
Z
,
θ
i
)
P
(
Y
∣
Z
,
θ
)
P
(
Z
,
θ
)
P
(
Y
∣
Z
,
θ
i
)
)
−
L
(
θ
i
)
≥
∑
Z
P
(
Z
∣
Y
,
θ
i
)
l
o
g
(
P
(
Y
∣
Z
,
θ
)
P
(
Z
,
θ
)
P
(
Z
∣
Y
,
θ
i
)
)
−
L
(
θ
i
)
=
∑
Z
P
(
Z
∣
Y
,
θ
i
)
l
o
g
(
P
(
Y
∣
Z
,
θ
)
P
(
Z
,
θ
)
P
(
Z
∣
Y
,
θ
i
)
)
−
∑
Z
P
(
Z
∣
Y
,
θ
i
)
L
(
θ
i
)
=
∑
Z
P
(
Z
∣
Y
,
θ
i
)
l
o
g
(
P
(
Y
∣
Z
,
θ
)
P
(
Z
,
θ
)
P
(
Z
∣
Y
,
θ
i
)
(
P
(
Y
∣
θ
i
)
)
≥
0
\begin{aligned} L(\theta)-L(\theta^{i})&=log(\sum_{Z} P(Y|Z,\theta^i)\frac{P(Y|Z,\theta)P(Z,\theta)}{P(Y|Z,\theta^i)})-L(\theta^{i})\\ &\ge \sum_{Z} P(Z|Y,\theta^i)log(\frac{P(Y|Z,\theta)P(Z,\theta)}{P(Z|Y,\theta^i)})-L(\theta^{i})\\ &=\sum_{Z} P(Z|Y,\theta^i)log(\frac{P(Y|Z,\theta)P(Z,\theta)}{P(Z|Y,\theta^i)})-\sum_{Z} P(Z|Y,\theta^i)L(\theta^{i})\\ &= \sum_{Z} P(Z|Y,\theta^i)log(\frac{P(Y|Z,\theta)P(Z,\theta)}{P(Z|Y,\theta^i) (P(Y|\theta^{i})}) \\ & \ge0 \end{aligned}
L(θ)−L(θi)=log(Z∑P(Y∣Z,θi)P(Y∣Z,θi)P(Y∣Z,θ)P(Z,θ))−L(θi)≥Z∑P(Z∣Y,θi)log(P(Z∣Y,θi)P(Y∣Z,θ)P(Z,θ))−L(θi)=Z∑P(Z∣Y,θi)log(P(Z∣Y,θi)P(Y∣Z,θ)P(Z,θ))−Z∑P(Z∣Y,θi)L(θi)=Z∑P(Z∣Y,θi)log(P(Z∣Y,θi)(P(Y∣θi)P(Y∣Z,θ)P(Z,θ))≥0
也就是:
L
(
θ
)
≥
L
(
θ
i
)
+
∑
Z
P
(
Z
∣
Y
,
θ
i
)
l
o
g
(
P
(
Y
∣
Z
,
θ
)
P
(
Z
,
θ
)
P
(
Y
∣
Z
,
θ
i
)
L
(
θ
i
)
)
L(\theta)\ge L(\theta^{i})+ \sum_{Z} P(Z|Y,\theta^i)log(\frac{P(Y|Z,\theta)P(Z,\theta)}{P(Y|Z,\theta^i) L(\theta^{i})})
L(θ)≥L(θi)+∑ZP(Z∣Y,θi)log(P(Y∣Z,θi)L(θi)P(Y∣Z,θ)P(Z,θ)),有下界,最大化下界,来得到近似值。这里有一个细节:
P
(
Y
∣
Z
,
θ
i
)
P(Y|Z,\theta^i)
P(Y∣Z,θi) 变为
P
(
Z
∣
Y
,
θ
i
)
P(Z|Y,\theta^i)
P(Z∣Y,θi)?如果要满足Jensen不等式的等号,则有:
P
(
Y
∣
Z
,
θ
)
P
(
Z
,
θ
)
P
(
Y
∣
Z
,
θ
i
)
=
c
\frac{P(Y|Z,\theta)P(Z,\theta)}{P(Y|Z,\theta^i)} = c
P(Y∣Z,θi)P(Y∣Z,θ)P(Z,θ)=c
c为一个常数,而
∑
Z
P
(
Y
∣
Z
,
θ
i
)
=
1
\sum_{Z}P(Y|Z,\theta^i)=1
∑ZP(Y∣Z,θi)=1则:
∑
Z
P
(
Y
∣
Z
,
θ
)
P
(
Z
,
θ
)
=
c
∑
Z
P
(
Y
∣
Z
,
θ
i
)
=
c
=
P
(
Y
∣
Z
,
θ
)
P
(
Z
,
θ
)
P
(
Y
∣
Z
,
θ
i
)
P
(
Y
∣
Z
,
θ
)
=
P
(
Y
∣
Z
,
θ
)
P
(
Z
,
θ
)
∑
Z
P
(
Y
∣
Z
,
θ
)
P
(
Z
,
θ
)
=
P
(
Y
,
Z
,
θ
)
P
(
Y
,
θ
)
=
P
(
Z
∣
Y
,
θ
)
\begin{aligned} \sum_{Z}P(Y|Z,\theta)P(Z,\theta)= c\sum_{Z}P(Y|Z,\theta^i)&=c\\ &=\frac{P(Y|Z,\theta)P(Z,\theta)}{P(Y|Z,\theta^i)}\\ P(Y|Z,\theta)=\frac{P(Y|Z,\theta)P(Z,\theta)}{\sum_{Z}P(Y|Z,\theta)P(Z,\theta)}=\frac{P(Y,Z,\theta)}{P(Y,\theta)}=P(Z|Y,\theta) \end{aligned}
Z∑P(Y∣Z,θ)P(Z,θ)=cZ∑P(Y∣Z,θi)P(Y∣Z,θ)=∑ZP(Y∣Z,θ)P(Z,θ)P(Y∣Z,θ)P(Z,θ)=P(Y,θ)P(Y,Z,θ)=P(Z∣Y,θ)=c=P(Y∣Z,θi)P(Y∣Z,θ)P(Z,θ)
大家是不是很奇怪 P ( Y ∣ Z , θ ) P ( Z , θ ) P(Y|Z,\theta)P(Z,\theta) P(Y∣Z,θ)P(Z,θ)加上 ∑ \sum ∑之后等于什么,其实有的博客这里使用 P ( Z , θ ) = P ( Y i , Z i , θ i ) P(Z,\theta) = P(Y^i,Z^i,\theta^i) P(Z,θ)=P(Yi,Zi,θi)来替代 P ( Y ∣ Z , θ ) P(Y|Z,\theta) P(Y∣Z,θ)参与计算,这样 ∑ Z P ( Y i , Z i , θ i ) \sum_{Z}P(Y^i,Z^i,\theta^i) ∑ZP(Yi,Zi,θi),这样就方便理解来了。
于是最大化如下:
θ
i
+
1
=
a
r
g
max
θ
∑
Z
P
(
Z
∣
Y
,
θ
i
)
l
o
g
(
P
(
Y
∣
Z
,
θ
)
P
(
Z
,
θ
)
P
(
Z
∣
Y
,
θ
i
)
)
=
a
r
g
max
θ
∑
Z
P
(
Z
∣
Y
,
θ
i
)
l
o
g
(
P
(
Y
∣
Z
,
θ
)
P
(
Z
,
θ
)
)
=
a
r
g
max
θ
∑
Z
P
(
Z
∣
Y
,
θ
i
)
l
o
g
(
P
(
Y
,
Z
∣
θ
)
)
=
a
r
g
max
θ
Q
(
θ
,
θ
i
)
\begin{aligned} \theta^{i+1}&=arg \max_{\theta}\sum_{Z} P(Z|Y,\theta^i)log(\frac{P(Y|Z,\theta)P(Z,\theta)}{P(Z|Y,\theta^i)})\\ &=arg \max_{\theta}\sum_{Z} P(Z|Y,\theta^i)log(P(Y|Z,\theta)P(Z,\theta))\\ & =arg \max_{\theta}\sum_{Z} P(Z|Y,\theta^i)log(P(Y,Z|\theta))\\ &=arg \max_{\theta}Q(\theta,\theta^i) \end{aligned}
θi+1=argθmaxZ∑P(Z∣Y,θi)log(P(Z∣Y,θi)P(Y∣Z,θ)P(Z,θ))=argθmaxZ∑P(Z∣Y,θi)log(P(Y∣Z,θ)P(Z,θ))=argθmaxZ∑P(Z∣Y,θi)log(P(Y,Z∣θ))=argθmaxQ(θ,θi)
其中
l
o
g
log
log分母提出来是关于
Z
Z
Z的
∑
Z
P
(
Z
∣
Y
,
θ
i
)
l
o
g
P
(
Z
∣
Y
,
θ
i
)
\sum_{Z} P(Z|Y,\theta^i)logP(Z|Y,\theta^i)
∑ZP(Z∣Y,θi)logP(Z∣Y,θi),可以去掉。当然也有博客写的形式是:
a
r
g
max
θ
∑
i
=
1
M
∑
Z
i
P
(
Z
i
∣
Y
i
,
θ
i
)
l
o
g
(
P
(
Y
i
,
Z
i
;
θ
)
)
arg \max_{\theta}\sum_{i=1}^{M}\sum_{Z^{i}} P(Z^{i}|Y^{i},\theta^i)log(P(Y^{i},Z^{i};\theta))\\
argθmaxi=1∑MZi∑P(Zi∣Yi,θi)log(P(Yi,Zi;θ))
形式其实一样,表示的不一样而已。用jansen不等式可以把求解和的对数变为对数的和的形式,这样可以很方便的对其求导。
证明收敛
我们知道已知观测数据的似然函数是
P
(
Y
,
θ
)
P(Y,\theta)
P(Y,θ),对数似然函数为:
L
(
)
=
∑
i
=
1
M
l
o
g
P
(
y
i
,
θ
)
=
∑
i
=
1
M
l
o
g
(
P
(
y
i
,
Z
∣
θ
)
P
(
Z
∣
y
i
,
θ
)
)
=
∑
i
=
1
M
l
o
g
P
(
y
i
,
Z
∣
θ
)
−
∑
i
=
1
M
l
o
g
P
(
Z
∣
y
i
,
θ
)
\begin{aligned} L()=\sum_{i=1}^{M}logP(y^{i},\theta) &=\sum_{i=1}^{M}log(\frac{P(y^i,Z|\theta)}{P(Z|y^i,\theta)})\\ &=\sum_{i=1}^{M}logP(y^i,Z|\theta) - \sum_{i=1}^{M}logP(Z|y^i,\theta) \end{aligned}
L()=i=1∑MlogP(yi,θ)=i=1∑Mlog(P(Z∣yi,θ)P(yi,Z∣θ))=i=1∑MlogP(yi,Z∣θ)−i=1∑MlogP(Z∣yi,θ)
要证明收敛,就证明单调递增,
∑
i
=
1
M
l
o
g
P
(
y
i
,
θ
j
+
1
)
>
∑
i
=
1
M
l
o
g
P
(
y
i
,
θ
j
)
\sum_{i=1}^{M}logP(y^{i},\theta^{j+1})>\sum_{i=1}^{M}logP(y^{i},\theta^{j})
∑i=1MlogP(yi,θj+1)>∑i=1MlogP(yi,θj)
由上文知道:
Q
(
θ
,
θ
i
)
=
∑
Z
l
o
g
P
(
Y
,
Z
∣
θ
)
P
(
Z
∣
Y
,
θ
i
)
=
∑
i
=
1
M
∑
Z
j
l
o
g
P
(
y
i
,
Z
j
∣
θ
)
P
(
Z
j
∣
y
i
,
θ
i
)
\begin{aligned} Q(\theta,\theta^i)&=\sum_{Z}logP(Y,Z|\theta)P(Z|Y,\theta^i)\\ &=\sum_{i=1}^{M}\sum_{Z^j}logP(y^i,Z^j|\theta)P(Z^j|y^i,\theta^i) \end{aligned}
Q(θ,θi)=Z∑logP(Y,Z∣θ)P(Z∣Y,θi)=i=1∑MZj∑logP(yi,Zj∣θ)P(Zj∣yi,θi)
我们构造一个函数
H
H
H,让他等于:
H
(
θ
,
θ
i
)
=
∑
i
=
1
M
∑
Z
j
l
o
g
(
P
(
Z
∣
y
i
,
θ
)
P
(
Z
∣
y
i
,
θ
i
)
)
H(\theta,\theta^{i})=\sum_{i=1}^{M}\sum_{Z^j}log(P(Z|y^i,\theta)P(Z|y^i,\theta^i))
H(θ,θi)=i=1∑MZj∑log(P(Z∣yi,θ)P(Z∣yi,θi))
让
Q
(
θ
,
θ
i
)
−
H
(
θ
,
θ
i
)
Q(\theta,\theta^i)-H(\theta,\theta^{i})
Q(θ,θi)−H(θ,θi):
Q
(
θ
,
θ
i
)
−
H
(
θ
,
θ
i
)
=
∑
i
=
1
M
∑
Z
j
l
o
g
P
(
y
i
,
Z
j
∣
θ
)
P
(
Z
j
∣
y
i
,
θ
i
)
−
∑
i
=
1
M
∑
Z
j
l
o
g
(
P
(
Z
j
∣
y
i
,
θ
)
P
(
Z
j
∣
y
i
,
θ
i
)
)
=
∑
i
=
1
M
∑
Z
j
l
o
g
(
P
(
y
i
,
Z
j
∣
θ
)
−
P
(
Z
j
∣
y
i
,
θ
)
)
=
∑
i
=
1
M
l
o
g
P
(
y
i
,
θ
)
\begin{aligned} Q(\theta,\theta^i)-H(\theta,\theta^{i})&=\sum_{i=1}^{M}\sum_{Z^j}logP(y^i,Z^j|\theta)P(Z^j|y^i,\theta^i) - \sum_{i=1}^{M}\sum_{Z^j}log(P(Z^j|y^i,\theta)P(Z^j|y^i,\theta^i)) \\ &=\sum_{i=1}^{M}\sum_{Z^j}log\bigg(P(y^i,Z^j|\theta)-P(Z^j|y^i,\theta)\bigg) \\ &=\sum_{i=1}^{M}logP(y^{i},\theta) \end{aligned}
Q(θ,θi)−H(θ,θi)=i=1∑MZj∑logP(yi,Zj∣θ)P(Zj∣yi,θi)−i=1∑MZj∑log(P(Zj∣yi,θ)P(Zj∣yi,θi))=i=1∑MZj∑log(P(yi,Zj∣θ)−P(Zj∣yi,θ))=i=1∑MlogP(yi,θ)所以:
∑
i
=
1
M
l
o
g
P
(
y
i
,
θ
j
+
1
)
−
∑
i
=
1
M
l
o
g
P
(
y
i
,
θ
j
)
=
Q
(
θ
i
+
1
,
θ
i
)
−
H
(
θ
i
+
1
,
θ
i
)
−
(
Q
(
θ
i
,
θ
i
)
−
H
(
θ
i
,
θ
i
)
)
=
Q
(
θ
i
+
1
,
θ
i
)
−
Q
(
θ
i
,
θ
i
)
−
(
H
(
θ
i
+
1
,
θ
i
)
−
H
(
θ
i
,
θ
i
)
)
\sum_{i=1}^{M}logP(y^{i},\theta^{j+1})-\sum_{i=1}^{M}logP(y^{i},\theta^{j}) \\ = Q(\theta^{i+1},\theta^i)-H(\theta^{i+1},\theta^{i}) - (Q(\theta^{i},\theta^{i})-H(\theta^{i},\theta^{i}))\\ = Q(\theta^{i+1},\theta^i)- Q(\theta^{i},\theta^{i}) -( H(\theta^{i+1},\theta^{i}) - H(\theta^{i},\theta^{i}))
i=1∑MlogP(yi,θj+1)−i=1∑MlogP(yi,θj)=Q(θi+1,θi)−H(θi+1,θi)−(Q(θi,θi)−H(θi,θi))=Q(θi+1,θi)−Q(θi,θi)−(H(θi+1,θi)−H(θi,θi))
该公式左边已经被证明是大于0,证明右边:
H
(
θ
i
+
1
,
θ
i
)
−
H
(
θ
i
,
θ
i
)
<
0
H(\theta^{i+1},\theta^{i}) - H(\theta^{i},\theta^{i})<0
H(θi+1,θi)−H(θi,θi)<0:
H
(
θ
i
+
1
,
θ
i
)
−
H
(
θ
i
,
θ
i
)
=
∑
Z
j
(
l
o
g
(
P
(
Z
j
∣
Y
,
θ
i
+
1
)
P
(
Z
j
∣
Y
,
θ
i
)
)
)
P
(
Z
j
∣
Y
,
θ
i
)
=
l
o
g
(
∑
Z
j
P
(
Z
j
∣
Y
,
θ
i
+
1
)
P
(
Z
j
∣
Y
,
θ
i
)
P
(
Z
j
∣
Y
,
θ
i
)
)
=
l
o
g
P
(
Z
∣
Y
,
θ
i
+
1
)
=
l
o
g
1
=
0
\begin{aligned} H(\theta^{i+1},\theta^{i}) - H(\theta^{i},\theta^{i}) &=\sum_{Z^j}\bigg(log(\frac{P(Z^j|Y,\theta^{i+1})}{P(Z^j|Y,\theta^i)}) \bigg)P(Z^j|Y,\theta^i) \\ &=log\bigg(\sum_{Z^j}\frac{P(Z^j|Y,\theta^{i+1})}{P(Z^j|Y,\theta^i)}P(Z^j|Y,\theta^i) \bigg)\\ &=logP(Z|Y,\theta^{i+1})=log1=0 \end{aligned}
H(θi+1,θi)−H(θi,θi)=Zj∑(log(P(Zj∣Y,θi)P(Zj∣Y,θi+1)))P(Zj∣Y,θi)=log(Zj∑P(Zj∣Y,θi)P(Zj∣Y,θi+1)P(Zj∣Y,θi))=logP(Z∣Y,θi+1)=log1=0
其中不等式是由于Jensen不等式,由此证明了
∑
i
=
1
M
l
o
g
P
(
y
i
,
θ
j
+
1
)
>
∑
i
=
1
M
l
o
g
P
(
y
i
,
θ
j
)
\sum_{i=1}^{M}logP(y^{i},\theta^{j+1})>\sum_{i=1}^{M}logP(y^{i},\theta^{j})
∑i=1MlogP(yi,θj+1)>∑i=1MlogP(yi,θj),证明了EM算法的收敛性。但不能保证是全局最优,只能保证局部最优。
高斯混合分布
EM算法的一个重要应用场景就是高斯混合模型的参数估计。高斯混合模型就是由多个高斯模型组合在一起的混合模型(可以理解为多个高斯分布函数的线性组合,理论上高斯混合模型是可以拟合任意类型的分布),例如对于下图中的数据集如果用一个高斯模型来描述的话显然是不合理的:
两个高斯模型可以拟合数据集,如图所示:
如果有多个高斯模型,公式表示为:
P
(
y
∣
θ
)
=
∑
k
=
1
K
a
k
ϕ
(
y
∣
θ
k
)
ϕ
(
y
∣
θ
k
)
=
1
2
π
δ
k
e
x
p
(
−
(
y
−
μ
k
)
2
2
δ
k
2
)
a
k
>
0
,
∑
a
k
=
1
P(y|\theta)=\sum_{k=1}^{K}a_k\phi(y|\theta_{k}) \\ \phi(y|\theta_{k})=\frac{1}{\sqrt{2\pi}\delta_{k}}exp(-\frac{(y-\mu_{k})^2}{2 \delta_{k}^{2}}) \\ a_k>0,\sum a_k =1
P(y∣θ)=k=1∑Kakϕ(y∣θk)ϕ(y∣θk)=2πδk1exp(−2δk2(y−μk)2)ak>0,∑ak=1
ϕ
(
y
∣
θ
k
)
\phi(y|\theta_{k})
ϕ(y∣θk)表示为第k个高斯分布密度模型,定义如上,其中
a
k
a_k
ak表示被选中的概率。在本次模型
P
(
y
∣
θ
)
P(y|\theta)
P(y∣θ)中,观测数据是已知的,而观测数据具体来自哪个模型是未知的,有点像之前提过的三硬币模型,我们来对比一下,A硬币就像是概率
a
k
a_k
ak,用来表明具体的模型,而B、C硬币就是具体的模型,只不过这里有很多个模型,不仅仅是B、C这两个模型。我们用
γ
j
k
\gamma_{jk}
γjk来表示,则:
γ
j
k
=
{
1
第j个观测数据来源于第k个模型
0
否则
\gamma_{jk} = \begin{cases} 1& \text{第j个观测数据来源于第k个模型}\\ 0& \text{否则} \end{cases}
γjk={10第j个观测数据来源于第k个模型否则
所以一个观测数据
y
j
y_j
yj的隐藏数据
(
γ
j
1
,
γ
j
2
,
.
.
.
,
γ
j
k
)
(\gamma_{j1},\gamma_{j2},...,\gamma_{jk})
(γj1,γj2,...,γjk),那么完全似然函数就是:
P ( y , γ ∣ θ ) = ∏ k = 1 K ∏ j = 1 N [ a k ϕ ( y ∣ θ k ) ] γ j k P(y,\gamma|\theta)= \prod_{k=1}^{K}\prod_{j=1}^{N}[a_{k}\phi(y|\theta_{k})]^{\gamma_{jk}} P(y,γ∣θ)=k=1∏Kj=1∏N[akϕ(y∣θk)]γjk
取对数之后等于:
l o g ( P ( y , γ ∣ θ ) ) = l o g ( ∏ k = 1 K ∏ j = 1 N [ a k ϕ ( y ∣ θ k ) ] γ j k ) = ∑ K k = 1 ( ∑ j = 1 N ( γ j k ) l o g ( a k ) + ∑ j = 1 N ( γ j k ) [ l o g ( 1 2 π ) − l o g ( δ k ) − ( y i − μ k ) 2 2 δ k 2 ] ) \begin{aligned} log(P(y,\gamma|\theta))&=log( \prod_{k=1}^{K}\prod_{j=1}^{N}[a_{k}\phi(y|\theta_{k})]^{\gamma_{jk}})\\ &=\sum_{K}^{k=1}\bigg(\sum_{j=1}^{N}(\gamma_{jk}) log(a_k)+\sum_{j=1}^{N}( \gamma_{jk})\bigg[log(\frac{1}{\sqrt{2\pi}})-log(\delta_{k})-\frac{(y_i-\mu_{k})^2}{2 \delta_{k}^{2}}\bigg]\bigg) \end{aligned} log(P(y,γ∣θ))=log(k=1∏Kj=1∏N[akϕ(y∣θk)]γjk)=K∑k=1(j=1∑N(γjk)log(ak)+j=1∑N(γjk)[log(2π1)−log(δk)−2δk2(yi−μk)2])
- E 步 :
Q ( θ . θ i ) = E [ l o g ( P ( y , γ ∣ θ ) ) ] = ∑ K k = 1 ( ∑ j = 1 N ( E γ j k ) l o g ( a k ) + ∑ j = 1 N ( E γ j k ) [ l o g ( 1 2 π ) − l o g ( δ k ) − ( y i − μ k ) 2 2 δ k 2 ] ) \begin{aligned} Q(\theta.\theta^i) &= E[log(P(y,\gamma|\theta))]\\ &=\sum_{K}^{k=1}\bigg(\sum_{j=1}^{N}(E\gamma_{jk}) log(a_k)+\sum_{j=1}^{N}(E\gamma_{jk})\bigg[log(\frac{1}{\sqrt{2\pi}})-log(\delta_{k})-\frac{(y_i-\mu_{k})^2}{2 \delta_{k}^{2}}\bigg]\bigg) \end{aligned} Q(θ.θi)=E[log(P(y,γ∣θ))]=K∑k=1(j=1∑N(Eγjk)log(ak)+j=1∑N(Eγjk)[log(2π1)−log(δk)−2δk2(yi−μk)2])
其中我们定义 γ j k ^ \hat{\gamma_{jk}} γjk^:
γ j k ^ = E ( γ j k ∣ y , θ ) = a k ϕ ( y i ∣ θ k ) ∑ k = 1 K a k ϕ ( y i ∣ θ k ) j = 1 , 2 , . . , N ; k = 1 , 2 , . . . , K n k = ∑ j = i N E γ j k \hat{\gamma_{jk}} = E(\gamma_{jk}|y,\theta)=\frac{a_k\phi(y_i|\theta_{k})}{\sum_{k=1}^{K}a_k\phi(y_i|\theta_{k}) }\\ j=1,2,..,N;k=1,2,...,K\\ n_k=\sum_{j=i}^{N}E\gamma_{jk} γjk^=E(γjk∣y,θ)=∑k=1Kakϕ(yi∣θk)akϕ(yi∣θk)j=1,2,..,N;k=1,2,...,Knk=j=i∑NEγjk
于是化简得到:
Q ( θ . θ i ) = ∑ K k = 1 ( n k l o g ( a k ) + ∑ j = 1 N ( E γ j k ) [ l o g ( 1 2 π ) − l o g ( δ k ) − ( y i − μ k ) 2 2 δ k 2 ] ) \begin{aligned} Q(\theta.\theta^i) &= \sum_{K}^{k=1}\bigg(n_k log(a_k)+\sum_{j=1}^{N}(E\gamma_{jk})\bigg[log(\frac{1}{\sqrt{2\pi}})-log(\delta_{k})-\frac{(y_i-\mu_{k})^2}{2 \delta_{k}^{2}}\bigg]\bigg) \end{aligned} Q(θ.θi)=K∑k=1(nklog(ak)+j=1∑N(Eγjk)[log(2π1)−log(δk)−2δk2(yi−μk)2])
E 步 在代码设计上只有 γ j k ^ \hat{\gamma_{jk}} γjk^有用,用于M步的计算。
- M步,
θ i + 1 = a r g max θ Q ( θ , θ i ) \theta^{i+1}=arg \max_{\theta}Q(\theta,\theta^i) θi+1=argθmaxQ(θ,θi)
对 Q ( θ , θ i ) Q(\theta,\theta^i) Q(θ,θi)求导,得到每个未知量的偏导,使其偏导等于0,求解得到:
μ k ^ = ∑ j = 1 N γ j k ^ y i ∑ j = 1 N γ j k ^ δ k ^ = ∑ j = 1 N γ j k ^ ( y i − μ k ) 2 ∑ j = 1 N γ j k ^ a k ^ = ∑ j = 1 N γ j k ^ N \hat{\mu_k}=\frac{\sum_{j=1}^{N}\hat{\gamma_{jk}}y_i}{\sum_{j=1}^{N}\hat{\gamma_{jk}}} \\ \\ \hat{\delta_k}=\frac{\sum_{j=1}^{N}\hat{\gamma_{jk}}(y_i-\mu_k)^2}{\sum_{j=1}^{N}\hat{\gamma_{jk}}} \\ \\ \\ \hat{a_k}=\frac{\sum_{j=1}^{N}\hat{\gamma_{jk}} }{N} μk^=∑j=1Nγjk^∑j=1Nγjk^yiδk^=∑j=1Nγjk^∑j=1Nγjk^(yi−μk)2ak^=N∑j=1Nγjk^
给一个初始值,来回迭代就可以求得值内容。这一块主要用到了 Q ( θ . θ i ) Q(\theta.\theta^i) Q(θ.θi)的导数,并且用到了E步的 γ j k ^ \hat{\gamma_{jk}} γjk^。
总结
这里其实还有很多问题没讲,这一块概念突然不太想学了,有点任性的我就不继续了,大家想了解的可以去学习统计学习方法这本书,讲解的还是挺全的,可能之后我也会继续更新,哈哈。