最好的概率图模型简介

//2014年11月14日

//http://www.crescentmoon.info/?p=817

概率图模型(Graphical Model)是概率论和图论之间的桥梁,概率图模型的基本想法来自模块的概念,即一个复杂系统是由简单的部分所联合而成的。概率论部分告诉我们哪些部分是耦合在一起的,然后提供推断模型的方法,而图论部分给我们一个非常直观的认识,把拥有相互关系的变量看做数据结构,从而导出一般化的方法来解决这个问题。很多经典的多元概率系统,比如混合模型,因子分析,隐含马尔科夫模型,Kalman filter 和Ising model等,从概率图模型的角度来看,都可以看做普遍隐含形成过程的一种实例表现。这意味着,一旦在某个系统上有什么特别的方法发现,就很容易推广到一系列的模型中去。除此之外,概率图模型还非常自然地提供了设计新系统的方法。

在概率图模型中,点代表随机变量,点与点之间边的存在与否代表了点与点之间是存在条件依赖。点与边的组合描绘了联合概率分布的特征结构。假设有N个二元随机变量,在没有任何信息帮助的情况下,联合分布P(X1,,XN),需要O(2N)个参数。而通过概率图描绘点与点之间的条件关系之后,表示联合分布,所需要的参数会减少很多,这对后面的模型的推断和学习是有帮助的。

概率图模型主要分为两种,无向图(也叫Markov random fields)和有向图(也叫Bayesian networks),前者多用于物理和图像领域,后者多用于AI和机器学习,具体的基本就不多介绍了。下面给出一个简单贝叶斯网络的例子。

这里Cloudy指是否多云,Sprinkler指洒水器是否打开,Rain指是否有雨,
WetGrass指草地是否湿了。

推断(Inference)

推断的主要目的是在知道观察变量的值的情况下估计隐藏变量的值。如果我们观察到生成模型的"叶子",然后可以尝试推断隐藏的原因(diagnosis),反之如果观察到生成模型的“根”,就可以尝试预测它的节点(predicition)。

使用的方法就是贝叶斯公式

P(X|y)=P(y|X)P(X)P(y)


其中 X 是隐藏变量, y 是观察到的值。公式可以这么解释:

posterior=conditional likelihood×priorlikelihood

以前面的图为例,当我们观察到草地是湿的(W=1)时,有可能有2个原因:下雨(R=1)或者开着洒水器(S=1)。我们根据贝叶斯公式求得它们各自的概率

P(S=1|W=1)=P(S=1,W=1)P(W=1)=c,rP(C=c,S=1,W=1,R=r)P(W=1)=0.430


P(R=1|W=1)=P(R=1,W=1)P(W=1)=c,sP(C=c,S=1,W=1,R=r)P(W=1)=0.708


分母作为归一化常数,同时也是似然

P(W=1)=c,s,rP(C=c,S=r,R=r,W=1)=0.6471


可以看到草地湿因为下雨的概率要比因为洒水器的概率高。一般来说在实际情况中,利用后验概率算积分的时候不会像例子这么容易。比如分母 Z ,有可能是指数级别的加和(可以参见 pluskid大神的文章 ),而且,在连续型隐藏变量里,很有可能是求一个无解析解的积分。

因为推断的问题一般都比较复杂,我们自然希望能用一些方法来加速推断的过程。

参数消去

根据概率图的结构,我们可以将条件独立的节点的生成概率区分开来写,比如:

P(W=w)=csrP(C=c,S=s,R=r,W=w)=csrP(C=c)×P(S=s|C=c)×P(R=r|C=c)×P(W=w|S=s,R=r)


参数消去算法的主要目的就是尽量可能的合并子项来减少计算量,我们将上面的式子化为:

P(W=w)=cP(C=c)×sP(S=s|C=c)×rP(R=r|C=c)×P(W=w|S=s,R=r)


可以看到第三项与前两个求和项无关。这样我们可以得到合并之后的图:

如果概率图比较复杂,存在重复统计的情况,我们可以使用动态规划算法来避免重复的计算。如果概率图是无环的(比如一棵树),可以用局部信息传播算法(Belief Propagation,HMM的Sum-Product算法的泛化版本)来做推断。如果概率图有环就比较麻烦,因为局部信息传播可能会被重复计算,从而导致算法不收敛。这个时候可以用Junction Tree方法把概率图转化成一棵树(可能会很复杂,见pluskid 的例子)。

近似推断

推断算法的时间复杂度是指数级别的(取决于概率图中的最大簇的大小),优化它是个NP-hard 问题,所以就导致了推断的近似方法产生。除了图复杂以外还有另外一个原因,即使图的复杂度很低,如果一些节点是连续随机变量,在很多情况下它们对应的积分是没有解析解的。

流行的近似推断方法主要有三种:

  • Sampling(Monte Carlo) methods。采样做法就是通过抽取大量的样本来逼近真实的分布。最简单的是importance sampling,根据出现的结果的比例采样。在高维空间中更有效的方法叫Markov Chain Monte Carlo,是利用马科夫链的性质来生成某个分布的样本,包括Metropolis-Hastings算法和Gibbs Samppling算法等。
  • Variational Infernece。变分推断采取的是另一种做法,通过限制近似分布的类型,得到一种局部最优,但具有确定解的近似后验分布。最简单的方法叫做mean-field approximation,就是把概率图里的点全部解耦,看做相互独立的,然后对每个点引进一个变分参数,通过循环地迭代参数来最小化近似分布和真实分布的KL距离。
  • Loopy Belief Propagation。之前我们讲到Belief Propagation 算法,是应用在无环的图上的,然后LBP就是不管图有没有环,都直接使用这个算法去求解。

