1. 程式人生 > >概率圖模型(PGM):貝葉斯網(Bayesian network)初探

概率圖模型(PGM):貝葉斯網(Bayesian network)初探

1. 從貝葉斯方法(思想)說起 - 我對世界的看法隨世界變化而隨時變化

用一句話概括貝葉斯方法創始人Thomas Bayes的觀點就是:任何時候,我對世界總有一個主觀的先驗判斷,但是這個判斷會隨著世界的真實變化而隨機修正,我對世界永遠保持開放的態度。

1763年,民間科學家Thomas Bayes發表了一篇名為《An essay towards solving a problem in the doctrine of chances》的論文,

這篇論文發表後,在當時並未產生多少影響,但是在20世紀後,這篇論文逐漸被人們所重視。人們逐漸發現,貝葉斯方法既符合人們日常生活的思考方式,也符合人們認識自然的規律,經過不斷的發展,最終佔據統計學領域的半壁江山,與經典統計學分庭抗禮。

讓我們暫時回到Thomas Bayes所處的學術時代18世紀,來一起體會下貝葉斯的思想。

當時數理統計的主流思想是“頻率學派”。所謂頻率學派,舉個例子來說:“有一個袋子,裡面裝著若干個白球和黑球(例如3黑2白),請問從袋子中取得白球的概率θ是多少?

頻率派把需要推斷的引數θ看做是固定的未知常數,即概率雖然是未知的,但最起碼是確定的一個值。同時,樣本X是隨機的,所以頻率派重點研究樣本空間,大部分的概率計算都是針對樣本X的分佈。

這種觀點看起來確實沒有什麼問題,也很合理。但是我們仔細深度思考一下就會發現一個重大問題。

頻率學派之所以能夠得到這種確定性,是因為研究的物件是“簡單可數事件”,例如裝有固定數量球的袋子、只有正反兩面的硬幣、只有6面的標準篩子。但是當研究的問題變得複雜之後,頻率理論就無法處理了。

例如一個朋友創業,你現在需要估計他創業成功的機率有多大?

這個時候你就無法逐一枚舉出導致他成功或者失敗的所以子原因了(做法有方法?思路清晰?有毅力?能團結周圍的人?和其他競爭對手相比,好多少?....),這是一個連續且不可數的事件空間。

“貝葉斯學派”的觀點和頻率學派則截然相反,貝葉斯學派認為引數是隨機變數,是未知的。而樣本X是固定的,由於樣本是固定的,所以他們重點研究的是引數的分佈。

用貝葉斯學派的理論來回答上面創業者評估問題,假如你對這個創業者為人比較瞭解,你會不由自主的估計他創業成功的機率可能在80%以上,這是一個先驗的概率估計。隨著公司的運營,你發現公司被運營的非常差,業績也不行,隨即,你對這個創業者的成功估計由80%下調到40%,這是一個後驗概率估計。貝葉斯學派的這種動態的概率估計思維,就是貝葉斯方法。

為了能夠動態地對真實世界進行概率估計,貝葉斯及貝葉斯派提出了一個思考問題的固定模式:

先驗分佈 + 樣本資訊(觀測結果)  後驗分佈

上述思考模式意味著,新觀察到的樣本資訊將修正人們以前對事物的認知。換言之,在得到新的樣本資訊之前,人們對的認知是先驗分佈,在得到新的樣本資訊後,人們對的認知為後驗估計。 

筆者思考:

寫到這裡的時候,筆者聯想到牛頓巨集觀第一定律和愛因斯坦的相對論之間的關係,在巨集觀世界,牛頓第一定律是有效的,但是進入高速微觀世界,就只能用更抽象的相對論來概括了。牛頓第一定律只是相對論在巨集觀低速世界的一個特例。

同樣,對簡單問題來說,因為事件空間有限可數,所以頻率理論是成立的,但是對於真實世界的複雜問題,事件空間是連續不可數的,就需要用到貝葉斯理論來概括描述了。

Relevant Link:     

《概率圖模型:原理與技術》DaphneKoller 
https://github.com/memect/hao/blob/master/awesome/bayesian-network-python.md

 

2. 一些背景知識

在本章中,我們回顧一些重要的背景材料,這些材料源自概率論、資訊理論和圖論中的一些關鍵知識,它們都是貝葉斯網的重要概念組成部分。

0x1:條件概率公式

條件概率(又稱後驗概率)就是事件A在另外一個事件B已經發生條件下的發生概率。條件概率表示為P(A|B),讀作“在B條件下A的概率”,

  • 聯合概率:表示兩個事件共同發生的概率。A與B的聯合概率表示為或者
  • 邊緣概率(又稱先驗概率):是某個事件發生的概率。邊緣概率是這樣得到的:在聯合概率中,把最終結果中那些不需要的事件通過合併成它們的全概率,而消去它們(對離散隨機變數用求和得全概率,對連續隨機變數用積分得全概率),這稱為邊緣化(marginalization),比如A的邊緣概率表示為P(A),B的邊緣概率表示為P(B)。 

0x2:全概率公式和貝葉斯概率公式

基於條件概率公式,我們可以繼續推匯出貝葉斯公式。關於這個話題,筆者在另一個文章中進行了詳細的總結,這裡不再贅述,為了保持文章自包含性,這裡摘取部分筆者認為關鍵的部分。

全概率公式

貝葉斯公式

將其和全概率公式進行對比。會發現以下幾點:

  • 貝葉斯公式的分子和全概率公式的分解子項是相同的
  • 貝葉斯公式的分母等於全概率公式的累加和

筆者認為,貝葉斯公式可以這麼理解:貝葉斯公式表達了一個思想,根據某個出現的結果B可以反推所有可能導致該結果的子原因Ai,而具體根據結果B逆推出每個子原因的條件概率比重,則取決於這個子原因和結果B的聯合概率 ,這是從結果推原因的逆概率計算問題。

0x3:隨機變數的鏈式法則(chain rule)

根據條件概率的定義,我們有:

更一般地,如果a1,....,ak是事件,那麼有如下鏈式分解式,

這個等式稱為條件概率的鏈式法則(chain rule)。 換句話說,我們可以將幾個事件組合的概率表示為關於事件之間的遞迴式依賴關係的乘積。值得注意的是,我們可以用事件的任意順序來擴充套件這個表示式而保持結果不變。

鏈式法則是一個非常有用的定理,它是貝葉斯網中的核心概念,因為貝葉斯網面對和描述的都是複雜事件。一個複雜事件往往是由大量子事件組成的,不同的子事件間既存在獨立關係,也存在關聯依賴關係。鏈式法則提供了一個理解複雜事件的世界觀,即複雜事件是可以分解的。

0x4:隨機變數的獨立性

關於獨立性,有一個很形象直觀的例子。假設一個思想實驗:如果一個社會中存在一種廣泛的思潮,即重男輕女思潮,90%的家庭都認為生男孩比生女孩好,只要生的不是男孩就是繼續生,直到生了一個女孩為止。 以上為背景,經過10年後,請問社會中男女比率會失衡嗎?

