概率的推断就是计算 conditional 和 marginal,之前我们学习了 exact inference 也就是准确的推断概率图概率,我们学习message passing 算法、sum-product、
inference is answer a query
Approximate inference 就是对于 inference 的一个数值估计,不一定最后的结果要在 0-1 之内
Exact Inference Revisit
Sum-Product
Factor Graph
Junction Tree
在 Junction Tree 中 local Consistency 等价于 global Consistency
Loopy Belief Propagation
Junction Tree 虽然可以处理所有的 graph,但是只适用于树形结构,在密集结构中用 Junction Tree 复杂度依然会比较高,假设树变成了 gird,我们不打算用 Junction Tree 算法来计算出这个图的 inference 的精确解。
LBP : The Algorithm
我们在这个图上运行直接做 Belief Propagation,在树形结构上,Belief Propagation 只要来回传递两次就能够得到精确解了,但是在这个图上,我们需要多次的运行 BP ,最终可能会收敛,也有可能会呈现出周期性的数值变化,也就是不收敛。
一般来讲好的 近似可以通过以下的方式
- 在固定的迭代次数后停止
- 如果结果没有明显变化,就停止
- 如果在数值上没有震荡,并且收敛了,那么通常就是接近真实了
LBP : The Bethe Approximation
我们对于 LBP 算法的正确性做一个分析:
一般来讲,真实的分布 P 是这样子的:
但是这种分布的计算很困难($f_a 是 factor graph 的算子$)。。
于是我们转向另一个分布 Q ,在后面,Q 是我们近似得到的分布,我们希望来评价 Q,也就是 Q 和 P 的相似度,对于某一事件不同概率的衡量,最常用的就是相对熵 KL Divergence :
相对熵是来衡量两个取值为正的函数或者概率分布之间的差异的,有以下的特性:
- $KL(Q\Vert P) \geq 0$
- $KL(Q\Vert P) = 0$ iff $Q=P$
相对熵还可以写成 信息熵 减去 交叉熵:
我们把真实分布带入到 $P(X)$ 中,可以得到:
我们定义一下 free-energy 为前两项:
对于 Energy Functional:
- $\sum_{f_a \in F} E_Q log f_a(X_a)$ 的计算比较方便。。。
- $H_Q$ 的计算会比较复杂,因为我们需要遍历所有 $X$ 的取值再做计算
-
树形结构的 Energy Functional Tree 是有 closed-forms,也就是说某些 energy functional 是好可以计算的
当因子图树一颗树的时候 Bathe Approximation 和 Gibbs free energy 是等价的
我们用一张图来说明一下推导的流程
- 首先我们将原图转化成因子图,可以得出图的分布的表示
- 我们假设一种分布和原分布进行比较,得出和原分布之间的 energy function
- 我们定义这种近似分布为 bathe approximation,这个分布只和 $b_a$ 和 $b_i$ 相关
- 我们对 bathe 的 energy function 进行优化,从而得到 $b_a$ 和 $b_i$ 的更新值
- $b_a$ 和 $b_i$ 优化的方式引入到图里面就是在做 BP !
用 Bathe 来近似原分布相当于在图上做 BP
每一种假设的近似分布都对应这一种更新策略
我们先来考虑图 (a) 树形的结构,树形结构的概率图都可以转换成树形结构的因子图,树形结构的因子图的概率可以写成
- $d_i$: degree of point i
- $b_a$: doubleton (pairwise) factor
- $b_i$: singleton factor
我们会对图 (b) 也使用 $b(\mathbf{x})$ 来近似计算概率,这种近似称为 bethe approximation,若 bethe 近似和 gibbs 分布完全相等,当且仅当因子图是树形的
下面,我们来求这两个图的 free energy 并进行优化,来求解近似分布 b 从而得到 b 的更新策略,而后要用来从数值优化的形式转化到结构上
a
$H_{tree}$ 是分布 $b(\mathbf{x})$ 的信息熵,H 的形式应该是根据连续变量的信息熵公式得出的
b
free energy 公式想要进行优化,还要有一些约束:
- $\sum_{\mathbf{x}_a} b_a(\mathbf{x}_a) = 1$
- $\sum_i b_i(x_i) = 1$
- $\sum_{\mathbf{x}_a \setminus x_i} b_a(\mathbf{x}_a) = b_i(x_i)$
最终的优化目标函数变为了:
对目标函数求导得到
上面的 $\lambda_{ai}$ 可以替换成:
.