带你理解带你飞——高斯混合模型算法

GMM这是图像处理,模式识别和深度学习领域一个百嚼不烂的话题。很多人被一堆数学公式,迭代求和和看似毫无联系的likehood EM算法搞得糊里糊涂。

其实就算羡慕着很多牛气哄哄的学霸炫耀公式推理的IT普工们,我们有没有问过自己,我们真的知道GMM吗?于是有些人和我一样有了如下的思考和疑问:

1.到底什么是高斯混合模型?最好能一句话或者简单的话说明白,至少让我一辈子也忘不掉这个该死的算法。。。

2.GMM是如此复杂有效,能让GMM算法向富士康的iphone流水线一样,虽然精密庞杂但却能完整直观的展现在我们面前吗?

3.可以再详细一点吗?

4.为什么会有这个算法模型?GMM存在的意义是什么,能解决什么问题?

5.GMM真的是万能的吗?它有什么问题,我如何避免或修正他们?

6.。。。。

为了彻底解决这些看似简单原生态的问题,我拜读了很多大牛的文章,写了代码做了实验,只为一睹GMM芳颜:

1.到底什么是高斯混合模型?最好能一句话或者简单的话说明白,至少让我一辈子也忘不掉这个该死的算法。。。

一句话,就一句话:GMM——道生一一生二二生三三生万物。(我相信很多中国人,至今都不会断句这句话。。。)

是的,我说GMM来自与哲学,而老子则直接告诉你他就是"道"。GMM是人们认识自然万物相生相克的规律,是大脑对自然认识后的长时间归纳与沉淀。GMM的核心思想就是任意的形态(不管是可见的光,图像,还是抽象的多维度变量模型,比如经济金融危机模型),都来可以用高斯核函数来累积加权得到,经管这些核可能不止一个,有不同的维度,不一的中心,甚至相差很大的波动。这都不妨碍他们谦卑的遵循高斯概率模型的函数性质,都能分解成为那个迷人的公式:

公式(1)

再后来我们拥有了计算机,而且当离散数学这一学科方法的出现,连续Gauss模型要完成计算机的模拟,所以离散化的概率密度函数就表示成这样了:

公式(2)

相信这里学渣们又开始烦了,神马意思?又一坨!

相信我,这是你后面降妖除魔的朱砂,就算你不认同这坨东东,那我告诉你,即使他是一坨,那也是一坨可遇不可求的『狗黄金』,只能这样解释了,我已词尽xx!

解释一下,x是样本变量,p(x)是样本之与你大GMM模型的概率(真实的叫法是概率密度,其实概率即是概率密度的积累积分,打住,渣爷们,这个括号你当没看见),K是你要最终分的类别个数(这个有讲究,后书分解),很多paper里讲K is compenents of GMM。后面的是指x由第k个高斯模型生成的概率,那么是什么?paper中多叫『reponse matrix』,我们叫他第k类的权重,就是这个高斯model在所有model里的对样本x属于k类的一个贡献大小,简单讲就是江湖里老k入会时的股份,以后牛叉了,股份可以增加哦。。。,接下来,就是那句名言:有人的地方就是江湖。苦逼的GMM为了形成强大的黑客帝国,不断迭代进步,这一的进步的同时,各帮派的上位斗争也开始惊心动魄地上演:

1)对于GMM最终的那个强大model来说,我不关心你们的争斗,只要你们都能上交最多的利润p(x),我就高兴(这里就是gmm的一个bug,paper上叫局部最优缺陷),如果各帮派能在自己最大利润的情况下,和谐相处达到平衡,那就最好不过了,说明老大的公司已经开启印钞模式,走上迎娶白富美的大道啦。。。于是,江湖规矩变因运而生!!!

公式(3),但是老大是台machine啊,离散的p(xi)是很小的,计算机无法存储有些太小的浮点值,怎么办?数学就像股票界的"狗庄"一样,猥琐的出现了——Log()函数!又一幕气死学渣,乐死学霸的戏剧上演了。于是规矩就成了:

公式(4),其实我可以再详细一点的,否则学霸要鄙视了,

于是规矩终归这里(Champions belong to here eventually):

公式(5),这里的N(xxx)函数就是上面的概率密度的数学规范表示。这就是大名鼎鼎的log-likehood function,如果能求出他,找到最大值,那么这时对应的高斯模型就是最终的模型,每个model对样本的作用加权出的p(xi)自然就可以完成分类(这里涉及一个量化标准,自己找paper,到这个时候还敢做『伸手党』,估计你是到不了双十一了,直接剁了双爪,哈哈)。下面的核心任务就是最精彩的空手套白狼的游戏了——如何解出这个最大似然函数,揭开屌丝们朝思暮想的GMM妹妹真容了!