這個問題答案可能有些反直覺,答案是:不管經過多少年,社會中男女比例都保持50%的平衡比例。出現這個現象的原因是,每一胎生男生女都是等概率的,不以父母的意志為轉移。

下面我們定義隨機變數的獨立性概念,

假如或者,則稱事件α和事件β,則稱事件α和事件β在P中獨立,記為。

  • 從條件熵的角度解釋獨立性,事件α和事件β在P中獨立,意味著事件事件β對事件α的不確定性不提供額外的資訊。
  • 從條件概率的角度,我們還可以給出獨立性概念的另一種定義,即分佈P滿足,當且僅當。證明過程如下,
    • 使用鏈式法則,,由於α和β獨立,所以,因此,,所以有,

    • 從該公式可以看到,獨立性是一個對稱的概念,即意味著。 

我們需要明白的是,在大多數實際的應用中,隨機變數並不是邊緣獨立的,儘管如此,這種方法的一般形式將是我們求解的基礎。

0x5:隨機變數條件獨立性

關於條件獨立性,筆者通過一個具體的例子來直觀說明。我們假定學生的GPA成績為隨機變數G,被Stanford錄入為隨機變數S,被MIT錄取為隨機變數M。很顯然,我們會得到下列幾個分佈判斷:

  • 零先驗下條件依賴:”被MIT錄取M“和”被Stanford錄取S“之間並不相互獨立,如果已知一個學生已經被Stanford錄取,那麼我們對她被MIT錄取的概率的估計就會提高,因為”被Stanford錄取S“潛在說明了她是一個智商高有前途的學生。換句話說,”被Stanford錄取S“這個事實給”被MIT錄取M“輸入了額外的有效資訊熵。
  • 給定額外事件下條件獨立:現在假定兩所大學僅根據學生的GPA作決定,並且已知學生的GPA是A。在這種情況下,”被Stanford錄取S“和”被Stanford錄取S“之間就完全獨立了。換句話說,在已知GPA的情況下,”被Stanford錄取S“對”被Stanford錄取S“的推斷沒有提供任何有效的資訊熵,這個現象在貝葉斯網中被稱作區域性獨立性。用條件概率公式表述上面這句話就是,對於這種情況,我們說在給定Grade條件下,MIT與Stanford條件獨立。

下面我們形式化地定義事件之間條件獨立性的概念,

假如,或者,則稱事件α在給定事件Υ時,在分佈P中條件獨立於事件β,記作。

進一步地有,P滿足當且僅當。

現在我們將概念引申到隨機變數的範疇內,關注隨機變數間的條件獨立性。

令X,Y,Z表示隨機變數,如果P滿足,則稱集合X與Y在分佈P中條件獨立,集合Z中的變數稱為觀測(observed)變數。觀測(observation)這個詞很能引起我們的思考,我們看到,在不同的觀測下,隨機變數的條件獨立性發生了改變,這正是體現了貝葉斯思想的精髓。

特別的,如果集合Z是空集,可以把記作,並且稱X與Y是邊緣獨立的(marginally independent)。

0x6:查詢一個概率分佈

我們基於貝葉斯網進行的一個常見應用是,利用多維隨機變數的聯合概率分佈來完成推理查詢。

1. 概率查詢

概率查詢是最常見的查詢,查詢由兩部分組成,

  • 證據(條件):模型中隨機變數的子集E,以及這些變數的例項e
  • 查詢變數:網路中隨機變數的子集Y

概率查詢的任務是計算下式:

即,Y的值y上的後驗概率分佈取決於E=e,這個表示式也可以看作是以e為條件作用獲得的分佈中Y上的邊緣。

2. 最大後驗概率(MAP)查詢

第二類重要任務是對變數的一些子集找到一個高概率的聯合賦值。這類任務的最簡單變形是MAP查詢(最可能解釋MPE),其目的是找到對所有(非證據)變數最可能的賦值。

如果令,那麼在給定證據的條件下,我們的任務是為W中的變數找到最可能的賦值:

其中的表示使得最大的值。

0x7:圖

把圖作為一種資料結構來表示概率分佈在貝葉斯網的一個重要概念,我們這節討論一些圖的基本概念。

1. 節點與邊

圖是一個包含節點(node)集與邊(edge)的資料結構。 

假定節點集為,節點對 X與 Xj 由一條有向邊(directed edge)Xi -> Xj 或者一條無向邊(undirected edge)Xi - Xj 連線。因此,邊集是成對節點的集合,圖通過二元關係來存所有邊的連線關係。

因此,圖按照邊集的型別,可以分為:

  • 有向圖(directed graph):通常記作。
  • 無向圖(undirected graph):通常記作,通過忽略邊的方向,有向圖可以轉換為無向圖。

我們用來表示 Xi 與 Xj 經由某種邊連線的情形,這條邊或者是有向的,或者是無向的。

下圖是部分有向圖的一個例子,

其中,

  • A是C的唯一父節點
  • F,I 是C的子節點
  • C的唯一鄰節點是D
  • A,D,F,I 均與C相鄰

2. 子圖

很多時候,我們希望只考慮與節點的特定子集相關的部分圖。

1)匯出子圖

令,且令,匯出子圖(induced subgraph)定義為圖,其中,表示使得的所有邊。例如下圖表示的是匯出子圖, 

 

2)完全子圖

如果X中的任意兩個節點均由一條邊連線,那麼X上的子圖是完全子圖(complete subgraph)。集合X通常稱為團(clique)。對於節點的任意超集,如果Y不是團,那麼X稱為最大團(maximal clique)。

儘管理論上說,節點子集X可以是任意的,但我們一般只對能夠保持圖結構的特定性質的節點集感興趣。

3. 路徑與跡

利用邊的基本符號,可以在圖中對不同型別的長範圍連線進行定義。

1)路徑(path)

對每一個 i=1,...,k-1,如果 Xi -> Xi+1,或者 Xi - Xi+1,那麼 X1,....,Xi 在圖中形成了一條路徑(path)。如果一條路徑中至少存在一個 i,使得 Xi -> Xi+1,則稱該路徑是有向的。

2)跡(trail)

對於每個 i=1,...,k-1,如果,那麼 X1,....,Xi 在圖中形成一條跡(trail)。 

跡是比路徑更弱的約束條件,跡必定是路徑,但路徑不一定成為跡。

例如下圖中,

  • A,C,D,E,I 是一條路徑,因此也是一條跡
  • A,C,F,G,D 是一條跡,但不是一條路徑

3)連通圖(connected graph)

對於圖中的任意節點 Xi,Xj,如果 X和 X之間存在一條跡,那麼該圖是連通圖。

4.  圈(cycle)

1)無圈圖

圖中的一個圈是一條有向路徑 X1,....,Xk,其中 X1 = Xk。如果一個圖不包含圈,那麼這個圖是無圈圖(acyclic graph)。需要注意的是,在存在有向圈的圖上定義一個一致的概率模型十分困難,因此機器學習中大部分的圖演算法都是假設圖是無圈的。

