导航:首页 > 源码编译 > gmm算法实现

gmm算法实现

发布时间:2023-04-30 19:50:58

⑴ 高斯混合模型(GMM)和EM算法

学号:20021110074     电院    姓名:梁雪玲

【嵌牛导读】:GMM与EM算法的学习与推导。

【嵌牛鼻子】:GMM    EM  

【嵌牛提问】:GMM是什么?EM算法是什么?二者之间的关系?算法的推导?如何深入学习?

【嵌牛正文】:

在深度学习的路上,从头开始了解一下各项技术。本人是DL小白,连续记录我自己看的一些东西,大家可以互相交流。

本文参考:

http://www.ituring.com.cn/article/497545(GMM)

https://blog.csdn.net/xmu_jupiter/article/details/50889023(GMM)

http://www.cnblogs.com/wjy-lulu/p/7010258.html(EM算法)

https://blog.csdn.net/zouxy09/article/details/8537620(EM算法)

一、前言

    高斯混合模型(Gaussian Mixture Model)简称GMM,是一种业界广泛使用的聚类算法。它是多个高斯分布函数的线性组合,理论上GMM可以拟合出任意类型的分布,通常用于解决同一集合下的数据包含多种不同的分布的情况。高斯混合模型使用了期望最大(Expectation Maximization, 简称EM)算法进行训练,故此我们在了解GMM之后,也需要了解如何通过EM算法训练(求解)GMM。

二、高斯混合模型(GMM)

    在了解高斯混合模型之前,我们先了解一下这种模型的具体参数模型-高斯分布。高斯分布又称正态分布,是一种在自然界中大量存在的,最为常见的分布形式。

    如上图,这是一个关于身高的生态分布曲线,关于175-180对称,中间高两边低,相信大家在高中已经很了解了,这里就不再阐述。

    现在,我们引用《统计学习方法》-李航 书中的定义,如下图:

    根据定义,我们可以理解为,GMM是多个高斯分布的加权和,并且权重α之和等于1。这里不难理解,因为GMM最终反映出的是一个概率,而整个模型的概率之和为1,所以权重之和即为1。高斯混合模型实则不难理解,接下来我们介绍GMM的训练(求解)方法。

PS.从数学角度看,对于一个概率模型的求解,即为求其最大值。从深度学习角度看,我们希望降低这个概率模型的损失函数,也就是希望训练模型,获得最大值。训练和求解是不同专业,但相同目标的术语。

三、最大似然估计

     想要了解EM算法,我们首先需要了解最大似然估计这个概念。我们通过一个简单的例子来解释一下。

    假设,我们需要调查学校男女生的身高分布。我们用抽样的思想,在校园里随机抽取了100男生和100女生,共计200个人(身高样本数据)。我们假设整个学校的身高分布服从于高斯分布。但是这个高斯分布的均值u和方差∂2我们不知道,这两个参数就是我们需要估计的值。记作θ=[u, ∂]T。

    由于每个样本都是独立地从p(x|θ)中抽取的,并且所有的样本都服从于同一个高斯分布p(x|θ)。那么我们从整个学校中,那么我抽到男生A(的身高)的概率是p(xA|θ),抽到男生B的概率是p(xB|θ)。而恰好抽取出这100个男生的概率,就是每个男生的概率乘积。用下式表示:

    这个概率反映了,在概率密度函数的参数是θ时,得到X这组样本的概率。在公式中,x已知,而θ是未知,所以它是θ的函数。这个函数放映的是在不同的参数θ取值下,取得当前这个样本集的可能性,因此称为参数θ相对于样本集X的似然函数(likehood function)。记为L(θ)。

    我们先穿插一个小例子,来阐述似然的概念。

