5 Moral Graph & Factor Graph
在这一小节中,我们将要介绍两种特殊的概率结构,也就是Moral Graph 和Factor Graph
5.1 道德图(Moral Graph)
首先我们需要知道,为什么要有Moral Graph 的存在?Moral Graph 存在的意义就是将有向图转化为无向图来研究。因为无向图比有向图更加的Generalize 一些。在概率图中,我们可以分为贝叶斯网络(有向图) 和马尔可夫网络(无向图)。
无向图可以表示为:
p
(
x
)
=
1
z
∏
i
=
1
k
ϕ
c
i
(
x
c
i
)
\left. \begin{array} { l } { p ( x ) = \frac { 1 } { z } \prod _ { i = 1 } ^ { k } \phi _ { c _ { i } } ( x _ { c _ { i } } ) } \end{array} \right.
p(x)=z1∏i=1kϕci(xci)
有向图可以表示为:
p
(
x
)
=
∏
i
=
1
p
p
(
x
i
∣
x
p
a
(
i
)
)
\left. \begin{array} { l } { p ( x ) = \prod _ { i = 1 } ^ { p } p ( x _ { i } | x _ { p a ( i ) } ) } \end{array} \right.
p(x)=∏i=1pp(xi∣xpa(i))
其中,
ϕ
c
i
ϕ_{c_i}
ϕci 代表的是最大团的意思。通过道德图,我们可以有效的将有向图转换为无向图。
- 链式网络:
其中, p ( a , b , c ) = p ( a ) p ( b ∣ a ) p ( c ∣ b ) p(a,b,c) = p(a)p(b|a)p(c|b) p(a,b,c)=p(a)p(b∣a)p(c∣b)。如果,把有向图转换成有向图是一件非常简单的事情,首先把所有的线条换成直线。由于在无向图中,我们考虑的是最大团,所以 p ( a ) p ( b ∣ a ) = φ ( a , b ) p(a)p(b|a) = φ(a,b) p(a)p(b∣a)=φ(a,b), p ( c ∣ b ) = φ ( b , c ) p(c|b) = φ(b,c) p(c∣b)=φ(b,c)。这个的转换是非常的简单了。 - Tail to Tail 的图
其中, p ( a , b , c ) = p ( a ) p ( b ∣ a ) p ( c ∣ a ) p(a,b,c) = p(a)p(b|a)p(c|a) p(a,b,c)=p(a)p(b∣a)p(c∣a)。还是按照一样的套路,首先把所有的有向箭头改成直线。那么我们就可以得到 p ( a ) p ( b ∣ a ) = ϕ ( a , b ) , p ( c ∣ a ) = ϕ ( a ∣ c ) p(a)p(b|a) = ϕ(a,b),p(c|a) = ϕ(a|c) p(a)p(b∣a)=ϕ(a,b),p(c∣a)=ϕ(a∣c)。其中{ a , c a,c a,c} 和{ b , c b,c b,c} 是分别属于两个团。这个也比较的简单,但是Head to Head 的转换就有点不一样了。 - Head to Head
同样我们使用一样的分析思路来看这个问题, p ( a , b , c ) = p ( a ) p ( b ) p ( c ∣ a , b ) p(a,b,c) = p(a)p(b)p(c|a,b) p(a,b,c)=p(a)p(b)p(c∣a,b)。我们进行拆解的话,只能令 p ( a ) p ( b ) p ( c ∣ a ; b ) = φ ( a , b , c ) p(a)p(b)p(c|a; b) = φ(a,b,c) p(a)p(b)p(c∣a;b)=φ(a,b,c),不然再也找不到其他的拆解方法。但是,如果简单的将模型中所有的有向箭头改成直线得到的并不是一个团。因为“团” 的概念的要求,团里面的元素都要求是两两相互连接的。所以,我们需要进行改进,将Head to Head 的无向图形式改进为:
那么,将Head to Head 的有向图转换为无向图的过程可以被我们描述为:
对于 x i ∈ G x_i \in G xi∈G,将 p a r e n t ( x i ) parent(x_i) parent(xi) 的两个父亲节点连接,然后将G 中所有的有向边替换成无向边。下面我们举一个例子:
而我们将有向图转换成无向图之后,有什么好处吗?也就是在判断条件独立性的时候,有时图形非常复杂的时候。我们在有向图中很难看出来,而在无向图中却可以很简单的得到我们想要的结果。也就是
5.2 因子图(Factor Graph)
在上一小节中,我们介绍了道德图(Moral Graph),它的主要作用是将有向图转换为无向图。我们考虑的都是树结构,但是在Head to Head 结构中,会引入环的结构。但是,在我们的Belief Propagation(BP) 算法中,只能对树进行分解。所以,这里我们就引入了因子图。
因子图主要发挥两个作用:
- 去环,也就是消除无向图中的环结构;
- 使算法变得更加的简洁,简化计算。
如图二表达的那样,他的有向图和无向图的联合概率可以分别表达为:
p
(
a
,
b
,
c
)
=
p
(
a
)
p
(
b
∣
a
)
p
(
c
∣
a
)
p(a,b, c) = p(a)p(b|a)p(c|a)
p(a,b,c)=p(a)p(b∣a)p(c∣a)
p
(
a
,
b
,
c
)
=
1
Z
ϕ
(
a
,
b
)
ϕ
(
a
,
c
)
p(a, b,c) =\frac 1Z ϕ(a, b)ϕ(a, c)
p(a,b,c)=Z1ϕ(a,b)ϕ(a,c)
那什么是因子图分解呢?公式表达可以被我们表示为:
p
(
x
)
=
∏
s
p
(
x
S
)
p(x)=\prod_sp(x_S)
p(x)=s∏p(xS)
其中,S 是图的节点子集,
X
S
X_S
XS 为对应的X 的子集,也就是X 的随机变量的子集。那么对于一个如图4 所示的有环无向图,我们怎么进行因子图分解呢?
首先进行第一种分解,如下图所示:
这时可以被我们描述为,
f
=
f
(
a
,
b
,
c
)
f = f(a, b,c)
f=f(a,b,c)。或者我们也可以进行更细的分解。如下图所示:
这个分解的结果可以被我们表示为:
p
(
x
)
=
f
1
(
a
,
b
)
f
2
(
a
,
c
)
f
3
(
b
,
c
)
p(x) = f_1(a, b)f_2(a, c)f_3(b, c)
p(x)=f1(a,b)f2(a,c)f3(b,c)
不仅是可以在两个节点之间插入关系,同时也可以对于单个节点引入函数。
那么这个分解结果可以被我们表示为:
p
(
x
)
=
f
1
(
a
,
b
)
f
2
(
a
,
c
)
f
3
(
b
,
c
)
f
a
(
a
)
f
b
(
b
)
p(x) = f_1(a, b)f_2(a, c)f_3(b, c)f_a(a)f_b(b)
p(x)=f1(a,b)f2(a,c)f3(b,c)fa(a)fb(b)
实际上,就可以看成是对因式分解的进一步分解。这样我们就可以成功的消除环结构。如下图所示:
所以,大家仔细一想就知道了因子图存在的意义了,它可以有效的消除环结构,通过一个重构的方式,重建出树的结构。这样可以有效的帮助我们使用Belief Propagation 中的变量消除法等方法。从上面可以看出概率图的分解方式不一样,对应的因子图也就不一致。