有向無圈圖(directed acyclic graph,DAG)是構成貝葉斯網的基本圖表示。

下圖是一個無圈圖,

但是隻要為圖中新增一條無向邊 A-E,就可以獲得一條從A到自身的路徑A,C,D,E,A。

注意,圈是針對路徑的概念而言的,無圈並不代表從節點到自身不會有跡,例如上圖中,包含了 C,D,E,I,C 和 C,D,G,F,C 這兩條跡。

2)部分有向無圈圖(partially directed acyclic graph,PDAG)

一個包含有向邊和無向邊的無圈圖稱為部分有向無圈圖,PDAG上無圈的要求意味著圖可以被分解為一些鏈分支(chain component)的有向圖,其中,每條鏈分支內的節點相互之間僅通過無向邊連結。

PDAG的無圈性保證我們可以對分支進行排序,進而使得所有的邊由數值低的分支指向數值高的分支。

3)鏈分支(chain component)

令是上的PDAG,K1,....,Ki 是的滿足如下條件的不相交劃分:

  • Ki 的匯出子圖不包含有向邊。
  • 對 i<j,以及任意一對節點和,X與Y之間的邊僅僅是有向邊 X->Y。 

滿足以上條件時,每一個分支 Ki 稱為一個鏈分支。同時由於其鏈結構,PDAG也稱為鏈圖(chain graph)。

還是對上面的圖例子,我們來看一下鏈分支分解結果,

上圖中共有六個鏈分支:

  • {A}
  • {B}
  • {C,D,E}
  • {F,G}
  • {H}
  • {I}

特別的,當PDAG是一個無向圖時,整個圖形成了一個單鏈分支。相反地,如果PDAG是一個有向圖(無圈的),那麼圖中的每一個節點就是其本身的一個鏈分支。

筆者提醒:

鏈圖這個概念非常重要,它和隨機變數獨立性原理一起,構成了貝葉斯網因子分解和區域性獨立性原理,也是貝葉斯網能夠從原始的鏈式分解公式得到緊湊結構的理論基礎。

5. 環(loop)

環是一個比圈更弱約束的結構,中的一個環是一條跡 X1,....,Xk,其中 X1 = Xk。如果一個圖不包含任何環,那麼這個圖是單連通(singly connected)。如果一個節點在單連通圖中只有一個相鄰的節點,那麼該節點是一個葉(leaf)節點。

1)森林

如果有向圖的每個節點至多隻有一個父節點,那麼這個有向圖是森林。

2)樹

如果有向圖的每個節點至多隻有一個父節點,且這個有向森林是連通的,那麼它是一棵樹。

3)多重樹

一個單連通的有向圖也稱為一棵多重樹(polytree)。注意,多重樹與樹非常不同,例如下圖是多重樹但不是樹,因為有一些節點有不止一個父節點。

多重樹例子

6. 弦(chord)

弦的定義在基於圖結構的推理代價估計中扮演者非常重要的角色。

令 X1 - X2 - .... - Xk - X1 是圖中的一個環。環中的一條弦(chord)是連線兩個不連貫節點 Xi 與 Xj 的一條邊。對 k>=4,如果任意環 X1 - X2 - .... - Xk - X1 有一條弦,那麼無向圖稱為弦圖(chordal graph)。

值得注意的是,在一個通弦的圖中,最長的”最小環(一個沒有捷徑的環)“是一個三角形。因此,弦圖通常也稱為三角剖分圖(triangulated graph)。

進一步的,如果圖的基礎無向圖是通弦的,則稱圖是通弦的。

Relevant Link:    

《概率圖模型:原理與技術》DaphneKoller 

 

3. 貝葉斯網原理

0x1:什麼是貝葉斯網路

  • 貝葉斯網路(Bayesian network),又稱信念網路(Belief Network),或有向無環圖模型(directed acyclic graphical model),是一種概率圖模型,於1985年由Judea Pearl首先提出。是一種幫助人們將概率統計應用於複雜領域、進行不確定性推理和數值分析的工具。
  • 貝葉斯網是一種系統地描述隨機變數之間關係的語言,它模擬了人類推理過程中因果關係的不確定性。
  • 貝葉斯網是概率論與圖論結合的產物,一方面用圖論的語言直觀揭示問題的結構,另一方面按概率論的原則對問題結構加以利用,本質上其網路拓樸結構是一個有向無環圖(DAG)。
  • 許多經典多元概率模型都是貝葉斯網的特例,例如樸素貝葉斯模型、馬爾柯夫鏈、隱馬爾科夫模型、卡爾曼濾波器、條件隨機場等

0x2:為什麼需要貝葉斯網路

在開始介紹貝葉斯網概念之前,我們先來一個討論一下學者們提出貝葉斯網的學術動機,筆者將其總結為下面幾句話:

  • 不確定性推理
  • 高維稀疏表徵問題:利用條件獨立降低複雜度
  • 區域性概率模型(local probability model):貝葉斯網的因子分解
  • 有限狀態轉移的動態貝葉斯過程:因果推理與證據推理

1. 不確定性推理

所謂不確定性推理,是指基於概率論對真實世界進行抽象建模以及數值分析,使用概率分佈而不是精確數值的方式進行有效預測。常規的不確定性推理過程如下,

  • 把問題用一組隨機變數 X = {X1, X2, . . . , Xn} 來刻畫
  • 把關於問題的知識表示為一個聯合概率分佈 P(X)
  • 按概率論原則進行推理計算

2. 利用條件獨立降低複雜度

根據全概率公式和鏈式法則我們知道,每個隨機事件都可以分解為大量的子事件原因的累乘,且子事件原因之間還存在大量的遞迴依賴,

這樣,假設我們的目標是在某個隨機變數的集合上表示聯合分佈P,即使在變數為二值(binary-valued)這樣最簡單的情況下,n個變數的聯合分佈也需要個不同賦值的概率。當n較大時,這種聯合分佈的顯示錶示和樣本學習都會變得非常難處理。

  • 從計算的角度,操作的成本非常昂貴,並且也很難在記憶體中儲存
  • 從機器認知的角度,我們不可能從專家那裡獲得如此多的數值。而且,這些數值非常小並且不能與人們可以合理思考的事件一一對應
  • 從統計的角度,如果希望從資料中學習出分佈,需要有規模非常龐大的資料才能可靠地估計出這麼多的自由引數,否則會遇到欠擬合問題

但是實際上,正如我們前面介紹舉例的,對於一個好學生來說,考上Stanford和考上MIT這兩件事之間是獨立的,條件概率和邊緣概率是相同的。因此,貝葉斯網路基於隨機變數間獨立性原理,對去全概率公式進行了有效的化簡,得到了一個更緊湊的高維分佈。這對我們建模複雜性事件提供了條件,例如下圖,

學生示例的貝葉斯網圖