某位同学与一位猎人一起外出打猎,一只野兔从前方窜过。只听一声枪响,野兔应声到下,如果要你推测,这一发命中的子弹是谁打的?你就会想,只发一枪便打中,由于猎人命中的概率一般大于这位同学命中的概率,看来这一枪是猎人射中的。

      这个例子所作的推断就体现了极大似然法的基本思想,我们并不知道具体是谁打的兔子,但是我们可以估计到一个看似正确的参数。回到男生身高的例子中。在整个学校中我们一次抽到这100个男生(样本),而不是其他的人,那么我们可以认为这100个男生(样本)出现的概率最大,用上面的似然函数L(θ)来表示。

    所以,我们就只需要找到一个参数θ,其对应的似然函数L(θ)最大,也就是说抽到这100个男生(的身高)概率最大。这个叫做θ的最大似然估计量,记为:

因为L(θ)是一个连乘函数,我们为了便于分析,可以定义对数似然函数,运用对数的运算规则,把连乘转变为连加:

PS.这种数学方法在MFCC中我们曾经用过,可以回溯一下上一篇文章。

    此时,我们要求θ,只需要使θ的似然函数L(θ)极大化,然后极大值对应的θ就是我们的估计。在数学中求一个函数的最值问题,即为求导,使导数为0,解方程式即可(前提是函数L(θ)连续可微)。在深度学习中,θ是包含多个参数的向量,运用高等数学中的求偏导,固定其中一个变量的思想,即可求出极致点,解方程。

总结而言:

    最大似然估计,只是一种概率论在统计学的应用,它是参数估计的方法之一。说的是已知某个随机样本满足某种概率分布,但是其中具体的参数不清楚,参数估计就是通过若干次试验,观察其结果,利用结果推出参数的大概值。最大似然估计是建立在这样的思想上:已知某个参数能使这个样本出现的概率最大,我们当然不会再去选择其他小概率的样本,所以干脆就把这个参数作为估计的真实值。

    求最大似然函数估计值的一般步骤:

(1)写出似然函数;

(2)对似然函数取对数,并整理;(化乘为加)

(3)求导数,令导数为0,得到似然方程;

(4)解似然方程,得到的参数即为所求。

四、EM算法

    期望最大(Expectation Maximization, 简称EM)算法,称为机器学习十大算法之一。它是一种从不完全数据或有数据丢失的数据集(存在隐含变量)中求解概率模型参数的最大似然估计方法。

    现在,我们重新回到男女生身高分布的例子。我们通过抽取100个男生身高,并假设身高分布服从于高斯分布,我们通过最大化其似然函数,可以求的高斯分布的参数θ=[u, ∂]T了,对女生同理。但是,假如这200人,我们只能统计到其身高数据,但是没有男女信息(其实就是面对200个样本,抽取得到的每个样本都不知道是从哪个分布抽取的,这对于深度学习的样本分类很常见)。这个时候,我们需要对样本进行两个东西的猜测或者估计了。

      EM算法就可以解决这个问题。假设我们想估计知道A和B两个参数,在开始状态下二者都是未知的,但如果知道了A的信息就可以得到B的信息,反过来知道了B也就得到了A。可以考虑首先赋予A某种初值,以此得到B的估计值,然后从B的当前值出发,重新估计A的取值,这个过程一直持续到收敛为止。

    在男女生身高分布的例子中,我们运用EM算法的思想。首先随便猜一下男生的高斯分布参数:均值和方差。假设均值是1.7米,方差是0.1米,然后计算出每个人更可能属于第一个还是第二个正态分布中。这是第一步,Expectation。在分开了两类之后,我们可以通过之前用的最大似然,通过这两部分,重新估算第一个和第二个分布的高斯分布参数:均值和方差。这是第二步,Maximization。然后更新这两个分布的参数。这是可以根据更新的分布,重新调整E(Expectation)步骤...如此往复,迭代到参数基本不再发生变化。

    这里原作者提到了一个数学思维,很受启发,转给大家看一眼(比较鸡汤和啰嗦,大家可以跳过)

这时候你就不服了,说你老迭代迭代的,你咋知道新的参数的估计就比原来的好啊?为什么这种方法行得通呢?有没有失效的时候呢?什么时候失效呢?用到这个方法需要注意什么问题呢?呵呵,一下子抛出那么多问题,搞得我适应不过来了,不过这证明了你有很好的搞研究的潜质啊。呵呵,其实这些问题就是数学家需要解决的问题。在数学上是可以稳当的证明的或者得出结论的。那咱们用数学来把上面的问题重新描述下。(在这里可以知道,不管多么复杂或者简单的物理世界的思想,都需要通过数学工具进行建模抽象才得以使用并发挥其强大的作用,而且,这里面蕴含的数学往往能带给你更多想象不到的东西,这就是数学的精妙所在啊)

