最近在看晓川老(shi)师(shu)的博士论文,接触了混合高斯模型(Gaussian mixture model, GMM)和EM(Expectation Maximization)算法,不由被论文中庞大的数学公式所吓退。本文经过查阅相关资料,在复杂巧妙的推理公式中融入了本身的理解,详细梳理了混合高斯模型和EM算法。html
1 单高斯模型(Gaussian single model, GSM)
简单回顾一下几率论讲过的高斯模型。
高斯模型是一种经常使用的变量分布模型,在数理统计领域有着普遍的应用(……好吧读了这么多年书没白费,教科书般的话语已植入骨髓)。一维高斯分布的几率密度函数以下:
f(x)=2π
σ1exp(−2σ2(x−μ)2)(1)
μ和
σ2分别是高斯分布的均值和方差。
譬如将男生身高视为变量X, 假设男生的身高服从高斯分布,则
X∼N(μ,σ2),女生亦如此。只是男女生身高分布可能具备不一样的均值和方差。图1是从谷歌图库中搜索到的男女生身高分布图,来源不清,我的以为男生的均值身高虚高……四个记号分别表示0~3
σ准则。
web
图1 男女生身高分布差别
多维变量
X=(x1,x2,...xn)的联合几率密度函数为:
f(X)=(2π)d/2∣Σ∣1/21exp[−21(X−u)TΣ−1(X−u)],X=(x1,x2...xn)(2)
其中:
d:变量维度。对于二维高斯分布,有d=2;
u=⎝⎜⎜⎛u1u2...un⎠⎟⎟⎞:各维变量的均值;
Σ:协方差矩阵,描述各维变量之间的相关度。对于二维高斯分布,有:
Σ=[δ11δ21δ12δ22](3)算法
图2 二维高斯数据分布
图2是二维高斯分布产生的数据示例,参数设定为:
u=(00),Σ=[10.80.85]。关于二维高斯分布的参数设定对为高斯曲面的影响,这篇文章二维高斯分布(Two-dimensional Gaussian distribution)的参数分析有说起,主要是为了下文理解混合高斯分布作铺垫。服从二维高斯分布的数据主要集中在一个椭圆内部,服从三维的数据集中在一个椭球内部。app
2 混合高斯模型(Gaussian mixture model, GMM)
2.1 为何要有混合高斯模型
先来看一组数据。
ide
图3 混合高斯分布所产生数据
若是咱们假设这组数据是由某个高斯分布产生的,利用极大似然估计(后文还会说起)对这个高斯分布作参数估计,获得一个最佳的高斯分布模型以下。svg
图4 用单高斯模型对样本做分析不合理示意
有什么问题吗?通常来说越靠近椭圆的中心样本出现的几率越大,这是由几率密度函数决定的,可是这个高斯分布的椭圆中心的样本量却极少。显然样本服从单高斯分布的假设并不合理。单高斯模型没法产生这样的样本。
实际上,这是用两个不一样的高斯分布模型产生的数据。函数
图5 混合高斯模型对样本做分析示意
正当单高斯模型抓耳挠腮的时候,混合高斯模型就大摇大摆地进场了。它经过求解两个高斯模型,并经过必定的权重将两个高斯模型融合成一个模型,即最终的混合高斯模型。这个混合高斯模型能够产生这样的样本。
更通常化的描述为:假设混合高斯模型由K个高斯模型组成(即数据包含K个类),则GMM的几率密度函数以下:
p(x)=k=1∑Kp(k)p(x∣k)=k=1∑KπkN(x∣uk,Σk)(3)
其中,
p(x∣k)=N(x∣uk,Σk)是第k个高斯模型的几率密度函数,能够当作选定第k个模型后,该模型产生x的几率;
p(k)=πk是第k个高斯模型的权重,称做选择第k个模型的先验几率,且知足
k=1∑Kπk=1。
因此,混合高斯模型并非什么新奇的东西,它的本质就是融合几个单高斯模型,来使得模型更加复杂,从而产生更复杂的样本。理论上,若是某个混合高斯模型融合的高斯模型个数足够多,它们之间的权重设定得足够合理,这个混合模型能够拟合任意分布的样本。优化
2.2 直观上理解混合高斯模型
下面经过几张图片来帮助理解混合高斯模型。
首先从简单的一维混合高斯模型提及。
spa
图6 一维混合高斯模型
在图6中,y1,y2和y3分别表示三个一维高斯模型,他们的参数设定如图所示。y4表示将三个模型的几率密度函数直接相加,注意的是这并非一个混合高斯模型,由于不知足
k=1∑Kπk=1的条件。而y5和y6分别是由三个相同的高斯模型融合生成的不一样混合模型。因而可知,调整权重将极大影响混合模型的几率密度函数曲线。另外一方面也能够直观地理解混合高斯模型能够更好地拟合样本的缘由:它有更复杂更多变的几率密度函数曲线。理论上,混合高斯模型的几率密度函数曲线能够是任意形状的非线性函数。
下面再给出一个二维空间3个高斯模型混合的例子。
.net
(a) 3个类别高斯分布截面轮廓线
(b) 混合高斯分布截面轮廓线
© 二维混合高斯分布几率密度函数图
图7 二维混合高斯模型
(a) 图表示的是3个高斯模型的截面轮廓图,3个模型的权重系数已在图中注明,由截面轮廓图可知3个模型之间存在不少重叠区域。其实这也正是混合高斯模型所但愿的。由于若是它们之间的重叠区域较少,那么生成的混合高斯模型通常较为简单,难以生成较为复杂的样本。
设定好了3个高斯模型和它们之间的权重系数以后,就能够肯定二维混合高斯分布的几率密度函数曲面,如图©所示。图(b)是对于图©几率密度曲面的截面轮廓线。从图7也能够看出,整个混合高斯分布曲面相对比于单高斯分布曲面已经异常复杂。实际上,经过调整混合高斯分布的系数
(π,μ,Σ),可使得图©的几率密度曲面去拟合任意的三维曲面,从而采样生成所须要的数据样本。
3 极大似然估计(Maximum Likehood Estimate, MLE)(最大化对数似然函数)
● 最大化对数似然函数(log-likelihood function)的意义
首先直观化地解释一下最大化对数似然函数要解决的是什么问题。
假设咱们采样获得一组样本
yt,并且咱们知道变量Y服从高斯分布(本文只说起高斯分布,其余变量分布模型相似),数学形式表示为
Y∼N(μ,Σ)。采样的样本如图8所示,咱们的目的就是找到一个合适的高斯分布(也就是肯定高斯分布的参数
μ,Σ),使得这个高斯分布能产生这组样本的可能性尽量大。
图8 最大化似然函数的意义
那怎么找到这个合适的高斯分布呢(在图8中的表示就是1~4哪一个分布较为合适)?这时候似然函数就闪亮登场了。
似然函数数学化:设有样本集
Y=y1,y2...yN。
p(yn∣μ,Σ)是高斯分布的几率分布函数,表示变量
Y=yn的几率。假设样本的抽样是独立的,那么咱们同时抽到这N个样本的几率是抽到每一个样本几率的乘积,也就是样本集Y的联合几率。此联合几率即为似然函数:
L(μ,Σ)=L(y1,y2...yN;μ,Σ)=n=1∏Np(yn;μ,Σ)(4)
对式子(4)进行求导并令导数为0(即最大化似然函数,通常还会先转化为对数似然函数再最大化),所求出的参数就是最佳的高斯分布对应的参数。
因此最大化似然函数的意义就是:经过使得样本集的联合几率最大来对参数进行估计,从而选择最佳的分布模型。
对于图8产生的样本用最大化似然函数的方法,最终能够获得序号1对应的高斯分布模型是最佳的模型。
4 EM算法(最大化Q函数)
4.1 为何要有EM算法(EM算法与极大似然估计分别适用于什么问题)
● 尝试用极大似然估计的方法来解GMM模型
解GMM模型,实际上就是肯定GMM模型的参数
(μ,Σ,π),使得由这组参数肯定的GMM模型最有可能产生采样的样本。
先试试看用极大似然估计的方法来解GMM模型会出现什么样的问题。
如第3小节所述,要利用极大似然估计求解模型最重要的一步就是求出似然函数,即样本集出现的联合几率。而对于混合高斯模型,如何求解某个样本
yt的几率?显然咱们得先知道这个样原本源于哪一类高斯模型,而后求这个高斯模型生成这个样本的几率
p(yt)。
可是问题来了:咱们只有样本。不知道样本到底来源于哪一类的高斯模型。那么如何求解样本的生成几率
p(yt)?
先引入一个隐变量
γ。它是一个K维二值随机变量,在它的K维取值中只有某个特定的元素
γk的取值为1,其它元素的取值为0。实际上,隐变量描述的就是:每一次采样,选择第k个高斯模型的几率,故有:
p(γk=1)=πk(5)
当给定了
γ的一个特定的值以后(也就是知道了这个样本从哪个高斯模型进行采样),能够获得样本y的条件分布是一个高斯分布,知足:
p(y∣γk=1)=N(y∣μk,Σk)(6)
而实际上,每一个样本究竟是从这K个高斯模型中哪一个模型进行采样的,是都有可能的。故样本y的几率为:
p(y)=∑γp(γ)p(y∣γ)=k=1∑KπkN(y∣μk,Σk)(7)
样本集Y(n个样本点)的联合几率为:
L(μ,Σ,π)=L(y1,y2...yN;μ,Σ,π)=n=1∏Np(yn;μ,Σ,π)=n=1∏Nk=1∑KπkN(yn∣μk,Σk)(8)
对数似然函数表示为:
lnL(μ,Σ,π)=n=1∑Nlnk=1∑KπkN(yn∣μk,Σk)(9)
好了,而后求导,令导数为0,获得模型参数
(μ,Σ,π)。
貌似问题已经解决了,喜大普奔。
然而仔细观察能够发现,对数似然函数里面,对数里面还有求和。实际上没有办法经过求导的方法来求这个对数似然函数的最大值。
MLE(极大似然估计)略显沮丧。这时候EM算法走过来,安慰着说:兄弟别哭,老哥帮你。
● 极大似然估计与EM算法适用问题分析
下面先阐述一下极大似然估计与EM算法分别适用于解决什么样的问题。
图9 极大似然估计适用问题
图10 EM算法适用问题
若是咱们已经清楚了某个变量服从的高斯分布,并且经过采样获得了这个变量的样本数据,想求高斯分布的参数,这时候极大似然估计能够胜任这个任务;而若是咱们要求解的是一个混合模型,只知道混合模型中各个类的分布模型(譬如都是高斯分布)和对应的采样数据,而不知道这些采样数据分别来源于哪一类(隐变量),那这时候就能够借鉴EM算法。EM算法能够用于解决数据缺失的参数估计问题(隐变量的存在实际上就是数据缺失问题,缺失了各个样原本源于哪一类的记录)。
下面将介绍EM算法的两个步骤:E-step(expectation-step,指望步)和M-step(Maximization-step,最大化步);
4.2 E-step
咱们现有样本集
Y=(y1,y2...yT),经过隐变量
γt,k(表示
yt这个样原本源于第k个模型)的引入,能够将数据展开成彻底数据:
(yt,γt,1,γt,2...γt,K),t=1,2...T
所谓的彻底数据,就是不缺失的数据。只有样本集
Y=(y1,y2...yT)的数据是不完整的,存在信息缺失的。若
yt由第1类采样而来,则有
γt,1=1,γt,2=0...γt,K=0,表示为
(yt,1,0,...0)。
因此要求能采到这组数据的可能性,须要分两步走:①第t个样本由哪一类产生?②若是第t个样本由第k类产生,那么第k类产生第t个样本的几率为多少?
综合考虑上面两步,有了彻底数据的似然函数:
p(y,γ∣μ,Σ,π)=t=1∏Tp(yt,γt,1,γt,2...γt,K∣μ,Σ,π) =t=1∏Tk=1∏K(πkN(yt;μk,Σk))γt,k =k=1∏Kπk∑t=1Tγt,kt=1∏T(N(yt;μk,Σk))γt,k(10)
第1个等号到第2个等号的理解:若
yt由第1类采样而来,则有
γt,1=1,γt,2=0...γt,K=0,
p(yt,γt,1,γt,2...γt,K∣μ,Σ,π)=k=1∏K(πkN(yt;μk,Σk))γt,k =(π1N(yt;μ1,Σ1))γt,1(π2N(yt;μ2,Σ2))γt,2...(πKN(yt;μK,ΣK))γt,K =(π1N(yt;μ1,Σ1))1(π2N(yt;μ2,Σ2))0...(πKN(yt;μK,ΣK))0 =π1N(yt;μ1,Σ1)(11)
注意式子(11)与式子(7)的差异:若是求
p(yt)则须要考虑
yt有可能来源于k个类;而若是求的是
p(yt,γt,1,γt,2...γt,K)则已经限定了
yt只会来源于某个类。
第2个等式到第3个等式的理解:先交换累乘符号。因为
πk与t无关,故而能够从内部的累乘符号中提取出来。
实际上彻底数据的似然函数描述的就是采集到这些样本的可能性。
彻底数据的对数似然函数为:
lnp(y,γ∣μ,Σ,π)=k=1∑K(t=1∑Tγt,k)lnπk+t=1∑Tγt,k(−ln(2π)−21ln∣Σk∣−21(yt−μt)T(Σk)−1(yt−μt))(12)
这一步应该没啥问题吧。。。注意的是,此处考虑的是二维高斯分布的状况,对应于式子(2)中的d=2。
咱们的目标就是找出一组参数
(μ∗,Σ∗,π∗)使得
lnp(y,γ∣μ,Σ,π)最大。
那么问题来了:
lnp(y,γ∣μ,Σ,π)中含有隐变量
γ,
γ的存在使得咱们无法最大化
lnp(y,γ∣μ,Σ,π) 。若是咱们知道了
γ,那么最大化
lnp(y,γ∣μ,Σ,π)就显得水到渠成。
可是坑爹的就是:咱们只有采样数据
yt,
γ未知。
那么怎么办呢?对
γ来一个估计。
猜测咱们给了一组起始参数
(μ0,Σ0,π0)或者优化过的第i次迭代的参数
(μi,Σi,πi),也就是说每个高斯分布的参数咱们都有了,
γ作的事不就是决定每一个样本由哪个高斯分布产生的嘛,有了每一个高斯分布的参数那咱们就能够猜测每一个样本最有可能来源于哪一个高斯分布没错吧!Done!
为此咱们不最大化
lnp(y,γ∣μ,Σ,π)(也没法最大化它),而是最大化Q函数。Q函数以下:
Q(μ,Σ,π,μi,Σi,πi)=Eγ[lnp(y,γ∣μ,Σ,π)∣Y,μi,Σi,πi]=Eγ[k=1∑K(t=1∑Tγt,k∣yt,μi,Σi,πi)lnπk+t=1∑T(γt,k∣yt,μi,Σi,πi)(−ln(2π)−21ln∣Σk∣−21(yt−μt)T(Σk)−1(yt−μt))]=k=1∑K(t=1∑TE(γt,k∣yt,μi,Σi,πi)lnπk+t=1∑TE(γt,k∣yt,μi,Σi,πi)(−ln(2π)−21ln∣Σk∣−21(yt−μt)T(Σk)−1(yt−μt)))
其中,
E(γt,k∣yt,μi,Σi,πi)就是对
γ的估计:
E(γt,k∣yt,μi,Σi,πi)=p(γt,k=1∣yt,μi,Σi,πi) =p(yt)p(γt,k=1,yt∣μi,Σi,πi) =∑k=1Kp(γt,k=1,yt∣μi,Σi,πi)p(γt,k=1,yt∣μi,Σi,πi) =∑k=1Kp(yt∣γt,k=1,μi,Σi,πi)p(γt,k=1∣μi,Σi,πi)p(yt∣γt,k=1,μi,Σi,πi)p(γt,k=1∣μi,Σi,πi) =∑k=1KπkiN(yt;μki,Σki)πkiN(yt;μki,Σki)(14)
这公式是否是很可怕??别急,带上几点声明,再去看公式就很好理解了!
① Q函数描述的其实就是在给定
(μi,Σi,πi)参数下,先对样本Y作一个最有可能的划分(每一个样原本源于各个类的可能性,即对
γ的估计
E(γt,k∣yt,μi,Σi,πi)),再描述可以产生这组样本的可能性(Q函数);
② 有了对于
γ的估计以后,Q函数只和样本有关(传统意义上的似然函数亦如此,彻底数据的似然函数还与
γ有关),而再也不含有隐变量,从而使得最大化Q函数成为可能;
③ 最大化Q函数的过程实则就是使得可以产生这组样本的可能性最大,与最大化似然函数的思路一模一样。
4.3 M-step
有个Q函数,就能够对Q函数进行最大化,获得下一次迭代的模型参数了,即:
μi+1,Σi+1,πi+1=argmaxQ(μ,Σ,π,μi,Σi,πi)(15)
对Q函数进行求导,并另其导数为0,可得:
μki+1=E(γt,k∣yt,μi,Σi,πi)∑t=1T∑k=1KπkiN(yt;μki,Σki)πkiN(yt;μki,Σki)yt,k=1,2...K(16)
Σki+1=E(γt,k∣yt,μi,Σi,πi)∑t=1T∑k=1KπkiN(yt;μki,Σki)πkiN(yt;μki,Σki)(yt−μki)2,k=1,2...K(17)
πki+1=TE(γt,k∣yt,μi,Σi,πi),k=1,2...K(18)
其中
μki+1,Σki+1,πki+1分别表示第(i+1)次迭代,第k个类的均值,协方差矩阵和所占的权重。
4.4 一个例子梳理EM算法的整个过程
EM算法的核心思想是:经过迭代的过程来找到一组最优的参数
(μ∗,Σ∗,π∗),使得这组参数表示的模型最有可能产生现有的采样数据。每次迭代的过程就是参数矫正的过程。
图11 EM算法参数优化过程
现假设初始化一组参数
(μ0,Σ0,π0)。在这组参数下,2类二维高斯分布如图11绿色椭圆所示。而后利用现有的参数,E-step开始对样本数据进行划分(对
γ进行估计)。蓝色的样本大多都被划分给第1类模型,橘黄色的样本大多都被划分给第2类模型。可是第1类模型还有优化空间:第1类模型还不能使得蓝色样本出现的联合几率达到最大。第2类模型也是如此。M-step便优化了2类模型的参数,获得新的参数
(μ1,Σ1,π1),使得优化后2类高斯分布如图11红色椭圆所示。其中,第1类模型主要优化的是模型均值(即椭圆的中心),第二类模型主要优化的是模型协方差矩阵(即椭圆的长轴、短轴和长短轴的方向)。而后重复进行E-step和M-step,直到参数
(μ,Σ,π)收敛。
最后谈谈混合高斯模型的参数
π。
混合高斯模型的参数
μ,Σ比较好理解,用于描述各个高斯分布的形状,对于它们的调整也比较直观:使得本高斯分布可以更好地接纳被划分到这类分布的样本。而为何要有参数
π?它描述的是各个高斯分布所占的比重,若是不加“歧视”的话(样原本源于各个高斯分布的可能性一致),则有
πk=1/K;而若是对于某一类高斯分布(即为i)有侧重的话,则相应的
πi较大,体如今图11中就是被分配给各个类的样本数占样本总数的比例。若是一轮优化后,某一类高斯分布又接纳了更多样本,则其
πi变大,反之变小(因此图11从绿色椭圆调整为红色椭圆实际上两个类所对应的权重也被优化了)。
而从本质上来看参数
π,则是为了混合高斯模型能有更好的曲面拟合能力。当参数
π退化为某一类高斯分布的权重远远大于其余类高斯分布的时候,混合高斯模型就退化成了单高斯模型!
5 总结
图12和图13梳理了高斯分布和混合高斯分布参数估计的逻辑流程。
图12 高斯分布参数估计逻辑流程
图13 混合高斯分布参数估计逻辑流程
相对比于高斯分布的参数估计,混合高斯分布的参数估计更加复杂。主要缘由在于隐变量的存在。而为何混合高斯分布的参数估计须要屡次迭代循环进行?是由于EM算法中对于
γ的估计利用的是初始化或者第i步迭代的参数
(μi,Σi,πi),这对于样本的分类划分是有偏差的。因此它只能经过屡次迭代优化寻找更佳的参数来抵消这一偏差。 终于把这篇文章梳理完了。世界杯要结束了,伪球迷也想见证一下冠军诞生。至此,本文结束。