这本书把置信传播算法讲的非常清楚。所以这里mark一下。以下阅读请先知道链式有向图前后向算法的原理。
前向后向算法
记链式有向图隐变量为w1....N,已知的观测值为x1...N.
其中,前向函数fn(wn)=P(x1...n,wn),后向函数bn(wn)=P(xn+1...N∣wn). 进而:
P(wn∣x1...N)∝P(wn,x1...n)P(xxn+1...N∣wn)=fn(wn)bn(wn)
置信传播
前向后向算法是置信传播的一个特例,fn,bn被视为传达关于变量信息。
和积算法是一种置信传播算法,可以很容易地从链式模型扩展到树模型。该算法在因子图上进行。因子图属于二部图(Bipartite Graph)。存在两类节点:
- 变量节点z,如wi, xi
- 函数节点g ,如有向图中P(w1∣w2,w3)或无向图中ϕ(w1,w2,w3
变量节点所代表的变量是函数节点的自变量。同类节点之间没有边直接相连。
和积算法分两个过程,前向过程通过图分发信息,后向过程对信息进行校验。每一条边准确连接到一个变量节点,“消息”在变量的域上定义。
有三种类型的消息:
-
从一个未观测变量zp到一个函数节点gq,消息为:
mzp→gq=r∈ne[p]\q∏mgr→zp(1)
其中ne[p]是zp的邻居节点集合。
从未观测变量传到函数的消息是该变量的所有其他邻居传来消息的点乘,是其他置信度的组合。
-
从一个已观测变量zp=zp∗到一个函数节点gq,消息为:
mzp→gq=δ(zp∗)(2)
从观测变量到函数的消息是该变量观测值的置信度。
-
从函数节点gp到接收变量zq,消息为:
mgp→zq=ne[p]\q∑gp(ne[p])r∈ne[p]\q∏mzr→gp(3)
需要该函数节点的其他邻居节点传来的置信度,并用函数gp转换为zq的置信度
最后,节点zp的边缘分布可用所有同时从前向过程和后向过程传入的消息乘积
P(zp)∝r∈ne[p]∏mgr→zp(4)
链式有向图

前向过程

- 对于mx1→g1,使用规则2
mx1→g1=δ(x1∗)
- 对于mg1→w1,使用规则3
mg1→w1=∫P(x1∣w1)δ(x1∗)dx1=P(x1=x1∗∣w1)
- 对于mw1→g1,2,使用规则1
mw1→g1,2=P(x1=x1∗∣w1)
- 对于mg1,2→w2,使用规则3
mg1,2→w2=w1∑P(w2∣w1)P(x1=x1∗∣w1)
对于mx2→g2和mg2→w2与上述第1、2条类似
- 对于mw2→g2,3,使用规则1
mw2→g2,3=P(x2=x2∗∣w2)w1∑P(w2∣w1)P(x1=x1∗∣w1)
注意,mwn→gn,n+1即fn(wn)=P(x1...n,wn)
反向过程
mwN→gN,N−1=P(xN=xN∗∣wN)
mgN,N−1→wN−1=wN∑P(wN∣wN−1)P(xN=xN∗∣wN)
通常情况下有
mgn,n−1→wn−1=wn∑P(wn∣wn−1)P(xn∣wn)mgn+1,n→wn=bn−1(wn−1)
计算边缘
利用式(4),
P(wn∣x1...N)∝m∈ne[n]∏mgm→wn=mgn−1,n→wnmgn→wnmgn,n+1→wn=mwn→gn,n+1mgn,n+1→wn=fn(wn)bn(wn)
上式第3行利用了规则1。
树模型

对于该树模型,注意w2,w4,w5之间的关系。

无向图