五、EM算法的简单理解方式

    在提出EM算法的推导过程之前,先提出中形象的理解方式,便于大家理解整个EM算法,如果只是实现深度学习模型,个人认为可以不需要去看后面的算法推导,看这个就足够了。

    坐标上升法(Coordinate ascent):

    图中的直线式迭代优化的途径,可以看到每一步都会向最优值靠近,而每一步前进的路线都平行于坐标轴。那么我们可以将其理解为两个未知数的方程求解。俩个未知数求解的方式,其实是固定其中一个未知数,求另一个未知数的偏导数,之后再反过来固定后者,求前者的偏导数。EM算法的思想,其实也是如此。使用坐标上升法,一次固定一个变量,对另外的求极值,最后逐步逼近极值。对应到EM上,E步:固定θ,优化Q;M步:固定Q,优化θ;交替将极值推向最大。 

六、EM算法推导

    现在很多深度学习框架可以简单调用EM算法,实际上这一段大家可以不用看,直接跳过看最后的总结即可。但是如果你希望了解一些内部的逻辑,可以看一下这一段推导过程。

    假设我们有一个样本集{x(1),…,x(m)},包含m个独立的样本(右上角为样本序号)。但每个样本i对应的类别z(i)是未知的(相当于聚类),也即隐含变量。故我们需要估计概率模型p(x,z)的参数θ(在文中可理解为高斯分布),但是由于里面包含隐含变量z,所以很难用最大似然求解,但如果z知道了,那我们就很容易求解了。

首先放出似然函数公式,我们接下来对公式进行化简:

    对于参数估计,我们本质上的思路是想获得一个使似然函数最大化的参数θ,现在多出一个未知变量z,公式(1)。那么我们的目标就转变为:找到适合的θ和z让L(θ)最大。

    对于多个未知数的方程分别对未知的θ和z分别求偏导,再设偏导为0,即可解方程。

    因为(1)式是和的对数,当我们在求导的时候,形式会很复杂。

    这里我们需要做一个数学转化。我们对和的部分,乘以一个相等的函数,得到(2)式,利用Jensen不等式的性质,将(2)式转化为(3)式。(Jensen不等式数学推到比较复杂,知道结果即可)

Note:

Jensen不等式表述如下:

如果f是凸函数,X是随机变量,那么:E[f(X)]>=f(E[X])

特别地,如果f是严格凸函数,当且仅当X是常量时,上式取等号。参考链接: https://blog.csdn.net/zouxy09/article/details/8537620

    至此,上面的式(2)和式(3)不等式可以写成:似然函数L(θ)>=J(z,Q),那么我们可以通过不断的最大化这个下界J(z,Q)函数,来使得L(θ)不断提高,最终达到它的最大值。

    现在,我们推导出了在固定参数θ后,使下界拉升的Q(z)的计算公式就是后验概率,解决了Q(z)如何选择的问题。这一步就是E步,建立L(θ)的下界。接下来的M步,就是在给定Q(z)后,调整θ,去极大化L(θ)的下界J(在固定Q(z)后,下界还可以调整的更大)。

总结而言

EM算法是一种从不完全数据或有数据丢失的数据集(存在隐藏变量)中,求解概率模型参数的最大似然估计方法。

EM的算法流程:

1>初始化分布参数θ;

重复2>, 3>直到收敛:

    2>E步骤(Expectation):根据参数初始值或上一次迭代的模型参数来计算出隐性变量的后验概率,其实就是隐性变量的期望。作为隐藏变量的现估计值:

    3>M步骤(Maximization):将似然函数最大化以获得新的参数值:

这个不断迭代的过程,最终会让E、M步骤收敛,得到使似然函数L(θ)最大化的参数θ。

在L(θ)的收敛证明:

⑵ 05 EM算法 - 高斯混合模型 - GMM