可以以兩種不同的方式來看待這個圖:

  • 它是提供了以因子分解的方式緊湊表示聯合分佈骨架的資料結構
  • 它是關於一個分佈的一系列條件獨立性假設的緊湊表示

在嚴格意義上,這兩種觀點是等價的。

注意到,貝葉斯網用邊表示直接依賴關係,如果在真實世界中A只依賴於B,則只應該存在一條從B通向A的有向邊。節點只直接依賴其父節點,是貝葉斯網語義的核心。

3. 基於區域性概率模型表示成對的因果推理

為了說明這個概念,我們繼續引用學生示例,

這個問題包含五個隨機變數:

  • 學生的智商(I)
  • 課程的難度(D)
  • 考試的成績(G)
  • 學生的SAT成績(S)
  • 推薦信的質量(L)

我們知道,貝葉斯網可以用有向圖來表示,其節點表示隨機變數,而邊則表示一個變數對另一個變數的直接影響(現實世界執行方法的直觀假設)。我們可以將這個圖看成是對一個由自然執行的生成式取樣過程進行編碼,其中,每個變數的值指取決於其父節點的分佈自然選擇。換句話說,每個變數是其父節點的一個隨機函式(區域性條件概率性質)。

換句話來說,區域性條件概率性質來源於問題域本身的: 

  • 學生的成績不僅取決於他的智商(I),同時也取決於課程的難度(D)
  • 學生請求教授為其學推薦信,不過教授健忘並且從來記不住學生的名字,所以教授通過檢視學生的成績,並依據這僅有的資訊來為其寫推薦信,推薦信的好壞用L表示,隨機地依賴於考試的成績
  • SAT成績僅僅取決於學生的智商,在智商(I)已知的情況下,SAT成績(S)和課程成績(G)是獨立的

我們將貝葉斯網中包含的這種區域性的條件概率結構稱之為區域性概率模型(local probability model),用於表示每個變數對其父節點依賴的本質。 

對於這個問題,條件概率分佈的一個可能選擇如下圖所示,這個網路結構與條件概率分佈一起組成了貝葉斯網,

帶有條件概率分佈的學生示例的貝葉斯網

具體的,考慮空間中的一些特定狀態,比如,直觀上,這個事件的概率可以通過計算構成它的基本事件的條件概率乘積獲得,即:

一般地,對於聯合概率空間中的任何狀態,可以採用相同的過程,即:

上述本質上是一個概率查詢(推理)過程。 

4. 有限狀態轉移的動態貝葉斯過程

1)因果推理

所謂的“推理”,顧名思義是一個根據當前獲得的證據動態變化條件概率的過程。現在考慮貝葉斯網,並且觀察當證據獲得時各種事情的概率如何動態地發生變化。

以某個學生George為例,用獲得的模型對George進行推理。我們可能想要詢問George有多大可能從教授Econ101的教授那裡獲得一封好的推薦信(l1)。現在我們開始動態貝葉斯推理:

  • 在對George和Econ101的其他情況一無所知的條件下,P(l1)=50.2%。更精確地,令為根據前述貝葉斯網(BN)定義的聯合分佈,那麼。
  • 現在我們瞭解到George不太聰明(i0),現在George從教授Econ101課程的教授那裡獲得一封好的推薦信的概率降低到大約38.9%,即。
  • 現在我們進一步得知Econ101是一門簡單的課程(d0),此時,George從教授那裡獲得一封好的推薦信的概率是。

  • 注意到上面兩步的動態推理,都是基於我們不知道George的成績Grade前提下,即head-to-head的關鍵節點未知,如果Grade已知,智商和課程難度就會獨立,互不影響。

這類可以預測各種因素(如George的智商)“順流而下”影響的概率查詢,我們稱之為因果推理(causal reasoning)或者預測(prediction)。

2)證據推理

現在考慮Acme諮詢公司的一個招聘官,他試圖貝葉斯網決定是否僱傭George,我們開始動態貝葉斯推理:

  • 先驗知識是,招聘官相信George有30%的可能有高智商。
  • 之後,他拿到了George在Econ101上的成績記錄為C(g3),此時,招聘官對George有高智商的概率降至7.9%,即,同時,課程困難度的概率也從40%上升到62.9%,因此我們有理由相信是因為課程太難導致George沒有取得高分。
  • 現在,假定招聘官不小心丟失了George的成績單,關於George的資訊只剩下來自其Econ101課程教授的推薦信,不過這封信不是一個好的推薦信,此時,George有高智商的概率依然會降低,但只降至14%,即。我們看到,節點距離越近,資訊傳遞的影響就越大,這也符合馬爾科夫過程的熵傳遞原理。

  •  同時我們注意到,如果招聘官既有成績單又有推薦信,George有高智商的概率與招聘官只有成績單時的概率是一樣的,。原因是在head-to-tail結構下,如果關鍵節點已知,則head與tail之間是條件獨立的。

  • 最後,George向招聘官提交了他的SAT成績,他的SAT成績很高,George有高智商的概率戲劇性地從7.9%又上升到了57.8%,,即。產生這個現象的原因是,與不好的考試成績相比,SAT高分更有價值,因為低智商的學生在SAT考試中獲得高分的可能性非常低,遠遠低於Econ101課程考試,也可以通俗地說“SAT考試成績更硬”。同時,因為高智商的學生在困難的課程中更可能獲得C,所有現在Econ101是一門困難的課程的概率已經從62.9%提高了76%左右。 

這類從結果推理原因的“逆流而上”的概率查詢,我們稱之為證據推理(evidential reasoning)或解釋(explanation)。 

3)因果間推理一般模式

我們知道,課程難度D,課程成績G,智商I,它們之間是head-to-head的拓樸結構。

如果George在Econ101中得到的成績是B,那麼。另一方面,如果Econ101比較難,那麼。

實際上我們已經通過課程的難度解釋消除(explaining away)了成績低這一事件帶來的影響。解釋消除是稱為因果間推理(intercausal reasoning)的一般推理模式的一個示例。其中相同結果的不同原因之間可以相互影響。 在這裡,因為Grade已知,所以D和I之間的資訊影響流是通的,影響力可以沿著跡傳遞。

這類推理在人類日常的推理中是非常普遍的,例如,當發燒、咽喉痛,並且擔心可能有單核細胞增多症時,如果告知只是得了流感,那麼得單核細胞增多症的概率就會被消解下降。因為,患有流感為出現的針狀提供了另一種解釋,從而很大程度上降低了患有單核細胞增多症的概率。

筆者思考:

對上述這個理論可以有一個更加形象的理解方式,即河流類比,我們將新的證據帶來的資訊熵比作河流裡的水,學生在某門課程上取得了不好的成績就是一個有效資訊熵,這個資訊順著G-I之間流動,使得高智商的後驗概率下降。現在加入一個新的資訊源是Econ101課程比較難,這個新的資訊源就相當於一個新的水源,沿著D-G-I這個河道傳播,和原來的G-I一起,共同綜合決定了I的後驗概率。

同樣的,如果G是未知的,那就相當於這個河流中間是斷開的,無論D如何都無法影響到I,I的後驗概率只取決於G。