学习(Learning)

Learning可以分很多情况,比如估计参数,或者估计模型的结构,或者两者都有。根据变量是否被观察到和结构是否已知可以对learning方法分类(见下图):

还有一个区别在于,我们的目标在于寻找一个最有可能的模型(点估计),还是在所有可能的模型上做贝叶斯估计。在结构已知的时候,贝叶斯参数估计和推断是等价的,这时候隐藏的节点就代表了这些参数。如果结构未知,还要有对概率图结构的学习过程。

Known structure,full observability

这种最简单,因为结构已知,变量全部都观察到了,所以直接求极大似然值(MLE)就好了。令数据为D={D1,,DM},那么似然为

L=1Mlogm=1MP(Dm|G)=1Mi=1nm=1MlogP(Xi|Pa(Xi),Dm)


这里 Pa(Xi) Xi 的父亲节点。我们依据概率图的结构分解整个似然式子,然后独立地最大化每个参数。以之前的图为例,我们有

PML(W=w|S=s,R=r)=#(W=w,S=s,R=r)#(S=s,R=r)


这里 #(S=s,R=r) #(W=w,S=s,R=r) 分别为下雨而且洒水器开着的次数和满足前两个条件的同时,草地湿了的次数。可以看到极大似然是根据观察到的数据得出最有可能的结果。如果我们有一些训练数据的话,也可以加上先验条件,做最大后验估计(MAP).

Known structure,partial observability

如果结构已知,但是有些节点是隐藏的话,我们可以通过EM算法来寻找一个局部最优的MLE。EM的算法的思想就是求那些隐藏节点的期望值,然后把期望值看做观察到的值。以W节点为例,我们用期望代替观察到的次数,得到

P(W=w|S=s,R=r)=E#(W=w,S=s,R=r)E#(S=s,R=r)


这里 E#(e) 就是在当前参数下,事件 e 发生次数的期望值。这个期望可以由单次发生事件 e 的期望多次加和得到。

E#(e)=EmI(e|Dm)=mP(e|Dm)


这里 I(e|Dm) 是个指示函数,当事件 e 在第 m 个数据时发生为1,其余都为0。得到期望值后,我们可以重新最大化参数,然后重新计算期望,反复迭代达到一个局部的最优解。

Unknown structure,full observability

这种情况虽然我们可以观察到概率图中每个节点的数据,但是节点与节点之间的边关系未知。完全图能够给出最大的似然值,那是因为这种情况最复杂,含有最多的参数,很明显过拟合了。
为了解决过拟合的问题,我们可以加上对模型选择的先验条件,使用贝叶斯公式最大化后验

P(G|D)=P(D|G)P(G)P(D)


求log我们得到

L=logP(G|D)=logP(D|G)+logP(G)+c


这里 c=logP(D) 是个与模型 G 独立的常数。如果先验偏向于简单的模型,那么 P(G) 就能对复杂模型起到惩罚作用。事实上就算先验不这么做,使用贝叶斯原理计算的边缘似然(marginal likelihood)

P(D|G)=P(D|G,θ)P(θ|G)dθ


( θ 为模型的参数)能够自动地倾向解释数据的最简单模型,如果模型参数太多的话,它只能在一个很宽的数据范围内预测,而没办法给小范围数据一个很大的发生概率(也就是说复杂模型更可能“对”,但是不够“准”),而简单模型刚好反之。这个现象被叫做奥卡姆剃刀(Ockham'razor)。

尽管我们可以通过上面那个 L 来衡量模型的好坏(被称作Bayesian Score),我们依然还是需要一个方法来寻找得分最高的概率图。穷举的复杂度是超指数级别的,所以我们一般用一些局部的搜索算法(比如多重启的爬山法)或者划分区域来搜索图空间。另外地,由于我们求的是模型生成数据的后验概率 P(G|D) ,我们可以直接从这个后验概率分布中抽样一些图出来,这叫MCMC search。

Unknown structure,partial observability

最后也是最难的情况,就是图结构未知,而且存在隐藏变量。这导致了边缘似然非常难求,需要对隐藏变量Z积分才能得到。

P(D|G)=ZP(D,Z|G,θ)P(θ|G)dθ


一种办法是做拉普拉斯近似(Laplace Approximation),计算得到

logP(D|G)logP(D|G,θG^)d2logM


这里 M 是样本个数, θG^ 是参数的最大似然估计(由EM算法得到), d 是模型的维度(在全观察到的情况下,模型维度等于自由参数的个数,在存在隐藏变量的情况下,模型维度会少于参数个数)。这个式子被叫做Bayesian Information Criterion,和Minimum Description Length (MDL) 是等价的。

式子的第一项就是似然,而第二项减去一个代表模型复杂度的量,所以BIC score是对复杂模型有惩罚的。尽管BIC是可以分解的(decomposable),局部的搜索算法还是非常昂贵,因为我们每一步都要跑一次EM 算法来得到θ。一种可选的办法是在EM的M 步直接做一个局部搜索,得到一个局部最优的BIC score,这个方法被称作Structural EM。

当然,结构学习不仅仅包括寻找已经存在节点的连通性,还包括在必要情况下增加隐藏节点等等更为复杂的东西。

参考文献:
1.《An introduction to graphical models》 Kevin P. Murphy
2.http://freemind.pluskid.org/machine-learning/probabilistic-graphical-model/


你可能感兴趣的:(在大学-机器学习进阶)