从零学习Belief Propagation算法(三)

从零学习Belief Propagation算法(三)

本文将记录 Belief Propagation 算法的学习历程,如果您之前没有接触过,而现在刚好需要用到,可以参考我的系列文章。内容稍多将分为几个主题来写。本系列文章将包含以下内容:

  • 必备的概率论基础
  • 从概率论到概率图模型
  • Bayes 网络
  • Markov 随机场
  • 因子图 Factor Graph
  • Belief Propagation算法

从零学习Belief Propagation算法(一)


从零学习Belief Propagation算法(二)


1. 因子图

1.1 概念

有向图和无向图都可以使得,若干个变量的⼀个联合概率函数(或全局函数)能够表示成,这些变量的⼦集上的因⼦的乘积。

因⼦图比有向图和无向图更显式地表示了这个分解,⽅法是:在表示变量的结点的基础上,又引⼊额外结点来表示因⼦本⾝。因⼦图也使我们能够更加清晰地了解分解的细节。

有向图:
1
P ( x ) = P ( x 1 ) P ( x 2 ) P ( x 3 ) P ( x 4 ∣ x 1 , x 2 , x 3 ) P ( x 5 ∣ x 1 , x 3 ) P ( x 6 ∣ x 4 ) P ( x 7 ∣ x 4 , x 5 ) P(x) =P(x_1) P(x_2)P(x_3)P(x_4|x_1,x_2,x_3) P(x_5|x_1,x_3)P(x_6|x_4)P(x_7|x_4,x_5) P(x)=P(x1)P(x2)P(x3)P(x4x1,x2,x3)P(x5x1,x3)P(x6x4)P(x7x4,x5)
用因子图表示,其实就是将相应的函数因子改写:

P ( x ) = P ( x 1 ) P ( x 2 ) P ( x 3 ) P ( x 4 ∣ x 1 , x 2 , x 3 ) P ( x 5 ∣ x 1 , x 3 ) P ( x 6 ∣ x 4 ) P ( x 7 ∣ x 4 , x 5 ) = f ( x 1 ) f ( x 2 ) f ( x 3 ) f ( x 1 , x 2 , x 3 , x 4 ) f ( x 1 , x 3 , x 5 ) f ( x 4 , x 6 ) f ( x 4 , x 5 , x 7 ) P(x) =P(x_1) P(x_2)P(x_3)P(x_4|x_1,x_2,x_3) P(x_5|x_1,x_3)P(x_6|x_4)P(x_7|x_4,x_5)\\=f(x_1) f(x_2)f(x_3)f(x_1,x_2,x_3,x_4) f(x_1,x_3,x_5)f(x_4,x_6)f(x_4,x_5,x_7) P(x)=P(x1)P(x2)P(x3)P(x4x1,x2,x3)P(x5x1,x3)P(x6x4)P(x7x4,x5)=f(x1)f(x2)f(x3)f(x1,x2,x3,x4)f(x1,x3,x5)f(x4,x6)f(x4,x5,x7)


无向图:
1
P ( x ) = 1 Z ψ C 1 ( x 1 , x 2 , x 3 ) ψ C 2 ( x 3 , x 4 ) ψ C 3 ( x 3 , x 5 ) P(x)=\frac{1}{Z}\psi _{C_1}(x_1,x_2,x_3)\psi _{C_2}(x_3,x_4)\psi _{C_3}(x_3,x_5) P(x)=Z1ψC1(x1,x2,x3)ψC2(x3,x4)ψC3(x3,x5)
上面的式子是不是也可以看成是多个因子表示的。


因子图:
3
P ( x ) = f a ( x 1 , x 2 ) f b ( x 1 , x 3 ) f c ( x 2 , x 3 ) P(x)=f_a(x_1,x_2)f_b(x_1,x_3)f _c(x_2,x_3) 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 f f 的结点与代表变量 x x x 的边缘(或半边缘)相连,当且仅当 f f f 是关于 x x x 的函数。

5

转化为这种形式表示:

4