4)有限狀態轉移

另外一方面,貝葉斯網必須是有向無圈圖。其中節點代表隨機變數,節點間的邊代表變數之間的直接依賴關係。

本質上因為貝葉斯網是對真實世界複雜性事件的抽象建模,所以不允許出現圈(即迴圈遞迴依賴)。簡單來說就是不允許出現下列這種場景,

  • A事件的發生依賴於B
  • B事件的發生依賴於C
  • C事件的發生依賴於D
  • D事件的發生依賴於A

如果出現迴圈依賴,因果分解鏈式公式就會無限膨脹,也就無法用計算機處理。

0x3:貝葉斯網路的定義

貝葉斯網路的有向無環圖中的節點表示隨機變數,它們可以是可觀察到的變數,或隱變數、未知引數等。

有因果關係(或非條件獨立)的變數或命題,用箭頭來連線。若兩個節點間以一個單箭頭連線在一起,表示其中一個節點是“因(parents)”,另一個是“果(children)”,兩節點就會產生一個條件概率值。

例如,假設節點E直接影響到節點H,即E->H,則用從E指向H的箭頭建立結點E到結點H的有向弧(E,H),權值(即連線強度)用條件概率P(H|E)來表示,如下圖所示:

一般地,貝葉斯網結構是其節點代表隨機變數X1,....,Xn的一個有向無圈圖(DAG)。令表示Xi在中的父節點,表示Xi在圖中的非後代節點變數。因此表示瞭如下稱為區域性獨立性(local independencies)的條件獨立性假設,並且記為。

對每個變數Xi,都有:

換句話說,區域性獨立性表明,在給定父節點條件下,每個節點Xi與其非後代節點條件獨立。貝葉斯網圖的形式化語義是一系列獨立性斷言。 

如下圖所示,便是一個簡單的貝葉斯網路:

因為a導致b,a和b導致c,所以有下面累乘公式,

 

0x4:貝葉斯網路的典型結構形式

3節點對應的三角結構是貝葉斯網資訊流動的最基本結構,這節我們來介紹幾種經典的資訊流動結構。

1. head-to-head(共同的作用)

根據上圖我們有:P(a,b,c) = P(a) * P(b) * P(c|a,b)成立,化簡後可得:

這種結構代表的意思是:

  • c未知時:a、b被阻斷(blocked),是獨立的,稱之為head-to-head條件獨立。
  • c已知時(或已知c的後代):a和b不獨立,a的資訊可以沿著c流向b。

我們可以形象地理解為,將abc想象成河流,兩條小河(a、b)流入一條大河(c),當c是未知時,a->c<-b之間的流動是阻斷的,那麼影響將無法沿著“a->c<-b”流動。形如“a->c<-b”的這種結構也稱為一個v-結構(v-structure)。

2. tail-to-tail(共同的原因)

這種結構代表的意思是:

  • c未知時:有:P(a,b,c)=P(c) * P(a|c) * P(b|c),此時,沒法得出P(a,b) = P(a)P(b),即c未知時,a、b不獨立,a可以通過c來影響b。
  • c已知時:有:P(a,b|c)=P(a,b,c) / P(c),然後將P(a,b,c)=P(c) * P(a|c) * P(b|c)帶入式子中,得到:P(a,b|c)=P(a,b,c)/P(c) = P(c)*P(a|c)*P(b|c) / P(c) = P(a|c)*P(b|c),即c已知時,a,b被阻斷(blocked),a、b是獨立的,稱之為tail-to-tail條件獨立。

我們可以形象地理解為,一條大河到某處分叉成兩條支流,在c給定的條件下,a,b是兩條獨立的支流,彼此是獨立的。

3. head-to-tail(因果跡)

這種結構代表的意思是:

  • c未知時:有:P(a,b,c)=P(a)*P(c|a)*P(b|c),但無法推出P(a,b) = P(a)P(b),即c未知時,a、b不獨立。
  • c已知時:有:P(a,b|c)=P(a,b,c)/P(c),且根據P(a,c) = P(a)*P(c|a) = P(c)*P(a|c),可化簡得到:P(a,b|c) = P(a,b,c)/P(c) = P(a)*P(c|a)*P(b|c)/P(c) = P(a,c) * P(b|c) / P(c) = P(a|c) * P(b|c),即在c給定的條件下,a,b被阻斷(blocked),是獨立的,稱之為head-to-tail條件獨立。 

4. tail-to-head(證據跡)

這種結構代表的意思是: 

  • c未知時:影響可以經過c從a流向b,a可以作為證據影響b的後驗概率
  • c已知時:在c給定的條件下,a,b被阻斷,是獨立的。

0x5:條件概率鏈式法則與區域性獨立性的統一

我們知道,貝葉斯網的形式化語義是一系列獨立性斷言,另一方面,貝葉斯網也是由一系列條件概率分佈所組成的圖,這個圖通過鏈式法則為貝葉斯網定義了一個聯合分佈。

在本節中,我們將討論它們二者的等價性。分佈P滿足於圖相關的區域性獨立性,當且僅當P可以由與圖相關的一系列條件概率分佈表示。

我們從形式化基本概念開始。

1. I-Map

首先我們定義與分佈P相關的獨立性的集合。

令P是上的分佈,定義為在P中成立的形如的獨立性斷言的集合。

現在可以將陳述“P滿足與相關的區域性獨立性”簡寫為。在這種情況下,可以稱是P的一個I-map(獨立圖)。

更一般的定義如下:

令是與獨立性集合相關聯的任意一個圖物件,如果對獨立性集合,,則稱是一個I-map。 

2. I-map到因子分解

一個貝葉斯網蘊含了一系列條件獨立性假設,這是我們能夠用緊湊因子分解表示貝葉斯網的關鍵。一個特殊的例子就是樸素貝葉斯分解公式。

考慮學生貝葉斯網的例子,

先考慮任意分佈P,我們將對聯合分佈進行分解並且將其分解成一些區域性概率模型:

 

這種轉換不依賴任何假設,它對任何聯合分佈P都適用。然而,因為等式右邊的因子分解中的條件概率沒有充分利用我們已知的獨立依賴性資訊,因此非常不緊湊。

現在,我們應用由貝葉斯網匯出的條件獨立性假設,假定關於分佈P是一個I-map,我們得到下式:

  • 因為,所以有

綜上,聯合分佈可化簡為:

從上式可以看出,聯合分佈中的任何表值都可以通過每個變數所對應的因子的乘積來計算。每個因子表示表示一個變數在網路中給定父節點時的條件概率。在是I-map的條件下,這種因子分解可以應用於任何分佈P。

用形式化的語言來表達就是:

令未定義在變數X1,...,Xn上的一個貝葉斯網,假如P可以表示為如下乘積:

則稱分佈P是關於圖的在同一空間上的因子分解。這個等式稱為貝葉斯網的鏈式法則。單個因子稱為條件概率分佈(CPD)或區域性概率模型。

