机器学习——概率图模型
概率图模型使用的图的方式表示概率分布。为了在图中添加各种概率,首先总结一下随机变量分布的一些规则:
S u m R u l e : p ( x 1 ) = ∫ p ( x 1 , x 2 ) d x 2 P r o d u c t R u l e : p ( x 1 , x 2 ) = p ( x 1 ∣ x 2 ) p ( x 2 ) C h a i n R u l e : p ( x 1 , x 2 , ⋯ , x p ) = ∏ i = 1 p p ( x i ∣ x i + 1 , x i + 2 ⋯ x p ) B a y e s i a n R u l e : p ( x 1 ∣ x 2 ) = p ( x 2 ∣ x 1 ) p ( x 1 ) p ( x 2 ) Sum\ Rule:p(x_1)=\int p(x_1,x_2)dx_2\\ Product\ Rule:p(x_1,x_2)=p(x_1|x_2)p(x_2)\\ Chain\ Rule:p(x_1,x_2,\cdots,x_p)=\prod\limits_{i=1}^pp(x_i|x_{i+1,x_{i+2} \cdots}x_p)\\ Bayesian\ Rule:p(x_1|x_2)=\frac{p(x_2|x_1)p(x_1)}{p(x_2)} Sum Rule:p(x1)=∫p(x1,x2)dx2Product Rule:p(x1,x2)=p(x1∣x2)p(x2)Chain Rule:p(x1,x2,⋯,xp)=i=1∏pp(xi∣xi+1,xi+2⋯xp)Bayesian Rule:p(x1∣x2)=p(x2)p(x2∣x1)p(x1)
可以看到,在链式法则中,如果数据维度特别高,那么的采样和计算非常困难,我们需要在一定程度上做出简化,在朴素贝叶斯中,作出了条件独立性假设。在Markov假设中,给定数据的维度是以时间顺序出现的,给定当前的时间维度,那么下一个维度与之前的维度独立。在HMM中,采用了齐次Markov假设。在Markov假设之上,更一般的,加入条件独立性假设,对维度划分集合A,B,C,使得 X A ⊥ X B ∣ X C X_A\perp X_B|X_C XA⊥XB∣XC
概率图模型采用图的特点表示上述的条件独立性假设,节点表示随机变量,边表示条件概率。、概率图模型可以分为三大理论部分:
- 表示:
- 有向图(离散):贝叶斯网络
- 高斯图(连续):高斯贝叶斯和高斯马尔科夫网络
- 无向图(离散):马尔科夫网络
- 推断
- 精确推断
- 近似推断
-
- 确定性近似(变分推断)
-
- 随机近似(MCMC)
- 学习
- 参数学习
-
- 完备数据
-
- 隐变量:E-M算法
- 结构学习
有向图-贝叶斯网络
已知联合分布中,各个随机变量之间的依赖关系,那么可以通过拓扑排序(根据依赖关系)可以获得一个有向图。而如果已知一个图,也可以直接得到联合概率分布的因子分解:
p
(
x
1
,
x
2
,
⋯
,
x
p
)
=
∏
i
=
1
p
p
(
x
i
∣
x
p
a
r
e
n
t
(
i
)
)
p(x_1,x_2,\cdots,x_p)=\prod\limits_{i=1}^pp(x_i|x_{parent(i)})
p(x1,x2,⋯,xp)=i=1∏pp(xi∣xparent(i))
那么实际的图中条件独立性是如何体现的呢?在局部任何三个节点,可以有三种结构:
p ( A , B , C ) = p ( A ) p ( B ∣ A ) p ( C ∣ B ) = p ( A ) p ( B ∣ A ) p ( C ∣ B , A ) ⟹ p ( C ∣ B ) = p ( C ∣ B , A ) ⇔ p ( C ∣ B ) p ( A ∣ B ) = p ( C ∣ A , B ) p ( A ∣ B ) = p ( C , A ∣ B ) ⟹ C ⊥ A ∣ B p(A,B,C)=p(A)p(B|A)p(C|B)=p(A)p(B|A)p(C|B,A)\\ \Longrightarrow p(C|B)=p(C|B,A)\\ \Leftrightarrow p(C|B)p(A|B)=p(C|A,B)p(A|B)=p(C,A|B)\\ \Longrightarrow C\perp A|B p(A,B,C)=p(A)p(B∣A)p(C∣B)=p(A)p(B∣A)p(C∣B,A)⟹p(C∣B)=p(C∣B,A)⇔p(C∣B)p(A∣B)=p(C∣A,B)p(A∣B)=p(C,A∣B)⟹C⊥A∣B
p
(
A
,
B
,
C
)
=
p
(
A
∣
B
)
p
(
B
)
p
(
C
∣
B
)
=
p
(
B
)
p
(
A
∣
B
)
p
(
C
∣
A
,
B
)
⟹
p
(
C
∣
B
)
=
p
(
C
∣
B
,
A
)
⇔
p
(
C
∣
B
)
p
(
A
∣
B
)
=
p
(
C
∣
A
,
B
)
p
(
A
∣
B
)
=
p
(
C
,
A
∣
B
)
⟹
C
⊥
A
∣
B
p(A,B,C)=p(A|B)p(B)p(C|B)=p(B)p(A|B)p(C|A,B)\\ \Longrightarrow p(C|B)=p(C|B,A)\\ \Leftrightarrow p(C|B)p(A|B)=p(C|A,B)p(A|B)=p(C,A|B)\\ \Longrightarrow C\perp A|B
p(A,B,C)=p(A∣B)p(B)p(C∣B)=p(B)p(A∣B)p(C∣A,B)⟹p(C∣B)=p(C∣B,A)⇔p(C∣B)p(A∣B)=p(C∣A,B)p(A∣B)=p(C,A∣B)⟹C⊥A∣B
3.
p
(
A
,
B
,
C
)
=
p
(
A
)
p
(
C
)
p
(
B
∣
C
,
A
)
=
p
(
A
)
p
(
C
∣
A
)
p
(
B
∣
C
,
A
)
⟹
p
(
C
)
=
p
(
C
∣
A
)
⇔
C
⊥
A
p(A,B,C)=p(A)p(C)p(B|C,A)=p(A)p(C|A)p(B|C,A)\\ \Longrightarrow p(C)=p(C|A)\\ \Leftrightarrow C\perp A\\
p(A,B,C)=p(A)p(C)p(B∣C,A)=p(A)p(C∣A)p(B∣C,A)⟹p(C)=p(C∣A)⇔C⊥A
对于这种结构,A,C不与B条件独立。
从整体的图来看,可以引入D划分的概念。对于类似上面图1和图2的关系,引入集合A,B,那么满足
A
⊥
B
∣
C
A\perp B|C
A⊥B∣C的C集合中的点与A,B中的点的关系都满足图1,2,满足图3关系的点都不在C中。D划分应用在贝叶斯定理中:
p
(
x
i
∣
x
−
i
)
=
p
(
x
)
∫
p
(
x
)
d
x
i
=
∏
j
=
1
p
p
(
x
j
∣
x
p
a
r
e
n
t
s
(
j
)
)
∫
∏
j
=
1
p
p
(
x
j
∣
x
p
a
r
e
n
t
s
(
j
)
)
d
x
i
p(x_i|x_{-i})=\frac{p(x)}{\int p(x)dx_{i}}=\frac{\prod\limits_{j=1}^pp(x_j|x_{parents(j)})}{\int\prod\limits_{j=1}^pp(x_j|x_{parents(j)})dx_i}
p(xi∣x−i)=∫p(x)dxip(x)=∫j=1∏pp(xj∣xparents(j))dxij=1∏pp(xj∣xparents(j))
可以发现,上下部分可以分为两部分,一部分是和
x
i
x_i
xi相关的,另一部分是和
x
i
x_i
xi无关的,而这个无关的部分可以相互约掉。于是计算只涉及和
x
i
x_i
xi相关的部分。
与
x
i
x_i
xi相关的部分可以写成:
p
(
x
i
∣
x
p
a
r
e
n
t
s
(
i
)
)
p
(
x
c
h
i
l
d
(
i
)
∣
x
i
)
p(x_i|x_{parents(i)})p(x_{child(i)}|x_i)
p(xi∣xparents(i))p(xchild(i)∣xi)
这些相关的部分又叫做Markov毯。
实际应用的模型中,对这些条件独立性作出了假设,从单一到混合,从有限到无限(时间,空间)可以分为:
- 朴素贝叶斯,单一的条件独立性假设 p ( x ∣ y ) = ∏ i = 1 p p ( x i ∣ y ) p(x|y)=\prod\limits_{i=1}^pp(x_i|y) p(x∣y)=i=1∏pp(xi∣y),在D划分后,所有条件依赖的集合就是单个元素。
- 高斯混合模型:混合的条件独立。引入多类别的隐变量 z 1 , z 2 , . . . , z k z_1,z_2,...,z_k z1,z2,...,zk, p ( x ∣ z ) = N ( μ , Σ ) p(x|z)=\mathcal{N}(\mu,\Sigma) p(x∣z)=N(μ,Σ),条件依赖集合为多个元素。
- 与时间相关的条件依赖
-
- Markov链
-
- 高斯过程
- 连续:高斯贝叶斯网络
- 组合上面的分类
无向图—马尔科夫网络(马尔科夫随机场)
无向图没有了类似有向图的局部不同结构,在马尔科夫网络中,也存在D划分的概念。直接将条件独立的集合
x
A
⊥
x
B
∣
x
C
x_A\perp x_B|x_C
xA⊥xB∣xC划分为三个集合。这个也叫全局Markov。对于局部的节点,
x
⊥
(
X
−
N
e
i
g
h
b
o
u
r
(
x
)
)
∣
N
e
i
g
h
b
o
u
r
(
x
)
x\perp (X-Neighbour(\mathcal{x}))|Neighbour(x)
x⊥(X−Neighbour(x))∣Neighbour(x)。这也叫做局部Markov。对于成对的节点:
x
i
⊥
x
j
∣
x
−
i
−
j
x_i\perp x_j|x_{-i-j}
xi⊥xj∣x−i−j,其中
i
,
j
i,j
i,j不能相邻。这也叫成对Markov。事实上上面三个点局部全局成对是相互等价的。
有了这个条件独立性的划分,还需要因子分解来实际计算。引入团的概念:
团,最大团:图中节点的集合,集合中的节点之间相互都是连接的叫做团,如果不能再添加节点,那么叫做最大团。
利用这个定义进行的x所有维度的联合概率分布的因子分解为,假设有K个团,Z就是对所有可能取值求和:
p
(
x
)
=
1
Z
∏
i
=
1
K
ϕ
(
x
c
i
)
Z
=
∑
x
∈
X
∏
i
=
1
K
ϕ
(
x
c
i
)
p(x)=\frac{1}{Z}\prod\limits_{i=1}^{K}\phi(x_{ci})\\ Z=\sum\limits_{x\in\mathcal{X}}\prod\limits_{i=1}^{K}\phi(x_{ci})
p(x)=Z1i=1∏Kϕ(xci)Z=x∈X∑i=1∏Kϕ(xci)
其中
ϕ
(
x
c
i
)
\phi(x_{ci})
ϕ(xci)叫做势函数,它必须是一个正值,可以记为:
ϕ
(
x
c
i
)
=
exp
(
−
E
(
x
c
i
)
)
\phi(x_{ci})=\exp(-E(x_{ci}))
ϕ(xci)=exp(−E(xci))这个分布叫做Gibbs分布(玻尔兹曼分布)。于是也可以记为:
p
(
x
)
=
1
Z
exp
(
−
∑
i
=
1
K
E
(
x
c
i
)
)
p(x)=\frac{1}{Z}\exp(-\sum\limits_{i=1}^KE(x_{ci}))
p(x)=Z1exp(−i=1∑KE(xci))。这个分解和条件独立性等价(Hammesley-Clifford定理),这个分布的形式也和指数族分布形式上相同,于是满足最大熵原理。
两种图的转换-道德图
我们常常想将有向图转为无向图,从而应用更一般的表达式
- 链式:
直接去掉箭头, p ( a , b , c ) = p ( a ) p ( b ∣ a ) p ( c ∣ b ) = ϕ ( a , b ) ϕ ( b , c ) p(a,b,c)=p(a)p(b|a)p(c|b)=\phi(a,b)\phi(b,c) p(a,b,c)=p(a)p(b∣a)p(c∣b)=ϕ(a,b)ϕ(b,c)
- V形:
由于 p ( a , b , c ) = p ( b ) p ( a ∣ b ) p ( c ∣ b ) = ϕ ( a , b ) ϕ ( b , c ) p(a,b,c)=p(b)p(a|b)p(c|b)=\phi(a,b)\phi(b,c) p(a,b,c)=p(b)p(a∣b)p(c∣b)=ϕ(a,b)ϕ(b,c),直接去掉箭头:
- 倒V形:
由于 p ( a , b , c ) = p ( a ) p ( c ) p ( b ∣ a , c ) = ϕ ( a , b , c ) p(a,b,c)=p(a)p(c)p(b|a,c)=\phi(a,b,c) p(a,b,c)=p(a)p(c)p(b∣a,c)=ϕ(a,b,c),于是在a,c之间添加线:
观察着三种情况可以概括为:
- 将每个节点的父节点两两相连
- 将有向边替换为无向边
更精细的分解-因子图
对于一个有向图,可以通过引入环的方式,可以将其转换为无向图(Tree-like graph),这个图就叫做道德图。但是我们上面的BP算法只对无环图有效,通过因子图可以变为无环图。
考虑一个无向图:
可以将其转为:
其中
f
=
f
(
a
,
b
,
c
)
f=f(a,b,c)
f=f(a,b,c)。因子图不是唯一的,这是由于因式分解本身就对应一个特殊的因子图,将因式分解:
p
(
x
)
=
∏
s
f
s
(
x
s
)
p(x)=\prod\limits_{s}f_s(x_s)
p(x)=s∏fs(xs)可以进一步分解得到因子图。
推断
推断的主要目的是求各种概率分布,包括边缘概率,条件概率,以及使用MAP来求得参数,通常推断可以分为:
- 精确推断
Variable Elimination(VE)
Belief Propagation (BP, SUM-Product Algo),从VE发展而来
Junction Tree, 上面两种在树结构上应用,Junction Tree在图结构上应用 - 近似推断
Loop Belief Propagation (针对有环图)
Mente Carlo Interference: 例如Importance Sampling, MCMC
Variational inference
推断-变量消除(VE)
变量消除的方法是在求解概率分布的时候,将相关的条件概率先行求和或积分,从而一步步地消除变量,例如在马尔科夫链中:
p
(
d
)
=
∑
a
,
b
,
c
p
(
a
,
b
,
c
,
d
)
=
∑
c
p
(
d
∣
c
)
∑
b
p
(
c
∣
b
)
∑
a
p
(
b
∣
a
)
p
(
a
)
p(d)=\sum\limits_{a,b,c}p(a,b,c,d)=\sum\limits_cp(d|c)\sum\limits_bp(c|b)\sum\limits_ap(b|a)p(a)
p(d)=a,b,c∑p(a,b,c,d)=c∑p(d∣c)b∑p(c∣b)a∑p(b∣a)p(a)
变量消除的缺点很明显:
- 计算步骤无法存储
- 消除的最优次序是一个NP-hard问题
推断-信念传播(BP)
为了克服VE的第一个缺陷-计算步骤无法存储。我们进一步地对上面的马尔科夫链进行观察:
要求
p
(
e
)
p(e)
p(e),当然使用VE,从a一直消除到d,记
∑
a
p
(
a
)
p
(
b
∣
a
)
=
m
a
→
b
(
b
)
\sum\limits_ap(a)p(b|a)=m_{a\to b(b)}
a∑p(a)p(b∣a)=ma→b(b),表示这是消除a后的关于b的概率,类似地,记
∑
b
p
(
c
∣
b
)
m
a
→
b
(
b
)
=
m
b
→
c
(
c
)
\sum\limits_bp(c|b)m_{a\to b}(b)=m_{b\to c}(c)
b∑p(c∣b)ma→b(b)=mb→c(c).于是
p
(
e
)
=
∑
d
p
(
e
∣
d
)
m
b
→
c
(
c
)
p(e)=\sum\limits_dp(e|d)m_{b\to c}(c)
p(e)=d∑p(e∣d)mb→c(c)。进一步观察,对
p
(
c
)
p(c)
p(c):
p
(
c
)
=
[
∑
b
p
(
c
∣
b
)
∑
a
p
(
b
∣
a
)
p
(
a
)
]
⋅
[
∑
d
p
(
d
∣
c
)
∑
e
p
(
e
)
p
(
e
∣
d
)
]
p(c)=[\sum\limits_bp(c|b)\sum\limits_ap(b|a)p(a)]\cdot[\sum\limits_dp(d|c)\sum\limits_ep(e)p(e|d)]
p(c)=[b∑p(c∣b)a∑p(b∣a)p(a)]⋅[d∑p(d∣c)e∑p(e)p(e∣d)]
我们发现了和上面计算
p
(
e
)
p(e)
p(e)类似的结构,这个式子可以分成两个部分,一部分是从a传播过来的概率,第二部分是从e传播过来的概率。
一般地,对于图(只对树形状的图):
这四个团(对于无向图是团,对于有向图就是概率为除了根的节点为1),有四个节点,三个边:
p
(
a
,
b
,
c
,
d
)
=
1
Z
ϕ
a
(
a
)
ϕ
b
(
b
)
ϕ
c
(
c
)
ϕ
d
(
d
)
⋅
ϕ
a
b
(
a
,
b
)
ϕ
b
c
(
c
,
b
)
ϕ
b
d
(
d
,
b
)
p(a,b,c,d)=\frac{1}{Z}\phi_a(a)\phi_b(b)\phi_c(c)\phi_d(d)\cdot\phi_{ab}(a,b)\phi_{bc}(c,b)\phi_{bd}(d,b)
p(a,b,c,d)=Z1ϕa(a)ϕb(b)ϕc(c)ϕd(d)⋅ϕab(a,b)ϕbc(c,b)ϕbd(d,b)
套用上面关于有向图的观察,如果求解边缘概率
p
(
a
)
p(a)
p(a),定义
m
c
→
b
(
b
)
=
∑
c
ϕ
c
(
c
)
ϕ
b
c
(
b
c
)
m_{c\to b}(b)=\sum\limits_c\phi_c(c)\phi_{bc}(bc)
mc→b(b)=c∑ϕc(c)ϕbc(bc),
m
d
→
b
(
b
)
=
∑
d
ϕ
d
(
d
)
ϕ
b
d
(
b
d
)
m_{d\to b}(b)=\sum\limits_d\phi_d(d)\phi_{bd}(bd)
md→b(b)=d∑ϕd(d)ϕbd(bd),
m
b
→
a
(
a
)
=
∑
b
ϕ
b
a
(
b
a
)
ϕ
b
(
b
)
m
c
→
b
(
b
)
d
→
b
m
(
b
)
m_{b\to a}(a)=\sum\limits_b\phi_{ba}(ba)\phi_b(b)m_{c\to b}(b)_{d\to b}m(b)
mb→a(a)=b∑ϕba(ba)ϕb(b)mc→b(b)d→bm(b),这样概率就一步步地传播到了
a
a
a:
p
(
a
)
=
ϕ
a
(
a
)
m
b
→
a
(
a
)
p(a)=\phi_a(a)m_{b\to a}(a)
p(a)=ϕa(a)mb→a(a)
写成一般的形式,对于相邻节点i,j:
m
j
→
i
(
i
)
=
∑
j
ϕ
j
(
j
)
ϕ
i
j
(
i
j
)
∏
k
∈
N
e
i
g
h
b
o
u
r
(
j
)
−
i
m
k
→
j
(
j
)
m_{j\to i}(i)=\sum\limits_j\phi_j(j)\phi_{ij}(ij)\prod\limits_{k\in Neighbour(j)-i}m_{k\to j}(j)
mj→i(i)=j∑ϕj(j)ϕij(ij)k∈Neighbour(j)−i∏mk→j(j)
这个表达式,就可以保存计算过程了,只要对每条边的传播分别计算,对于一个无向树形图可以递归并行实现:
- 任取一个节点a作为根节点
- 对这个根节点的邻居中的每一个节点,收集信息(计算入信息)
- 对根节点的邻居,分发信息(计算出信息)
推断-Max-Product算法
在推断任务中,MAP也是常常需要的,MAP的目的是寻找最佳参数:
(
a
^
,
b
^
,
c
^
,
d
^
)
=
a
r
g
m
a
x
a
,
b
,
c
,
d
p
(
a
,
b
,
c
,
d
∣
E
)
(\hat{a},\hat{b},\hat{c},\hat{d})=\mathop{argmax}_{a,b,c,d}p(a,b,c,d|E)
(a^,b^,c^,d^)=argmaxa,b,c,dp(a,b,c,d∣E)
类似BP,我们采用信息传递的方式来求得最优参数,不同的是,我们在所有信息传递中,传递的是最大化参数的概率,而不是将所有可能求和:
m
j
→
i
=
max
j
ϕ
j
ϕ
i
j
∏
k
∈
N
e
i
g
h
b
o
u
r
(
j
)
−
i
m
k
→
j
m_{j\to i}=\max\limits_{j}\phi_j\phi_{ij}\prod\limits_{k\in Neighbour(j)-i}m_{k\to j}
mj→i=jmaxϕjϕijk∈Neighbour(j)−i∏mk→j
于是对于上面的图:
max
a
p
(
a
,
b
,
c
,
d
)
=
max
a
ϕ
a
ϕ
a
b
m
c
→
b
m
d
→
b
\max_a p(a,b,c,d)=\max_a\phi_a\phi_{ab}m_{c\to b}m_{d\to b}
amaxp(a,b,c,d)=amaxϕaϕabmc→bmd→b
这个算法是Sum-Product算法的改进,也是在HMM中应用给的Viterbi算法的推广。