04 EM算法 - EM算法收敛证明

GMM (Gaussian Mixture Model, 高斯混合模型)是指该算法由多个高斯模型线性叠加混合而成。每个高斯模型称之为component。

GMM算法 描述的是数据的本身存在的一种分布,即样本特征属性的分布,和预测值Y无关。显然GMM算法是无监督的算法,常用于聚类应用中,component的个数就可以认为是类别的数量。

回到昨天说的例子:随机选择1000名用户,测量用户的身高;若样本中存在男性和女性,身高分别服从高斯分布N(μ1,σ1)和N(μ2,σ2)的分布,试估计参数:μ1,σ1,μ2,σ2;

1、如果明确的知道样本的情况(即男性和女性数据是分开的),那么我们使用极大似然估计来估计这个参数值。

2、如果样本是混合而成的,不能明确的区分开,那么就没法直接使用极大似然估计来进行参数的估计。

我们可以认为当前的1000条数据组成的集X,是由两个高斯分布叠加而成的(男性的分布和女性的分布)。

如果能找到一种办法把每一个高斯分布对应的参数π、 μ、σ求出来,那么对应的模型就求解出来了。

如果模型求解出来后,如何对数据进行聚类?

这个公式求出来的分别是男性和女性身高分布的概率密度,如果把π、 μ、σ都求出来,以后我们可以构建出一个 能够根据样本特征 计算出样本属于男性或女性的可能性。

实际做样本分类的时候,我们把样本X的特征x1~xn分别代入两个公式中,求出来的两个结果分别是:样本X的性别是男、是女的可能性。如果是男的可能性大于是女的可能性,我们就把样本X归入男性的分类。

假定 GMM 由k个Gaussian分布线性叠加而成,那么概率密度函数如下:

分析第1个等式:
p(x): 概率密度函数,k个Gaussian分布线性叠加而成的概率密度函数。
∑p(k)p(x|k): k个某种模型叠加的概率密度函数。
p(k): 每个模型占的权重,即上面提到的π。
p(x|k): 给定类别k后,对应的x的概率密度函数。

分析第2个等式: 目标 - 将公式写成高斯分布的样子。
π k : 即p(k)
p(x;μ k ,∑ k ): 多元高斯(正态)分布。有了观测数据x后,在 给定了条件 下的高斯分布。这个 条件 1、第k个分类的均值μ k ; 2、第k个分类的方差∑ k ;

深入分析p(x;μ k ,∑ k )的参数:
如果样本有n个特征,所有的特征x1~xn一起服从一个多元的高斯分布(正态分布),所有特征的均值应该是一个向量 (μ 1 ~μ n );
μ k : 第k个分类的情况下(第k个高斯分布的情况下对应的每一列的均值);μ k = (μ k1 ~μ kn )

∑ k : 协方差矩阵(对称阵)。现在有n个特征,协方差矩阵是一个n×n的矩阵。现在我们要算的是:

cov(x1,x1),cov(x1,x2),...,cov(x1,xn)

cov(x2,x1),cov(x2,x2),...,cov(x2,xn)
....
cov(xn,x1),cov(x1,x2),...,cov(xn,xn)

其中, 对角线 cov(x1,x1)、cov(x2,x2), ... ,cov(xn,xn)中,x1和x1的协方差 = x1的方差;即cov(x1,x1) = var(x1);所以 对角线上两个特征的协方差 = 对应的特征的方差。

协方差 (Covariance)在 概率论 和 统计学 中用于衡量两个变量的总体 误差 。而 方差 是协方差的一种特殊情况,即当两个变量是相同的情况。

协方差表示的是两个变量的总体的 误差 ,这与只表示一个变量误差的 方差 不同。 如果两个 变量 的变化趋势一致,也就是说如果其中一个大于自身的期望值,另外一个也大于自身的期望值,那么两个变量之间的协方差就是正值。 如果两个变量的变化趋势相反,即其中一个大于自身的期望值,另外一个却小于自身的期望值,那么两个变量之间的协方差就是负值。

理解了公式后,再来看看公式在图像上是如何体现的:

如果样本X只有一个特征x1,在二维的坐标系上的表示出来。特征x1是由n个单变量样本的高斯分布叠加而成的。向量x1 k = ∑ k (x1 (1) ,x1 (2) ,~,x1 (n) ),如k=(男、女),累加男性分类下的特征高斯分布和女性分类下的高斯分布;

图中 红色曲线 表示原有数据的分布情况,我认为这个原有数据是由多个比较的高斯分布叠加而成的, 蓝色曲线 表示单个单个高斯分布的分布情况。向量x1 = (x1 (1) ,x1 (2) ,~,x1 (n) );

PS: 蓝1+蓝2=红 体现的就是公式 p(x) = ∑πp(x;μ,∑k);

在得知数据的特征 x=(x1~xn) 后,如果我们想把数据合理得聚类到一个分类中,我们该如何去计算呢?

既然我已经得到了k个高斯分布对应的概率密度函数(现在设k=3,共3个分类),将当前特征的x=(x1~xn)代入我们的概率密度函数: p(x) = ∑πp(x;μ,∑k);

我们分别计算p(蓝1)、p(蓝2)、p(蓝3),蓝色三条线各对应k分类中的一个,哪个数大,我认为当前的样本该分到哪一类。

GMM算法的两个前提:
1、数据服从高斯分布;
2、我们人为定义了分类个数k。

问:我们人为假定了高斯分布的分类个数k,就类似于我们聚簇时分的聚簇中心个数一样。参数π、μ、σ该如何求出来?

答:和K-Means算法一样,我们可以用 EM算法 来求解这个问题。 GMM也满足EM算法的聚类思想,首先人为得定义了聚类的个数k,从数据特征X中发掘潜在关系的一种模型。而且我还默认数据是服从多个高斯分布的。

GMM算法中的隐含条件是:第k个模型占的权重 - 、 第k个高斯分布的情况下对应的每一列的均值 - 、协方差矩阵 cov(xi,xj) - ;因为本质上我们是知道数据原有的分类状况的,只是无法观测到隐含在数据中的这些特性,使用EM的思想可以迭代得求解出这些隐含变量。

对联合概率密度函数求对数似然函数:

对联合概率密度函数求对数后,原本 连乘 的最大似然估计变成了 连加 的函数状态。

EM算法求解 - E步:

套用公式后,我们可以假定隐含变量z的分布:Q(z (i) = j);
我们认为分布wj (i) = 第i个观测值对应的隐含分类第z (i) 类; = 以(看不见的参数π、μ、∑)为参数的情况下,输入第i观测值的特征x后得到的分类z (i) 类;

EM算法求解 - M步:
M步第1行就是上一章通过化简找到 下界 的那个函数:

1、对均值求偏导:

2、对方差求偏导:

3、对概率使用拉格朗日乘子法求解:

06 EM算法 - 案例一 - EM分类初识及GMM算法实现

⑶ 高斯混合模型(GMM)及EM算法的初步理解

高斯混合模型(Gaussian Mixed Model)指的是多个高斯分布函数的线性组合,理论上GMM可以拟合出任意类型的分布,通常用于解决同一集合下的数据包含多个不同的分布的情况(或者是同一类分布但参数不一样,或者是不同类型的分布,比如正态分布和伯努利分布)。

如图1,图中的点在我们看来明显分成两个聚类。这两个聚类中的点分别通过两个不同的正态分布随机生成而来。但是如果没有GMM,那么只能用一个的二维高斯分布来描述图1中的数据。图1中的椭圆即为二倍标准差的正态分布椭圆。这显然不太合理,毕竟肉眼一看就觉得应该把它们分成两类。

这时候就可以使用GMM了!如图2,数据在平面上的空间分布和图1一样,这时使用两个二维高斯分布来描述图2中的数据,分别记为N(μ1,Σ1)和N(μ2,Σ2) 。图中的两个椭圆分别是这两个高斯分布的二倍标准差椭圆。可以看到使用两个二维高斯分布来描述图中的数据显然更合理。实际上图中的两个聚类的中的点是通过两个不同的正态分布随机生成而来。如果将两个二维高斯分布N(μ1,Σ1)和N(μ2,Σ2) 合成一个二维的分布,那么就可以用合成后的分布来描述图2中的所有点。最直观的方法就是对这两个二维高斯分布做线性组合,用线性组合后的分布来描述整个集合中的数据。这就是高斯混合模型(GMM)。

