以Kmeans和GMM为例,阐述EM思想。
Kmeans
kmeans是一种相当简单和直观的聚类算法,主要分类两步:
- 对于每个点,选择离他最近的聚类中心作为他的类别:c(i):=argminj∥x(i)−μj∥2c^{(i)} :=\arg \min _{j}\left\|x^{(i)}-\mu_{j}\right\|^{2}c(i):=argminj∥∥x(i)−μj∥∥2
- 对于每个类别,求解聚类这个类的聚类中心:μj:=∑i=1m1{c(i)=j}x(i)∑i=1m1{c(i)=j}\mu_{j} :=\frac{\sum_{i=1}^{m} 1\left\{c^{(i)}=j\right\} x^{(i)}}{\sum_{i=1}^{m} 1\left\{c^{(i)}=j\right\}}μj:=∑i=1m1{c(i)=j}∑i=1m1{c(i)=j}x(i)
虽然算法很简单,但是我们还是需要回答一个很基本的问题,这个算法会收敛吗?
我们定义一个distortion function
:J(c,μ)=∑i=1m∥x(i)−μc(i)∥2J(c, \mu)=\sum_{i=1}^{m}\left\|x^{(i)}-\mu_{c^{(i)}}\right\|^{2}J(c,μ)=∑i=1m∥∥x(i)−μc(i)∥∥2
这个函数衡量了点到对应的聚类中心的距离平方和,实际上,我们的kmeans算法能使得distortion function不断减小,具体来说:
- 第一步是在μ\muμ固定的情况下,我们通过ccc不断减小JJJ
- 第二步是在ccc固定的情况下,我们通过μ\muμ不断减小JJJ
因此,JJJ一定是单调递减的,因此也保证了算法的收敛性。
但在实际应用中,kmeans算法并不能保证全局最优解,同时可能存在着震荡,这是因为我们的优化目标JJJ不是一个凸函数。而kmeans算法的每一步都是在寻找局部最优解(local optima),因此,最好的办法是多次重复该算法,并选择最小的JJJ。
GMM
Model
假设我们有一系列训练集{x(1),…,x(m)}\left\{x^{(1)}, \ldots, x^{(m)}\right\}{x(1),…,x(m)},我们需要使用非监督学习的方法 进行训练。
我们将这些数据建模成联合分布的形式:$p\left(x^{(i)}, z^{(i)}\right)= p\left(x^{(i)} | z^{(i)}\right) p\left(z^{(i)}\right) $。
- 在这里, z(i)∼z^{(i)} \simz(i)∼ Multinomial (ϕ)(\phi)(ϕ) (where ϕj≥0,∑j=1kϕj=1\phi_{j} \geq 0, \sum_{j=1}^{k} \phi_{j}=1ϕj≥0,∑j=1kϕj=1),也就是我们的隐变量
- 在给定zzz的条件下,假设x(i)∣z(i)=j∼N(μj,Σj)x^{(i)} | z^{(i)}=j \sim \mathcal{N}\left(\mu_{j}, \Sigma_{j}\right)x(i)∣z(i)=j∼N(μj,Σj)
因此,我们首先需要通过随机变量zzz产生一个z(i)z^{(i)}z(i),然后再从对应的高斯分布中产生xxx,这种模型被称为高斯混合模型。
不难得到,对于这个模型来说,我们的参数为ϕ,μ\phi, \muϕ,μ and Σ\SigmaΣ。写成似然函数的形式:
ℓ(ϕ,μ,Σ)=∑i=1mlogp(x(i);ϕ,μ,Σ)=∑i=1mlog∑z(i)=1kp(x(i)∣z(i);μ,Σ)p(z(i);ϕ) \begin{aligned} \ell(\phi, \mu, \Sigma) &=\sum_{i=1}^{m} \log p\left(x^{(i)} ; \phi, \mu, \Sigma\right) \\ &=\sum_{i=1}^{m} \log \sum_{z^{(i)}=1}^{k} p\left(x^{(i)} | z^{(i)} ; \mu, \Sigma\right) p\left(z^{(i)} ; \phi\right) \end{aligned} ℓ(ϕ,μ,Σ)=i=1∑mlogp(x(i);ϕ,μ,Σ)=i=1∑mlogz(i)=1∑kp(x(i)∣z(i);μ,Σ)p(z(i);ϕ)
但很遗憾的是,如果我们直接对这个似然函数求导,无法得到一个cloed form。
If zzz is observed
但如果我们的隐变量zzz是已知的呢,我们是不是就很容易求解了呢?
我们重写似然函数为:
ℓ(ϕ,μ,Σ)=∑i=1mlogp(x(i)∣z(i);μ,Σ)+logp(z(i);ϕ) \ell(\phi, \mu, \Sigma)=\sum_{i=1}^{m} \log p\left(x^{(i)} | z^{(i)} ; \mu, \Sigma\right)+\log p\left(z^{(i)} ; \phi\right) ℓ(ϕ,μ,Σ)=i=1∑mlogp(x(i)∣z(i);μ,Σ)+logp(z(i);ϕ)
带入假设的分布,不难求得:
ϕj=1m∑i=1m1{z(i)=j}
\phi_{j}=\frac{1}{m} \sum_{i=1}^{m} 1\left\{z^{(i)}=j\right\}
ϕj=m1i=1∑m1{z(i)=j}
μj=∑i=1m1{z(i)=j}x(i)∑i=1m1{z(i)=j} \mu_{j}=\frac{\sum_{i=1}^{m} 1\left\{z^{(i)}=j\right\} x^{(i)}}{\sum_{i=1}^{m} 1\left\{z^{(i)}=j\right\}} μj=∑i=1m1{z(i)=j}∑i=1m1{z(i)=j}x(i)
Σj=∑i=1m1{z(i)=j}(x(i)−μj)(x(i)−μj)T∑i=1m1{z(i)=j} \Sigma_{j}=\frac{\sum_{i=1}^{m} 1\left\{z^{(i)}=j\right\}\left(x^{(i)}-\mu_{j}\right)\left(x^{(i)}-\mu_{j}\right)^{T}}{\sum_{i=1}^{m} 1\left\{z^{(i)}=j\right\}} Σj=∑i=1m1{z(i)=j}∑i=1m1{z(i)=j}(x(i)−μj)(x(i)−μj)T
因此,如果我们已知zzz,那么MLE几乎和之前的高斯判别模型完全一致了。
但实际上,zzz是未知的,那么怎么办呢?
EM algorithm
我们使用EM思想来处理。EM是一种迭代的算法,主要有两个步骤:
- E步:通过期望去gusszzz的最可能的值 wj(i):=p(z(i)=j∣x(i);ϕ,μ,Σ)w_{j}^{(i)} :=p\left(z^{(i)}=j | x^{(i)} ; \phi, \mu, \Sigma\right)wj(i):=p(z(i)=j∣x(i);ϕ,μ,Σ)
- 实际上我们是通过后验概率来进行估计:p(z(i)=j∣x(i);ϕ,μ,Σ)=p(x(i)∣z(i)=j;μ,Σ)p(z(i)=j;ϕ)∑l=1kp(x(i)∣z(i)=l;μ,Σ)p(z(i)=l;ϕ)p\left(z^{(i)}=j | x^{(i)} ; \phi, \mu, \Sigma\right)=\frac{p\left(x^{(i)} | z^{(i)}=j ; \mu, \Sigma\right) p\left(z^{(i)}=j ; \phi\right)}{\sum_{l=1}^{k} p\left(x^{(i)} | z^{(i)}=l ; \mu, \Sigma\right) p\left(z^{(i)}=l ; \phi\right)}p(z(i)=j∣x(i);ϕ,μ,Σ)=∑l=1kp(x(i)∣z(i)=l;μ,Σ)p(z(i)=l;ϕ)p(x(i)∣z(i)=j;μ,Σ)p(z(i)=j;ϕ)
- 在这里,我们分子上的概率都可以直接得到,因此可以得到x(i)=jx^{(i)} = jx(i)=j的概率,也就是
soft assignments
wj(i)w^{(i)}_jwj(i)
- M步:通过已知的zzz来对模型参数进行估计(与上面一样)
- ϕj:=1m∑i=1mwj(i)\phi_{j} :=\frac{1}{m} \sum_{i=1}^{m} w_{j}^{(i)}ϕj:=m1∑i=1mwj(i)
- μj:=∑i=1mwj(i)x(i)∑i=1mwj(i)\mu_{j} :=\frac{\sum_{i=1}^{m} w_{j}^{(i)} x^{(i)}}{\sum_{i=1}^{m} w_{j}^{(i)}}μj:=∑i=1mwj(i)∑i=1mwj(i)x(i)
- Σj:=∑i=1mwj(i)(x(i)−μj)(x(i)−μj)T∑i=1mwj(i)\Sigma_{j} :=\frac{\sum_{i=1}^{m} w_{j}^{(i)}\left(x^{(i)}-\mu_{j}\right)\left(x^{(i)}-\mu_{j}\right)^{T}}{\sum_{i=1}^{m} w_{j}^{(i)}}Σj:=∑i=1mwj(i)∑i=1mwj(i)(x(i)−μj)(x(i)−μj)T
我们会发现,EM算法和kmeans有着很微妙的关系,除了在E步时,kmeans使用了hard cluster assignments
而不是soft assignments
,也就是对每个点分配了一个类别而不是概率,其他的都完全一样。
因此,EM也是一种local optima的算法,因此随机初始化参数可能会得到不同的结果。
但对于EM而言,还有两个问题没有解决:
- E步时,如何来估计隐变量是一种较好的选择?
- 如何保证算法的收敛性?
这些内容在下一篇博客会详细介绍。