貝葉斯網結構所蘊含的條件獨立性假設允許我們將是一個I-map的分佈P分解成一系列較小的條件概率分佈。

0x6:d-分離概念

上一節我們討論了聯合分佈的因子分解和區域性獨立性的統計概念。這個小節我們將其推廣到整個貝葉斯網中,首先我們定義有效跡的概念。

1. 有效跡

考慮跡比較長的一般情況。直觀上,對於從X1流動到Xn的影響,它需要流經這條跡上的單個節點。換句話說,如果每條雙邊跡都允許影響流過,那麼X1可以影響到Xn

對這一直觀認識形式化定義如下:

令是一個貝葉斯網結構,且是中的一條跡。令Z是觀測變數的一個子集,在給定Z的條件下,如果滿足下列條件:

  • 一旦有一個v-結構,則Xi或其一個後代在Z中
  • 跡上的其他節點都不在Z中

那麼稱跡是有效跡。

2. d-分離(d-separation)

一般的,如果節點之間存在任何允許影響流過的跡,那麼一個節點可以影響另一個節點。基於這個直觀認識,可以定義d-分離的概念,這個概念為我們提供了在有向圖的節點之間實現分離的能力。

形式化定義如下:

令X,Y,Z是圖的三個節點集,在給定Z的的條件下,加入任意節點與之間不存在有效跡,那麼X與Y在給定Z時是d-分離的,記作。與d-分離相對應的獨立性的集合用表示:

這個集合也稱為全域性馬爾科夫獨立性(global Markov independencies)集。中的獨立性恰好是那些可以保證在的每個分佈中都成立的獨立性。 

0x7:構建貝葉斯網結構的一般化方法

從上一章的條件概率鏈式公式化簡過程我們可以看到,對於同一個獨立性集合,與其相符的結構有很多。一個好的方法是選擇能夠反映真實世界的因果序列和依賴關係的結構,目的是使原因成為結果的父節點。

例如,在對汽車保險相關的貝葉斯網構建中,以前的事故(A)往往是好司機(G)的父節點,即“A->G”,這與保險公司對汽車保險這一問題的認知一致。同時,由於司機不好(B)才造成了以前(以及將來的)事故,即“B->A”。

 

一般來說,建模時我們可能會選擇很多比較弱的影響,但如果將它們全部考慮進去,網路會變得非常複雜。這樣的網路從表示的角度看是有問題的,它們難於理解、難於修正和學習。此外,由於貝葉斯網中的推理非常強地依賴於它們的連線功能,因此,增加這樣的邊無疑會使網路訓練和預測的代價變得很高。

0x8:貝葉斯網學習(結構構件和引數估計)

貝葉斯網的學習過程分為兩部分:

  • 結構學習:發現變數之間的圖關係,構建貝葉斯網結構的一個一般方法是後向構建過程,該過程從我們感興趣的一個變數開始,比如肺癌。然後嘗試找到這個變數的先驗因素,並將其新增為這個變數的父節點,這個過程稱為對話擴充套件。例如,我們可以用這個過程來得出如下結論:
    • 肺癌應該把吸菸作為其父節點
    • 吸菸(可能,但不明顯)應該把性別和年齡作為其父節點
  • 引數學習:決定變數之間互相關聯的量化關係,即估計貝葉斯網路的 CPD(條件概率分佈) 表格中的數值。操作方法很簡單,就是計算訓練資料中事件發生的次數。例如要估計 p(SAT=s1|Intelligence=i1),我們只需要計算 SAT=s1 且 Intelligence = i1 的資料點在 Intelligence = i1 的資料點總量中所佔的比例。

從資料中學習貝葉斯網路 

0x9:貝葉斯網推理

所謂推理,就是要根據我們已知的資訊做出預測。我們可以使用推理來解答一些問題:

1. 邊際推理(marginal inference)

尋找一個特定變數的概率分佈。比如,給定一個帶有變數 A、B、C 和 D 的圖,其中 A 取值 1、2 和 3,求 p(A=1)、p(A=2) 和 p(A=3)。

2. 後驗推理(posterior inference)

給定某些顯變數 v_E(E 表示證據(evidence)),其取值為 e,求某些隱藏變數 v_H 的後驗分佈 p(v_H|v_E=e)。

3. 最大後驗(MAP)推理(maximum-a-posteriori inference)

給定某些顯變數 v_E,其取值為 e,求使其它變數 v_H 有最高概率的配置。

Relevant Link:    

《概率圖模型:原理與技術》DaphneKoller 
http://staff.ustc.edu.cn/~jianmin/lecture/ai/bnet_slides.pdf
https://zhuanlan.zhihu.com/p/30139208
https://www.zhihu.com/question/28006799
https://blog.csdn.net/v_JULY_v/article/details/40984699
http://staff.ustc.edu.cn/~jianmin/lecture/ai/bnet_slides.pdf

 

4. 貝葉斯網的一個特殊特例 - 馬爾柯夫鏈

關於馬爾柯夫鏈,筆者在另一篇文章有詳細的討論。簡單來說,馬爾柯夫鏈是一種基於“馬爾科夫假設(marko assumption)”的動態貝葉斯網。

從網路結構的角度來說,馬爾柯夫鏈是一個head-to-tail鏈式網路,如下圖所示:

我們已經知道,在xi給定的條件下,xi+1的分佈和x1,x2…xi-1條件獨立。這意味著:xi+1的分佈狀態只和xi有關,和其他變數條件獨立。

通俗地說,當前狀態只跟上一狀態有關,跟上上或上上之前的狀態無關。這種順次演變的隨機過程,就叫做馬爾科夫鏈(Markov chain)。且有:

可以看到,馬爾柯夫鏈是一個特殊的貝葉斯網結構。

Relevant Link:    

https://www.cnblogs.com/LittleHann/p/7609060.html#_lab2_2_1

 

5. 貝葉斯網的一個特殊特例 - 樸素貝葉斯模型

這章我們來描述一個最簡單的例子,在這裡例子中,條件引數化與條件獨立性假設被結合在一起,目的是對高維概率分佈產生非常緊湊的表示。

0x1:場景描述

還是前面公司僱傭大學畢業生的例子,現在假定公司除了智商I和SAT成績S之外,同時還知道學生某些課程的成績G,在這種情況下,概率空間是定義在三個相關隨機變數 I、S、G 上的聯合分佈。假定 I 與 S 如前所述,並且G可能取三個值g1,g2,g3,分別代表成績A,B和C,那麼聯合分佈有12個表值。

但是在這個例子中,我們發現了潛在的冗餘結構,分佈P滿足條件獨立性執行,即如果我們知道一個學生是高智商的,那麼他在SAT考試中獲得的高分並不能為我們帶來任何有關他課程成績的資訊,形式化的表達為:

更一般的情況下,可以表達為:

 

注意到,這種獨立性宣告只有當假定學生的智商是其課程與SAT得分的唯一原因時才成立(tail-to-tail結構)。

基於條件獨立性假設,我們可以得到一種更加緊湊的因果推理表達方式,

  

