代码改变世界

【PGM】概率图模型基础

2013-05-16 10:08  Loull  阅读(1074)  评论(0编辑  收藏  举报

 一、PGM

图来自:http://blog.sina.com.cn/s/blog_5980285201011z75.html

 

二、基于概率图模型的推理,例子:

举一个简单的例子,假如通过某个有噪音的信道发送一串信息,这一串信息由0和1组成,由于噪音的存在,每个比特有20%的概率出错,同时由于发送的 信号的特性,1之后紧跟一个1、和0之后紧跟一个0的概率都是0.9。如果接收到一个比特串“1101”,那么正确的信息最大可能是什么呢?

这个例子的概率依赖关系可以表示为下面的图形:

其中空心圆点s1,s2,s3,...表示发送的比特;r1,r2,r3,...表示接收到的比特,它们是已经观测到具体取值的量,因此用实心圆点表示。这是一个有向图,一个有向图对应的联合概率分布是:

p(x1, x2, ...) = ∏p(xi | xi的所有父节点表示的变量)

比如,上图对应的联合概率分布为:

p(s1,s2,s3...,r1,r2,r3...) = p(s1)p(s2|s1)p(s3|s2)...p(r1|s1)p(r2|s2)p(r3|s3)...

同时已经知道:

p(r1=1|s1=1) = p(r2=1|s2=1) = ...= 0.8,p(r1=0|s1=0) = p(r2=0|s2=0) = ... = 0.8,

并且,p(s2=1|s1=1) = p(s3=1|s2=1) = ... = 0.9,p(s2=0|s1=0) = p(s3=0|s2=0) = ... = 0.9。

为了使推理和计算更加简单,将上图进一步转化为因子图(factor graph)。因子图是一个无向二部图,一部分节点表示变量,一部分节点表示因子,因子节点将可能具有概率依赖关系的节点连接起来,从而能够更直观地表示 概率条件独立关系。比如将上图表示为因子图如下(假设只考虑接收到的前4个比特):

整个因子图表达了一个概率联合分布P(s1,...,s4,r1,...,r4)=∏fi(Xi),Xi是因子节点fi连接的变量节点集合。

其中f1(s1,r1) = P(s1)P(r1|s1);f3(s2,r2) = P(r2|s2), f5, f7与此类似;f2(s1,s2) = P(s2|s1),f4, f6与此类似。

由于这个图是一个树结构,为了求得联合概率分布的最大值,可以将问题分解为求子树结构的概率最大值,再集合起来。先任意选取一个变量节点s3作为根节点,然后运用max-product算法,从叶节点到根节点以消息传递的形式进行计算:

叶变量节点向因子节点传递的消息设为1,Ur1->f1(r1)=1;

因子节点将所有输入消息,和自身所表达的因子相乘,并求最大值:

Uf1->s1(s1) = max{ f1(s1,r1) * Ur1->f1(r1)} = max { P(s1)*P(r1=1|s1) } = 0.5*P(r1=1|s1),其中,设 P(s1=0)=P(s1=1) = 0.5。

变量节点将收到的消息相乘发给因子节点:Us1->f2(s1) = 0.5 * P(r1=1|s1)。

与上述类似:

Uf2->s2(s2) = 0.5 * maxs1{ P(s2|s1) * P(r1=1|s1) },

Ur2->f3(r2) = 1,

Uf3->s2(s2) = max { f3(s2,r2)} = P(r2=1|s2),

Us2->f4(s2) = Uf2->s2(s2) * Uf3->s2(s2) = 0.5 * maxs1{ P(s2|s1) * P(r1=1|s1) } * P(r2=1|s2),

Uf4->s3(s3) = maxs1,s2{ P(s3|s2) * 0.5 * maxs1{ P(s2|s1) * P(r1=1|s1) } * P(r2=1|s2)} },

这个式子在s1=1,s2=1时取得最大值,即Uf4->s3(s3) = 0.288 * P(s3|s2=1),

Ur4->f7(r4) = 1,

Uf7->s4(s4) =P(r4=1|s4),

Us4->f6(s4) = P(r4=1|s4),

Uf6->s3(s3) = maxs4{ P(s4|s3) * P(r4=1|s4) },

Ur3->f5(r3) = 1, Uf5->s3(s3) = P(r3=0|s3),

因此,Pmax = max { Uf4->s3(s3) * Uf6->s3(s3) * Uf5->s3(s3) }

 = max{ 0.288 * P(s3|s2=1) *  maxs4{ P(s4|s3) * P(r4=1|s4) } * P(r3=0|s3) },

