書接上文 :從樸素貝葉斯分類器到貝葉斯網絡(上) 算法
3、貝葉斯網絡網絡
貝葉斯網絡(Bayesian Network)是一種用於表示變量間依賴關係的數據結構。有時它又被稱爲信念網絡(Belief Network)或機率網絡(Probability Network)。在統計學習領域。機率圖模型(PGM,Probabilistic Graphical Models)常用來指代包括貝葉斯網絡在內的更加寬泛的一類機器學習模型。好比隱馬爾可夫模型(HMM,Hidden Markov Model)也是一種PGM。數據結構
詳細而言,貝葉斯網絡是一個有向無環圖(Directed Acyclic Graph),當中每個節點都標註了定量的機率信息,並具備例如如下結構特色:機器學習
(1)一個隨機變量集構成了圖結構中的節點集合。變量可以是離散的,也可以是連續的。ide
(2)一個鏈接節點對的有向邊集合反映了變量間的依賴關係。函數
假設存在從節點X指向節點Y的有向邊,則稱X是Y的一個父節點。post
(3)每個節點Xi都有一個(在給定父節點狀況下的)條件機率分佈,這個分佈量化了父節點對其之影響。學習
在一個正確構造的網絡中,箭頭顯式地表示了X對Y的直接影響。spa
而這樣的影響關係每每來自於現實世界的經驗分析。.net
一旦設計好貝葉斯網絡的拓撲結構,僅僅要再爲每個節點指定當給定詳細父節點時的條件機率,那麼一個主要的機率圖模型就創建完畢了。雖然現實中貝葉斯網絡的結構可能很複雜。但無論多麼複雜的拓撲本質上都是由一些主要的結構單元通過必定之組合演繹出來的。
而且終於的拓撲和相應的條件機率全然可以給出所有變量的聯合分佈。這樣的表現方式遠比列出所有的聯合機率分佈要精簡得多。圖1給出了三種主要的結構單元,如下咱們將分別對它們進行介紹。
圖1 三種主要的結構單元
而對於樸素貝葉斯中的假設,即變量之間是條件獨立(Conditionally Independent)的,那麼可以畫出此種結構如圖1中的左圖所看到的。
這代表在給定Y的狀況下,X和Z是條件獨立的。
其次,第二種與之相反的狀況如圖1中的中圖所看到的。此時X和Z是全然獨立的。
咱們一般把左圖的狀況稱爲「Common Cause」,而把中圖的狀況稱爲「Common Effect」。
最後,對於圖1中右圖所看到的的鏈式結構,X和Z再也不是相互獨立的。但在給定Y時,X和Z就是獨立的。因爲P(Z|X,Y)=P(Z|Y)。
文獻[1]中給出了一個簡單的貝葉斯網絡演示樣例。如圖2所看到的。假設你在家裏安裝了一個防盜報警器。
這個報警器對於探測盜賊的闖入很可靠,但是偶爾也會對輕微的地震有所反應。你還有兩個鄰居John和Mary。他們保證在你工做時假設聽到警報聲就給你打電話。John聽到警報聲時老是會給你打電話,但是他們有時候會把電話鈴聲當成警報聲,而後也會打電話給你。另外一方面,Mary特別喜歡大聲聽音樂,所以有時候根本聽不見警報聲。給定了他們是否給你打電話的證據,咱們但願預計假設有人入室行竊的機率。
圖2 貝葉斯網絡演示樣例
現在臨時忽略圖中的條件機率分佈,而是將注意力集中於網絡的拓撲結構上。
在這個防盜網絡的案例中。拓撲結構代表盜賊和地震直接影響到警報的機率(這至關於一個Common Effect的結構),但是John或者Mary是否打電話僅僅取決於警報聲(這至關於一個Common Cause的結構)。所以網絡表示出了咱們的一些假設:「John和Mary不直接感知盜賊,也不會注意到輕微的地震」(這代表當給定隨機變量Alarm時,「盜賊或地震」都獨立於「打電話」),而且他們不會在打電話以前交換意見(因此在給定隨機變量Alarm時,John打電話和Mary打電話就是條件獨立的)。
注意網絡中沒有相應於Mary當前正在大聲聽音樂或者電話鈴聲響起來使得John誤覺得是警報的節點。這些因素實際上已經被歸納在與從Alarm到JohnCalls或者到MaryCalls這兩條邊相關聯的不肯定性中了。
這同一時候體現了操做中的惰性與無知:要搞清楚爲何那些因素會以或多或少的可能性出現在不論什麼特殊狀況下,需要大量的工做,而且無論怎樣咱們都沒有合理的途徑來獲取相關信息。上面的機率實際上歸納了各類狀況的潛在無限集合,當中包括報警器可能會失效的狀況(諸如環境溼度太高、電力故障、電線被切斷、警鈴裏卡了一僅僅死老鼠等等)或者John和Mary沒有打電話報告的狀況(諸如出去吃午餐了、外出度假、臨時性失聰、直升機剛巧飛過而噪聲隆隆等)。如此一來,一個小小的智能體可以處理很龐大的世界。至少是近似地處理。假設咱們可以引入附加的相關信息,近似的程度還可以進一步地提升。
現在回到圖中的條件機率分佈上。
每個分佈都被顯示爲一個條件機率表(CPT, Conditional Probability Table)。這樣的形式的表格適用於離散型隨機變量。本文也僅討論這樣的類型的表示方法。
CPT中的每一行包括了每個節點值在給定條件下的條件機率。這個所謂的「給定條件」就是所有父節點取值的某個可能組合。每一行機率加起來和必需是1,因爲行中條目表示了該相應變量的一個無遺漏的狀況集合。
對於布爾變量,一旦知道它爲真的機率是p,那麼它爲假的機率就應該是1-p。
因此可以省略第二個數值。一般,一個具備k個布爾父節點的布爾變量的CPT中有2^k個獨立的可指定機率。
而對於沒有父節點的節點而言,它的CPT僅僅有一行,表示了該變量可能取值的先驗機率(好比圖中的Burglary和Earthquake相應的CPT)。
4、模型推理
當咱們已經肯定了一個貝葉斯網絡的結構時。怎樣利用它進行推理將成爲焦點。好比現在咱們想知道當John和Mary都打電話時發生地震的機率。
即 P(E = T | J = T, M = T) = ?
總的來講,一般可採用的方法有三種:1)首先是利用與樸素貝葉斯類似方法來進行推理(當中相同用到貝葉斯公式),咱們稱其爲枚舉法;2)其次是一種更爲常用的算法。咱們稱之爲消去法;3)最後另外一種基於蒙特卡洛法的近似推理方法,本文將僅討論前兩種算法。
4.1 枚舉法
爲了詳細地說明原委。咱們仍是從一個簡單的機率論知識點開始。衆所周知。由n個隨機變量X1, X2, ..., Xn構成的向量
X = (X1, X2, ..., Xn) 稱爲n維隨機向量(或稱n維隨機變量)。首先咱們以二維隨機向量(X,Y)爲例來講明邊緣分佈的概念。隨機向量(X,Y)的分佈函數F(x,y)全然決定了其份量的機率特徵。
因此由F(x,y)便能得出份量X的分佈函數FX(x),以及份量Y的分佈函數FY(y)。而相對於聯合分佈F(x,y),份量的分佈FX(x)和FY(y)稱爲邊緣分佈。由
FX(x) = P{X ≤ x} = P{X ≤ x, Y ≤ +∞} = F(x, +∞)
FY(y) = P{Y ≤ y} = P{X ≤ +∞,Y ≤ y} = F(+∞, y)
可得
FX(x) = F(x, +∞), FY(y) = F(+∞, y)
若(X,Y)爲二維離散隨機變量,則
若(X,Y)爲二維連續隨機變量,設密度函數爲p(x,y),則
回憶在樸素貝葉斯中所使用的策略。咱們依據已經觀察到的證據計算查詢命題的後驗機率。並將使用全聯合機率分佈做爲「知識庫」,從中可以獲得所有問題的答案。這當中貝葉斯公式發揮了重要做用,而如下的演示樣例相同演示了邊緣分佈的做用。
從一個很簡單的樣例開始:一個由3個布爾變量Toothache、Cavity以及Catch (因爲牙醫的鋼探針不潔而致使的牙齦感染)組成的定義域。其全聯合分佈是一個2 × 2 × 2 的表格,例如如下表所看到的。
依據機率公理的要求。聯合分佈中的所有機率之和爲1 。
不論是簡單命題仍是複合命題,咱們僅僅需要肯定在當中命題爲真的那些原子事件。而後把它們的機率加起來就可得到不論什麼命題的機率。好比,命題Cavity ∨ Toothache在 6 個原子事件中成立,因此可得
P(Cavity ∨ Toothache) = 0.108 + 0.012 + 0.072 + 0.008 + 0.165 + 0.064 = 0.28
一個特別常見的任務是將隨機變量的某個子集或者某單個變量的分佈抽取出來。也就是咱們前面提到的邊緣分佈。
好比,將所有Cavity取值爲真的條目抽取出來在求和就獲得了Cavity的無條件機率(也就是邊緣機率)
P(Cavity) = 0.108 + 0.012 + 0.072 + 0.008 = 0.2
該過程稱爲邊緣化(Marginalisation),或者稱爲「和出」(Summing Out)——因爲除了Cavity之外的變量都被求和過程排除在外了。
對於不論什麼兩個變量集合Y和Z,可以寫出例如如下的通用邊緣化規則(這其實就是前面給出的公式,咱們僅僅是作了簡單的變量替換)
也就是說。Y的分佈可以經過依據不論什麼包括Y的聯合機率分佈對所有其餘變量進行求和消元獲得。依據乘法規則,這條規則的一個變形涉及條件機率而不是聯合機率:
這條規則稱爲條件化。之後會發現。對於涉及機率表達式的所有種類的推導過程,邊緣 化和條件化具備很強大的威力。
在大部分狀況下。在給定關於某些其餘變量的條件下,咱們會對計算某些變量的條件機率產生感興趣。
條件機率可以如此找到:首先依據條件機率的定義式獲得一個無條件機率的表達式,而後再依據全聯合分佈對錶達式求值。
好比。在給定牙疼的條件下。可以計算蛀牙的機率爲
P(Cavity | Toothache) = P(Cavity ∧ Toothache) / P(Toothache)
=( 0.108 +0.012) / (0.108 + 0.012 + 0.016 + 0.064) = 0.6
爲了驗算。還可以計算已知牙疼的條件下。沒有蛀牙的機率爲
P(┐Cavity | Toothache) = P(┐Cavity ∧ Toothache) / P(Toothache)
=( 0.016 +0.064) / (0.108 + 0.012 + 0.016 + 0.064) = 0.4
注意這兩次計算中的項 1/P(Toothache) 是保持不變的,與咱們計算的Cavity的值無關。其實,可以把它當作是P(Cavity I Toothache) 的一個歸一化常數,保證其所包括的機率相加等於1,也就是忽略P(Toothache) 的值,這一點咱們在樸素貝葉斯部分已經講過。
此外,咱們將用α來表示這樣的常數。用這個符號咱們可以把前面的兩個公式合併寫成一個:
P(Cavity | Toothache) =α P(Cavity, Toothache)
=α [P(Cavity, Toothache, Catch) + P(Cavity, Toothache, ┐Catch)]
=α [〈0.108, 0.016〉+〈0.012, 0.064〉] = α〈0.12, 0.08〉=〈0.6, 0.4〉
在許多機率的計算中,歸一化都是一個很實用的捷徑。
從這個例於裏可以抽取出一個通用推理過程。
咱們將僅僅考慮查詢僅涉及一個變量的狀況。咱們將需要使用一些符號表示:令X 爲查詢變量(前面樣例中的Cavity);令E 爲證據變量集合(也就是給定的條件,即前面樣例中的Toothache )。 e 表示其觀察值;並令 Y 爲其他的未觀測變量(就是前面例於中的Catch) 。查詢爲P(X I e)。可以對它求值:
當中的求和針對所有可能的y (也就是對未觀測變量Y的值的所有可能組合)。注意變量 X, E 以及Y一塊兒構成了域中所有布變量的完整集合。因此P(X, e, y)僅僅只是是來自全聯合分佈機率的一個子集。算法對所有X和Y的值進行循環以枚舉當 e 固定時所有的原子事件。而後依據全聯合分佈的機率表將它們的機率加起來,最後對結果進行歸一化。
如下咱們就用枚舉法來解決本節開始時拋出的問題: P(E = T | J = T, M = T) = ?
P(E|j,m) = α P(E, j, m)
當中。咱們用小寫字母 j 和 m 來表示 J = T。以及M = T(也就是給定J和M)。
但表達式的形式是P(E|j,m)而非P(e|j,m),這是因爲咱們要將E = T 和 E = F這兩個公式合併起來寫成一個。
相同,α 是標準化常數。而後就要針對其餘未觀測變量(也就是本題中的Burglary和Alarm)的值的所有可能組合進行求和,則有
依據圖2中所看到的之貝葉斯網絡。應該很easy可以寫出下列關係式。
假設你沒法輕易地看出這樣的關係,也可以經過公式推導一步一步的得出。首先。在給定條件a的狀況下。J和M條件獨立。因此有P(j,m|a) = P(j|a)P(m|a)。B和E獨立。因此有P(b)P(E)=P(b,E)。進而有P(b)P(E)P(a|b,E)=P(a,b,E)。
在給定a的時候。b、E和j、m獨立(相應圖1中的第3種狀況),因此有P(j,m|a) = P(j,m|a,b,E)。由這幾個關係式就能得出上述結論。
如下咱們來循環枚舉並加和消元。
在計算上還可以略微作一點改進。
因爲P(E)對於ΣaΣb來講是一個常數,因此可以把它提出來。這樣就避免了屢次乘以P(E)所形成的低效。
上式中所有的值都可以基於CPT求得。算術固然是很繁雜的,咱們這裏不詳細給出終於的結果。但一個顯而易見的事實是當變量的數目變多時,全聯合分佈的表長增加是至關驚人的!因此咱們很但願可以有一種更輕巧的辦法來替代這樣的枚舉法,因而便有了如下將要介紹的消去法。
4.2 消去法
變量消去算法(Variable Elimination Algorithm)是一種基於動態規劃思想設計的算法。
而且在算法運行的過程當中需要使用因子表來儲存中間結果,當再次需要使用時無需又一次計算而僅僅需調用已知結果,這樣就減小了算法運行的時間消耗。
Each factor is a matrix indexed by the values of its argument variable. 好比。與P(j|a)和P(m|a)相相應的因子fJ(A)和fM(A)僅僅依賴於A。因爲J和M在咱們的問題裏是已知的,所以fJ(A)和fM(A)都是兩個元素的矩陣(也是向量)
在這樣的記法中括號中的參數表示的是變量,而下標僅僅是一種記號。因此你也可以使用f4(A)和f5(A)來取代fJ(A)和fM(A)。但咱們這裏使用J和M來做爲下標的意圖是考慮用P( _ | A)的 _ 來做爲標記。因此P(a|b,E)可以寫成fA(A, B, E)。注意因爲A,B, E都是未知的。因此fA(A, B, E) 就是一個2×2×2的矩陣。即
最初的因子表是經CPT改造而來的,例如如下圖所看到的。
而後進行自底向上的計算,Step1: fJ(A)×fM(A) = fJM(A),A仍然是變量,則有
此時新產生的因子表爲
Step2: fA(A, B, E)×fJM(A) = fAJM(A, B, E),即
此時新產生的因子表爲
Step3:
此時新產生的因子表爲
Step4:
此時新產生的因子表爲
Step5:
此時新產生的因子表爲
Step6:
此時新產生的因子表爲
由此即可依據上表算得問題之答案
P(E=T | j,m) = P(E=T | j,m) / [P(E=T | j,m) + P(E=F | j,m)] = 0.0037/(0.0037 + 0.0069) = 0.3491
最後總結一下消去算法的運行步驟:
參考文獻
[1] Stuart Russell and Peter Norvig. Artificial Intelligence: A Modern Approach.[2] Some examples from: Kevin B. Korb and Ann E. Nicholson. Bayesian Artificial Intelligence[3] Some slides derived from The University of Melbourne Statistical Machine Learning (COMP90051)