標籤:
除了精確推理之外,我們還有非精確推理的手段來對機率圖單個變數的分布進行求解。在很多情況下,機率圖無法簡化成團樹,或者簡化成團樹後單個團中隨機變數數目較多,會導致團樹標定的效率低下。以映像分割為例,如果每個像素的label都是隨機變數,則圖中會有30W個隨機變數(30W像素的小型相機)。且這30W個隨機變數相互之間耦合嚴重(4鄰接,多迴環),採用團樹演算法無法高效的獲得單個像素label的可能值。所以,在精確推理之外,我們使用非精確推理的手段對節點的機率分布進行估計。
1、Loopy 置信傳播
BP是精確推理中的概念,我們從root向leaf發射一次MESSAGE,再接受一次MESSAGE則可完成團樹的標定,這個過程稱為置信傳播。但是在多迴環的團樹,BP非常難執行,由於環的存在會導致某個節點一直無法出於可發射MESSAGE的狀態(此時的團樹不叫團樹,應該稱為“聚類圖”)。然而理論證明,如果我們預先給定一套訊息傳遞的順序,保證節點i -> j 傳播且僅傳播一次訊息,那麼訊息最終會收斂到某個定值。一旦訊息收斂到某個定值,則代表節點之間就某變數達成一致,我們獲得機率圖可行的分布。此時對聚類圖中的變數進行邊緣化,即可獲得有效單變數分布。
Loopy置信傳播有3項極其重要的工作:
1、保證節點之間僅傳播一次的傳播順序(此順序顯然不是唯一的)
2、擷取每次傳播後更新的訊息
3、判斷訊息最終收斂
1 List = []; 2 edges_ = P.edges; 3 for i = 1:length(P.clusterList) 4 j = find(edges_(i,:),8); 5 List = [List; j‘ linspace(i,i,length(j))‘]; 6 end 7 length_list = length(List); 8 array_ = mod(m,length_list)+1; 9 ij = List(array_,:);10 i = ij(1);11 j = ij(2);
View Code
1 length_c = length(P.clusterList); 2 for m = 1:length_c 3 if m ~= j&&P.edges(m,i)==1 4 Belief(i) = FactorProduct(Belief(i), lastMESSAGES(m, i)); 5 end 6 end 7 Belief(i).val = Belief(i).val/sum(Belief(i).val); 8 MESSAGES(i,j) = FactorMarginalization(Belief(i),setdiff(Belief(i).var,... 9 MESSAGES(i,j).var));10 MESSAGES(i,j).val = MESSAGES(i,j).val/sum(MESSAGES(i,j).val);
View Code
1 converged = true; 2 thresh = 1.0e-6; 3 %converged should be 1 if converged, 0 otherwise. 4 5 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6 % YOUR CODE HERE 7 % 8 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9 [a_,b_] = size(mNew);10 length_m = a_*b_;11 m_New_array = reshape(mNew,length_m,1);12 m_Old_array = reshape(mOld,length_m,1);13 for i = 1:length_m14 diff = m_New_array(i).val - m_Old_array(i).val;15 if max(abs(diff)) > thresh16 converged = false;17 return18 end19 end
View Code
如果訊息收斂,則我們可以得到聚類圖中各個Cluster的聯合分布,每個Cluster可能僅對應1~2個隨機變數,很容易就能求到所有隨機變數的分布。
2、MCMC
MCMC是馬爾科夫蒙特卡羅的縮寫。馬爾科夫指的是馬爾科夫鏈,蒙特卡羅指的是基於頻率的隨機變數分布推測方法。這裡值得注意的是雖然馬爾科夫鏈與馬爾科夫場裡面都有馬爾科夫,這兩樣東西卻是完全不同的。馬爾科夫鏈是描述採樣過程的一種模型,馬爾科夫場是機率圖模型。研究馬爾科夫場可以協助我們對隨機變數進行建模,研究馬爾科夫鏈可以協助我們更好的求解馬爾科夫場。對於馬爾科夫鏈而言,我們可以從任意一個狀態出發(一個狀態就是所有var的一個assignment),轉移到另一個狀態。而轉移到另一個狀態的機率由MRF決定。最終,各種狀態出現的次數則代表了assignment 對應的val.
2.1 吉布斯採樣
吉布斯採樣使用了非常樸素的概念,對於一個給定的assignment,如果此時更換var1的取值,則是轉向下一個狀態了。而var1本身的分布可能知道,但是與var1相關機率的聯合分布是由Cluster決定的。只要總結MRF中var1所有的資訊,並將上一個assignment作為”後驗“,那麼就可以求得var1”此時“的邊緣分布了。依據此邊緣分布決定一個var1的取值並更新assignment,就完成了採樣。
所以Gibbs採樣中有3個重要的地方:
1、求取與var1有關的分布
2、求取var1在先前assignment條件下的後驗分布
3、依據結果分布更新var1的值
1 var_array = 1:length(A); 2 EVDCE = [var_array‘ A‘]; 3 factorLists = G.var2factors(V); 4 for j = 1:length(factorLists) 5 factorList = factorLists{j}; 6 Distribution_= F(factorList(1)); 7 length_fList = length(factorList); 8 if length_fList>1 9 for i = 2:length_fList10 Distribution_ = FactorProduct(Distribution_,F(factorList(i)));11 end12 end13 end14 15 EVDCE_var = setdiff(Distribution_.var,V);16 EVDCE = EVDCE(EVDCE_var,:);17 target_var = ObserveEvidence(Distribution_,EVDCE);18 target_var = FactorMarginalization(target_var,setdiff(Distribution_.var,V));19 LogBS = target_var.val;20 LogBS = log(LogBS);View Code
randSample();
View Code2.2 Metropolis Hasting採樣
在吉布斯採樣中,存在陷入某個局部採樣迴圈的風險。簡而言之,如果var1,var2,var3具有很強的相關性,那麼在給定var2,var3的條件下,var1很難取到其他值。並且,初始條件很容易將Gibbs採樣陷入某個MC迴環中,使得其無法遍曆整個狀態空間。最終導致錯誤的結果。MH採樣與Gibbs採樣不同,MH一次對所有var的assignment進行更新,同樣是狀態轉移,顯然MH會轉移的更遠。關於MC,其要達到穩態,必須滿足穩態性質,定性而言:如果某個狀態發生的機率越高,則其轉移向其他機率的可能性必須很小,以保證很高的自轉移機率。
如果有兩個狀態s1,s2,如果我們強制從s1 --> s2,那麼必須決定從s1 --> s2的機率是多少。定性而言,如果s1 很難發生s2很容易發生,則這個轉移發生的機率應該比較高。如果兩者都很容易/很難發生,這個轉移發生的機率應該一般容易發生。如果s1很容易發生,則轉移會很難出現。依賴轉移穩定公式建模,則有此轉移發生的機率為:
式中:Q是計劃轉移的機率,pi是assignment發生的機率。A是接受機率。A的作用是對於任意Q,強制轉移符合穩定性質。這裡有兩樣東西是未知的:1、Q,2、A。相反pi是已知的。由於基於採樣的演算法是被用於映像分割等領域,var很多,card卻很小,和ORC正好相反。card小的好處是我們可以直接求取聯合分布,在依據聯合分布進行查詢,就可以獲得pi了。
*********************************************** Q的設計據說是一份值60W刀年薪的job,不敢妄議。這裡我們假設Q是給定的(uniform/SW) **********************************************
MH採樣的流程如下:
1、給定Assignment,依據F求pi(Assignment)
2、根據上面的公式計算接受機率A
3、決定是否接受,完成採樣更新Assignment
3.總結
基於團樹的精確推理演算法可以很好的完成樹狀結構聚類圖的推理,並且運行速度很快。對於多環的結構我們可以選擇LBP演算法以及基於採樣的演算法。LBP演算法的弱點是MESSAGE難以收斂,會耗費較長時間,但是其可以保證所有的Assignment都能被遍曆到。基於採樣的演算法同樣也會耗費一定的時間,但是這個時間是可控的,其決定於我們需要的迭代次數,對某些任務可以犧牲精度來換取迭代次數的減少。
至此,我們完成了所有推理相關工作的作業。然而這並不是完整的機率圖,在之前的學習中,我們都假設factor的val是已知的,這個val難道來自秋名山的神秘車牌?顯然不是的。它來自機器學習。
由於Coursera Honor Code,不再公布源碼。
機器學習 —— 機率圖模型(Homework: MCMC)