至此,第一个问题算是憋完了,各位就这么看吧!再说,估计得便秘了。。。

2.GMM是如此复杂有效,能让GMM算法向富士康的iphone流水线一样,虽然精密庞杂但却能完整直观的展现在我们面前吗?

我想说:能!大部分说GMM复杂,无非是因为怕公式,不明所以。不是庖丁,不知牛之大概,牛何解邪?要有个直观的呈现,无非就是要准备的了输入,下得去流水线,搞懂制造工艺流程,最后还能装箱出厂,完成iphone般高大上的输出。那么接下来就让我们看看GMM算法的整个工序流程:

首先是训练样本N个,每个样本xi中含有D维的变量,最终想要分到K个结果类中,每个维度变量对应上面概率密度函数中的一个均值中心u,和一个该高斯核生成这个xi的"模型权重wi"。用矩阵表示应该更易理解:样本X(N*D),均值U(D*K),权重wi(N*K).这是第一步输入问题和输入的简单矩阵模型,下面就是到底要最什么?这个问题在问题1中有讲诉,就是求能使GMM模型达到利益最大化的那个max likehood function的极值。

于是第二步制造工艺就是求极值,众所周知求极值,那肯定是要用到导数啦,但是你仔细翻翻高数的课本,你会发现maxlikehood function与课本里乘积的概率形式又有些差别,好像总差点什么,没关系让数学来做,既然求导复杂难度大,不利于计算设计解耦,那么是否有另外的解决方法?真有,EM算法!(渣爷们估计又一片骂声。。。)ok,我来解释一下,为什么想到EM,这得从EM的本质和特点来讲,EM来自与假设验证的收敛思想。讲简单一点就是,如果一个来源与真实情况(你可以理解为来自真实样本)的假设,只要有个验证模型(我们这里就是指高斯模型)存在,我就可以验证你刚才的假设与模型的输出结果的差异,然后再通过这个差异来建立新的假设,再输入模型继续验证。当你连续的假设差异(这里应该准确的讲是正向差异)足够小时,是否意味着这时的假设和模型的吻合度足够高?系统足够稳定?当然!

这里其实有些坑,比如我的验证模型为什么是高斯,其实只要能证明模型在你关心的中心附近收敛,波动有限,你也可以选取。

由于这种收敛和验证都是来源与样本假设,那问题来了,这种假设是否真的准确?答案是否定的,你EM得到的稳定模型只是个局部样本最优。为什么,原因很简单:你的样本是抽样采集的,你无法保证你的实验样本(海中一粟)能反应真实事件的各种复杂情况,最大的保证只能说尽量代表真实情况。

那么问题又来了,我如何保证我的样本,如果没有办法,那GMM就没有应用价值了?答案是有的,还记得你信号与系统中不起眼的地方有个抽样定理吗?抽样的频率要至少为样本频率的2倍,否则采样结果不能保证反应样本的主要信息。

so,。。。这个你该懂了吧。

3.可以再详细一点吗?(学覇自动忽略这一节,这是抽取JerryLead大神的思路说给学渣听的,谢谢~)

天空飘来8个字:秒杀学霸不是事儿!当然可以,学渣们现在开始——带你装逼带你飞!

大EM算法:前面做了一个逻辑分析,为什么引入EM算法来求极值。其实这是缺少数学论证的,本身就是一种假设上的假设验证,因此有必要从数学角度来论证这个问题确实可以用数学的方法去解决。

首先,你要理解一些数学概念,比如jensen不等式(凹函数f(E(x))>=E[f(x)]),高数上的凹凸函数(log是一个凹函数)。现在我们可以把maxlikehood函数写的更数学一些,这里就是做了个空手用来套『白狼』,这个空手就是隐含类别z,这是个什么东东?在数学上我们认为它也是各分布,只不过是简单的多项式分布,就是为了描述某个样本样列xi属于类k的表示,就是zi=k,就是上面说的wi=p(zi=j|xi,u,sigma,类权重),就是满足『样列属于类k的一个权重』。这里有个逻辑要说一下,只有我们确定了这个隐含分类zi(空手)之后,我们的样列xi才能说符合某个高斯分布,即。由此可以得到联合分布,看到没这就是公式(2)。(这里有些数学条件限制,后面附上链接,各位愿意了解的可以仔细看看JerryLead的推导,这里只做必要解释)ok,下面再对maxlikehood function做细化:

公式(6)

这时候就是Jenssen和log凹函数的作用了,上面的公式就变成了这样:

公式(7)log()移到了里面,乘积被分解为和。

这个时候对上式分布求导,对进行求导得到:

公式(8),下面解释一下:

第一个就是我们上面问题里的Wk,不是wi。上面3各公式,分别表示类j的权重,中心,与方差波动。OK,至此一个EM循环就over了。

最后大牛jerryLead的一张图来显示一下EM loop:

循环下面步骤,直到收敛: {

(E步)对于每一个i和j,计算

(M步),更新参数:

}

这里不想再贴别人的图了,因为我觉得该解释的地方都解释了。。。。,再说,估计学霸们要说我恶心抄袭了(虽然只是几个占地方的公式,但确实对不住JerryLead大神,愿神保佑!哈哈)

至此GMM算法就抡完了。。。。下面是一些提后话

4.为什么会有这个算法模型?GMM存在的意义是什么,能解决什么问题?

1)前面这个问题,有点扯,真的,就像你问为什么有人类一样?而且我也并不想像学霸那样翻历史书,告诉你在xxx时间背景下,他就诞生了!

当你看到了一下现象,认识一下事物,特别是一些人后,我们总按照千百年的进化惯性,去有意无意的分解总结事物,以期望认识新的事物。比如你认识阳光,你又用三棱镜分解了他成不同频率的七色光,然后你有用计算机模拟出组成他们的RGB三原色。于是一天你看到了一种从未见过的花,你会很自信的说我可以把它的颜色存储下来。但是事实上事物中蕴含太多的未知,只是鉴于人类对未来的恐惧的一种惯性反应——分解它,用最小的元素去理解他,这样你就不会害怕。。。。

2)GMM的意义,在于我们可以尝试用一种正态分布的模型去模拟一些独立元素组成的事物与其事物的区别。

就比如在米缸里找出大豆一样,但前提是这两者用可量化的不同,比如形状,密度。。。。

5.GMM真的是万能的吗?它有什么问题,我如何避免或修正他们?

1)前面其实都有提到,比如极值的局部最优问题?模型的个数真的就只需要compent个吗?,输入的样本维度如果不独立怎么办(估计上帝都不敢肯定这个问题)?

2)避免和修正:可以用有监督学习来初始化zi,可以尽量提高采样频率,可以量化样本维度,可以改进输出量化方法。。。。等等。。。

6.感谢很多愿意分享的人,下面附录一下我还记得和参考过的大神blog:

1)http://www.cnblogs.com/jerrylead/archive/2011/04/06/2006924.html

2)http://blog.csdn.net/zouxy09/article/details/9982495

3)。。。对不起忘记了。。。。

也许精彩才刚刚开始。。。。

时间: 2024-12-20 00:30:56

带你理解带你飞——高斯混合模型算法的相关文章

混合高斯模型算法(转)

下面介绍一下几种典型的机器算法 首先第一种是高斯混合模型算法: 高斯模型有单高斯模型(SGM)和混合高斯模型(GMM)两种. (1)单高斯模型: 为简单起见,阈值t的选取一般靠经验值来设定.通常意义下,我们一般取t=0.7-0.75之间. 二维情况如下所示: (2)混合高斯模型: 对于(b)图所示的情况,很明显,单高斯模型是无法解决的.为了解决这个问题,人们提出了高斯混合模型(GMM),顾名思义,就是数据可以看作是从数个高 斯分布中生成出来的.虽然我们可以用不同的分布来随意地构造 XX Mixt

五一装修优惠那么大,云麦装修带你装修带你飞

"五一"小长假来临之际,看着别人都在做着出行计划,你还在埋头苦查装修攻略吗?想着别人又要晒美食晒美景,你还在计划到材料城跑断腿吗?不如,把房子装修交给我们,你免费旅游去! 云麦装饰-米图原创设计机构大明宫钻石店更推出"五一放松计划",活动期间签订装修合同客户,即可参加抽奖,旅游基金百分百中奖!韩国首尔五天四日双人游,追逐太阳的后裔宋欧巴的脚步!香港迪士尼,珠海长隆海洋王国双人套餐!更有丽江/成都/三亚/厦门/贵阳等往返机票!300/500携程旅游基金,你想去哪就去哪

