实际上EM算法的思想常常出现在我们的日常生活中,我们在日常中也一定使用过EM算法。
举个例子,刚来到一个公司,你希望知道哪些行为(参数),可以最大化你的工资(目标函数),但是又因为你是新人所以有很多东西跟你工资的关系都不知道(比如员工,领导之间的关系,公司的文化等等),你唯一知道的就是在表明上的东西(观测变量),比如公司的规章制度等等,那么这时候你会怎么办呢?你或许会采取一种策略,先根据过去的经验来猜测这些隐藏因素对你工资的影响(E步),然后根据这些猜测来决定你采取什么行动(M步),当你采取完行动后,你又获得了一些经验,刷新了你对这些隐藏因素的看法,于是你修正你的想法(E步),再去优化你的行动(M步)直到最后收敛到一个最优值。
因此,形式化来讲,EM算法就是要最大化似然度来求得一个参数 θ \theta θ的最优值。但是,很多时候,当我们的模型中存在隐变量的时候(比如,一个词所属的主题,聚类问题中样本的类别, etc.),我们的似然度是很难求的。下面是该似然度的式子,其中z表示不可观测的变量,x表示可观测的变量,由于z是不可观测的,所以,要求似然度,我们必须要对z求和或求积分(连续的时候求积分,离散的时候求和)。
L
(
θ
)
=
∑
i
=
1
N
log
p
(
x
i
∣
θ
)
=
∑
i
=
1
N
log
[
∑
z
i
p
(
x
i
,
z
i
∣
θ
)
]
\mathcal{L}( \theta ) =\sum ^{N}_{i=1}\log p( x_{i} |\theta ) =\sum ^{N}_{i=1}\log\left[\sum _{z_{i}} p( x_{i} ,z_{i} |\theta )\right]
L(θ)=i=1∑Nlogp(xi∣θ)=i=1∑Nlog[zi∑p(xi,zi∣θ)]
可以看到上面的这个式子,如果不存在隐变量的话,那么那个log是直接作用与p的,如果p恰好是指数族分布,那么这个似然度就非常好求,但是有隐变量的时候,log被一个
∑
z
\sum _{z}
∑z给截断的,这就使得这个式子变得很难优化。
这个问题的关键在于, log p ( x i ∣ θ ) \log p( x_{i} |\theta ) logp(xi∣θ)很难优化,但是 p ( x i , z i ∣ θ ) p( x_{i} ,z_{i} |\theta ) p(xi,zi∣θ)却很好优化,比如说聚类的时候,你提前知道所有样本的类别了,那你计算每个类别的中心距离就太简单了,但是要优化 p ( x i , z i ∣ θ ) p( x_{i} ,z_{i} |\theta ) p(xi,zi∣θ)的前提是,你要看得到隐变量的取值才行啊,然而隐变量是看不到的。EM算法通过一个巧妙的构造,让 p ( x i , z i ∣ θ ) p( x_{i} ,z_{i} |\theta ) p(xi,zi∣θ)和似然度 p ( x i ∣ θ ) p( x_{i} |\theta ) p(xi∣θ)的下界联系起来,这是我们只要优化下界就能代替优化似然度本身。
接下来我们看一下对于单个样本 p ( x i ) p( x_{i}) p(xi)似然度的下界是什么东西。在这里我们引入了 z i z_{i} zi的分布 q i ( z i ) q_{i}( z_{i}) qi(zi)
log
p
(
x
i
∣
θ
)
=
log
p
(
x
i
,
z
i
)
−
log
p
(
z
i
∣
x
i
)
=
log
(
p
(
x
i
,
z
i
)
q
i
(
z
i
)
)
−
log
(
p
(
z
i
∣
x
i
)
q
i
(
z
i
)
)
=
log
p
(
x
i
,
z
i
)
−
log
q
i
(
z
i
)
−
log
(
p
(
z
i
∣
x
i
)
q
i
(
z
i
)
)
=
∫
q
i
(
z
i
)
log
p
(
x
i
,
z
i
)
d
z
−
∫
q
i
(
z
i
)
log
q
(
z
i
)
d
z
−
∫
q
i
(
z
i
)
log
(
p
(
z
i
∣
x
i
)
q
i
(
z
i
)
)
d
z
(
两边同时对
z
求期望
)
=
E
z
i
(
log
p
(
x
i
,
z
i
)
)
−
H
(
q
i
)
⏟
E
L
B
O
i
+
K
L
(
q
i
(
z
i
)
∣
∣
p
(
z
i
∣
x
i
)
)
\begin{aligned} \log p( x_{i} |\theta ) & =\log p( x_{i} ,z_{i}) -\log p( z_{i} |x_{i})\\ & =\log\left(\frac{p( x_{i} ,z_{i})}{q_{i}( z_{i})}\right) -\log\left(\frac{p( z_{i} |x_{i})}{q_{i}( z_{i})}\right)\\ & =\log p( x_{i} ,z_{i}) -\log q_{i}( z_{i}) -\log\left(\frac{p( z_{i} |x_{i})}{q_{i}( z_{i})}\right)\\ & =\int q_{i}( z_{i})\log p( x_{i} ,z_{i}) dz-\int q_{i}( z_{i})\log q( z_{i}) dz-\int q_{i}( z_{i})\log\left(\frac{p( z_{i} |x_{i})}{q_{i}( z_{i})}\right) dz( 两边同时对z求期望)\\ & =\underbrace{E_{z_{i}}(\log p( x_{i} ,z_{i})) -H( q_{i})}_{ELBO_{i}} +KL( q_{i}( z_{i}) ||p( z_{i} |x_{i})) \end{aligned}
logp(xi∣θ)=logp(xi,zi)−logp(zi∣xi)=log(qi(zi)p(xi,zi))−log(qi(zi)p(zi∣xi))=logp(xi,zi)−logqi(zi)−log(qi(zi)p(zi∣xi))=∫qi(zi)logp(xi,zi)dz−∫qi(zi)logq(zi)dz−∫qi(zi)log(qi(zi)p(zi∣xi))dz(两边同时对z求期望)=ELBOi
Ezi(logp(xi,zi))−H(qi)+KL(qi(zi)∣∣p(zi∣xi))
我们知道
K
L
(
q
(
z
i
)
∣
∣
p
(
z
i
∣
x
i
)
)
⩾
0
KL( q( z_{i}) ||p( z_{i} |x_{i})) \geqslant 0
KL(q(zi)∣∣p(zi∣xi))⩾0,所以这个似然度一定有
log
p
(
x
i
)
⩾
E
z
i
(
log
p
(
x
i
,
z
i
)
)
−
H
(
q
i
)
\log p( x_{i}) \geqslant E_{z_{i}}(\log p( x_{i} ,z_{i})) -H( q_{i})
logp(xi)⩾Ezi(logp(xi,zi))−H(qi)
可以看到对数似然度被分解成了两部分,一个是evidence lower bound(ELBO),似然度的下界,另一个是KL距离,不管q是什么分布,这两部分加起来肯定是一样的。
图中的L是我们的ELBO。
也就是说,只要我们令KL距离为0,此时
q
(
z
)
=
p
(
z
∣
x
)
q( z) =p( z|x)
q(z)=p(z∣x),那么ELBO就等于似然度的值了。这就意味着我们最大化
θ
\theta
θ的时候,不再需要对
log
p
(
x
∣
θ
)
\log p( x|\theta )
logp(x∣θ)做,只需要找到
θ
\theta
θ使得这个ELBO最大不就相当于在“最大化我们的似然度”吗。而最大化这个ELBO太简单了,在这里
H
(
q
)
H( q)
H(q)是q的熵,与
θ
\theta
θ无关只与分布q有关,所以不用管。于是我们把
q
(
z
)
=
p
(
z
∣
x
)
q( z) =p( z|x)
q(z)=p(z∣x)代入到ELBO中得到
E
L
B
O
i
=
E
z
i
(
log
p
(
x
i
,
z
i
)
)
+
c
o
n
s
t
=
∫
q
i
(
z
i
)
log
p
(
x
i
,
z
i
)
d
z
+
c
o
n
s
t
=
∫
p
(
z
i
∣
x
i
)
log
p
(
x
i
,
z
i
)
d
z
+
c
o
n
s
t
=
∑
z
i
p
(
z
i
∣
x
i
)
log
p
(
x
i
,
z
i
)
+
c
o
n
s
t
(
如果
z
是离散的
)
\begin{aligned} ELBO_{i} & =E_{z_{i}}(\log p( x_{i} ,z_{i})) +const\\ & =\int q_{i}( z_{i})\log p( x_{i} ,z_{i}) dz+const\\ & =\int p( z_{i} |x_{i})\log p( x_{i} ,z_{i}) dz+const\\ & =\sum _{z_{i}} p( z_{i} |x_{i})\log p( x_{i} ,z_{i}) +const( 如果z是离散的) \end{aligned}
ELBOi=Ezi(logp(xi,zi))+const=∫qi(zi)logp(xi,zi)dz+const=∫p(zi∣xi)logp(xi,zi)dz+const=zi∑p(zi∣xi)logp(xi,zi)+const(如果z是离散的)
EM算法,示意图,E步,把KL设为0,蓝色的线往上移,使得ELBO=似然度,M步,最大化ELBO,使得似然度增大,红色的线往上移,然后我们不断重复直到收敛。
考虑所有样本,正式的EM框架:
E步:把
q
i
(
z
i
)
=
p
(
z
i
∣
x
i
)
q_{i}( z_{i}) =p( z_{i} |x_{i})
qi(zi)=p(zi∣xi)代入到下界中,再把常数项剔除,
Q
(
θ
,
θ
t
−
1
)
=
∑
i
=
1
N
∑
z
i
p
(
z
i
∣
x
i
,
θ
t
−
1
)
log
p
(
x
i
,
z
i
,
θ
)
=
∑
i
=
1
N
E
[
log
p
(
x
i
,
z
i
∣
θ
)
∣
x
i
,
θ
t
−
1
]
Q\left( \theta ,\theta ^{t-1}\right) =\sum ^{N}_{i=1}\sum _{z_{i}} p( z_{i} |x_{i},\theta^{t-1})\log p( x_{i} ,z_{i},\theta)=\sum ^{N}_{i=1} E\left[\log p( x_{i} ,z_{i} |\theta ) |x_{i} ,\theta ^{t-1}\right]
Q(θ,θt−1)=i=1∑Nzi∑p(zi∣xi,θt−1)logp(xi,zi,θ)=i=1∑NE[logp(xi,zi∣θ)∣xi,θt−1]
M步:最大化下界ELBO
θ
t
=
arg
max
θ
Q
(
θ
,
θ
t
−
1
)
\theta ^{t} =\arg\max_{\theta } Q\left( \theta ,\theta ^{t-1}\right)
θt=argθmaxQ(θ,θt−1)
M步2:我们还可以做MAP估计,只需要在Q加上参数的对数先验就可以轻松完成,E步没有任何变化
θ
t
=
arg
max
θ
Q
(
θ
,
θ
t
−
1
)
+
log
p
(
θ
)
\theta ^{t} =\arg\max_{\theta } Q\left( \theta ,\theta ^{t-1}\right) +\log p( \theta )
θt=argθmaxQ(θ,θt−1)+logp(θ)
在MAP估计的时候,不仅需要考虑下界的最大化,还需要考虑先验对参数的影响。