f ( u , w , x , y , z ) = f 1 ( u , w , x ) f 2 ( x , y , z ) f 3 ( z ) f(u,w,x,y,z)=f_1 (u,w,x)f_2 (x,y,z)f_3 (z) f(u,w,x,y,z)=f1(u,w,x)f2(x,y,z)f3(z)

例:在上图中
3个结点 对应 3个因子:$f_1 ,f_2 ,f_3 $
2个边缘 对应 2个变量 x , z x, z x,z
3个半边缘 对应 3个变量 u , w , y u, w, y u,w,y


2. BP (和-积)算法

  • 我们以下面的因子图为例开始说这个算法。
![这里写图片描述](https://img-blog.csdn.net/20171030112937450)

假设联合概率函数 f f f 可用如上图所示的 FFG 表示,即

f ( x 1 , … , x 8 ) = f 1 ( x 1 ) f 2 ( x 1 ) f 3 ( x 1 , x 2 , x 3 , x 4 ) f 4 ( x 4 , x 5 , x 6 ) f 5 ( x 5 ) f 6 ( x 6 , x 7 , x 8 ) f 7 ( x 7 ) f(x_1,…,x_8)=f_1 (x_1)f_2 (x_1)f_3 (x_1,x_2,x_3,x_4)f_4 (x_4,x_5,x_6)f_5 (x_5)f_6 (x_6,x_7,x_8)f_7 (x_7) 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 ( x 4 ) = ∑ x 1 , x 2 , x 3 , x 5 , x 6 , x 7 , x 8 f ( x 1 , … , x 8 ) = ∑ x 1 , x 2 , x 3 , x 5 , x 6 , x 7 , x 8 [ f 1 ( x 1 ) f 2 ( x 1 ) f 3 ( x 1 , x 2 , x 3 , x 4 ) f 4 ( x 4 , x 5 , x 6 ) f 5 ( x 5 ) f 6 ( x 6 , x 7 , x 8 ) f 7 ( x 7 ) ] p(x_4)=\sum_{x_1,x_2,x_3,x_5,x_6,x_7,x_8}f(x_1,…,x_8)\\=\sum_{x_1,x_2,x_3,x_5,x_6,x_7,x_8}[f_1 (x_1)f_2 (x_1)f_3 (x_1,x_2,x_3,x_4)f_4 (x_4,x_5,x_6)f_5 (x_5)f_6 (x_6,x_7,x_8)f_7 (x_7)] 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 ∗ y 1 + x ∗ y 2 = x ∗ ( y 1 + y 2 ) x*y_1+x*y_2=x*(y_1+y_2) xy1+xy2=x(y1+y2)

左式用了两次乘法,一次加法;右式用了一次乘法,一次加法
∑ i x ∗ y i = x ∑ i y i \sum_{i}x*y_i=x\sum_{i}y_i ixyi=xiyi
乘-加 变换为 加-乘 后,计算复杂度降低。


2.2 边缘概率计算的另一种表示

这里写图片描述


边缘概率计算通过划分 box 的方式,由之前的(乘-加) ∑ x 1 , x 2 , x 3 , x 5 , x 6 , x 7 , x 8 f ( x 1 , … , x 8 ) \sum_{x_1,x_2,x_3,x_5,x_6,x_7,x_8}f(x_1,…,x_8) x1,x2,x3,x5,x6,x7,x8f(x1,,x8)
变换为(加-乘):

这里写图片描述


2.3 信息是怎么传播的

传递规则:

  • 变量到因子:1
  • 因子到变量: f f f

这里写图片描述

接下来我们用一个例子看传播流程:

这里写图片描述

这里写图片描述

我们到第三个步骤就可以计算出 p ( x 3 ) p(x_3) p(x3),但是现在的问题是我们要计算任意一个边缘函数 p ( x i ) p(x_i) p(xi),那仅仅凭第三步的所有传递的局部消息是不够的。
所以,我们要传递给每个节点所有的邻居消息。和积算法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] : 《模式识别与机器学习》

评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值