这个式子在s3=1,s4=1时取得最大值,最大值为Pmax = 0.0373248。

综 上,联合概率分布在s1=s2=s3=s4=1时取得最大值,即当接收到的比特串为1101时,最可能的发送串为1111。可以看到,当概率图为比较简单 的结构,如树、链时,可以通过图结构来简化计算,当概率图为较为复杂的图结构,直接计算将非常困难,这时可以通过将问题简化为近似的的树或链式结构来解 决。

参考:http://hi.baidu.com/linecong/item/b3e3e8f17d2b72d642c36a8e

 

 三、factor

wiki解释:http://en.wikipedia.org/wiki/Factor_analysis

Factor analysis is a statistical method used to describe variability among observed, correlated variables in terms of a potentially lower number of unobserved variables called factors.

好像概率图里面的factor跟图论里面的factor没什么关系

http://en.wikipedia.org/wiki/Factor_%28graph_theory%29

 

四、概率图总结

概率图分为有向图(bayesian network)与无向图(markov random filed)。直觉上说,有向图突出causality(因果关系,其实只是correlation),无向图突出correlation(关联性)。为 什么用图模型,我觉得主要原因还是为了更好的捕获随机变量间的关系。像SVM、Decision Tree、Regression等模型通常假设分类结果只依赖于既有的特征,并没有直接捕获(观察到的与观察不到的)随机变量之间的复杂关系,虽然在特征 充足的情况下效果还是不错,但这在某些问题中会变得非常局限(比如判断A的分类不仅跟A的特征有关,跟B的分类也有关的时候)。在概率图上可以建立生成模 型或判别模型。有向图多为生成模型(如LDA、HMM),无向图多为判别模型(如CRF)。过去的报告认为判别模型在分类问题上比生成表现更加好(比如 Logistic Regression与Naive Bayesian的比较,再比如HMM与Linear Chain CRF的比较)。当然,生成模型的图模型也有一些难以代替的地方,比如更容易结合无标注数据做semi-or-un-supervised learning。

用概率图模型去解决问题,第一步是把模型建立起来,有哪些随机变量,他们之间是什么关系,如何互相作用,用有向图还是无向图,生成模型还是判别模型,等 等。这个过程是第一步,但又不只是第一步,有些数据间的关系不是那么直觉的,用拍脑袋想出来的模型往往是需要验证与修改的。因为叫做概率图模型,所以几乎 肯定是带参数,所以设计好模型后,要做的就是parameter estimation。这些参数一般要学出来,有很多种学的方法,比较常用的是ML(maximum likelihood),也就是先写一个似然函数,然后最大化似然函数来求参数,最大化的方式可以是梯度下降、牛顿法、各种拟牛顿法、SGD(随机梯度下 降)等。得到参数后,就可以用model去做classification啊、prediction啊什么的,通通需要inference, 就是求posterior marginal probability,最大化总体的posterior marginal probability。inference的方法也有很多种,比较常用的,用来求marginal probability的:Sum Product(也叫Belief Passing、Message Passing)、MCMC、Varational等,用来求最大化 marginal probability的:Max Sum等等。因为有向图与无向图其实都可以化作一种统一的形式:Factor Graph(因子图),并且在这种图上做parameter estimation和inference都比较方便(上面说的BP等也是针对这种图的),所以很多时候,模型都直接用FG来表示

概率图模型"博大精深",由于其对随机变量间关系的出色的model能力,不错的learning与inference效果,以及日渐增多的问题都会遇到 图状随机变量集,它应该会有越来越应用广泛。概率图模型比起SVM等可能还是要相对处于年幼期,虽然已经被用了很久,但是还有很多问题可以改进(比如在 inference中approximation的收敛性和准确度)。想起上次龙星计划,好多人问概率图模型最近这么热但比起传统的模型究竟有多大前进? 我觉得还是在处理不太一样的问题吧,直接的比较并不是特别合适(如果要比,一般要忽略变量间关系,然后用SVM等方法去做,效果往往会更差;相反,在一些 非常特殊的问题上,如果有办法把这种关系融合到一些特征中去,使得随机变量能够相对独立,用BP等方法的GM也可能由于approximation而比不 过SVM)。但是,在SVM专攻的方向上,也有图模型或者说网模型介入挑战了,那就是deep learning,deep learning跟graphical model有很多相似之处,虽然解决的问题与具体方法不太一样,但是网状结构的模型还是很类似的。这是不是在说明,explicitly去 model(observable and unobservable)变量之间的关系与结构或许是未来的一个重要方向呢?