這樣,聯合分佈P(I,S,G)可以分解為三個條件概率分佈(CPD)的乘積。

作為一個整體,這3個條件概率分佈詳細說明了聯合分佈在條件獨立性假設下的因果表示,例如:

我們注意到,除了更緊湊的表達方式之外,基於條件獨立性的因果表達方法的另一個好處是,模組性。當增加一個新的變數G時,聯合分佈在整體上會發生變化。而在因子表示中,我們可以重複使用變數I和S的區域性概率模型,並且只需增加對新變數的條件概率P(G|I)即可。這個性質對於模擬真實系統非常有價值。

0x2:樸素貝葉斯模型(naive Bayes) 

上個小節討論的例子被稱之為樸素貝葉斯模型。

樸素貝葉斯模型假設所有的例項屬於若干兩兩互斥且包含所有事例情況的類(class)中的一個。因此,存在一個在某個集合{c1,...,ck}中取值的類變數C。在這個例子中,類變數是學生的智商I,並且存在且只存在事例的兩個類(高智商和低智商)的學生。

模型還包括一定數量的、可以觀測到其值的特徵(feature)X1,....,Xk。樸素貝葉斯假設(naive Bayes assumption)是在給定事例的類的條件下,這些特徵條件獨立。換言之,在事例的每個類內,不同的性質可以獨立地確定,形式化的表達為。

從網路結構上來說,樸素貝葉斯是一種典型的tail-to-tail的貝葉斯網結構,整個貝葉斯網都是由這種結構組成,

樸素貝葉斯模型的貝葉斯網

基於這些獨立性假設,樸素貝葉斯模型的因子分解(factorization)可以表示如下,

0x3:樸素貝葉斯模型應用之困

儘管具有很強的假設,由於簡單並且只需要少量引數,樸素貝葉斯模型經常在實踐中作為“分類器”得以應用,例如基於樸素貝葉斯模型的垃圾郵件分類器。

這個模型最早被應用於醫療診斷,其中,類變數的不同值用於表示患者可能患的不同疾病。證據變數用於表示不同症狀、化驗結果等。在簡單的疾病診斷上,樸素貝葉斯模型確實發揮了很好的作用,甚至比人類專家的診斷結果都要好。但是在更深度的應用中,醫生髮現,對於更復雜(由多種致病原因和症狀共同表現)的疾病,模型表現的並不好。

資料科學家經過分析認為,出現這種現象的原因在於:模型做了集中通常並不真實的強假設,例如:

一個患者至多可能患一種疾病

在已知患者的疾病條件下,不同症狀的出現與否,不同化驗結果,之間是互相獨立的

這種模型可用於醫學診斷是因為少量可解釋的引數易於由專家獲得,早期的機器輔助醫療診斷系統正式建立在這一技術之上。

但是,之後更加深入的實踐表明,構建這種模型的強假設降低了模型診斷的準確性,尤其是“過度計算”某些特定的證據,該模型很容易過高估計某些方面特徵的影響。

例如,“高血壓”和“肥胖症”是心臟病的兩個硬指標,但是,這兩個症狀之間相關度很高,高血壓一般就伴隨著肥胖症。在使用樸素貝葉斯公式計算的時候,由於乘法項的緣故,關於這方面的證據因子就會被重複計算,如下式:

P(心臟病 | 高血壓,肥胖症) = P(高血壓 | 心臟病) * P(高血壓 | 肥胖症) / P(高血壓,肥胖症)

由於“高血壓”和“肥胖症”之間存在較強相關性的緣故,我們可以很容易想象,分子乘積增加的比率是大於分母聯合分佈增加的比率的。因此,當分子項繼續增加的時候,最終的後驗概率就會不斷增大。但是因為新增的特徵項並沒有提供新的資訊,後驗概率的這種增大變化反而降低了模型的預測效能。

實際上,在實踐中人們發現,樸素貝葉斯模型的診斷效能會隨著特徵的增加而降低,這種降低常常歸因於違背了強條件獨立性假設。

Relevant Link:     

https://www.cnblogs.com/LittleHann/p/7199242.html#_label6

 

6. 基於貝葉斯網解決三門問題(蒙提霍爾問題)

本章來自雲棲社群一篇很棒的文章。

主持人會向挑戰者展示三扇關著的門,其中一扇門之後有一輛車,其它門後則有一些無價值的東西。挑戰者並不知道哪扇門背後是車。

現在挑戰者可以先選擇一扇門。然後,主持人會開啟剩下的兩扇門中沒有車的一扇。現在,挑戰者可以選擇是否更換選擇的門,但是問題來了,我們應該更換嗎?

直覺上看,主持人似乎並沒有透露任何資訊。事實證明這種直覺並不完全正確。讓我們使用我們的新工具"貝葉斯網"來分析這個問題。

我們首先先定義一些隨機變數:

  • D:背後有車的門:可取值為 1、2 或 3;D是未被觀察到的隨機變數。
  • F:你的第一個選擇:可取值為 1、2 或 3;D是已被觀察到的隨機變數。
  • H:主持人開啟的門:可取值為 1、2 或 3;主持人開啟其中一扇門之前,H 都是未被觀察到的。
  • I:F 是否是 D?:可取值為 0、1;I是未被觀察到的隨機變數。

我們建立初始狀態貝葉斯網結構(即挑戰者做出的選擇,但是主持人還未開啟一扇門):

注意到:

  • D 和 F 是相互獨立的,因為此時I和H都是未知的(參考文章前面談到的head-to-head獨立結構)
  • I 依賴於 D 和 F
  • 主持人選擇的門 H 也取決於 D 和 F
  • 目前我們對 D 還一無所知,因為F是和D是獨立的,因此知道F並不能對D有任何資訊影響(這與學生網路的結構類似,即知道學生的智力水平不能讓你獲得有關課程難度的任何資訊。) 

現在,主持人選擇了門 H 並打開了它。所以現在 H 已被觀察到。 

現在貝葉斯網的條件概率情況發生了變化:

  • I<-D->H是一種tail-to-tail結構,D是未知的,所以 H 的資訊影響力可以通過D傳遞到 I,因此已知 H 提供了對 I 的一些資訊

也就是說,當支援人打開了剩下的兩扇門中沒有車的一扇後,挑戰者理性的做法是改變自己最初的決策。

下面用CPD表格來形式化地分析這個遊戲過程:

  • D 和 F 都是先驗概率,背後有車的門可能是這些門中的任何一扇且概率相等,我們選擇其中一扇的概率是一樣的。
  • I 依賴於 D 和 F 的先驗:
    • 當 D,F 一樣時,I=1
    • 當 D,F 不一樣時,I=0
  • H 依賴於 D 和 F 的先驗:
    • D,F 一樣時,那麼主持人從另外兩扇門選擇一扇門的概率一樣
    • 如果 D 和 F 不一樣,那麼主持人就選擇第三扇門

