置信传播(Belief Propagation)与链式有向图模型前向后向算法——CVMLI Prince读书随笔第11章

这本书把置信传播算法讲的非常清楚。所以这里mark一下。以下阅读请先知道链式有向图前后向算法的原理。

前向后向算法

记链式有向图隐变量为w1....Nw_{1.... N},已知的观测值为x1...Nx_{1...N}.
其中,前向函数fn(wn)=P(x1...n,wn)f_n(w_n)=P(x_{1...n}, w_n),后向函数bn(wn)=P(xn+1...Nwn)b_n(w_n) = P(x_{n+1...N}|w_n). 进而:
P(wnx1...N)P(wn,x1...n)P(xxn+1...Nwn)=fn(wn)bn(wn) P(w_n|x_{1... N}) \propto P(w_n, x_{1...n})P(x_{x_{n+1...N}|w_n}) = f_n(w_n)b_n(w_n)

置信传播

前向后向算法是置信传播的一个特例,fn,bnf_n,b_n被视为传达关于变量信息。
和积算法是一种置信传播算法,可以很容易地从链式模型扩展到树模型。该算法在因子图上进行。因子图属于二部图(Bipartite Graph)。存在两类节点:

  • 变量节点zz,如wiw_i, xix_i
  • 函数节点gg ,如有向图中P(w1w2,w3)P(w_1|w_2, w_3)或无向图中ϕ(w1,w2,w3\phi(w_1, w_2, w_3

变量节点所代表的变量是函数节点的自变量。同类节点之间没有边直接相连。
和积算法分两个过程,前向过程通过图分发信息,后向过程对信息进行校验。每一条边准确连接到一个变量节点,“消息”在变量的域上定义。
有三种类型的消息:

  1. 从一个未观测变量zpz_p到一个函数节点gqg_q,消息为:
    mzpgq=rne[p]\qmgrzp(1) m_{z_p \rightarrow g_q} = \prod_{r \in ne[p] \backslash q} m_{g_r \rightarrow z_p} \tag{1}
    其中ne[p]ne[p]zpz_p的邻居节点集合。
    从未观测变量传到函数的消息是该变量的所有其他邻居传来消息的点乘,是其他置信度的组合。

  2. 从一个已观测变量zp=zpz_p=z_p^*到一个函数节点gqg_q,消息为:
    mzpgq=δ(zp)(2) m_{z_p \rightarrow g_q} = \delta(z_p^*) \tag{2}
    从观测变量到函数的消息是该变量观测值的置信度。

  3. 从函数节点gpg_p到接收变量zqz_q,消息为:
    mgpzq=ne[p]\qgp(ne[p])rne[p]\qmzrgp(3) m_{g_p \rightarrow z_q} = \sum_{ne[p] \backslash q}g_p(ne[p]) \prod_{r\in ne[p] \backslash q}m_{z_r \rightarrow g_p} \tag{3}
    需要该函数节点的其他邻居节点传来的置信度,并用函数gpg_p转换为zqz_q的置信度

最后,节点zpz_p的边缘分布可用所有同时从前向过程和后向过程传入的消息乘积
P(zp)rne[p]mgrzp(4) P(z_p) \propto \prod_{r \in ne[p]} m_{g_r \rightarrow z_p} \tag{4}

链式有向图

置信传播(Belief Propagation)与链式有向图模型前向后向算法——CVMLI Prince读书随笔第11章

前向过程

置信传播(Belief Propagation)与链式有向图模型前向后向算法——CVMLI Prince读书随笔第11章

  • 对于mx1g1m_{x_1\rightarrow g_1},使用规则2
    mx1g1=δ(x1) m_{x_1\rightarrow g_1} = \delta (x_1^*)
  • 对于mg1w1m_{g_1\rightarrow w_1},使用规则3
    mg1w1=P(x1w1)δ(x1)dx1=P(x1=x1w1) m_{g_1\rightarrow w_1}=\int P(x_1|w_1)\delta(x_1^*) dx_1 = P(x_1 = x_1^*|w_1)
  • 对于mw1g1,2m_{w_1\rightarrow g_{1,2}},使用规则1
    mw1g1,2=P(x1=x1w1) m_{w_1\rightarrow g_{1,2}} = P(x_1=x_1^*|w_1)
  • 对于mg1,2w2m_{g_{1,2}\rightarrow w_{2}},使用规则3
    mg1,2w2=w1P(w2w1)P(x1=x1w1) m_{g_{1,2}\rightarrow w_{2}}=\sum_{w_1} P(w_2|w_1)P(x_1 = x_1^*|w_1)

对于mx2g2m_{x_2\rightarrow g_2}mg2w2m_{g_2\rightarrow w_2}与上述第1、2条类似

  • 对于mw2g2,3m_{w_2 \rightarrow g_{2, 3}},使用规则1
    mw2g2,3=P(x2=x2w2)w1P(w2w1)P(x1=x1w1) m_{w_2 \rightarrow g_{2, 3}}=P(x_2=x_2^*|w_2)\sum_{w_1} P(w_2|w_1)P(x_1=x_1^*|w_1)
    注意,mwngn,n+1m_{w_n \rightarrow g_{n, n+1}}fn(wn)=P(x1...n,wn)f_n(w_n)=P(x_{1...n, w_n})

反向过程

mwNgN,N1=P(xN=xNwN) m_{w_N \rightarrow g_{N, N-1}}=P(x_N=x_N^*|w_N)
mgN,N1wN1=wNP(wNwN1)P(xN=xNwN) m_{g_{N, N-1} \rightarrow w_{N-1}}=\sum_{w_N} P(w_N|w_{N-1})P(x_N = x_N^*|w_N)
通常情况下有
mgn,n1wn1=wnP(wnwn1)P(xnwn)mgn+1,nwn=bn1(wn1) m_{g_{n, n-1}\rightarrow w_{n-1}}=\sum_{w_n} P(w_n|w_{n-1})P(x_n|w_n)m_{g_{n+1,n} \rightarrow w_n} =b_{n-1}(w_{n-1})

计算边缘

利用式(4),
P(wnx1...N)mne[n]mgmwn=mgn1,nwnmgnwnmgn,n+1wn=mwngn,n+1mgn,n+1wn=fn(wn)bn(wn) \begin{aligned} P(w_n|x_{1...N}) & \propto \prod_{m \in ne[n]} m_{g_m \rightarrow w_n} \\ &=m_{g_{n-1, n}\rightarrow w_n} m_{g_{n}\rightarrow w_n}m_{g_{n, n+1}\rightarrow w_n} \\ &=m_{w_{n}\rightarrow g_{n, n+1}}m_{g_{n, n+1}\rightarrow w_n} \\ &= f_n(w_n)b_n(w_n) \end{aligned}
上式第3行利用了规则1。

树模型

置信传播(Belief Propagation)与链式有向图模型前向后向算法——CVMLI Prince读书随笔第11章
对于该树模型,注意w2,w4,w5w_2, w_4, w_5之间的关系。
置信传播(Belief Propagation)与链式有向图模型前向后向算法——CVMLI Prince读书随笔第11章

无向图

置信传播(Belief Propagation)与链式有向图模型前向后向算法——CVMLI Prince读书随笔第11章