高斯混合模型(GMM)的数学表示:

期望极大(Expectation Maximization)算法,也称EM算法,是一种迭代算法,由Dempster et. al 在1977年提出,用于含有隐变量的概率参数模型的极大似然估计。

EM算法作为一种数据添加算法,在近几十年得到迅速的发展,主要源于当前科学研究以及各方面实际应用中数据量越来越大的情况下,经常存在数据缺失或者不可用的的问题,这时候直接处理数据比较困难,而数据添加办法有很多种,常用的有神经网络拟合、添补法、卡尔曼滤波法等,但是EM算法之所以能迅速普及主要源于它算法简单,稳定上升的步骤能相对可靠地找到“最优的收敛值”。

(个人的理解就是用含有隐变量的含参表达式不断拟合,最终能收敛并拟合出不含隐变量的含参表达式)

模型的EM训练过程,直观的来讲是这样:我们通过观察采样的概率值和模型概率值的接近程度,来判断一个模型是否拟合良好。然后我们通过调整模型以让新模型更适配采样的概率值。反复迭代这个过程很多次,直到两个概率值非常接近时,我们停止更新并完成模型训练。现在我们要将这个过程用算法来实现,所使用的方法是模型生成的数据来决定似然值,即通过模型来计算数据的期望值。通过更新参数μ和σ来让期望值最大化。这个过程可以不断迭代直到两次迭代中生成的参数变化非常小为止。该过程和k-means的算法训练过程很相似(k-means不断更新类中心来让结果最大化),只不过在这里的高斯模型中,我们需要同时更新两个参数:分布的均值和标准差.[3]

GMM常用于聚类。如果要从 GMM 的分布中随机地取一个点的话,实际上可以分为两步:首先随机地在这 K 个 Component 之中选一个,每个 Component 被选中的概率实际上就是它的系数Πk ,选中 Component 之后,再单独地考虑从这个 Component 的分布中选取一个点就可以了──这里已经回到了普通的 Gaussian 分布,转化为已知的问题。

根据数据来推算概率密度通常被称作 density estimation 。特别地,当我已知(或假定)概率密度函数的形式,而要估计其中的参数的过程被称作‘参数估计’。

(推导和迭代收敛过程这里省略,可参考资料1)

一个实际的例子:用GMM对iris数据集进行聚类,并通过make_ellipses表示出来

make_ellipses方法概念上很简单,它将gmm对象(训练模型)、坐标轴、以及x和y坐标索引作为参数,运行后基于指定的坐标轴绘制出相应的椭圆图形。

在特定条件下,k-means和GMM方法可以互相用对方的思想来表达。在k-means中根据距离每个点最接近的类中心来标记该点的类别,这里存在的假设是每个类簇的尺度接近且特征的分布不存在不均匀性。 这也解释了为什么在使用k-means前对数据进行归一会有效果。高斯混合模型则不会受到这个约束 ,因为它对每个类簇分别考察特征的协方差模型。

K-means算法可以被视为高斯混合模型(GMM)的一种特殊形式。 整体上看,高斯混合模型能提供更强的描述能力,因为聚类时数据点的从属关系不仅与近邻相关,还会依赖于类簇的形状。n维高斯分布的形状由每个类簇的协方差来决定。在协方差矩阵上添加特定的约束条件后,可能会通过GMM和k-means得到相同的结果。

在k-means方法中使用EM来训练高斯混合模型时对初始值的设置非常敏感。而对比k-means,GMM方法有更多的初始条件要设置。实践中不仅初始类中心要指定,而且协方差矩阵和混合权重也要设置。可以运行k-means来生成类中心,并以此作为高斯混合模型的初始条件。由此可见并两个算法有相似的处理过程,主要区别在于模型的复杂度不同。