linux 内核网络协议栈阅读理解--带详尽注释以及相关流程调用注释,附 github 注释后源码

linux 内核网络协议栈阅读理解--带详尽注释以及相关流程调用注释,对理解内核协议栈源码很有帮助 对理解阅读 linux 协议栈源码很用帮助 github 地址: https://github.com/y123456yz/Reading-and-comprehense-linux-Kernel-network-protocol-stack

贝叶斯来理解高斯混合模型GMM

最近学习基础算法<统计学习方法>,看到利用EM算法估计高斯混合模型(GMM)的时候,发现利用贝叶斯的来理解高斯混合模型的应用其实非常合适. 首先,假设我们对于贝叶斯比较熟悉,对高斯分布也熟悉.本文将GMM用于聚类来举例. 除了简单的高斯分布,理论上通过组合多个不同的高斯分布可以构成任意复杂的分布函数.如下图所示: 在最大似然,贝叶斯方法与朴素贝叶斯分类中,2.1中提到高斯概率密度用来计算连续变量情况下的朴素贝叶斯概率.该情况下的高斯分布是训练已知,然后对于输入变量求取其概率密度,结合类别的先验

JDK1.8源码逐字逐句带你理解LinkedHashMap底层

数据存储结构 我们已经知道HashMap是以散列表的形式存储数据的,LinkedHashMap继承了HashMap,所以LinkedHashMap其实也是散列表的结构,但是"linked"是它对HashMap功能的进一步增强,LinkedHashMap用双向链表的结构,把所有存储在HashMap中的数据连接起来.有人会说散列表不是已经有了链表的存储结构了嘛,为什么还要来个双向链表?桶(桶的概念就是数组的一个存储节点,比如说arr[0]是一个桶,arr[1]也是一个桶)中的链表和这个双向

一个故事带你理解if __name__ == &#39;__main__&#39;

如果你刚刚接触python,相信会在看别人的程序的时候会遇到if __name__ == '__main__'酱紫的语法,如果当时没看懂现在也一知半解的话,看下去,本文可以帮你解决这个问题. 大家都知道:Python的一大优点就是里面的模块非常多--包括内置的模块与自定义模块.我们可以直接利用别人写好的模块去实现自己的需求,酱紫大大的提高了自己的开发效率.也就是说,有时候你可能只需要一些文献阅读的能力与基本的编码能力也可以实现很强大的功能!~~这也许就是Python在各行各业各处开花的原因吧/叹

Stanford机器学习课程笔记4-Kmeans与高斯混合模型

这一部分属于无监督学习的内容,无监督学习内容主要包括:Kmeans聚类算法.高斯混合模型及EM算法.Factor Analysis.PCA.ICA等.本文是Kmeans聚类算法.高斯混合模型的笔记,EM算法是适用于存在latent/hidden变量的通用算法,高斯混合模型仅仅是EM算法的一种特殊情况,关于EM算法的推到参见Andrew Ng讲义.由于公式太多,最近时间又忙实习的事就简单写一些,回头看时还得参考Ng的笔记和自己的打印Notes上的笔记,这里的程序对理解可能能提供另外的一些帮助. K

EM算法 - 2 - EM算法在高斯混合模型学习中的应用

声明: 1,本篇为个人对<2012.李航.统计学习方法.pdf>的学习总结,不得用作商用,欢迎转载,但请注明出处(即:本帖地址). 2,由于本人在学习初始时有很多数学知识都已忘记,所以为了弄懂其中的内容查阅了很多资料,所以里面应该会有引用其他帖子的小部分内容,如果原作者看到可以私信我,我会将您的帖子的地址付到下面. 3,如果有内容错误或不准确欢迎大家指正. 4,如果能帮到你,那真是太好了. 在开始讲解之前,我要先给看这篇文章的你道个歉,因为<2012.李航.统计学习方法.pdf>中

K-Means(K均值)、GMM(高斯混合模型),通俗易懂,先收藏了!

1. 聚类算法都是无监督学习吗? 什么是聚类算法?聚类是一种机器学习技术,它涉及到数据点的分组.给定一组数据点,我们可以使用聚类算法将每个数据点划分为一个特定的组.理论上,同一组中的数据点应该具有相似的属性和/或特征,而不同组中的数据点应该具有高度不同的属性和/或特征.聚类是一种无监督学习的方法,是许多领域中常用的统计数据分析技术. 常用的算法包括K-MEANS.高斯混合模型(Gaussian Mixed Model,GMM).自组织映射神经网络(Self-Organizing Map,SOM)