Message Passing
Introduction
我们前面介绍了概率论的基础和基本的贝叶斯网络的基础。这一节我们会给你一个黑盒子,它能在你提供一些信息的情况下回答你的问题。而这个黑盒子就是参数确定了的贝叶斯网络啦,而这个根据事实回答文题的功能被称为 Inference
Inference
定义:计算事件 Si 在定义一些结点 Sj 的信息后的概率 P(Si | {Sj = x}),其中 {sj=x} 这个集合被称为证据 (evidence),Sj 就是被观测的变量.
Inference 分类
所有的 inference 方法可以分成大的两类:
-
确定性推断
Message Passing (1988)
Junction Tree (1990)
Shafer-Shenoy (1990)
-
近似推断
Sampling (包括MCMC, Gibbis, Slice)
Variational methods
今天我们就来介绍一下最简单的 Message Passing 啦
Message Passing
先给严肃正儿八经的定义
基本的规则:
1. 该算法只适用于 Polytree (有向无环图),当所有的方向去掉后就是一个树结构
2. 每个节点都会给自己的父节点和子节点发信息
基本定义
-
证据节点 ε = Nx ∪ Dx,其中 Nx 是 X 的非子孙节点 (绿色虚框中的所有节点),Dx 是 X 的子孙节点 (蓝色虚框中的所有节点)
-
对于 X 而言有两种信息与它相关,从自身传到子孙节点的 λ 信息,从非子孙节点传过来的 π 信息,我们可以证明 P(X|ε=e) ∝ λ(X)π(X),此时 λ(X) ∝ P(Dx|X) π(X) ∝ P(X|Nx).
证明:
由于 P(X) 和 P(Dx) 是贝叶斯网络中的参数,所以已知,我们可以把红框内的概率当做常数,从而P(X|ε=e) ∝ P(X|Nx) P(Dx|X), 然后结论得证
由此我们可以计算出 P(X|ε=e) 在每个取值 Xi 关于 λ(Xi)π(Xi) 成比例的值,然后根据这些值做归一化就得到 P(X|ε=e)
那么我下一步就具体讲讲怎么求传递到我们的 X 节点的 λ(X) 和 π(X) 信息啦~ ~ ~
从子孙节点传递过来的 λ信息 λ(X)∝ P(Dx|X )
-
初始节点的λ信息
如果 X 是没有被观测到的叶子节点:λ(X) = [1 . . . 1]
如果 X 是被观测了的节点:λ(X) = [001 . . . 0]
λ(X) 的维度是 X 所有可能取值的大小
EXP:比如X是天气,假定我们有阴天,晴天,雨天,下雪天。
如果 X 是第一种情况 λ(X) = [1, 1, 1, 1];若 X 是第二种情况比如 X=雨天 λ(X) = 0, 0, 1, 0
-
λ信息的传递和收集
从孩子节点 Y 传递到当前节点 X 的 λ信息:
收集所有孩子节点 Y 传递到 **X ** 的 λ信息:
从非子孙节点传递过来的 π信息 π(X) ∝ P(X|Nx )
-
初始节点的π信息
如果 X 是没有被观测到的根节点:π(X) = P(X)
如果 X 是被观测了的节点:π(X) = [001 . . . 0]
-
π信息的传递和收集
从父节点 Z 传递到当前节点 X 的 π信息:
收集所有父节点 Z 传递到 X 的 π信息:
注意:从某一父节点传递过来的信息是从 Z 的除 X 外的子节点传递过来的 λ 信息
Inference Example
新版踢猫效应:
如图是踢猫效应的贝叶斯模型和初始参数,假设只有儿子会踢猫 (Message Passage 只适用于有向无环图)
F 节点代表爸爸今天上班有没有被批评,F=0 代表没有被批评;F=1 代表被批评
被批评的概率为0.2,没有被批评的概率为0.8.
S 节点表示儿子是否被骂,S=0 代表儿子没有被骂,S=1 代表儿子被骂
当 F=0 时,儿子被骂可能性为0.8,没被骂的可能性为 0.2;当F=1时,儿子被骂可能性为0.5,没被骂的可能性为0.5. 有 P(S=0|F=0)=0.5, P(S=1|F=0)=0.5, P(S=0|F=1)=0.2, P(S=1|F=1)=0.8
D 节点代表女儿是否被骂,D=0 代表女儿没有被骂,D=1 代表女儿被骂
类似的,P(D=0|F=0)=1, P(D=1|F=0)=0, P(D=0|F=1)=0.5, P(D=1|F=1)=0.5
(对比两组数量来看,整体来看爸爸对儿子没那么友好 ~ ~ ~)
C 节点代表猫是否被踢,C=0 (猫没事儿),C=1(猫挨踢了)
P(C=0|S=0)=0.8, P(C=1|S=0)=0.2,P(C=0|S=1)=0.2,P(C=1|S=1)=0.8
基于以上贝叶斯模型,我们来提两个问题:
-
当爸爸今天上班挨批了,猫咪挨踢的概率是多少?
-
这种情况下,女儿挨骂的概率是多少?
OK,run起我们的 Message Passing Reference,看看这两个事件发生的概率
λ信息
π信息
最终根据爸爸上班挨批的信息,所有的 λ信息和 π信息如下图所示:
根据此前的 P(X|ε=e) ∝ λ(X)π(X)
P(猫咪挨踢|爸爸上班挨批) = P(C=1|F=1) ∝ λ(C=1)π(C=1) = 1*0.68
P(猫咪没事儿|爸爸上班挨批) = P(C=0|F=1) ∝ λ(C=0)π(C=0) = 1*0.32
所以 P(猫咪挨踢|爸爸上班挨批) = 0.68/(.68+0.32) = 0.68
P(女儿挨骂|爸爸上班挨批) = P(D=1|F=1) ∝ λ(D=1)π(D=1) = 1*0.5
P(女儿没事儿|爸爸上班挨批) = P(D=0|F=1) ∝ λ(D=0)π(D=0) = 1*0.5
所以 P(女儿挨骂|爸爸上班挨批) = 0.5 / (0.5+0.5) = 0.5
大家感兴趣的话,可以自己推一下女儿挨批的情况下,猫咪被踢的概率,以及儿子被骂的概率是怎么样的,这个问题可能会更有趣!
Reference
[南特大学概率图模型] by Philippe LERAY & Hoel LE CAPITAINE
因为微信限制 gif 大小,如果感情趣的同学留言,我可以把完整的动画PPT分享给你,那各位今天就是这样啦,假期快乐!