从零学习Belief Propagation算法(三)
本文将记录 Belief Propagation 算法的学习历程,如果您之前没有接触过,而现在刚好需要用到,可以参考我的系列文章。内容稍多将分为几个主题来写。本系列文章将包含以下内容:
- 必备的概率论基础
- 从概率论到概率图模型
- Bayes 网络
- Markov 随机场
- 因子图 Factor Graph
- Belief Propagation算法
1. 因子图
1.1 概念
有向图和无向图都可以使得,若干个变量的⼀个联合概率函数(或全局函数)能够表示成,这些变量的⼦集上的因⼦的乘积。
因⼦图比有向图和无向图更显式地表示了这个分解,⽅法是:在表示变量的结点的基础上,又引⼊额外结点来表示因⼦本⾝。因⼦图也使我们能够更加清晰地了解分解的细节。
有向图:
P(x)=P(x1)P(x2)P(x3)P(x4|x1,x2,x3)P(x5|x1,x3)P(x6|x4)P(x7|x4,x5)
用因子图表示,其实就是将相应的函数因子改写:
P(x)=P(x1)P(x2)P(x3)P(x4|x1,x2,x3)P(x5|x1,x3)P(x6|x4)P(x7|x4,x5)=f(x1)f(x2)f(x3)f(x1,x2,x3,x4)f(x1,x3,x5)f(x4,x6)f(x4,x5,x7)
无向图:
P(x)=1ZψC1(x1,x2,x3)ψC2(x3,x4)ψC3(x3,x5)
上面的式子是不是也可以看成是多个因子表示的。
因子图:
P(x)=fa(x1,x2)fb(x1,x3)fc(x2,x3)
1.2 结构
1)常见的电路图、信号流程图、格子图以及各种框图都属于图模型的范畴;
2)因子图(factor graph,FG)是图模型的一种;
3)因子图的典型代表是Forney-style factor graph,简称 FFG。
4)编码领域、信号处理、人工智能方面的大量算法应用。
一般 FFG 由 结点,边缘,半边缘(只与一个结点连接)组成;
FFG的定义规则如下:
a) 每个因子对应唯一的结点集合;
b) 每个变量对应唯一的边缘或者半边缘;
c) 代表因子f 的结点与代表变量x 的边缘(或半边缘)相连,当且仅当f 是关于x 的函数。
转化为这种形式表示:
f(u,w,x,y,z)=f1(u,w,x)f2(x,y,z)f3(z) 例:在上图中
3个结点 对应 3个因子:f1,f2,f3
2个边缘 对应 2个变量x,z
3个半边缘 对应 3个变量u,w,y
2. BP (和-积)算法
- 我们以下面的因子图为例开始说这个算法。
假设联合概率函数
f(x1,…,x8)=f1(x1)f2(x1)f3(x1,x2,x3,x4)f4(x4,x5,x6)f5(x5)f6(x6,x7,x8)f7(x7)
考虑边缘函数,即
p(x4)=∑x1,x2,x3,x5,x6,x7,x8f(x1,…,x8)=∑x1,x2,x3,x5,x6,x7,x8[f1(x1)f2(x1)f3(x1,x2,x3,x4)f4(x4,x5,x6)f5(x5)f6(x6,x7,x8)f7(x7)]
2.1 计算思想
乘法分配律:
x∗y1+x∗y2=x∗(y1+y2) 左式用了两次乘法,一次加法;右式用了一次乘法,一次加法。
∑ix∗yi=x∑iyi
乘-加 变换为 加-乘 后,计算复杂度降低。
2.2 边缘概率计算的另一种表示
边缘概率计算通过划分 box 的方式,由之前的(乘-加)
变换为(加-乘):
2.3 信息是怎么传播的
传递规则:
- 变量到因子:1
- 因子到变量:
f
接下来我们用一个例子看传播流程:
我们到第三个步骤就可以计算出
所以,我们要传递给每个节点所有的邻居消息。和积算法(BP)从本质上就是一种消息传递算法(MPA),它可从全局函数计算出各个不同的边缘函数。
2.4 通俗的讲解belief propagation算法的思想
情景一:若干士兵排成一个队列,每个士兵只能与他相邻的士兵交流,问如何才能使每个士兵都知道总的士兵数?
显然,对里面的任意一位士兵,他们只能与相邻的人交流传递信息。比如最左边的第一位向第二位传递:第二位左边只有1个。第二位向第三位传递:第三位左边有2个。一直依次传递到最右边最后一位,最后一位获得的信息是他的左边有5个人。
但是这个时候只有最右边那个人知道总人数(5+1=6),还不能使其他人知道总人数。其他人只知道他的左边有多少人,右边有多少并不知道。
这个时候怎么办呢?
最右边的人可以再依次往左边传递消息。比如最右边第一位告诉第二位说:第二位的右边只有他1个。依次传递。这样正向和反向各传递一遍,使得每个人拥有两个消息,一个是该士兵的左边有L个人,一个是右边有R个人。总人数=L+R+1。(加上他本人)
但是这样效率并不高,怎么快一点呢?我们可以同时两边各向相反的方向传递消息,因为这并不影响工作流程。
抽象为因子图看一下:对应下图,引入几个概念:先验信息P、外信息E以及后验信息A。在图中,先验信息P表示每个士兵自身的数字“1”;外信息E表示从其他相邻的士兵获取的信息,即每个士兵的外信息均为5;后验信息A=P+E,在这里表示队列的总人数,即为6。从图中可以看出,得到最后的结果是通过前向计算和后向计算得到的。
情景二:若干士兵站好相应位置,有些士兵不止有2个相邻的士兵,可能有3个或更多。,每个士兵只能与他相邻的士兵交流,问如何才能使每个士兵都知道总的士兵数?
- 上图是不是可以和我们的 BP 算法联系起来了。传播的结果是使得每个节点都可以获得其他节点传来的消息,从而计算出边缘函数。
情景二:若干士兵排成环路。,每个士兵只能与他相邻的士兵交流,问如何才能使每个士兵都知道总的士兵数?
- 由于有环路的存在,如果用上述信息更新方法来确定总人数,将会导致无法确定何时中止信息的传递,因此也就无法确定士兵人数。
2.5 算法步骤总结
根据信息更新规则分类,置信传播算法分为:Max-product 和 Sum-product。
这里不再对 max-product 进行研究,但只要弄懂了 sum-product,也就弄懂了 max-product 算法。因为 max-product 算法就在上面 sum-product 算法的基础上把求和符号换成求最大值max的符号即可!对于Sum-product,算法流程如下:
现在假设我们想寻找图中每个变量结点的边缘概率分布。这可以通过简单地对每个结点独立地运⾏上述算法的方式完成。但是,这会相当浪费计算结果,因为许多需要进行的计算被重复了多次。
通过“叠加”多个信息传递算法,我们可以得到⼀个更加高效的步骤,从而得到⼀般的加和-乘积算法,如下所述。
任意选择⼀个结点(变量结点或因⼦结点),然后将其指定为根结点。
像之前⼀样,我们从叶结点向根结点传递信息,叶节点初始化按照【2.3 信息是怎么传播的的传递规则】。现在,根结点会接收到来⾃所有相邻结点的信息。因此,它可以向所有的相邻结点发送信息。
反过来,这些结点之后会接收到来⾃所有相邻结点的信息,因此可以沿着远离根结点的链接发送出信息,以此类推。通过这种方式,信息可以从根结点向外传递到叶结点。现在,信息已经在两个方向上沿着图中所有的链接传递完毕,并且每个结点都已经接收到了来⾃所有相邻结点的信息。
- 因为每个变量结点会收到来⾃所有相邻结点的信息,所以我们可以计算图中每个变量的边缘概率分布。
参考文献
[1] : http://blog.csdn.net/aspirinvagrant/article/details/40862237
[2] : http://blog.csdn.net/v_july_v/article/details/40984699
[3] : http://blog.csdn.net/zb1165048017/article/details/60867140
[4] : http://www.jianshu.com/p/0ff6456a65d6
[5] : 《模式识别与机器学习》