此文章主要是结合哔站shuhuai008大佬的白板推导视频:概率图模型_297min
全部笔记的汇总贴:机器学习-白板推导系列笔记
PS:本次课程所提及的内容,在后面的章节都有讲解,可以先跳过,然后在看完粒子滤波这一章的时候进行回顾复习,我到时候也会在那一章的最后放一个传送门过来的。
概 率 图 { R e p r e s e n t a t i o n ( 表 示 ) { 有 向 图 B e y e s i a n N e t w o r k 高 斯 图 ( 连 续 ) { G a u s s i a n B N G a u s s i a n M N 无 向 图 M a r k o v N e t w o r k I n f e r e n c e ( 推 断 ) { 精 确 推 断 近 似 推 断 { 确 定 性 近 似 ( 变 分 推 断 ) 随 机 近 似 ( M C M C ) L e a r n i n g ( 学 习 ) { 参 数 学 习 { 完 备 数 据 { 有 向 无 向 隐 变 量 → E M 结 构 学 习 概率图\left\{\begin{matrix} Representation(表示)\left\{\begin{matrix} 有向图\; Beyesian\; Network\\ 高斯图(连续)\left\{\begin{matrix} Gaussian\; BN\\ Gaussian\; MN \end{matrix}\right.\\ 无向图\; Markov\; Network \end{matrix}\right.\\ Inference(推断)\left\{\begin{matrix} 精确推断\\ 近似推断\left\{\begin{matrix} 确定性近似(变分推断)\\ 随机近似(MCMC) \end{matrix}\right. \end{matrix}\right.\\ Learning(学习)\left\{\begin{matrix} 参数学习\left\{\begin{matrix} 完备数据\left\{\begin{matrix} 有向\\ 无向 \end{matrix}\right.\\ 隐变量\rightarrow EM \end{matrix}\right.\\ 结构学习 \end{matrix}\right. \end{matrix}\right. 概率图⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧Representation(表示)⎩⎪⎪⎨⎪⎪⎧有向图BeyesianNetwork高斯图(连续){ GaussianBNGaussianMN无向图MarkovNetworkInference(推断)⎩⎨⎧精确推断近似推断{ 确定性近似(变分推断)随机近似(MCMC)Learning(学习)⎩⎪⎪⎨⎪⎪⎧参数学习⎩⎨⎧完备数据{ 有向无向隐变量→EM结构学习
概率图模型使用图的形式来表示概率分布,下面是几个随机变量分布的一些规则:
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 2 ∣ x 1 ) = P ( x 1 , x 2 ) P ( x 1 ) = P ( x 1 , x 2 ) ∫ P ( x 1 , x 2 ) d x 2 = P ( x 2 ) P ( x 1 ∣ x 2 ) ∫ P ( x 2 ) P ( x 1 ∣ x 2 ) d x 2 Sum Rule:p(x_{1})=\int p(x_{1},x_{2})\mathrm{d}x_{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_{i=1}^{p}p(x_{i}|x_{i+1},x_{i+2},\cdots ,x_{p})\\ Bayesian Rule:P(x_{2}|x_{1})=\frac{P(x_{1},x_{2})}{P(x_{1})}=\frac{P(x_{1},x_{2})}{\int P(x_{1},x_{2})\mathrm{d}x_{2}}=\frac{P(x_{2})P(x_{1}|x_{2})}{\int P(x_{2})P(x_{1}|x_{2})\mathrm{d}x_{2}} SumRule:p(x1)=∫p(x1,x2)dx2ProductRule:p(x1,x2)=p(x1∣x2)p(x2)ChainRule:p(x1,x2,⋯,xp)=i=1∏pp(xi∣xi+1,xi+2,⋯,xp)BayesianRule:P(x2∣x1)=P(x1)P(x1,x2)=∫P(x1,x2)dx2P(x1,x2)=∫P(x2)P(x1∣x2)dx2P(x2)P(x1∣x2)
在链式规则中如果数据的维度过高,就会出现计算复杂的困境,因此我们需要对此做出一些简化:
① ①\; ①相互独立的假设: P ( x 1 , x 2 , ⋯ , x p ) = ∏ i = 1 p P ( x i ) P(x_{1},x_{2},\cdots ,x_{p})=\prod_{i=1}^{p}P(x_{i}) P(x1,x2,⋯,xp)=∏i=1pP(xi),
朴素贝叶斯中的条件独立性假设: P ( x ∣ y ) = ∏ i = 1 p P ( x i ∣ y ) P(x|y)=\prod_{i=1}^{p}P(x_{i}|y) P(x∣y)=∏i=1pP(xi∣y);
② ②\; ② M a r k o v P r o p e r t y : x j ⊥ x i + 1 ∣ x i , j < i Markov\; Property:x_{j}\perp x_{i+1}| x_{i},j< i MarkovProperty:xj⊥xi+1∣xi,j<i,HMM中的齐次Markov假设;
③ ③\; ③条件独立性假设: x A ⊥ x B ∣ x C , x A 、 x B 、 x C x_{A}\perp x_{B}|x_{C},x_{A}、x_{B}、x_{C} xA⊥xB∣xC,xA、xB、xC是集合,且不相交。
已知联合概率分布中各个随机变量的依赖关系,可以根据拓扑排序(依赖关系)得到一个有向图。而如果已知一个有向图,可以直接得到联合概率分布的因子分解:
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_{i=1}^{p}P(x_{i}|x_{parent(i)}) P(x1,x2,⋯,xp)=i=1∏pP(xi∣xparent(i))
在局部的任何三个节点,可以有以下三种结构:
这种结构满足:
A ⊥ C ∣ B ⇔ 若 B 被 观 测 , 则 路 径 被 阻 塞 A\perp C|B\Leftrightarrow 若B被观测,则路径被阻塞 A⊥C∣B⇔若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 ∣ B ) P ( A ∣ B ) = P ( C , A ∣ B ) ⇒ C ⊥ A ∣ B P(A,B,C)=\underset{因子分解}{\underbrace{P(A)P(B|A)P(C|B)}}=\underset{链式法则}{\underbrace{P(A)P(B|A)P(C|B,A)}}\\ \Rightarrow P(C|B)=P(C|B,A)\\ \Rightarrow P(C|B)P(A|B)=P(C|A,B)P(A|B)\\ \Rightarrow P(C|B)P(A|B)=P(C,A|B)\\ \Rightarrow 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∣B)P(A∣B)=P(C,A∣B)⇒C⊥A∣B
A ⊥ C ∣ B ⇔ 若 B 被 观 测 , 则 路 径 被 阻 塞 A\perp C|B\Leftrightarrow 若B被观测,则路径被阻塞 A⊥C∣B⇔若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 ∣ A , B ) ⇒ P ( C ∣ B ) P ( A ∣ B ) = P ( C ∣ A , B ) P ( C ∣ B ) ⇒ P ( C ∣ B ) P ( A ∣ B ) = P ( A , C ∣ B ) ⇒ C ⊥ A ∣ B P(A,B,C)=\underset{因子分解}{\underbrace{P(A|B)P(B)P(C|B)}}=\underset{链式法则}{\underbrace{P(B)P(A|B)P(C|A,B)}}\\ \Rightarrow P(C|B)=P(C|A,B)\\ \Rightarrow P(C|B)P(A|B)=P(C|A,B)P(C|B)\\ \Rightarrow P(C|B)P(A|B)=P(A,C|B)\\ \Rightarrow 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∣A,B)⇒P(C∣B)P(A∣B)=P(C∣A,B)P(C∣B)⇒P(C∣B)P(A∣B)=P(A,C∣B)⇒C⊥A∣B
这种结构满足:
默认情况下, A ⊥ C A\perp C A⊥C,路径是阻塞的。
若 B B B被观测,则路径是通的。
如果 B B B仍然有后继节点,则如果后继节点被观测,路径也是通的。
通过因子分解和链式规则可以进行证明:
P ( A , B , C ) = P ( A ) P ( C ) P ( B ∣ A , C ) ⏟ 因 子 分 解 = P ( A ) P ( C ∣ A ) P ( B ∣ A , C ) ⏟ 链 式 法 则 ⇒ P ( C ) = P ( C ∣ A ) ⇒ A ⊥ C P(A,B,C)=\underset{因子分解}{\underbrace{P(A)P(C)P(B|A,C)}}=\underset{链式法则}{\underbrace{P(A)P(C|A)P(B|A,C)}}\\ \Rightarrow P(C)=P(C|A)\\ \Rightarrow A\perp C P(A,B,C)=因子分解 P(A)P(C)P(B∣A,C)=链式法则 P(A)P(C∣A)P(B∣A,C)⇒P(C)=P(C∣A)⇒A⊥C
(可以直接看(三),这一小节以(一)为基础,作一些相关图概念的补充知识)
对于团,
团,最大团:图中节点的集合,集合中的节点之间全部互相连接的叫做团,如果不能再添加任何节点,就叫做最大团。
最大团的概念可以参考数据结构中的极大连通子图。
我们常常想将有向图转为⽆向图,从⽽应⽤更⼀般的表达式。对于有向图中的三种结构,有不同的转换方法:
显然可以看出A,B和B,C是团,因此可以直接去掉箭头:
可以看出A,B和B,C是团,因此可以直接去掉箭头:
我们可以得出结论,这三种基本的有向图结构转化为无向图,分为以下两步:
得到的无向图就是道德图
对于⼀个有向图,可以通过引⼊环的⽅式,可以将其转换为⽆向图(Tree-like graph),这个图就叫做道德图。但是我们上⾯的 BP 算法只对⽆环图有效,通过因⼦图可以变为⽆环图。
联合概率的因子图分解方法为:
P ( x ) = ∏ S f S ( x S ) P(x)=\prod _{S}f_{S}(x_{S}) P(x)=S∏fS(xS)
其中:
有以下无向图:
可以将其转换成一个简单的因子图:
其中 f = f ( a , b , c ) f=f(a,b,c) f=f(a,b,c),对比无向图的因子分解 P ( x ) = 1 Z ψ ( a , b , c ) P(x)=\frac{1}{Z}\psi (a,b,c) P(x)=Z1ψ(a,b,c),我们可以看到因子分解本身对应一个特殊的因子图。
因子图不是唯一的,可以看做对因子分解的进一步分解,比如以下分解:
对应的计算公式为 P ( x ) = f 1 ( a , b ) f 2 ( a , c ) f 3 ( b , c ) f a ( a ) f b ( b ) f c ( c ) P(x)=f_{1}(a,b)f_{2}(a,c)f_{3}(b,c)f_{a}(a)f_{b}(b)f_{c}(c) P(x)=f1(a,b)f2(a,c)f3(b,c)fa(a)fb(b)fc(c),因式分解不是唯一的,只需要保证乘积等于概率 P ( x ) P(x) P(x)即可。在上面的因式分解中我们可以看做这个因子图分为两层:
也就是说因子图可以做到随机变量节点之间不直接相连,只与因子节点相连,因子节点只与变量节点相连。
对于3个集合 A 、 B 、 C A、B、C A、B、C,判断其是否满足条件独立性假设( x A ⊥ x B ∣ x C , x A 、 x B 、 x C x_{A}\perp x_{B}|x_{C},x_{A}、x_{B}、x_{C} xA⊥xB∣xC,xA、xB、xC是集合,且不相交。)可以通过 D D D划分这种方法。
D D D划分是一种判定的方式,其规则是对于上述head to tail以及tail to tail的关系,引入集合 A 、 B A、B A、B,那么满足 x A ⊥ x B ∣ x C x_{A}\perp x_{B}|x_{C} xA⊥xB∣xC的 C C C集合中的元素与 A 、 B A、B A、B中的元素的关系满足head to tail或tail to tail的关系,而满足head to head关系的元素不在C中。
形象一点说,把一个随机变量全集 U U U分成互斥的三部分,变量 A A A以及集合 C C C和 B B B,三个子集没有交集,并集即为全集 U U U;如果说给定集合 C C C时,变量 A A A与集合 B B B没有任何关系,则称集合 C C C为变量 A A A的马尔可夫毯。
实际应⽤的模型中,对这些条件独⽴性作出了假设,从单⼀到混合,从有限到⽆限(时间,空间)可以分为:
{ 单 一 : N a i v e B a y e s 混 合 : G M M 时 间 : { M a r k o v C h a i n G a u s s i a n P r o c e s s 连 续 : G a u s s i a n B a y e s i a n N e t w o r k \left\{\begin{matrix} 单一:Naive Bayes\\ 混合:GMM\\ 时间:\left\{\begin{matrix} Markov\; Chain\\ Gaussian\; Process \end{matrix}\right.\\ 连续:Gaussian\; Bayesian\; Network \end{matrix}\right. ⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧单一:NaiveBayes混合:GMM时间:{ MarkovChainGaussianProcess连续:GaussianBayesianNetwork
GMM 与时序( t t t)结合的动态模型:
马尔可夫随机场的条件独立性体现在三个方面:
全局、局部、成对马尔可夫性是相互等价的,也就是说可以相互推出来。
在无向图中给定三个集合 A 、 B 、 C A、B、C A、B、C,在无向图中如果满足给定 x C x_C xC的条件下, x A x_A xA和 x B x_B xB相互独立,即 x A ⊥ x B ∣ x C x_{A}\perp x_{B}|x_{C} xA⊥xB∣xC,则满足全局马尔可夫性。
从图中的判定方法为从 A A A中节点到 B B B中节点的任何路径上都至少有一个位于 C C C中的节点。
局部马尔可夫性是指给定一个变量 x x x的所有邻接变量,则 x x x独立于任何其他变量,即:
x ⊥ ( X − N e i g h b o r ( x ) − x ) ∣ N e i g h b o r ( x ) x\perp (X-Neighbor(x)-x)|Neighbor(x) x⊥(X−Neighbor(x)−x)∣Neighbor(x)
对于上图, a ⊥ { e , f } ∣ { b , c , d } a\perp \left \{e,f\right \}|\left \{b,c,d\right \} a⊥{ e,f}∣{ b,c,d}:
成对马尔可夫性是指给定所有其他变量,两个非邻接变量条件独立,即:
x i ⊥ x j ∣ x − i − j , i ≠ j , x i 、 x j 不 相 邻 x_{i}\perp x_{j}|x_{-i-j},i\neq j,x_{i}、x_{j}不相邻 xi⊥xj∣x−i−j,i=j,xi、xj不相邻
将概率无向图模型的联合概率分布表示为其最大团上的随机变量的函数的乘积形式的操作,称为概率无向图模型的因子分解。
给定概率无向图模型, C i , i = 1 , 2 , ⋯ C_i,i=1,2,\cdots Ci,i=1,2,⋯ , k k k为无向图模型上的最大团,则 x x x的联合概率分布 P ( x ) P(x) P(x)可以写为:
P ( x ) = 1 Z ∏ i = 1 k ψ ( x C i ) P(x)=\frac{1}{Z}\prod_{i=1}^{k}\psi (x_{C_{i}}) P(x)=Z1i=1∏kψ(xCi)
C i C_{i} Ci:最大团
x C i x_{C_{i}} xCi:最大团随机变量集合
ψ ( x C i ) \psi (x_{C_{i}}) ψ(xCi):势函数,必须为正
Z = ∑ x ∏ i = 1 k ψ ( x C i ) = ∑ x 1 ∑ x 2 ⋯ ∑ x p ∏ i = 1 k ψ ( x C i ) Z=\sum _{x}\prod_{i=1}^{k}\psi (x_{C_{i}})=\sum _{x_{1}}\sum _{x_{2}}\cdots \sum _{x_{p}}\prod_{i=1}^{k}\psi (x_{C_{i}}) Z=x∑i=1∏kψ(xCi)=x1∑x2∑⋯xp∑i=1∏kψ(xCi)
对于势函数,通常使用 ψ ( x C i ) = e x p { − E ( x C i ) } \psi (x_{C_{i}})=exp\left \{-E(x_{C_{i}})\right \} ψ(xCi)=exp{ −E(xCi)},当使用这个势函数时, P ( x ) = 1 Z ∏ i = 1 k ψ ( x C i ) P(x)=\frac{1}{Z}\prod_{i=1}^{k}\psi (x_{C_{i}}) P(x)=Z1∏i=1kψ(xCi)就叫做吉布斯分布(Gibbs Distribution),或者玻尔兹曼分布(Boltzmann Distribution)。进一步观察一下这个分布:
P ( x ) = 1 Z ∏ i = 1 k ψ ( x C i ) = 1 Z ∏ i = 1 k e x p { − E ( x C i ) } = 1 Z e x p { − ∑ i = 1 k E ( x C i ) } ⏟ 指 数 族 分 布 形 式 P(x)=\frac{1}{Z}\prod_{i=1}^{k}\psi (x_{C_{i}})\\ =\frac{1}{Z}\prod_{i=1}^{k}exp\left \{-E(x_{C_{i}})\right \}\\ =\underset{指数族分布形式}{\underbrace{\frac{1}{Z}exp\left \{-\sum_{i=1}^{k}E(x_{C_i})\right \}}} P(x)=Z1i=1∏kψ(xCi)=Z1i=1∏kexp{ −E(xCi)}=指数族分布形式 Z1exp{ −i=1∑kE(xCi)}
也就是说吉布斯分布满足指数族分布的形式,于是满足最大熵原理。
总的来说,推断的任务就是求概率。假如我们知道联合概率 P ( x ) = P ( x 1 , x 2 , ⋯ , x p ) P(x)=P(x_{1},x_{2},\cdots ,x_{p}) P(x)=P(x1,x2,⋯,xp),我们需要使用推断的方法来求:
边缘概率: P ( x i ) = ∑ x 1 ⋯ ∑ x i − 1 ∑ x i + 1 ⋯ ∑ x p P ( x ) P(x_{i})=\sum_{x_{1}}\cdots\sum_{x_{i-1}} \sum_{x_{i+1}}\cdots \sum_{x_{p}}P(x) P(xi)=∑x1⋯∑xi−1∑xi+1⋯∑xpP(x)
条件概率: P ( x A ∣ x B ) , x = x A ∪ x B P(x_{A}|x_{B}),x=x_{A}\cup x_{B} P(xA∣xB),x=xA∪xB
M A P I n f e r e n c e : z ^ = a r g m a x z P ( z ∣ x ) ∝ a r g m a x z P ( z , x ) MAP\; Inference:\hat{z}=\underset{z}{argmax}P(z|x)\propto \underset{z}{argmax}P(z,x) MAPInference:z^=zargmaxP(z∣x)∝zargmaxP(z,x)
推断方法:
Variable Elimination(VE,变量消除法)(针对树结构);
Belief Propagation(BP,信念传播,Sum-Product Algo)(针对树结构);
Junction Tree Algorithm(针对图结构)
Loop Belief Propagation(针对有环图);
Mente Carlo Inference(例如Importance Sampling,MCMC);
Variational Inference
对于上述图结构,假如我们希望求边缘概率 P ( d ) P(d) P(d),我们就可以应用变量消除法:
P ( d ) = ∑ a , b , c P ( a , b , c , d ) = ∑ a , b , c P ( a ) P ( b ∣ a ) P ( c ∣ b ) P ( d ∣ c ) ⏟ 因 子 分 解 = ∑ b , c P ( c ∣ b ) P ( d ∣ c ) ∑ a P ( a ) P ( b ∣ a ) ⏟ ϕ a ( b ) = ∑ c P ( d ∣ c ) ∑ b P ( c ∣ b ) ϕ a ( b ) ⏟ ϕ b ( c ) = ∑ c P ( d ∣ c ) ϕ b ( c ) = ϕ c ( d ) P(d)=\sum _{a,b,c}P(a,b,c,d)\\ =\underset{因子分解}{\underbrace{\sum _{a,b,c}P(a)P(b|a)P(c|b)P(d|c)}}\\ =\sum _{b,c}P(c|b)P(d|c)\underset{\phi _{a}(b)}{\underbrace{\sum _{a}P(a)P(b|a)}}\\ =\sum _{c}P(d|c)\underset{\phi _{b}(c)}{\underbrace{\sum _{b}P(c|b)\phi _{a}(b)}}\\ =\sum _{c}P(d|c)\phi _{b}(c)\\ =\phi _{c}(d) P(d)=a,b,c∑P(a,b,c,d)=因子分解 a,b,c∑P(a)P(b∣a)P(c∣b)P(d∣c)=b,c∑P(c∣b)P(d∣c)ϕa(b) a∑P(a)P(b∣a)=c∑P(d∣c)ϕb(c) b∑P(c∣b)ϕa(b)=c∑P(d∣c)ϕb(c)=ϕc(d)
我们可以通过观察直接将 P ( d ) P(d) P(d)展开计算的形式来理解变量消除法的作用。首先我们假设 a , b , c , d a,b,c,d a,b,c,d都是离散的二值随机变量,只能取 0 0 0和 1 1 1两个值,然后直接将 P ( d ) P(d) P(d)展开:
P ( d ) = ∑ a , b , c P ( a , b , c , d ) = ∑ a , b , c P ( a ) P ( b ∣ a ) P ( c ∣ b ) P ( d ∣ c ) = P ( a = 0 ) P ( b = 0 ∣ a = 0 ) P ( c = 0 ∣ b = 0 ) P ( d ∣ c = 0 ) + P ( a = 0 ) P ( b = 0 ∣ a = 0 ) P ( c = 1 ∣ b = 0 ) P ( d ∣ c = 1 ) + P ( a = 0 ) P ( b = 1 ∣ a = 0 ) P ( c = 0 ∣ b = 1 ) P ( d ∣ c = 0 ) + P ( a = 0 ) P ( b = 1 ∣ a = 0 ) P ( c = 1 ∣ b = 1 ) P ( d ∣ c = 1 ) + P ( a = 1 ) P ( b = 0 ∣ a = 1 ) P ( c = 0 ∣ b = 0 ) P ( d ∣ c = 0 ) + P ( a = 1 ) P ( b = 0 ∣ a = 1 ) P ( c = 1 ∣ b = 0 ) P ( d ∣ c = 1 ) + P ( a = 1 ) P ( b = 1 ∣ a = 1 ) P ( c = 0 ∣ b = 1 ) P ( d ∣ c = 0 ) + P ( a = 1 ) P ( b = 1 ∣ a = 1 ) P ( c = 1 ∣ b = 1 ) P ( d ∣ c = 1 ) = 8 ⋅ 因 子 积 P(d)=\sum _{a,b,c}P(a,b,c,d)\\ =\sum _{a,b,c}P(a)P(b|a)P(c|b)P(d|c)\\ =P(a=0)P(b=0|a=0)P(c=0|b=0)P(d|c=0)\\ +P(a=0)P(b=0|a=0)P(c=1|b=0)P(d|c=1)\\ +P(a=0)P(b=1|a=0)P(c=0|b=1)P(d|c=0)\\ +P(a=0)P(b=1|a=0)P(c=1|b=1)P(d|c=1)\\ +P(a=1)P(b=0|a=1)P(c=0|b=0)P(d|c=0)\\ +P(a=1)P(b=0|a=1)P(c=1|b=0)P(d|c=1)\\ +P(a=1)P(b=1|a=1)P(c=0|b=1)P(d|c=0)\\ +P(a=1)P(b=1|a=1)P(c=1|b=1)P(d|c=1)\\ =8\cdot 因子积 P(d)=a,b,c∑P(a,b,c,d)=a,b,c∑P(a)P(b∣a)P(c∣b)P(d∣c)=P(a=0)P(b=0∣a=0)P(c=0∣b=0)P(d∣c=0)+P(a=0)P(b=0∣a=0)P(c=1∣b=0)P(d∣c=1)+P(a=0)P(b=1∣a=0)P(c=0∣b=1)P(d∣c=0)+P(a=0)P(b=1∣a=0)P(c=1∣b=1)P(d∣c=1)+P(a=1)P(b=0∣a=1)P(c=0∣b=0)P(d∣c=0)+P(a=1)P(b=0∣a=1)P(c=1∣b=0)P(d∣c=1)+P(a=1)P(b=1∣a=1)P(c=0∣b=1)P(d∣c=0)+P(a=1)P(b=1∣a=1)P(c=1∣b=1)P(d∣c=1)=8⋅因子积
如果直接计算上式中的每一项再加起来就会需要相当大的计算量,而且上式只是每个变量都是二值变量的情况下,如果每个变量能取更多的值就会有更大的计算量。变量消除法就是根据某些节点只与图中自己的邻接节点有关这一特性来简化计算,相当于应用了乘法分配律( a b + a c = a ( b + c ) ab+ac=a(b+c) ab+ac=a(b+c))来避免计算每一项在加起来。变量消除法在上式中的计算过程为:
P ( d ) = ( 将 与 a 有 关 的 放 到 一 起 ) = P ( c = 0 ∣ b = 0 ) P ( d ∣ c = 0 ) ⋅ P ( a = 0 ) P ( b = 0 ∣ a = 0 ) + P ( c = 1 ∣ b = 0 ) P ( d ∣ c = 1 ) ⋅ P ( a = 0 ) P ( b = 0 ∣ a = 0 ) + P ( c = 0 ∣ b = 1 ) P ( d ∣ c = 0 ) ⋅ P ( a = 0 ) P ( b = 1 ∣ a = 0 ) + P ( c = 1 ∣ b = 1 ) P ( d ∣ c = 1 ) ⋅ P ( a = 0 ) P ( b = 1 ∣ a = 0 ) + P ( c = 0 ∣ b = 0 ) P ( d ∣ c = 0 ) ⋅ P ( a = 1 ) P ( b = 0 ∣ a = 1 ) + P ( c = 1 ∣ b = 0 ) P ( d ∣ c = 1 ) ⋅ P ( a = 1 ) P ( b = 0 ∣ a = 1 ) + P ( c = 0 ∣ b = 1 ) P ( d ∣ c = 0 ) ⋅ P ( a = 1 ) P ( b = 1 ∣ a = 1 ) + P ( c = 1 ∣ b = 1 ) P ( d ∣ c = 1 ) ⋅ P ( a = 1 ) P ( b = 1 ∣ a = 1 ) ( 应 用 乘 法 分 配 律 ) = P ( c = 0 ∣ b = 0 ) P ( d ∣ c = 0 ) ⋅ ϕ a ( b = 0 ) + P ( c = 1 ∣ b = 0 ) P ( d ∣ c = 1 ) ⋅ ϕ a ( b = 0 ) + P ( c = 0 ∣ b = 1 ) P ( d ∣ c = 0 ) ⋅ ϕ a ( b = 1 ) + P ( c = 1 ∣ b = 1 ) P ( d ∣ c = 1 ) ⋅ ϕ a ( b = 1 ) ( 将 与 b 有 关 的 放 到 一 起 ) = P ( d ∣ c = 0 ) ⋅ P ( c = 0 ∣ b = 0 ) ϕ a ( b = 0 ) + P ( d ∣ c = 1 ) ⋅ P ( c = 1 ∣ b = 0 ) ϕ a ( b = 0 ) + P ( d ∣ c = 0 ) ⋅ P ( c = 0 ∣ b = 1 ) ϕ a ( b = 1 ) + P ( d ∣ c = 1 ) ⋅ P ( c = 1 ∣ b = 1 ) ϕ a ( b = 1 ) ( 应 用 乘 法 分 配 律 ) = P ( d ∣ c = 0 ) ⋅ ϕ b ( c = 0 ) + P ( d ∣ c = 1 ) ⋅ ϕ b ( c = 1 ) = ϕ c ( d ) P(d)=(将与a有关的放到一起)\\ ={\color{Red}{P(c=0|b=0)P(d|c=0)\cdot P(a=0)P(b=0|a=0)}}\\ +{\color{Green}{P(c=1|b=0)P(d|c=1)\cdot P(a=0)P(b=0|a=0)}}\\ +{\color{Blue}{P(c=0|b=1)P(d|c=0)\cdot P(a=0)P(b=1|a=0)}}\\ +{\color{Yellow}{P(c=1|b=1)P(d|c=1)\cdot P(a=0)P(b=1|a=0)}}\\ +{\color{Red}{P(c=0|b=0)P(d|c=0)\cdot P(a=1)P(b=0|a=1)}}\\ +{\color{Green}{P(c=1|b=0)P(d|c=1)\cdot P(a=1)P(b=0|a=1)}}\\ +{\color{Blue}{P(c=0|b=1)P(d|c=0)\cdot P(a=1)P(b=1|a=1)}}\\ +{\color{Yellow}{P(c=1|b=1)P(d|c=1)\cdot P(a=1)P(b=1|a=1)}}\\ (应用乘法分配律)\\ ={\color{Red}{P(c=0|b=0)P(d|c=0)\cdot \phi _{a}(b=0)}}\\ +{\color{Green}{P(c=1|b=0)P(d|c=1)\cdot \phi _{a}(b=0)}}\\ +{\color{Blue}{P(c=0|b=1)P(d|c=0)\cdot \phi _{a}(b=1)}}\\ +{\color{Yellow}{P(c=1|b=1)P(d|c=1)\cdot \phi _{a}(b=1)}}\\ (将与b有关的放到一起)\\ ={\color{Red}{P(d|c=0)\cdot P(c=0|b=0)\phi _{a}(b=0)}}\\ +{\color{Green}{P(d|c=1)\cdot P(c=1|b=0)\phi _{a}(b=0)}}\\ +{\color{Red}{P(d|c=0)\cdot P(c=0|b=1)\phi _{a}(b=1)}}\\ +{\color{Green}{P(d|c=1)\cdot P(c=1|b=1)\phi _{a}(b=1)}}\\ (应用乘法分配律)\\ ={\color{Red}{P(d|c=0)\cdot \phi _{b}(c=0)}}\\ +{\color{Green}{P(d|c=1)\cdot \phi _{b}(c=1)}}\\ =\phi _{c}(d) P(d)=(将与a有关的放到一起)=P(c=0∣b=0)P(d∣c=0)⋅P(a=0)P(b=0∣a=0)+P(c=1∣b=0)P(d∣c=1)⋅P(a=0)P(b=0∣a=0)+P(c=0∣b=1)P(d∣c=0)⋅P(a=0)P(b=1∣a=0)+P(c=1∣b=1)P(d∣c=1)⋅P(a=0)P(b=1∣a=0)+P(c=0∣b=0)P(d∣c=0)⋅P(a=1)P(b=0∣a=1)+P(c=1∣b=0)P(d∣c=1)⋅P(a=1)P(b=0∣a=1)+P(c=0∣b=1)P(d∣c=0)⋅P(a=1)P(b=1∣a=1)+P(c=1∣b=1)P(d∣c=1)⋅P(a=1)P(b=1∣a=1)(应用乘法分配律)=P(c=0∣b=0)P(d∣c=0)⋅ϕa(b=0)+P(c=1∣b=0)P(d∣c=1)⋅ϕa(b=0)+P(c=0∣b=1)P(d∣c=0)⋅ϕa(b=1)+P(c=1∣b=1)P(d∣c=1)⋅ϕa(b=1)(将与b有关的放到一起)=P(d∣c=0)⋅P(c=0∣b=0)ϕa(b=0)+P(d∣c=1)⋅P(c=1∣b=0)ϕa(b=0)+P(d∣c=0)⋅P(c=0∣b=1)ϕa(b=1)+P(d∣c=1)⋅P(c=1∣b=1)ϕa(b=1)(应用乘法分配律)=P(d∣c=0)⋅ϕb(c=0)+P(d∣c=1)⋅ϕb(c=1)=ϕc(d)
变量消除的缺点很明显:
①计算步骤⽆法存储:每次计算一个边缘概率就要重新计算一遍整个图;
②消除的最优次序是⼀个 N P − h a r d NP-hard NP−hard问题:对于复杂的图来说,想要找到一个最优的消除次序是困难的。
P ( a , b , c , d , e ) = P ( a ) P ( b ∣ a ) P ( c ∣ b ) P ( d ∣ c ) P ( e ∣ d ) P(a,b,c,d,e)=P(a)P(b|a)P(c|b)P(d|c)P(e|d) P(a,b,c,d,e)=P(a)P(b∣a)P(c∣b)P(d∣c)P(e∣d)
我们在计算 e e e的边缘概率时,使用变量消除法的步骤如下:
P ( e ) = ∑ a , b , c , d P ( a , b , c , d , e ) = ∑ a , b , c , d P ( a ) P ( b ∣ a ) P ( c ∣ b ) P ( d ∣ c ) P ( e ∣ d ) = ∑ d P ( e ∣ d ) ∑ c P ( d ∣ c ) ∑ b P ( c ∣ b ) ∑ a P ( b ∣ a ) P ( a ) ⏟ m a → b ( b ) ⏟ m b → c ( c ) ⏟ m c → d ( d ) ⏟ m d → e ( e ) P(e)=\sum_{a,b,c,d}P(a,b,c,d,e)\\ =\sum_{a,b,c,d}P(a)P(b|a)P(c|b)P(d|c)P(e|d)\\ =\underset{m_{d\rightarrow e}(e)}{\underbrace{\sum_{d}P(e|d)\underset{m_{c\rightarrow d}(d)}{\underbrace{\sum_{c}P(d|c)\underset{m_{b\rightarrow c}(c)}{\underbrace{\sum_{b}P(c|b)\underset{m_{a\rightarrow b}(b)}{\underbrace{\sum_{a}P(b|a)P(a)}}}}}}}} P(e)=a,b,c,d∑P(a,b,c,d,e)=a,b,c,d∑P(a)P(b∣a)P(c∣b)P(d∣c)P(e∣d)=md→e(e) d∑P(e∣d)mc→d(d) c∑P(d∣c)mb→c(c) b∑P(c∣b)ma→b(b) a∑P(b∣a)P(a)
我们在计算 c c c的边缘概率时,使用变量消除法的步骤如下:
P ( c ) = ∑ a , b , d , e P ( a , b , c , d , e ) = ∑ a , b , d , e P ( a ) P ( b ∣ a ) P ( c ∣ b ) P ( d ∣ c ) P ( e ∣ d ) = ( ∑ b P ( c ∣ b ) ∑ a P ( b ∣ a ) P ( a ) ) ⋅ ( ∑ c P ( d ∣ c ) ∑ d P ( e ∣ d ) ) P(c)=\sum_{a,b,d,e}P(a,b,c,d,e)\\ =\sum_{a,b,d,e}P(a)P(b|a)P(c|b)P(d|c)P(e|d)\\ =(\sum_{b}P(c|b)\sum_{a}P(b|a)P(a))\cdot (\sum_{c}P(d|c)\sum_{d}P(e|d)) P(c)=a,b,d,e∑P(a,b,c,d,e)=a,b,d,e∑P(a)P(b∣a)P(c∣b)P(d∣c)P(e∣d)=(b∑P(c∣b)a∑P(b∣a)P(a))⋅(c∑P(d∣c)d∑P(e∣d))
我们发现在计算 c c c的边缘概率时的前一部分与在计算 e e e的边缘概率时的一部分重复了,可以想象在求其他边缘概率的分布时也会有大量的重复,而Belief Propagation算法就是来解决这个问题。
上面我们一直计算的是有向图的马尔可夫链,现在我们将问题从链结构引申到树结构,从有向图引申到无向图(Belief Propagation只针对树状结构)。举例来说,有如下无向树:
现在我们知道该联合概率的因子分解可以写为:
P ( a , b , c , d ) = 1 Z ψ a ( a ) ψ b ( b ) ψ c ( c ) ψ d ( d ) ⋅ ψ a b ( a , b ) ψ b c ( b , c ) ψ b d ( b , d ) P(a,b,c,d)=\frac{1}{Z}\psi _{a}(a)\psi _{b}(b)\psi _{c}(c)\psi _{d}(d)\cdot \psi _{ab}(a,b) \psi _{bc}(b,c) \psi _{bd}(b,d) P(a,b,c,d)=Z1ψa(a)ψb(b)ψc(c)ψd(d)⋅ψab(a,b)ψbc(b,c)ψbd(b,d)
我们要求解边缘概率 P ( a ) P(a) P(a),也要应用到变量消除法,大体步骤是先消去 c c c和 d d d,然后再消去 b b b,该过程如下所示:
p ( a ) = ψ a ∑ b ψ b ⋅ ψ a b ( ∑ c ψ c ⋅ ψ b c ⏟ m c → b ( b ) ) ( ∑ d ψ d ⋅ ψ b d ⏟ m d → b ( b ) ) ⏟ m b → a ( a ) p(a)=\psi _{a}\underset{m_{b\rightarrow a}(a)}{\underbrace{\sum _{b}\psi _{b}\cdot \psi _{ab}(\underset{m_{c\rightarrow b}(b)}{\underbrace{\sum _{c}\psi _{c}\cdot \psi _{bc}}})(\underset{m_{d\rightarrow b}(b)}{\underbrace{\sum _{d}\psi _{d}\cdot \psi _{bd}}})}} p(a)=ψamb→a(a) b∑ψb⋅ψab(mc→b(b) c∑ψc⋅ψbc)(md→b(b) d∑ψd⋅ψbd)
我们可以看到求解的过程主要就是求以下两项(这里写得规范一些,比如 a a a写作 x a x_a xa):
{ m b → a ( x a ) = ∑ x b ψ a b ⋅ ψ b ⋅ m c → b ( x b ) ⋅ m d → b ( x b ) p ( x a ) = ψ a ⋅ m b → a ( x a ) \left\{\begin{matrix} m_{b\rightarrow a}(x_{a})=\sum _{x_{b}}\psi _{ab}\cdot \psi _{b}\cdot m_{c\rightarrow b}(x_{b})\cdot m_{d\rightarrow b}(x_{b})\\ p(x_{a})=\psi _{a}\cdot m_{b\rightarrow a}(x_{a}) \end{matrix}\right. { mb→a(xa)=∑xbψab⋅ψb⋅mc→b(xb)⋅md→b(xb)p(xa)=ψa⋅mb→a(xa)
现在我们可以将求解 x a x_{a} xa边缘概率的过程抽象出来得到求解 x i x_{i} xi边缘概率的过程:
{ m j → i ( x i ) = ∑ x j ψ i j ⋅ ψ j ⋅ ∏ k ∈ N e i g h b o r ( j ) − i m k → j ( x j ) p ( x i ) = ψ i ⋅ ∏ k ∈ N e i g h b o r ( j ) m k → i ( x i ) \left\{\begin{matrix} m_{j\rightarrow i}(x_{i})=\sum _{x_{j}}\psi _{ij}\cdot \psi _{j}\cdot \prod _{k\in Neighbor(j)-i}m_{k\rightarrow j}(x_{j})\\ p(x_{i})=\psi _{i}\cdot \prod _{k\in Neighbor(j)} m_{k\rightarrow i}(x_{i}) \end{matrix}\right. { mj→i(xi)=∑xjψij⋅ψj⋅∏k∈Neighbor(j)−imk→j(xj)p(xi)=ψi⋅∏k∈Neighbor(j)mk→i(xi)
我们可以继续观察求解 x i x_{i} xi边缘概率的公式,并对一些部分做一下定义:
{ m j → i ( x i ) = ∑ x j ψ i j ⋅ ψ j ⏟ s e l f ⋅ ∏ k ∈ N e i g h b o r ( j ) − i m k → j ( x j ) ⏟ c h i l d r e n ⏟ b e l i e f ( x j ) p ( x i ) = ψ i ⋅ ∏ k ∈ N e i g h b o r ( j ) m k → i ( x i ) \left\{\begin{matrix} m_{j\rightarrow i}(x_{i})=\sum _{x_{j}}\psi _{ij}\cdot\underset{belief(x_{j})}{ \underbrace{\underset{self}{\underbrace{\psi _{j}}}\cdot \underset{children}{\underbrace{\prod _{k\in Neighbor(j)-i}m_{k\rightarrow j}(x_{j})}}}}\\ p(x_{i})=\psi _{i}\cdot \prod _{k\in Neighbor(j)} m_{k\rightarrow i}(x_{i}) \end{matrix}\right. ⎩⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎧mj→i(xi)=∑xjψij⋅belief(xj) self ψj⋅children k∈Neighbor(j)−i∏mk→j(xj)p(xi)=ψi⋅∏k∈Neighbor(j)mk→i(xi)
因此求解 m j → i ( x i ) m_{j\rightarrow i}(x_{i}) mj→i(xi)需要两步:
{ b e l i e f ( x j ) = s e l f ⋅ c h i l d r e n m j → i ( x i ) = ∑ x j ψ i j ⋅ b e l i e f ( x j ) \left\{\begin{matrix} belief(x_{j})=self\cdot children\\ m_{j\rightarrow i}(x_{i})=\sum _{x_{j}}\psi _{ij}\cdot belief(x_{j}) \end{matrix}\right. { belief(xj)=self⋅childrenmj→i(xi)=∑xjψij⋅belief(xj)
可以想象,在求其他边缘概率时势必会有很多重复的消去过程,但是由于我们已经有了计算 m j → i ( x i ) m_{j\rightarrow i}(x_{i}) mj→i(xi)的通项,我们就可以利用这个公式来消除计算上的重复,而Belief Propagation算法正是利用了这个通项解决了这个问题。
Belief Propagation算法的思想是:
不要直接求 P ( a ) 、 P ( b ) 、 P ( c ) 、 P ( d ) P(a)、P(b)、P(c)、P(d) P(a)、P(b)、P(c)、P(d),只需求所有的 m j → i m_{j\rightarrow i} mj→i。
Belief Propagation算法首先求所有的信息传递(收集或分发)的过程得到所有的 m j → i m_{j\rightarrow i} mj→i(图的遍历),然后套用公式计算边缘概率,总的来说也就是 B P = V E + C a c h i n g BP=VE+Caching BP=VE+Caching。
Belief Propagation算法遍历图的一种方法(Sequential Implementation)如下:
for x i x_i xi in Neighbor(Root):
collectMsg( x i x_i xi)
for x i x_i xi in Neighbor(Root):
distributeMsg( x i x_i xi)
还有另外一种遍历的方法(Parellel Implementation),这是一种应用在分布式计算中的方法,可以并行计算。
事实上,信念传播算法分为Max-product和 Sum-product,上面讲的属于Sum-product,与Sum-product不同的是Max-product只需要将把求和符号换成求最大值 m a x max max的符号即可。
Max-product是 Sum-Product算法的改进,也是在HMM中应用到的 Viterbi算法的推⼴。
仍然拿上面这种图结构来举例,只画出了要求解的节点( a , b , c , d a,b,c,d a,b,c,d),其他节点( E E E)未画出。
Max-product的作用是用来求一个序列来使得后验概率最大,也就是:
( x a ∗ , x b ∗ , x c ∗ , x d ∗ ) = a r g m a x x a , x b , x c , x d P ( x a , x b , x c , x d ∣ E ) (x_{a}^{*},x_{b}^{*},x_{c}^{*},x_{d}^{*})=\underset{x_{a},x_{b},x_{c},x_{d}}{argmax}\; P(x_{a},x_{b},x_{c},x_{d}|E) (xa∗,xb∗,xc∗,xd∗)=xa,xb,xc,xdargmaxP(xa,xb,xc,xd∣E)
求解过程如下:
① m c → b = m a x x c ψ c ⋅ ψ b c ② m d → b = m a x x d ψ d ⋅ ψ b d ③ m b → a = m a x x b ψ b ⋅ ψ a b ⋅ m c → b ⋅ m d → b ④ m a x P ( x a , x b , x c , x d ) = m a x x a ψ a ⋅ m b → a ①\; m_{c\rightarrow b} =\underset{x_{c}}{max}\; \psi _{c}\cdot \psi _{bc}\\ ②\; m_{d\rightarrow b} =\underset{x_{d}}{max}\; \psi _{d}\cdot \psi _{bd}\\ ③\; m_{b\rightarrow a} =\underset{x_{b}}{max}\; \psi _{b}\cdot \psi _{ab}\cdot m_{c\rightarrow b}\cdot m_{d\rightarrow b}\\ ④\; max\; P(x_{a},x_{b},x_{c},x_{d})=\underset{x_{a}}{max}\; \psi _{a}\cdot m_{b\rightarrow a} ①mc→b=xcmaxψc⋅ψbc②md→b=xdmaxψd⋅ψbd③mb→a=xbmaxψb⋅ψab⋅mc→b⋅md→b④maxP(xa,xb,xc,xd)=xamaxψa⋅mb→a
与Sum-product不同的是,在求解 m a x P ( x a , x b , x c , x d ) max\; P(x_{a},x_{b},x_{c},x_{d}) maxP(xa,xb,xc,xd)这个过程中我们不需要求 m a → b 、 m b → c 、 m b → d m_{a\rightarrow b}、m_{b\rightarrow c}、m_{b\rightarrow d} ma→b、mb→c、mb→d,因为我们需要的是 m a x P ( x a , x b , x c , x d ) max\; P(x_{a},x_{b},x_{c},x_{d}) maxP(xa,xb,xc,xd)概率的值和 x a ∗ , x b ∗ , x c ∗ , x d ∗ x_{a}^{*},x_{b}^{*},x_{c}^{*},x_{d}^{*} xa∗,xb∗,xc∗,xd∗这个序列。
下一章传送门:白板推导系列笔记(十)-期望最大算法
参考文章
概率图模型-表示|机器学习推导