一個小的UGM的Demo

翻譯自【https://www.cs.ubc.ca/~schmidtm/Software/UGM/small.html】

在這個demo中,我們使用一個非常簡單的無向圖模型(UGM)來表示一個簡單的概率場景,來說明怎樣把模型應用於無向圖中,怎樣在模型裏實現解碼,推理以及採樣。

學生作弊案

這裏有四個學生需要做兩場多項選擇的測試,Cathy,Heather,Mark和Allison。第一場測試中,四名學生被分在了不同的房間。由於Heather和Alllison平時學習認真,因此在這場測試中獲得了90%的正確率;而學習不認真的Cathy和Mark則只有25%的準確率。

我們可以假設,學生答對某個題目的概率是和該題無關的(學生答題準確率並非因爲題目難度不同,Allison和Heather也並沒有因爲平時總是一起學習而犯下相同的錯誤)。如果我們假設在該情況下有100道獨立的題目,那麼結果有可能如下所示:

這裏每一行代表一個題目,每一列代表學生中的某一個,從左到右順序分別是Cathy(1),Heather(2),Mark(3)和Allison(4)。藍色表示答案正確,紅色表示答案錯誤。

在第二場考試中,這四名學生被分到了同一個考場。座位順序爲Cathy-Heather-Mark-Allison,相鄰的學生之間可以看到彼此的答案。Cathy和Mark認爲Allison和Heather認真準備了該廠考試(確實如此),Allison和Heather認爲Cathy和Mark也認真學習了(實際上並沒有),因此,每個人都認爲身邊的同學的答案都可能是正確的。下面是我們爲該模型構建的圖:
在這裏插入圖片描述
由於每個人都可以看見自己臨近同學的答案,並且認爲該答案包含了一些和該問題相關的信息,因此,該學生的答案不再獨立,有了依賴。世界死啊好難過,所有學生的答案都是相互依賴的。儘管Mark和Cathy並不相鄰,但是由於他們都坐在Heather附近,因此他們的答案也是相互歷來的,因此在圖中存在這一條連接這兩個節點的路徑。在UGMs中,我們說,如果兩個節點中存在一條路徑,那麼這兩個變量就是互相依賴的。因此在當前問題中(實際上在很多實際應用中),沒有變量是獨立的。

但是,儘管沒有一個變量是獨立的,但是問題中仍然存在條件獨立性。比如,如果我們知道了Heather的答案作爲給定條件,那麼Mark和Cathy的答案會獨立於這個給定的信息。在UGMs中,如果我們移除了某個條件變量之後這兩個變量互相獨立,那麼我們說兩個變量是條件獨立的。在當前問題中,我們移除了Heather這個節點之後,Mark和Cathy之間就再無關聯了。

成對的無向圖模型

考慮到上文所述依賴和條件依賴,我們使用成對的UGM構建一個模型。

在成對的UGMs中,對於某個特定任務中的所有變量xi的聯合概率可以使用一組非負勢函數的歸一化乘積來表示如下:
在這裏插入圖片描述
對於每一個節點i,和每一條邊e,都有一個勢函數。在該例中,節點表示獨立的學生(‘Cathy’,‘Heather’,‘Mark’,‘Allison’),在相鄰節點之間則定義了邊連接(‘Cathy-Heather’,‘Heather-Mark’,‘Mark-Allison’)。注意,這裏僅在有直接連接的節點之間設置了邊,通過中間變量進行連接的節點之間沒有邊連接。

節點勢函數ϕi\phi_{i},對於每一個隨機變量XiX_i的可能值都給出了一個非負的權值。比如我們可以設定ϕi(wrong)=0.75\phi_{i}('wrong')=0.75ϕi(right)=0.25\phi_{i}('right')=0.25,這表示節點1爲‘wrong’的狀態的相比於爲‘right’的狀態有着更高的勢。同樣,邊勢函數ϕe\phi_e給出了對於邊XejX_{e_j}XekX_{e_k}的所有組合的非負權重。比如在上述案例中,相鄰的學生之間有着更高的可能性會給出相同的答案,因此,當XejX_{e_j}XekX_{e_k}相同時我們會給出該邊更大的勢。

歸一化常數項ZZ是個標量值,使得該聯合概率分佈和爲1,即

該歸一化常數項保證了模型定義了一個有效的概率分佈。

給定了圖結構和勢,UGM包含了三個任務的函數:
1.Decoding解碼:找到有着最高概率的變量聯合配置
2.Inference推理:計算歸一化項ZZ,以及每種狀態下每個變量的概率
3.Sampling採樣:根據概率分佈生成每個變量的聯合配置

UGM同樣也包括了參數