高斯混合模型的基本假设是 已知类别的比例 和 类别的个数 ,但是不知道每个样例的具体标签,据此用EM的模式为每个样本进行最优的标注。也就是说它适合的是 无标签学习的分类问题 ,并且需要已知基本假设。

整体来看,所有无监督机器学习算法都遵循一条简单的模式:给定一系列数据,训练出一个能描述这些数据规律的模型(并期望潜在过程能生成数据)。 训练过程通常要反复迭代,直到无法再优化参数获得更贴合数据的模型为止。

【1】https://blog.csdn.net/jinping_shi/article/details/59613054  高斯混合模型(GMM)及其EM算法的理解

【2】https://cloud.tencent.com/developer/news/231599    机器学习中的数学(4)-EM算法与高斯混合模型(GMM)

【3】https://zhuanlan.hu.com/p/31103654    一文详解高斯混合模型原理

⑷ 高斯混合模型GMM

最近在学习语音识别,由于传统的基于HMM-GMM架构的语音识别具有成熟的理论、工具链,且其一直以来神秘感让人十分好奇;所以我打算从传统框架入手学习,并尝试认真地弄懂相关技术;在看了一些语音识别相关简介后,知道虽然GMM模型在很多年前,在”混合模型“(hybrid model)中就被DNN所取代了;甚至在当今深度学习背景下,HMM也有被完全取代的趋势;但是从学习的角度,我觉得GMM仍然是很好的学习材料。

其中:D为数据空间的维数,K为混合分支个数

在 多元正态分布 文中,中我们证实了 的积分为1,在这里由积分的线性性质有:

所以需要 ,且为了保证概率都为正数,这里还要求 都大于0,这时 成为合法的密度函数。

下面关于参数的极大似然估计主要学习PRML书中的相关讨论,这里我只是补充了一些推导过程中的数学细节,这些数学细节书上一般不会写出来,所以这里我决定自己推推看,让心里更加踏实。

为了不至于使得下面ML估计的公式推导太乱,我们在这里提前把部分相关的导数计算好。

1. 设二次型为 ,其中 为D维列向量,而 为D阶方阵,而 为点 处的切空间(tangent space)中的向量,根据下式:

显然 是关于切空间中向量 的线性函数;且 显然是关于 的高阶部分,即当 时, 。

即:  

以上便是函数的可微性定义,因而导数(雅可比矩阵)为: 。

进而,若 是对称矩阵,则      

2. 同样是上面的二次型,这次我们把参数矩阵看作变量,即 ,有: ,写成矩阵形式就有:

3. 行列式的求导,行列式函数: ,是n阶实方阵空间上的实值函数;事实上我们直接将行列式看作原型是 的函数即可,因为这里我们关心的求导运算跟矩阵的代数运算没有关系,因此可以忽略其结构;从线代课本可知有两种方式定义行列式:

1)组合式定义: ,其中 是n阶方阵, 是n元对称群, 是其中任取的置换,也可以将 看作 的一个全排列,而 是全排列 的符号。

2)递归定义,按第k行展开:

  

其中: 是矩阵的第k行第j列元素, 是元素 对应的余子式,而记 为元素 的代数余子式。

在这里应该用递归定义比较方便,比如要对元素 求导: 来自第 行、第 列,又因为按照行列式的递归定义(3)式,同样的第 行,但是不同的列 上的元素 的余子式 显然不会包括当前被求导元素 ,因为它不会包含第 行除了 以外的任何元素。因此,我们有:

即行列式关于第 元素的偏导数,就是该元素对应的代数余子式。因此把所有的偏导数整理到矩阵里面,就有:

 其中 为 的伴随矩阵的转置。

再次,若 为对称矩阵,且可逆,则根据公式 有: ,即 的伴随矩阵也是对称的。

现在我们用一组数据 来拟合GMM模型,假设数据之间是独立的,则该组数据在模型上的对数似然为:

下面根据微分学计算该似然函数取得极大值的必要条件,由于需要满足约束 ,根据Lagrange乘子法,求下面关于参数 的函数 的极大值点:

先对 求导 ,根据多元复合函数的链式求导法则,有:

,其中 为密度函数指数部分的二次型,即:

令 ,则: ,其中:根据之前的推导,雅可比矩阵 ,而雅可比矩阵 ,所以:     。

按照书中所说将 定义为 关于隐变量的后验概率,则(6)式变为: ,写成梯度形式,就有: ,令其等于 ,并利用 的非奇异性,两边同时左乘 ,将其解出来得:

下面对协方差矩阵求导: 为了保持一致,我们还是用 代替 作为行列式函数;但是这里为了方便,我们不直接对协方差矩阵求导,而是对其逆矩阵求导,我们令 ,重写一遍(0)式:

在上式中,令 ,则根据乘法求导法则有:

其中,根据上面的(4)式有:

因为 是对称矩阵,故而 也是对称矩阵(由 易知),再利用上面证过的(5)式就得到了上式。

令其乘以 ,有:

再利用上面证好的(2)式,有:

其中:

同样,令其乘以 ,有:

最后将(9),(10)两式代入(8)式,整理整理就得到:

令其等于 ,且注意到 ,我们得到:

最后,我们对混合系数 求导:

我们发现其中: 与 只相差一个 ,令 ,并在等式两边同乘以 得:

现在,对一个特定的k,将 代入(11)式,得:

由于无法闭式求解,可以用EM算法来迭代式地拉高数据在模型参数上的似然,抄一抄书本上的算法,加深一下印象:

1. 初始化GMM所有分支的均值向量 、协方差矩阵 ,以及各分支的混合系数 ;

2. E Step : 固定当前模型参数,计算 ,即书上所说的分支 要为解释数据 承担的那部分责任,即后验概率分布:

3. M Step : 利用当前的后验概率分布,重新估计模型的所有参数:

4. 计算对数似然:

检查参数或者对数似然值是否已经达到收敛条件;若否,返回第2步,继续训练。

⑸ GMM算法使用

我毕设用到GMM ,有相关资料嘛,交流下呗~

⑹ GMM模型是什么

就是用高斯概率密度函数(正态分布曲线)精确地量化事物,将一个事物分解为若干的基于高斯概率密度函数(正态分布曲线)形成的模型。GMMs已经在数值逼近、语音识别、图像分类、图像去噪、图像重构、故障诊断、视频分析、邮件过滤、密度估计、目标识别与跟踪等领域取得了良好的效果。

对图像背景建立高斯模型的原理及过程:图像灰度直方图反映的是图像中某个灰度值出现的频次,也可以认为是图像灰度概率密度的估计。如果图像所包含的目标区域和背景区域相比比较大,且背景区域和目标区域在灰度上有一定的差异,那么该图像的灰度直方图呈现双峰-谷形状。

主要步骤

1、为图像的每个像素点指定一个初始的均值、标准差以及权重。

2、收集N(一般取200以上,否则很难得到像样的结果)帧图像利用在线EM算法得到每个像素点的均值、标准差以及权重)。

3、从N+1帧开始检测,检测的方法:

对每个像素点:

1)将所有的高斯核按照ω/σ降序排序

2)选择满足公式的前M个高斯核:M= arg min(ω/σ>T)

3)如果当前像素点的像素值在中有一个满足:就可以认为其为背景点。

阅读全文

与gmm算法实现相关的资料

热点内容
冰箱压缩机烫手老跳闸 浏览:254
php日志系统架构 浏览:453
udp获取服务器ip地址 浏览:985
能把心里的恐惧解压出来的视频 浏览:368
三丰云上传服务器流程 浏览:812
php类常亮 浏览:819
如何用纸尿裤做解压玩具 浏览:608
程序员年龄和工资 浏览:766
压缩空气的特性简介 浏览:564
广乐美app是做什么的 浏览:323
android的spinner属性 浏览:929
店家帮平台源码 浏览:973
源码编辑器绘制图形 浏览:951
长沙云服务器提供商 浏览:107
51单片机测脉冲宽度 浏览:286
文件夹弄成二维码 浏览:283
python字典循环添加 浏览:692
闲置服务器怎么收费 浏览:162
阅读app是用什么开发的 浏览:37
js赋值给java 浏览:41