https://www.zhihu.com/question/23255632
很高兴看到有人提这个问题。概率图模型(PGM)是我的研究方向(发表的9篇论文中7篇是PGM),也曾做过CMU PGM这门课的TA,对这个方向深深喜爱。
先说说PGM的重要性。概率图模型大致可以分为两种,directed graphical model(又称贝叶斯网络)和undirected graphical model(又称马尔可夫随机场)。贝叶斯网络由Judea Pearl 教授发明于上世界80年代,这项工作获得了2011年图灵奖。马尔可夫随机场最早被物理学家用于对原子进行建模,其中的代表作Ising model获得过诺贝尔奖。图灵奖+诺贝尔奖,PGM的重要性可见一斑。另外,PGM是将人工智能(AI)的研究热点从传统AI(如逻辑、推理、知识表示)转向机器学习的重要工作(其他起到这一作用的工作有支持向量机、决策树、boosting等)。
概率图模型在实际中(包括工业界)的应用非常广泛与成功。这里举几个例子。隐马尔可夫模型(HMM)是语音识别的支柱模型,高斯混合模型(GMM)及其变种K-means是数据聚类的最基本模型,条件随机场(CRF)广泛应用于自然语言处理(如词性标注,命名实体识别),Ising模型获得过诺贝尔奖,话题模型在工业界大量使用(如腾讯的推荐系统)。等等。
PGM优雅的理论。机器学习的一个核心任务是从观测到的数据中挖掘隐含的知识,而概率图模型是实现这一任务的一种很elegant,principled的手段。PGM巧妙地结合了图论和概率论。从图论的角度,PGM是一个图,包含结点与边。结点可以分为两类:隐含结点和观测结点。边可以是有向的或者是无向的。从概率论的角度,PGM是一个概率分布,图中的结点对应于随机变量,边对应于随机变量的dependency或者correlation关系。给定一个实际问题,我们通常会观测到一些数据,并且希望能够挖掘出隐含在数据中的知识。怎么用PGM实现呢?我们构建一个图,用观测结点表示观测到的数据,用隐含结点表示潜在的知识,用边来描述知识与数据的相互关系,最后获得一个概率分布。给定概率分布之后,通过进行两个任务:inference (给定观测结点,推断隐含结点的后验分布)和learning(学习这个概率分布的参数),来获取知识。PGM的强大之处在于,不管数据和知识多复杂,我们的处理手段是一样的:建一个图,定义一个概率分布,进行inference和learning。这对于描述复杂的实际问题,构建大型的人工智能系统来说,是非常重要的。
PGM的实用性。关于PGM的实用性,我个人觉得是毋庸置疑的,前面已举例。也有很多次听到别人说,概率图模型在实际中没什么用处。此处想到一位教授的话,翻译成中文:“PGM在你的问题上不work,并不代表它本身不work,而是你没有把它弄work。" :) 所以系统的学习还是很有必要的。推荐CMU Eric Xing教授每年开的10708 PGM课程 10708 Probabilistic Graphical Models。 既包含了PGM最基本、最核心的内容,也讲述了很多advanced topic。而且有视频。PGM 有必要系统地学习
PGM 的原理经过若干大牛的归纳后已经并不那么复杂,看看怎么建模,怎么 Learn,怎么 Inference,就能掌握原理的精髓。但是,PGM 可以把这几年机器学习的主流发展方向串起来,会讲很多正在流行的模型,这为这门不是那么系统的学科搭了一个框架,又讲可以讲理论,又可以讲在图像、语音的应用,实在是对入门同学的福音。当你开始看PGM的时候,你就快接触到 State-of-the-art Machine Learning了。
Machine Learning 又发展了这么多年,出现了这么多研究,是时候大家再写写书,想想办法把东西总结总结了,书名总不能还叫 Machine Learning 吧,所以换个框架,从 PGM 写起,真是极好的。说说反面观点吧。
PGM实在是太大,我就说说我接触到的一些关于Topic Modeling的皮毛吧。
Topic Modeling是PGM的子集,多数是应用于文本处理上。之前David Blei发过一篇文章,把PLSA(也是一种topic model,暂时理解成简单版本的LDA吧)扩展成bayesian的版本。扩展出来的东西叫做LDA,不用管它全名是什么,暂时放在脑子里的缓存区就好了。
那篇文章出来之后,LDA拯救了无数CS的PhD,帮助他们顺利毕业,比较出名的几个组有UIUC的Chengxiang Zhai和Jiawei Han的学生,以Qiaozhu Mei为代表(虽然他的paper多数是关于PLSA的,但是PLSA也是PGM的一种)。
通俗一些讲,LDA就是给定一堆文档,和一个主题数K,自动聚类出这些文档的各个主题。比如说,给定一堆人民日报,那么LDA的输出会给出
主题一:国家主席,常委,汇见,歌唱家,Simple, Naive
主题二:工作,指导,莅临,江西,省长
主题三:油价,迎接,人民,上涨
等等
注意到每个主题都是由一些文章里出现的词所代表,也就是说这些主题的意义是需要人去进一步分析的。比如说对主题一,可以归纳(由聪明的你)出它的主题是:记者招待会,之类。
但是对于LDA的研究有那么几个致使问题,直接导致我感觉这里的文章确实是大家调侃的那样——灌灌水还不错,没有人在现实里应用。
1)纯粹无监督学习,公说公的效果好,婆说婆的效果好。效果的标准就是看聚类
2)少有的一点标准几乎都是log-likelihood,看谁的高(一般在paper中写的都是负值,所以看谁的低)。
3)最常用的学习算法是gibbs sampling,而这是一个sequential算法,很难写成分布式算法,因此大数据几乎没有办法使用LDA。
4)另一种学习算法variational inference虽然可以并行化,但是推导困难,从发的文章看,应该没有多少人能完全推下来(否则干嘛大家还用gibbs sampling)。
对于2,补充一点,虽然可以争论说log-likelihood也是个标准,可是通常这个标准跟人们想要用LDA实现的东西南辕北辙。比如说,人们通常希望LDA给出可读的文章,但是David Mimno等人发现,loglikelihood跟可读性不相关[1]。(于是很明显,他们又给出了一个直接maximize可读性的文章)。
对于1,其实近期出现的论文多数已经开始从无监督开始转向有监督了。比较明显的例子是,如何用人们发的Tweets来预测他们的location。Twitter本身提供很多数据都有location信息,于是这就成了ground truth,比如说在纽约的人会常常发类似"Times Square"之类的词。
那么,有人[2]把这个融进了LDA里,加入了一个变量,location,这样,对于没有location信息的tweet(想像你平常发推都打开地理信息但是今天去了夜店不想你妈知道于是关掉了,那么这条tweet就没有地理信息了),就可以通过你发的内容来分析出你现在在哪里。
可是有个问题在于,这样每多一个feature,就需要加一个变量到LDA的model里,以至于到后来model可以变得极其极其复杂。而且由于前面提到的问题3和4,几乎没有人能很容易地将这些加上变量后的model的推导算法写出来且并行化实现出来。因些这就构成了对LDA实用性的最大挑战。
另一个坏消息是,即使这么fancy的model在比较后发现,常常可以用很简单的方法就实现同样的效果。举个例子,有一个model在LDA的基础上增加了时间信息,也就是说,不光你可以知道一堆文章的主题,而且你还可以知道这些主题随着时间怎么变化。比如,二战之类的内容在1941年到1960年的书本中非常常见,但现在逐渐减少。所以如果你在1941年到现在出版的书上跑一下这个model的话,它会告诉你二战相关的主题热度在逐渐递减。
悲剧的是,使用原始的LDA,简单的把1941到现在每年的书单独跑一次,结果都跟这个改近后的Model没差。
这就够让研究者们郁闷了。你辛辛苦苦改近发动机想要你fancy的小奥拓跑快一点,结果发现邻居在没有改装的QQ上跑得跟你一样快,你怎么想?
我就是其中一个郁闷的人。所以,他妈的,我现在不搞了。
[1]David Mimno, Hanna M. Wallach, Edmund Talley, Miriam Leenders, and Andrew McCallum. 2011. Optimizing semantic coherence in topic models. In Proceedings of the Conference on Empirical Methods in Natural Language Processing (EMNLP '11). Association for Computational Linguistics, Stroudsburg, PA, USA, 262-272.我觉得图模型有个很明显的特点,就是你无法像用random forest这种模型那样把它当个黑盒子,只要改改参数跑跑包就行了。来,让我用例子说说我自己的故事。
Okay,假设我们现在有个任务,要做physician targeting【1】,目的是找到合适的医生卖药。这是一个广告业常见业务,不难理解。可以模型化成最简单的binary classification问题。定位医生,肯定也要用到病人的信息。用图模型的好处如下,1)全局信息同时处理:我可以用二分图构建一个庞大的医生病人网络,one shot model,一把全搞定,joint estimation。2)易于解释: patient info,physician info,patient physician link全用,巴拉巴拉忽悠客户,忽悠老板,大家都很高兴。
第一步,我写出所有变量的joint distribution,这没问题,假设的简单一点,都能搞。这就算是把model 的structure搭建出来了。
第二步,训练,也叫参数估计,如果我要用conditional random field(以下简称CRF),这是个discriminative model。这个model有个麻烦的地方,后验概率的分母要自己积分,要能积出来close form才能写出目标函数,才能训练。这都要自己搞,要自己写梯度算法,不是import 个package就完事了的。有没有好奇为什么大家特别喜欢研究高斯CRF,就算feature 明显是离散的,甚至categorical的也假设成高斯?因为假设成Poisson分母可能就积不出来了呀。这帮Phd student发paper不会告诉你何故他一上来就假设高斯,他最多就告诉你怎么把你的问题近似成高斯,吼吼。好吧,我不想瞎搞近似,我用Markov random field(MRF),这是个generative的model,也能用,参数估计简单一点,自己写写目标函数,把参数最大似然估计估计,模型训练好了。
第三步,统计叫inference,机器学习叫predict,通过MRF模型,我得到了六万多个physician的label的joint 后验distribution,我现在要找到每个医生的边缘概率分布才能对每个医生做预测对吧。那怎么办呀,我不能暴力积分呀,这么多变量。那就利用网络的结构吧,我的图环loop比较少,嗯,说明很多变量是条件独立的,嗯,要好好利用。来吧,那就belief propagation吧,嗯,我个人更喜欢他的一个等价形式,factor graph以及sum product message passing,容易做程序设计。自己算好message,这里面又要找到好多积分的close form 否则不能用,哎。。。学术界大爱高斯,好推导,容易close form。这帮人。。。不黑了,大家都是这么过来的。
Anyway了,最后我总算算出了边缘概率密度。噢耶。然而全这么搞了一套下来,python 代码两千行,四个月。好处是图模型容易解释,ppt做着也漂亮,而且有门槛,不是别人安装个tensorflow就能说自己是deep learning xxx的那种感觉。坏处呢是基本都要自己写。github上生成图模型的包我觉得不好用呀,一般貌似用不上。除非你要解决的问题跟作者的非常接近。
我们再讨论一下benchmark,跟random forest比一比。用Random forest (RF)呢,需要从patient level的data里面给physician做feature。这就有点试错的意思了。但是RF试错很容易呀,完全就是个黑盒子,调调参数,改改输入,多爽。因为只是benchmark么,我就用常规的,易于解释的,人民群众能接受的方式做了些feature engineering。嗯,结果是,图模型在recall非常高(宁可错杀,不能放过)的情况下,明显好,recall正常的时候呢,微微好。我靠,但是这是四个月的时间呀。卖得出去吗?看consultant怎么吹了吧。
来来来,总结一下。如果你是我们这种咨询公司的modeler,methodology的fancy程度也许能让客户更加满意。那graphical model学一学也无妨,但我怎么觉得deep learning 更fancy呢?上手还容易。如果你是学校得PhD student,这东西写paper还行,可以发一发,发了说不定引用还行,毕竟还有很多人也要靠这个毕业么。
但是,如果你就是在解决问题,工程思维,要最短时间拿出最合理的方案,那这东西还是算了吧。要是只看结果的准确率,我怎么就没见Kaggle上哪次是靠图模型赢得呢?
【1】Physician targeting:简单理解就是医药代表的工作。美国人力成本昂贵,再加上法律法规什么的,不能直接进科室推销。一般都是给医生打电话,写邮件,开会推销。对于有些治疗罕见疾病的药品,目标医生不会太多。所以需要用医疗记录数据进行定位,提高广告投送准确率。
【2】我没有介绍LDA(Latent Dirichlet allocation)是因为在我看来LDA更像一个Bayesian mode,不仅仅是一个图模型,也不算是个特别典型的图模型(纯属个人见解)。David Blei的那篇文章只是一开始用Bayes network介绍了一下模型的架构,让读者容易理解。那篇文章LDA的inference部分是 Variational Bayes。
##################################################################
感谢大家点赞,看来还是有人看,那我就再多写一点。
既然开扯了,我索性就把我对LDA的理解写下来吧。这东西又叫probabilistic topic model。一个典型的用途是文本归类。文本本来是很长,很繁杂的字符串,里面有很多很多词语。LDA可以实现dimensionality reduction。还是举例子吧。
假设我们有10,000个文本,涵盖了5000个词汇,需要对把这么多文本归类成10类。每个文本根据词频可以总结成一个5000乘以1的向量。换言之,每个文本都是5000维空间里的一个点。直接在这个5000位的空间做聚类,不现实。
那我们假设这10000个文本涉及到50个话题,那么LDA可以输出每一个文本在这50个话题上的一个概率分布,probability mass function。注意,这是个非监督学习的过程啊,文本一开始是假设没有label的。LDA只是把文本抽象成了一个50乘1的向量。这下,每个文本变成了50维空间里的一个点。下来呢,不论是做聚类,还是做分类(最开始如果文本有label的话),是不是都容易了很多呢?
顺便一说,上面描述的过程也是个feature learning(representation learning)的过程,让机器来找数据的规律,做特征。
上面说了LDA的一个应用,下面说点细节,诸位可能知道LDA是一个generative model,是一个词语的generator,那根据LDA,这些文本是怎么生成的呢?
举个例子:
假设我们有如下三个文本:
Document 1: d1 = I like eating apple
Document 2: d2 = I like jogging
Document 3: d3 = I like eating apple while jogging
三个文本涵盖6个单词:
Vocabulary set (词语集合,字典) : { I, apple, eating, like, jogging, while }
假设只有两个topic
Topic set: { food, sports }
那么LDA模型可以用三个unfair coins(正面向上概率不是0.5的硬币)和两个six-face weighted dice(六个面,各个面几率不均等)来描述。
三个硬币,三个文本,每个文本分配一个硬币。两个骰子,对应两个topic。每个骰子六个面对应六个单词。
好,我们要生成文本1了啊。文本1有四个单词,意味着我们要扔四次硬币,还要扔四次骰子。生成单词1:第一步,先丢一号硬币,决定下一步用什么骰子。第二步,硬币正面向上用骰子1,反面向上用骰子2;扔骰子决定文本1的第一个单词。在上面的例子里,对应的结果就是1。把生成单词1的过程重复4次,就得到文本1了,在上面的例子里,对应的结果就是1432。完事了把硬币1扔垃圾堆,用不上了,骰子留下,生成文本2还要用得上。
生成文本2,类似的过程,用硬币2,和两个骰子。生成完文本,把硬币2撇了。
文本3,类似,你们懂得。
在上面这个例子里,硬币向上的概率就可以作为文本的特征【3】。我把文本从一个6维空间投影到了2维空间。如果硬币向上的几率和骰子六个数字的分布被认为是确定值,frequentist统计学,那就等价于PLSI(Probabilistic latent semantic analysis), 这个需要证明,但不难理解。如果硬币向上的几率被认为是随机变量,有一个服从Dirichlet分布的先验分布,Bayesian,那就是LDA啦。
我写这个例子,只是希望用一个例子帮助理解Blei教授的那篇文章的建模,要不然不熟悉贝叶斯那一套的哥们一看文章,直接就蒙了。上面这个例子,对应【Blei 03】里的(2)式。
硬币概率:对应theta
硬币概率的先验:对应alpha
骰子概率(2乘以6的矩阵):对应beta
文字:对应w
每个文字的话题:对应z
我绝对不是让大家死记硬背然后跑去面试官那里在黑板上写一堆证明自己懂LDA了啊。
总结一下,我刚才举的例子,是不是一个用模型(模型么,顾名思义,就是用一个简单系统描述复杂系统的工具)来描述文本是如何生成的过程。在Blei教授03年的论文里,他管这个叫document modeling,这就是一个generative model。
R,python,Matlab包都有现成的,自己搜吧。经典的LDA比较成熟,如果您是在做科研,要改进这个model,那就有点费劲了。
【3】严格的说,Blei的文章里用的是这个概率的一个近似,他文章里的gamma。因为这个概率不好解,他用variational method。
【Blei 03】http://www.jmlr.org/papers/volume3/blei03a/blei03a.pdf
#################################
要是你还在念书,最好系统学,按部就班看Koller公开课,战线比较长,但是她的时间线真的很扎实,接触别的的图模型心里更有底气:Coursera - Free Online Courses From Top Universities。公开课有一点不好就是隔一段时间反刍起来特别不方便,这时就可以祭出她那本凶器,整门公开课其实就是这本书的目录加摘要,讲的顺序和里面用得例子是一模一样的,可以当做是完整版的教案:http://www.amazon.cn/Probabilistic-Graphical-Models-Principles-and-Techniques-Koller-Daphne/dp/0262013193/ref=sr_1_1?ie=UTF8&qid=1452571603&sr=8-1&keywords=Probabilistic+Graphical+Models%3A+Principles+and+Techniques
要是你已经工作了,我觉得还是不要拿宝贵的时间系统学了,从你工作中用到的一个图模型入手,看论文,一点一点走遍图模型,一个模型一个模型地拓扑展开。工作中会用到的模型基本上都是全息的,比如你学个条件随机场,你就得跟隐马对比吧,那你就要分别知道马尔科夫随机场跟贝叶斯网络,然后你就会想知道马尔科夫随机场(条件随机场)跟贝叶斯网络(隐马)有啥区别。要想知道区别在哪你就得知道贝叶斯网络独立性怎么判断、马尔科夫随机场独立性怎么判断、贝叶斯怎么inference、马尔科夫怎么inference、贝叶斯怎么优化、马尔科夫怎么优化,要知道贝叶斯怎么优化你还得知道EM,而EM书上一般都是从最大熵讲的。。。然后你就知道这些都是啥东西了,他们之间是什么关系,这样你就知道概率图模型里都有些啥了,心里就有个谱。我也在用这种方式学,我觉得这个思路比无中生有开始讲要流畅得多。
反正无论哪种方式,尽早心里有个谱是十分重要的。但并不意味着非要系统地学才能心里有个谱,其实如果是系统地学的话往往学到最后才知道整件事情的脉络。PGM确实是一个大坑,和很多领域关系都很大。比如LDA一般用在文本、图像分类上,CRF一般用于图像上,HMM一般做语音这种时序数据,而近来比较火的Deep Learning例如DBN、DBM的基本结构RBM也是一种Graphical Model(虽然现在大家都去用CNN了,那个是纯粹的神经网络结构)。
涉及的领域这么杂,所以短时间内不太容易一下上手吃透,我建议是先浏览一下Michael Jordan写的那篇经典的Graphical Models,了解一些像Inference、clique等基本概念。我的感觉是如果你之前懂Bayesian的话,Directed Graphical Models会很容易上手理解,但是Undirected Graphical Models就不是那么直观了。不过当你明白这些都只是些人为的定义时,就不用那么纠结了。图的结构是个人都会画,不过怎么解释它,怎么优化,这就是内功了。
Coursera上的那门PGM是Koller大牛上的,我也听过一部分,不过个人感觉没有Hinton那门Neural Networks对我启发大。还有吐槽一下Koller她的口音不是特别好听,还有就是ppt一半内容都是上课时候临时画的,不是特别好看,不过总体来说课还是不错的。概率图模型(PGM)有必要学习一下吗?有。
PGM是机器学习的重要分支之一,不学会感觉人生不够完整。
概率图模型(PGM)有必要系统地学习一下吗?看情况。
PGM包含的东西很多,系统地学习需要付出相当的时间成本,而在业界,相当多的工作并不需要用到PGM,所以建议根据自己的实际需求去评估投入产出比。
PGM的实用性?
毋庸置疑。我们组主要是解决IT运行管理(ITOM)中智能服务(Service Intelligence)的问题,我负责的很重要的项目之一就是IT运营中Alert/ Incident的根源性原因分析(Root Causl Analaysis),PGM是解决这一问题的核心算法。从目前客户的反馈看,模型效果令人满意。
很有必要,我再次推荐周志华《机器学习》中的概率图模型有专门一章。
建议重点搞懂下面几个模型:
1. HMM 隐马尔科夫模型 | 我爱自然语言处理
2. CRF 模型
3. LDA 模型
能把这几个模型看下来,学会了,恭喜你,入门了
我认为 这个问题应该通过“对比式”回答更有说服力,通常来讲,一个模型可以通过三种角度来看待:
拿pca举个例子,起初大家都是通过特征值特征向量入手来认识,其他的模型也可以通过类似的线性代数思想来认识,但这样却带来一个问题,你学习不同的模型貌似每个都是一个全新的学习过程,一个新的开始; 但如果换个角度呢?通过概率的方法ppca来重新认识PCA,同时,也可以通过概率的视角去研究其他模型,比如HMM, GMM等。神奇的事情发生了,这些不同模型如果统一采用概率模型( pgm)来研究貌似可以共享一些方法或者学习经验,比如变分推断,置信传播等,是不是有了大一统的感觉?这种大一统的感觉对你认识一个模型,尤其是认识一类模型,解决learning, inference这类问题会有质的提升。当然,大部分菜鸡仅通过线性代数的视角也可以认识并解决某个问题,但所站的高度却不同。再引申,神经网络更是一种超级“渐近”大一统的模型,比如pca基本等价naive autoencoder。如此看来,看官发现没有,要想成为牛人,现在的趋势是,对同一个模型可能要从这三个视角来认识,也就是学习量实则是三倍!这也是为何AI人才的培养周期特别长的原因。
所以,概率图模型(PGM)是否有必要系统地学习,取决于你是否想成为行业大牛。