估計函數,計算勢的任務能夠最大化數據集的似然。後面的demo中會對其進行介紹,本demo中我們假設勢函數已經給定。

邊結構

在使用任何UGM姐都的第一步都是定義邊結構,因爲邊結構保存了圖結構的信息。爲了生成邊結構,我們簡單將該函數命名爲UGM_makeEdgeStruct,有兩個參數:鄰接矩陣以及每個變量的狀態數。在該案例中,我們有4個節點,每個節點有兩種狀態(‘right’和’wrong’)。鄰接矩陣爲對稱矩陣,如果節點i和節點j之間有連接的話,那麼矩陣中的元素(i,j)值置爲1。在Matlab裏,我們定義邊緣結構如下:

//construct the edgeStruct
nNodes = 4;
nStates = 2;
adj = zeros(nNodes,nNodes);
adj(1,2) = 1;
adj(2,1) = 1;
adj(2,3) = 1;
adj(3,2) = 1;
adj(3,4) = 1;
adj(4,3) = 1;
edgeStruct = UGM_makeEdgeStruct(adj,nStates);

edgeStruct的定義是爲了解決以下三個問題:
1.通過edgeStruct.nStates查找一個節點的關聯狀態數
2.通過edgeStruct.edgeEnds查找一條邊關聯的所有節點
3.通過UGM_getEdges查找一個節點關聯的所有邊
edgeStruct.nStates是一個簡單矢量,用於表示每個節點的狀態數。在該案例中,該矢量表示爲:

//狀態矢量
edgeStruct.nStates
ans =
    2
    2
    2
    2

即每個節點都有兩種狀態。

edgeStruct.edgeEnds矩陣是一個邊數x2的矩陣,每一行給出了每條邊的兩個節點。在該案例中,該矩陣表示如下:

edgeStruct.edgeEnds
ans =
     1     2
     2     3
     3     4

指定邊2,可以獲得與其相關的節點,即

edge = 2;
edgeStruct.edgeEnds(edge,:)
ans =
     2     3

函數UGM_getEdges使用edgeStruct.V 和edgeStruct.E矢量指針來快速實現相反操作。即我們可以根據給定節點來找到與其相連的邊:

n = 3;
edges = UGM_getEdges(n,edgeStruct)
edges =
     2
     3

由上述說明,我們可以使用下述操作來獲得某個節點的相鄰節點:

nodes = edgeStruct.edgeEnds(edges,:);
nodes(nodes ~= n)
ans =
     2
     4

上述說明和節點3相鄰的節點是2和4。

nodePot

在無向圖模型中,節點勢是存儲在一個nNodes x nStates的矩陣中的,該矩陣叫做nodePot。

edgePot

UGM代碼中使用一個nStates x nStates的矩陣來表示邊勢函數,該矩陣叫做edgePot。對於每條邊,edgePot給出了一個nStates x nStates的表格來說明兩個節點的狀態混合表示。在該案例中,我們認爲相鄰的兩個節點有着相同狀態的勢是不同狀態的勢的兩倍,如下:

n1\n2 right wrong
right 2/6 1/6
wrong 1/6 1/6

和節點勢類似,我們可以對其進行全局歸一化,將其寫爲如下形式:

maxState = max(edgeStruct.nStates);
edgePot = zeros(maxState,maxState,edgeStruct.nEdges);
for e = 1:edgeStruct.nEdges
   edgePot(:,:,e) = [2 1 ; 1 2]; 
end

Decoding

decoding任務是找到最有可能的配置。
對應於表格中的prodPot列裏最大的值。即根據幾個勢能夠得到的具有最大概率的節點狀態排列。這個最大概率是通過對於所有排列進行歸一化計算所得的。

Inference

inference任務則是找到歸一化常量Z,以及獨立節點爲某個獨立狀態時的邊界概率。

比如,我們這裏定義一個inference任務爲計算Mark得到正確答案的頻率(how often)?第一次測試中,這個數值爲25%。在第二次測試中,我們將所有Mark答案正確的排列的prodPot值相加然後除以Z來進行歸一化。這裏得到的值爲0.49/因此,Mark在測試2中得到正確答案的概率是測試1中的將近2倍。Cathy也一樣,她的邊界概率增長到0.36。她沒能達到和Mark一樣大的增長是因爲她只有一個學霸鄰居,同理,Allison和Heather的邊界概率均有所下降。

這裏我們需要理解decoding和inference的區別。在decoding的計算中,四人最可能的答案排列中,Mark是得到了正確的答案,但是,在inference中,我們知道,Mark是有51%的概率出錯的。這說明,最可能的結果排列可能並不總是和最可能出現的狀態一致的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章