大师兄的贝叶斯网络学习笔记(十八):贝叶斯网络与概率推理(一)
二、变量消元算法
- 本节揭示为什么联合分布的分解可以降低概率推理复杂性的原理,并给出一个计算后验概率
的基本算法,即变量消元算法(variable elimination)。
1. 概率分布的分解与推理复杂度
-
概率分布的分解与推理复杂度
- 以上图为例,考虑计算
,有
。
- 假设所有变量均为二值,而且乘法按顺序进行,上式的运算复杂如下:
- P(A)与P(B|A)相乘需要4次乘法
- 其结果与P(C|B)相乘需要8次乘法
- 结果再与P(D|C)相乘需要16次乘法
- 共计28次乘法。
- 另外加法供需14次。
- 为了利用联合分布的分解来降低推理的计算复杂度,可以注意到在右边的4个因子中,只有P(A)和P(B|A)与变量A相关,而与B相关的因子只有P(C|B)和P(B|A)。
- 因此有
。
- 其中P(A)与P(B|A)相乘需要4次乘法,边缘化消去A需要做2次乘法
- 这一步与P(C|B)相乘需要做4次乘法,然后消去B需要做2次加法
- 其结果再与P(D|C)相乘需要做4次乘法,然后消去C需要做2次加法
- 计算乘法总数为12,而加法为6,复杂度更低。
- 联合分布的分解之所以能够降低推理的复杂度,主要是因为它使运算可以局部化。
- 在前面的式子中,消去A涉及所有变量:A、B、C、D,因此复杂度高。
- 而后面的式子消去A只涉及它自身以及与他直接相连的变量B,因此复杂度低。
- 在上面的例子中,运算局部化节省了大约一半的预算量。在变量众多的网络中,节省可能是指数级的。
- 后式本身可以改写为如下算法形式:
- 设F是贝叶斯网络中所有概率分布的集合,即:
![]()
- 从F中删去所有含变量A的函数P(A)和P(B|A),并生成一个新函数
![]()
- 然后将其加入F,得到
![]()
- 从F中删去所有含变量B的函数
和
,并生成新函数
![]()
- 将其加入F,得到
![]()
- 从F中删去所有含变量C的函数
和
,并生成新函数
![]()
- 返回
,正是P(D)。
- 在第2步之后,变量A不再在F的函数中出现,所以可以说,它在第2步中被消去,而A被消去的过程称为消元。
