无向图和有向图都可以表述为几个变量因子的乘积的形式
二分图
为表示因子本身引入了其他节点
p
(
x
)
=
∏
s
f
s
(
x
s
)
(1)
p(\textbf{x})=\prod_{s}f_{s}(\textbf{x}_{s})\tag{1}
p(x)=s∏fs(xs)(1)
x
s
\textbf{x}_s
xs在这里是一个变量的集合,作为区分
x
i
x_i
xi表示单独一个变量
有向图和无向图的联合概率分布都可看做(1)式的特例。有向图的 f ( x s ) f(\textbf{x}_s) f(xs)是条件概率分布 p ( x i ∣ π i ) p(x_i|\pi_i) p(xi∣πi) ;无向图是极大团 ψ C ( x C ) \psi_C(\text{x}_C) ψC(xC)。
树结构
- 无向图上的树结构:任何两点间有且只有一条路径相连
- 有向图上的树结构:有一个根节点,其他每个节点只有一个父节点
- polytrees
因子图的表示方式
-
圆圈代表变量,与有向图和无向图中一样
-
方块代表附加节点(因子节点)
-
无箭头的线:用来连接因子节点和变量表示变量对因子的依赖
-
举例:
p ( x ) = f a ( x 1 , x 2 , x 3 ) f b ( x 2 , x 3 ) f c ( x 2 , x 3 ) f d ( x 3 ) p(\textbf{x})=f_a(x_1,x_2,x_3)f_b(x_2,x_3)f_c(x_2,x_3)f_d(x_3) p(x)=fa(x1,x2,x3)fb(x2,x3)fc(x2,x3)fd(x3)
从中可以看出因子图和无向图的不同之处之一就是因子图更关注变量关系的细节,在上例中无向图模型会把 f b , f c , f d f_b,f_c,f_d fb,fc,fd合并
-
从因子图的表达方式中可以看出,因子图都是二分图
因子图的应用——sum product算法
ps: sum product算法在有向图上有一个别名,belief propagation算法(信念传播算法),是sum product的特例
sum product 是利用因子图,在树状结构图上的,高校精准的推理算法,用于计算边际概率
上文讲述了这么多有关因子图的概念,那么因子图被定义出来有什么用呢,下面讲一个典型的应用
使用sum product算法求解边际概率,这是概率图中非常常见得一个问题。
首先,假设原图是一个有向树或者无向树或者polytree,使得对应的因子图也有树结构。
本身来说按照定义即可求解
p
(
x
)
=
∑
x
∖
x
p
(
x
)
p(x)=\sum_{\textbf{x}\setminus x}p(\textbf{x})
p(x)=x∖x∑p(x)
但是其计算量又是不可接受的,呈指数级上涨
那么一个好的想法是,交换加法和乘法的顺序。
如果这是一个因子图,为了更好求边际概率,我们首先可以将其联合概率分布表示为如下形式 :
p
(
x
)
=
∏
s
∈
n
e
(
x
)
F
s
(
x
,
X
s
)
p(\textbf{x})=\prod_{s\in ne(x)}F_s(x,X_s)
p(x)=s∈ne(x)∏Fs(x,Xs)
其中
n
e
(
x
)
ne(x)
ne(x)表示为
x
x
x的相邻因子节点的集合,
X
s
X_s
Xs表示因子节点
s
s
s下的子树集合
将边际概率转化为
p
(
x
)
=
∑
x
∖
x
∏
s
∈
n
e
(
x
)
F
s
(
x
,
X
s
)
=
∏
s
∈
n
e
(
x
)
[
∑
X
s
F
s
(
x
,
X
s
)
]
=
∏
s
∈
n
e
(
x
)
μ
f
s
→
x
(
x
)
p(x)=\sum_{\textbf{x}\setminus x}\prod_{s\in ne(x)}F_s(x,X_s)=\prod_{s\in ne(x)}[\sum_{X_s}F_s(x,X_s)]=\prod_{s\in ne(x)}\mu_{f_s\rightarrow x}(x)
p(x)=x∖x∑s∈ne(x)∏Fs(x,Xs)=s∈ne(x)∏[Xs∑Fs(x,Xs)]=s∈ne(x)∏μfs→x(x)