前记
博客的PDF资源已经上传CSDN,如有需要移步:GMM与EM算法。GMM模型的Python代码请移步:利用Python实现高斯混合模型(GMM)
一 高斯混合模型
我们给定一个训练集
{x(1),⋯,x(m)}
,由于是高斯混合模型(Mixtures of Gaussians ,GMM)属于无监督算法,因此训练集中不会出现任何标签。
我们希望通过指定联合分布
p(x(i),z(i))=p(x(i)∣∣z(i))p(z(i))
来对数据进行建模。在这里我们假定
z(i)∼Multinomial(ϕ)
,即
z(i)
服从多项式分布,
ϕj≥0
,
∑kj=1ϕj=1
,并且参数 能够推导出 ,同时我们假设 ,在上叙述中, 代表 的种类数。因此,我们的模型假定每个 是通过从 中随机选择 而生成的,然后 也是来自依赖于 的 个高斯分布。那么上述模型被称为高斯混合模型。在这里, 是隐式随机变量,这也将我们估计问题变得非常困难。
那么对于给定的数据集
{x(1),⋯,x(m)}
,高斯混合模型的对数似然函数如下:
ℓ(ϕ,μ,Σ)=∑i=1mlogp(x(i)∣∣z(i);ϕ,μ,Σ)=∑i=1mlogp(x(i)∣∣z(i);μ,Σ)p(z(i);ϕ)(1)(2)
然而,如果我们令上述函数的偏导数为0的话,那么在封闭区域内,我们无法直接解决这个问题。
随机变量
z(i)
表示每个
x(i)
属于
k
个高斯分布的概率大小。请注意,如果我们知道
z(i)
是多少,那么最大似然问题就很容易了。 具体来说,我们可以将对数似然函数写成:
ℓ(ϕ,μ,Σ)=∑i=1mlogp(x(i)∣∣z(i);μ,Σ)+logp(z(i);ϕ)(3)
由于
z(i)∼Multinomial(ϕ)
,那么我们有 :
p(z(i);ϕ)=∏j=1kp(z(i)=j;ϕ)=∏j=1kϕ1{z(i)=j}j(4)
同理,因为
x(i)∣∣z(i)= j∼N(μjΣj)
,那么我们有:
p(x(i)∣∣z(i);μ,Σ)=∏j=1kp(x(i)∣∣z(i)=j;μ,Σ)=∏j=1k⎧⎩⎨1(2π)n2|Σj|12exp(-12(x(i)−uj)TΣ−1(x(i)−uj))⎫⎭⎬1{z(i)=j}(5)(6)
因此,对数似然函数可以写成:
ℓ(ϕ,μ,Σ)=∑i=1mlogp(x(i)∣∣z(i);μ,Σ)+logp(z(i);ϕ)=∑i=1m(∑j=1k1{z(i)=j}{-12(x(i)−uj)TΣ−1j(x(i)−uj)−n2log2π−12log|Σj|}+∑j=1k1{z(i)=j}logϕj)(7)(8)
那么,对
μj
求偏导有:
∂ℓ∂μj=∑i=1m1{z(i)=j}Σ−1j(x(i)−μj)=0(9)
由于
Σj
是矩阵,那么:
μj=∑i=1m1{z(i)=j}x(i)∑i=1m1{z(i)=j}(10)
同理,对
Σj
求偏导有:
∂ℓ∂Σj=∑i=1m1{z(i)=j}{12(x(i)−μj)(x(i)−μj)TΣ−2j−12Σ−1j}=0(11)
其中用到了如下矩阵求导公式:
∂|Σ|∂Σ=|Σ|Σ-1∂Σ-1∂Σ=Σ-2(12)(13)
因此,
Σj=∑i=1m1{z(i)=j}(x(i)−uj)(x(i)−uj)T∑i=1m1{z(i)=j}(14)
由于
∑kj=1ϕj=1
,那么我们必须利用拉格朗日乘数法来求解 。因此构造如下函数:
f(z;ϕ,α)=∑i=1m∑j=1k1{z(i)=j}logϕj+α(1−∑kj=1ϕj)(15)
那么分别对
ϕj,α
求偏导有:
∂f∂ϕj=∑i=1m1{z(i)=j}ϕj−α=0∂f∂α=1−∑j=1kϕj=0(16)(17)
那么我们可以得到:
ϕj=1α∑i=1m1{z(i)=j}(18)
带入上式有:
∑j=1kϕj=∑j=1k1α∑i=1m1{z(i)=j}=1α∑i=1m∑j=1k1{z(i)=j}=1α∑i=1m1=mα=1(19)
那么有:
α=mϕj=1m∑i=1m1{z(i)=j}(20)(21)
实际上,我们可以从上得知,如果
z(i)
是已知的,那么高斯混合模型的最大似然估计变得几乎与我们在估计高斯判别分析模型的参数时所具有的相同,除了这里
z(i)
正在起到类标签的作用。
然而,在我们的密度估计问题中,
z(i)
是未知的。我们可以做什么?
EM算法是一种迭代算法,有两个主要步骤。 应用于我们的问题,在E步骤中,它试图“猜测
z(i)
的值。在M步骤中,它根据我们的猜测更新模型的参数。 由于在M步骤中我们假设第一部分中的猜测是正确的,因此最大化变得容易。 下面是高斯混合模型的EM算法的伪代码:
Repeat until convergence: { (E−step) For each i, j, setw(i)j:=p(z(i)=j∣∣x(i);ϕ,μ,Σ) (M−step) Update the parameters:ϕj:=1m∑i=1mw(i)juj=∑i=1mw(i)jx(i)∑i=1mw(i)jΣj=∑i=1mw(i)j(x(i)−uj)(x(i)−uj)T∑i=1mw(i)j(22)(23)(24)(25)(26)(27)
扫描二维码关注公众号,回复:
2730359 查看本文章
在E步骤中,给定
x(i)
并使用当前设置的参数最后结合贝叶斯准则,我们计算得到参数
z(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;ϕ)(28)
在这里,
p(x(i)∣∣z(i)=j;μ,Σ)
由样本
x(i)
在均值为
μj
,协方差矩阵为
Σj
的高斯分布上的概率给出;同时,
p(z(i)=j;ϕ)
由
ϕj
给出。在E步骤中计算的
w(i)j
的值表示我们对
z(i)
的“软”猜测。
此外,通过将M步骤中的参数更新与我们确切知道
z(i)
时的公式进行对比,你可以发现它们是相同的,除了没有表明每个数据点来自哪个高斯分布的指示函数
1{z(i)=j}
,而我们现在将其改为
二 Jessen不等式
为了更好地理解EM算法的原理,我们必须对子EM算法中运用广泛的Jessen不等式进行详细推导。
设
f
是一个定义域为实数集的函数。回想一下,如果
∀x∈R,f′′(x)≥0
,那么
f
是一个凸函数。当对于
f
的向量输入,这是广义的条件,它的海森
H
(hessian)矩阵 是半正定,即
H≥0
。如果
∀x∈R,f′′(x)>0
,那么我们说
f
是严格凸函数(在向量值情况下,相应的表述为
H
必须是严格的半正定的,记为
H>0
。
那么Jessen不等式可以这样表述为:
f
是凸函数,即
∀x∈R,f′′(x)>0
,假定
X
是随机变量,那么有
E[f(X)]≥f(EX)
。而且,如果
f
是严格凸函数时,那么当且仅当
p(X=E[X])=1
时,
E[f(X)]≥f(EX)
(即当
X
是常数时),其中,
E(X)
代表随机变量 的数学期望。其实这是Jessen不等式的一般形式,Jessen不等式的加权形式为:∀x∈R,f″(x)≥0,q1,⋯,qn∈R+,n∑i=1qn=1
∀x∈R,f′′(x)≥0,q1,⋯,qn∈R+,∑i=1nqn=1
,那么n∑i=1qif(xi)≥f(n∑i=1qixi)
∑i=1nqif(xi)≥f(∑i=1nqixi)
恒成立。同理,如果当f
f
是个凹函数时,Jessen不等式的一般形式为:∀x∈R,f″(x)≤0
∀x∈R,f′′(x)≤0
,假定X
X
是随机变量,那么有E[f(X)]≤f(EX)
E[f(X)]≤f(EX)
。其加权形式为:∀x∈R,f″(x)≤0,q1,⋯,qn∈R+,n∑i=1qn=1
∀x∈R,f′′(x)≤0,q1,⋯,qn∈R+,∑i=1nqn=1
,那么n∑i=1qif(xi)≤f(n∑i=1qixi)
∑i=1nqif(xi)≤f(∑i=1nqixi)
恒成立。下面对利用数学归纳法来证明Jessen不等式。
我们以f
f
是凸函数为例来证明Jessen不等式的加权形式。证明过程如下:
1) 当n=1
时,q1=1
,那么q1f(x1)=f(x1)=f(q1x1)
恒成立。
2) 当n=2
时,q1+q2=1
,由于f″(x)≥0
,那么根据不等式性质我们有: q1f(x1)+q2f(x2)≥f(q1x1+q2x2)
恒成立。
3) 当n≥3
时,假设当 n=k
时 k∑i=1qif(xi)≤f(n∑i=1qixi)
恒成立,那么只需证明,当 n=k+1
时,k+1∑i=1qif(xi)≤f(n∑i=1qixi)
。那么∀x∈R,f″(x)≥0,q1,⋯,qk+1∈R+,k+1∑i=1qn=1
时,显然有:
k+1∑i=1qif(xi)=qk+1f(xk+1)+k∑i=1qif(xi)=qk+1f(xk+1)+zkk∑i=1qizkf(xi)(zk=k∑i=1qi)≥qk+1f(xk+1)+zkf(k∑i=1qizkxi)≥f(qk+1xk+1+zkk∑i=1qizkxi)=f(k+1∑i=1qixi)
综合1)、2)、3)有,Jessen不等式恒成立。同理可证
f
是凹函数时的Jessen不等式恒成立。
为了更好地理解Jessen不等式,我们来看上面的函数图。在图中,f
是由实线表示的凸函数。 X
是随机变量,各有0.5的概率取得变量a
和变量b
。因此,X
的期望值由a
和b
之间的中点给出。我们还可以看到f(a)
,f(b)
和f(E[X])
在y
轴上的值。 E[f(X)]
现在是f(a)
和f(b)
之间的中点。从我们的例子中,我们看到,因为f
是凸函数, E[f(X)]≥f(EX)
恒成立。
因此,Jessen不等式也可以这样理解,当指定函数是凸函数时,函数值的加权平均大于等于自变量的加权平均后对应的函数值;当指定函数是凹函数时,函数值的加权平均小于等于自变量的加权平均后对应的函数值。
三 EM算法
假设我们有一个评估问题,其中有一个训练集{x(i),⋯,x(m)}
由m
个独立的样本组成。我们希望利用数据来你拟合模型p(x,z)
的参数,其中似然函数为:
ℓ(θ)=m∑i=1logp(x;θ)=m∑i=1log∑p(x,z;θ)
但是,明显寻找参数
θ
极大似然估计是困难的。这里
z(i)
是隐式随机变量;通常情况下,若果知道了
z(i)
,那么极大似然估计就会很容易。
在这种情况下,EM算法给出了一种有效的估计最大值似然的方法.最大化 ℓ(θ)
明显可能很困难,我们的策略是重复构造一个上确界(E-step),然后优化这个上下限(M-step)。
对于每一个 ,令Qi
是z
的函数,且有 ∑zQi(z)=1
,Qi(z)≥0
。那么根据Jessen不等式,我们有:
∑ilogp(x(i);θ)=∑ilog∑p(x(i),z;θ)=∑ilog∑z(i)Qi(z(i))p(x(i),z(i);θ)Qi(z(i))≥∑i∑z(i)Qi(z(i))logp(x(i),z(i);θ)Qi(z(i))
具体地说,
f(x)=logx=lnx
是凹函数,因为
∀x∈R+,f″(x)=-1x2<0
。
现在,对于任何一组分布Qi
,公式(3)为ℓ(θ)
给出了一个下界。 Qi
有很多可能的选择。我们应该用哪一种?如果我们有一些目前想猜测的参数 θ
,很自然地让似然函数在θ
处的下界变小是我们的目标。即我们将使上面的不等式在θ
处等号成立。
为了一个特殊θ
是的上界变小,我们的推动过程中需要涉及Jessen不等式去等的条件。为了使等号成立,我们知道期望是常变量时将会带来高效率。即我们要求:
p(x(i),z(i);θ)Qi(z(i))=c
对于不依赖于
z(i)
的常数
c
,只要满足
Qi(z(i))∝p(x(i),z(i);θ)
如下条件即可。实际上,由于
∑zQi(z(i))=1
,那么我们有:
Qi(z(i))=p(x(i),z(i);θ)∑zp(x(i),z;θ)=p(x(i),z(i);θ)p(x(i);θ)=p(z(i)|x(i);θ)
因此,我们只是将
Qi
设置为
z(i)
的后验分布,
z(i)
是
x(i)
的条件概率,且被
θ
参数化。
现在,对于{{Q}_{i}}的选择,式(1)给出了我们试图最大化的对数似然的下界,这是E步骤。算法的M步骤中,最大化式(1)的参数
\theta $ ,从而获得一个新参数 。反复执行这两个步骤。上述就是EM算法的两个过程,具体流程如下所示:
Repeat until convergence {(E-Step)For each i, setQi(z(i))=p(z(i)|x(i);θ)(M−step) Set θ := arg maxθ∑i∑z(i)Qi(z(i))logp(x(i),z(i);θ)Qi(z(i))
我们怎么知道EM是否收敛?假设θ(t)
和θ(t+1)
连续两次迭代的参数。接下来我们将证明ℓ(θ(t))≤ℓ(θ(t+1))
,这也将解释EM为什么总是单调提高对数似函数。这个结果的关键在于我们对Qi$的选择。具体来说,在EM算法的迭代过程中,参数将从开始
{{\theta }^{\left( t \right)}},那么我们令
Q_{i}^{\left( t \right)}\left( {{z}^{\left( i \right)}} \right)=p\left( {{z}^{\left( i \right)}}\left| {{x}^{\left( i \right)}} \right.;{{\theta }^{\left( t \right)}} \right)$ 。我们在前面看到,这个选择确保了Jensen不等式能够取等。因此:
ℓ(θ(t+1))≥∑i∑z(i)Q(t)i(z(i))logp(x(i),z(i);θ(t+1))Q(t)i(z(i))≥∑i∑z(i)Q(t)i(z(i))logp(x(i),z(i);θ(t))Q(t)i(z(i))=ℓ(θ(t))
那么,令Qi=Q(t)i
,θ=θ(t+1)
。为了得到式(2),我们令
θ(t+1)=arg maxθ∑i∑z(i)Qi(z(i))logp(x(i),z(i);θ)Qi(z(i))
因此,在
θ=θ(t+1)
处,该公式必须等于或大于在
θ(t)
处的。
因此,EM是的似然函数单调收敛。在我们的EM算法的编写,我们说我们运行它直到收敛。鉴于我们刚刚展示的结果,一个合理的收敛性测试检查是连续迭代之间 ℓ(θ)
之间的误差是否小于一些容差参数,如果 ℓ(θ)
改进过慢,那么我们说EM算法收敛。
那么如果我们定义如下函数:
J(Q,θ)=∑i∑z(i)Qi(z(i))logp(x(i),z(i);θ)Qi(z(i))
从之前推导可以得知ℓ(θ)≥J(Q,θ)
。那么EM算法也可以看成通过不断迭代, J(Q,θ)
不断逼近ℓ(θ)
的过程,其中E步骤是最大化$$ (自我检查),然后M步骤就是最大化$\theta $ 。具体示意图如下所示。
四 再看高斯混合模型
根据我们对EM算法的一般定义,让我们回到我们在高斯混合中拟合参数 ϕ
,μ
和Σ
的旧例子上。
E步骤很简单。按照上面的算法推导,我们简单地令,
w(i)j=Qi(z(i)=j)=p(z(i)=j|x(i);ϕ,μ,Σ)
这里,
Qi(z(i)=j)
表示在分布
Qi
下
z(i)=j
的概率。
接下来是M步骤,我们需要最大化参数
ϕ
,
μ
和
Σ
。首先我们化简似然函数。其过程如下:
ℓ(ϕ,μ,Σ)=m∑i=1∑z(i)Qi(z(i))logp(x(i),z(i);ϕ,μ,Σ)Qi(z(i))=m∑i=1k∑j=1Qi(z(i)=j)logp(x(i)|z(i)=j;μ,Σ)p(z(i)=j;ϕ)Qi(z(i)=j)=m∑i=1k∑j=1w(i)jlog1(2π)n2|Σj|12exp(-12(x(i)−μj)TΣ−1j(x(i)−μj))ϕjw(i)j=m∑i=1k∑j=1w(i)j(-n2log2π−12log|Σj|+logϕj−logw(i)j−12(x(i)−μj)TΣ−1j(x(i)−μj))
\
那么首先最大化μj
,[\ell \left( \phi ,\mu ,\Sigma \right)]对μj
求偏导有:
∂ℓ∂μj=∂∂μjm∑i=1k∑j=1w(i)j(-n2log2π−12log|Σj|+logϕj−logw(i)j−12(x(i)−μj)TΣ−1j(x(i)−μj))=−m∑i=112w(i)j(x(i)−μj)TΣ−1j(x(i)−μj)=m∑i=1w(i)jΣ−1j(x(i)−μj)
那么令上式等于0有:
μj=m∑i=1w(i)jx(i)m∑i=1w(i)j
同理,接下来最大化
Σj
,[\ell \left( \phi ,\mu ,\Sigma \right)]对
Σj
求偏导有:
∂ℓ∂Σj=∂∂Σjm∑i=1k∑j=1w(i)j(-n2log2π−12log|Σj|+logϕj−logw(i)j−12(x(i)−μj)TΣ−1j(x(i)−μj))=−m∑i=112w(i)j(x(i)−μj)TΣ−1j(x(i)−μj)−m∑i=112log|Σj|=−12m∑i=1w(i)j[Σ−1j−Σ−2j(x(i)−μj)(x(i)−μj)T]
那么令上式等于0,我们有:
Σj=m∑i=1w(i)j(x(i)−μj)(x(i)−μj)Tm∑=1w(i)j
最后我们利用拉格朗日乘数法来最大化
ϕj
。由于
k∑j=1ϕj=1
,那么我们根据上述似然函数构造如下函数:
L(ϕ)=m∑i=1k∑j=1w(i)jlogϕj+β(1−k∑j=1ϕj)
因此我们有:
∂L∂ϕj=m∑i=1w(i)jϕj−β=0∂L∂β=1−k∑j=1ϕj=0
由于
k∑j=1w(i)j=1
,那么可以求得:
ϕj=1mm∑i=1w(i)j
对于高斯混合模型(GMM)的个人理解:GMM就是首先假设 个分类,且每个分类服从于不同的高斯分布,且这 个不同的高斯分布的协方差矩阵完全相同。并且给这些高斯分布不同的初始概率(权重)。之后通过EM算法进行跟新模型的所有参数直至似然函数收敛。最终每组数据的 个不同分类的概率,去除概率最大对应的类别作为预测分类。