現在,讓我們假設我們已經選擇了一扇門。也就是說現在已經觀察到 F,假設 F=1。那麼給定 F 時,I 和 D 的條件概率是多少?

基於上面CPD表格計算邊緣概率得:

到目前為止,我們選對了門的概率都是三分之一,汽車仍然有可能在任何一扇門之後且概率相等。

現在,主持人打開了 F 之外的另一扇門,所以我們觀察到了 H。假設 H=2。讓我們再計算給定了 F 和 H 時 I 和 D 的條件概率。

概率計算結果如下:

可以看到,我們第一個選擇正確的概率仍然是三分之一,我們的直覺也是如此。但是,現在車在第 3 扇門後的概率不再是三分之一,而是三分之二了。

所以如果我們更換選擇,那麼我們得到車的概率是三分之二;如果我們不換,我們得到車的概率是三分之一。 

這裡介紹一個pomegranate庫,它抽象了概率圖模型的底層細節,我們可以方便地基於API進行上層應用建模。

# -*- coding: utf-8 -*-

from pomegranate import *


if __name__ == '__main__':
    guest = DiscreteDistribution({'A': 1./3, 'B': 1./3, 'C': 1./3})
    prize = DiscreteDistribution({'A': 1./3, 'B': 1./3, 'C': 1./3})
    monty = ConditionalProbabilityTable(
            [['A', 'A', 'A', 0.0],
             ['A', 'A', 'B', 0.5],
             ['A', 'A', 'C', 0.5],
             ['A', 'B', 'A', 0.0],
             ['A', 'B', 'B', 0.0],
             ['A', 'B', 'C', 1.0],
             ['A', 'C', 'A', 0.0],
             ['A', 'C', 'B', 1.0],
             ['A', 'C', 'C', 0.0],
             ['B', 'A', 'A', 0.0],
             ['B', 'A', 'B', 0.0],
             ['B', 'A', 'C', 1.0],
             ['B', 'B', 'A', 0.5],
             ['B', 'B', 'B', 0.0],
             ['B', 'B', 'C', 0.5],
             ['B', 'C', 'A', 1.0],
             ['B', 'C', 'B', 0.0],
             ['B', 'C', 'C', 0.0],
             ['C', 'A', 'A', 0.0],
             ['C', 'A', 'B', 1.0],
             ['C', 'A', 'C', 0.0],
             ['C', 'B', 'A', 1.0],
             ['C', 'B', 'B', 0.0],
             ['C', 'B', 'C', 0.0],
             ['C', 'C', 'A', 0.5],
             ['C', 'C', 'B', 0.5],
             ['C', 'C', 'C', 0.0]], [guest, prize])

    s1 = Node(guest, name="guest")
    s2 = Node(prize, name="prize")
    s3 = Node(monty, name="monty")

    model = BayesianNetwork("Monty Hall Problem")
    model.add_states(s1, s2, s3)
    model.add_edge(s1, s3)
    model.add_edge(s2, s3)
    model.bake()

    print model.probability([['A', 'A', 'A'],
                             ['A', 'A', 'B'],
                             ['C', 'C', 'B']])

    print model.predict([['A', 'B', None],
                         ['A', 'C', None],
                         ['C', 'B', None]])

    print model.predict([['A', 'B', None],
                         ['A', None, 'C'],
                         [None, 'B', 'A']])

 

Relevant Link:  

https://yq.aliyun.com/articles/280788

  

7. 基於貝葉斯網進行影象降噪

假設我們有以下影象:

 

現在假設這張影象受到了隨機噪聲的汙染,變成了有噪聲的影象:

現在我們的目標是恢復原始影象。讓我們看看如何使用概率圖模型來實現。

0x1:問題分析

我們將有噪聲影象中的每個畫素都定義為一個觀察到的隨機變數,並將基準影象中的每個畫素都定義為一個未被觀察到的變數,由此,觀察到的變數和未被觀察到的變數都為 MxN 個。

我們將觀察到的變量表示為 X_ij,未被觀察到的變數定義為 Y_ij。每個變數都可取值 +1 或 -1(分別對應於黑色畫素和白色畫素)。

給定觀察到的變數,我們希望找到未觀察到的變數的最有可能的值。這對應於 MAP 推理。

0x2:圖結構構建

現在讓我們使用一些領域知識來構建圖結構:

  • 在有噪聲影象中的 (i,j) 位置觀察到的變數取決於在基準影象中的 (i,j) 位置未觀察到的變數。原因是大多數時候它們是相等的,即 X_ij 和 Y_ij 的初始先驗是相等的。
  • 對於基準影象,
    • 在每個單一顏色的區域內,鄰近的畫素通常有一樣的值,因此,如果 Y_ij 和 Y_kl 是鄰近畫素,那麼我們將它們連線起來。
    • 在顏色變化的邊界沒有這個性質。

由此,我們得到圖結構:

  • 白色節點表示未被觀察到的變數 Y_ij
  • 灰色節點表示觀察到的變數 X_ij
  • 每個 X_ij 都連線到對應的 Y_ij
  • 每個 Y_ij 都連線到它的相鄰節點

這個圖結構的先驗知識非常重要,這是我們後面進行概率推理的一個重要條件。

0x3:圖推理過程

我們的 MAP 推理問題可以用數學的方式寫出,如下: 

現在,我們需要根據我們的圖結構來定義我們的聯合分佈 P(X,Y)。讓我們假設 P(X,Y) 由兩類因子組成,ϕ(X_ij, Y_ij) 和 ϕ(Y_ij,Y_kl),對應於圖中的兩類邊。

接下來,我們按如下方式定義這些因子:

  • ϕ(X_ij, Y_ij) = exp(w_e X_ij Y_ij),其中 w_e 是一個大於 0 的引數。當 X_ij 和 Y_ij 相等時,這個因子取較大的值,當 X_ij 和 Y_ij 不同時就取較小的值。
  • ϕ(Y_ij, Y_kl) = exp(w_s Y_ij Y_kl),其中 w_s 也是一個大於 0 的引數。當 Y_ij 和 Y_kl 取值相等時,這個因子較大。

因此,我們的聯合分佈可由下式給出:

將其插入到我們的 MAP 推理式中,可得:

有了這些引數後,我們需要求解上述 MAP 推理問題。我們可以使用迭代條件模式(ICM/iterated conditional mode)。其基本思想是:在每個步驟選擇一個節點 Y_ij,然後檢查 Y_ij=-1 和 Y_ij=1 時 MAP 推理表示式的值,然後選擇值更高的那個。重複這個過程一定的迭代次數或直到收斂,通常就能得到相當好的結果。

下面程式碼中展示了這個過程,需要特別體會的是,這是一個動態的概率調整過程,每次畫素的猜測的同時都相當於向網路中輸入了新的資訊,網路中的條件概率也因此發生了改變。

# -*- coding: utf-8 -*-

import numpy as np
from PIL import Image
import sys


# look up the value of Y for the given indices
# if the indices are out of bounds, return 0
def compute_log_prob_helper(Y, i, j):
    try:
        return Y[