在之前的消息傳遞算法中,談到了聚類圖模型的一些性質。其中就有消息不能形成閉環,否則會導致“假消息傳到最后我自己都信了”。為了解決這種問題,引入了一種稱為團樹(clique tree)的數據結構,樹模型沒有圖模型中的環,所以此模型要比圖模型更健壯,更容易收斂。
1.團樹模型
鏈模型是一種最簡單的樹模型,其結構如下圖所示,假設信息從最左端傳入則有以下式子。
假設要對變量 CD 進行推斷,則應該求 Belief(3) = deta 2->3 *deta 4->3 * phi(3).
從這里可以看出,團樹算法是一種精確推斷算法。它和變量消除算法在理論推導上是等價的。
上面的例子只是一種非常簡單的團樹,團樹的本質還是聚類圖,只不過是一種特殊的聚類圖。對於更一般的概率圖,也可以生成團樹圖。
其中,每個cluster都是變量消除誘導圖中的一個最小map。
2.團樹模型的計算
從上面分析可知,團樹模型本質上和變量消除算法還有說不清道不明的關系(團樹模型也是精確推理模型)。但是這個算法的優勢在於,它可以利用消息傳遞機制達到收斂。之前提過,聚類圖模型中的收斂指的是消息不變。除此之外,聚類圖的本質是一種數據結構,它可以儲存很多中間計算結果。如果我們有很多變量 ABCDEF,那么我們想知道P(A),則需要執行一次變量消除。如果要計算P(B)又要執行一次變量消除。如果中途得到了某個變量的觀測,又會對算法全局產生影響。但是使用團樹模型可以巧妙的避免這些問題。
首先,一旦模型迭代收斂之后。所有的消息都是不變的,每個消息都是可以被讀取的。
每個團的belief,實際上就是未歸一划的聯合概率,要算單個變量的概率,只需要把其他的變量邊際掉就行。這樣一來,只需要一次迭代收斂,每個變量的概率都是可算的。並且算起來方便。
其次,如果對模型引入先驗知識比如 A = a 時, 我們需要對 D 的概率進行估計。按照變量消除的思路又要從頭來一次。但是如果使用團樹結構則不用,因為 A的取值只影響 deta1->2以及左向傳遞的消息,對右向傳遞的消息則毫無影響,可以保留原先對右向傳遞消息的計算值,只重新計算左向傳遞結果即可。
總而言之,使用團樹算法相對於變量消除算法,可以大幅降低計算規模,也便於對任意一個隨機變量進行查詢。
3.團樹算法與獨立性
聚類圖是由概率圖分析得到的。同樣,聚類圖中也繼承了概率圖在獨立性方面的某些特性。團樹圖有以下性質:
如果能觀測到edge上的變量,則edge兩端的變量的獨立的。
顯然,如果給定 GS , CDI 與 HJL 就是獨立的。
4.團樹算法與VE算法的聯系
之前提到團樹算法和VE算法都是精確推理的算法。本質上他們之間存在對應關系。
1.團樹傳遞的消息實際上是兩個cluster之間共同變量。從1 - > 2 消除了1 中2 不包含的變量。這與VE算法中把 勢函數邊際成 τ 是一樣的。也就是說 deta ---> tau.
2.團樹的cluster 是多個 phi相乘得到的。多個phi相乘是VE算法構造初始的因子相乘。
利用團樹算法和VE算法之間的關系,我們可以利用模擬VE算法運行,來生成團樹圖。也就是說,假設我在執行VE算法(順序由概率圖決定),用VE算法生成團樹圖,再利用團樹結構簡化VE的計算,最終達到變量推斷的目的。圖中顯示了一個簡單的例子。
5.實際置信傳播算法的操作
在之前的分析中,我們已經得到了消息傳遞算法的性質,執行機制等。但是如果把它編程成代碼的時候,我們會遇到以下幾個問題:
1.如果cluster很多,我每次只傳遞一條消息,那么大部分節點都處於無所事事狀態,這樣好么
2.迭代一定次數以后一定會收斂嗎
3.收斂了結果一定對嗎
4.怎樣才能盡可能收斂
針對第一個問題,計算機科學家采用的往往是並行消息傳遞,並行消息傳遞又分同時傳遞與非對稱傳遞(主要針對網格聚類圖),結果是非同時傳遞的效果往往更好。此外,還可以在圖中選出一棵團樹,盡量在這棵團樹上達到收斂,以保證盡可能多的節點收斂。本身只有形成環的時候才會不收斂。
第二個問題,是不是一定會收斂,答案是不是的,奇怪的是有些消息會收斂,有些消息卻不會。實際上在傳遞的過程中,有些消息已經達成平衡,在平衡狀態下和其他不收斂的消息解耦了。此外,消息傳遞順序對收斂性影響也很大。
第三個問題,結果不一定對。本來這就是蒙特卡洛算法,不能保證一定收斂到正確值。
第四個問題,增加阻尼可以增加收斂的可能性,簡而言之,就是把之前的值考慮進去,讓下一個值和之前的值盡可能靠近。把新的值”拖住“。