1. 程式人生 > >機器學習-貝葉斯算法

機器學習-貝葉斯算法

format .org bubuko 最值 walk 科普 3.1 空間 中心

0. 前言

這是一篇關於貝葉斯方法的科普文,我會盡量少用公式,多用平白的語言敘述,多舉實際例子。更嚴格的公式和計算我會在相應的地方註明參考資料。貝葉斯方法被證明是非常 general 且強大的推理框架,文中你會看到很多有趣的應用。

1. 歷史

托馬斯·貝葉斯(Thomas Bayes)同學的詳細生平在這裏。以下摘一段 wikipedia 上的簡介:

所謂的貝葉斯方法源於他生前為解決一個“逆概”問題寫的一篇文章,而這篇文章是在他死後才由他的一位朋友發表出來的。在貝葉斯寫這篇文章之前,人們已經能夠計算“正向概率”,如“假設袋子裏面有N個白球,M個黑球,你伸手進去摸一把,摸出黑球的概率是多大”。而一個自然而然的問題是反過來:“如果我們事先並不知道袋子裏面黑白球的比例,而是閉著眼睛摸出一個(或好幾個)球,觀察這些取出來的球的顏色之後,那麽我們可以就此對袋子裏面的黑白球的比例作出什麽樣的推測”。這個問題,就是所謂的逆概問題。

實際上,貝葉斯當時的論文只是對這個問題的一個直接的求解嘗試,並不清楚他當時是不是已經意識到這裏面包含著的深刻的思想。然而後來,貝葉斯方法席卷了概率論,並將應用延伸到各個問題領域,所有需要作出概率預測的地方都可以見到貝葉斯方法的影子,特別地,貝葉斯是機器學習的核心方法之一。這背後的深刻原因在於,現實世界本身就是不確定的,人類的觀察能力是有局限性的(否則有很大一部分科學就沒有必要做了——設想我們能夠直接觀察到電子的運行,還需要對原子模型爭吵不休嗎?),我們日常所觀察到的只是事物表面上的結果,沿用剛才那個袋子裏面取球的比方,我們往往只能知道從裏面取出來的球是什麽顏色,而並不能直接看到袋子裏面實際的情況。這個時候,我們就需要提供一個猜測(hypothesis,更為嚴格的說法是“假設”,這裏用“猜測”更通俗易懂一點),所謂猜測,當然就是不確定的(很可能有好多種乃至無數種猜測都能滿足目前的觀測),但也絕對不是兩眼一抹黑瞎蒙——具體地說,我們需要做兩件事情:1. 算出各種不同猜測的可能性大小。2. 算出最靠譜的猜測是什麽。第一個就是計算特定猜測的後驗概率,對於連續的猜測空間則是計算猜測的概率密度函數。第二個則是所謂的模型比較,模型比較如果不考慮先驗概率的話就是最大似然方法。

1.1 一個例子:自然語言的二義性

下面舉一個自然語言的不確定性的例子。當你看到這句話:

The girl saw the boy with a telescope.

你對這句話的含義有什麽猜測?平常人肯定會說:那個女孩拿望遠鏡看見了那個男孩(即你對這個句子背後的實際語法結構的猜測是:The girl saw-with-a-telescope the boy )。然而,仔細一想,你會發現這個句子完全可以解釋成:那個女孩看見了那個拿著望遠鏡的男孩(即:The girl saw the-boy-with-a-telescope )。那為什麽平常生活中我們每個人都能夠迅速地對這種二義性進行消解呢?這背後到底隱藏著什麽樣的思維法則?我們留到後面解釋。

1.2 貝葉斯公式

貝葉斯公式是怎麽來的?

我們還是使用 wikipedia 上的一個例子:

一所學校裏面有 60% 的男生,40% 的女生。男生總是穿長褲,女生則一半穿長褲一半穿裙子。有了這些信息之後我們可以容易地計算“隨機選取一個學生,他(她)穿長褲的概率和穿裙子的概率是多大”,這個就是前面說的“正向概率”的計算。然而,假設你走在校園中,迎面走來一個穿長褲的學生(很不幸的是你高度近似,你只看得見他(她)穿的是否長褲,而無法確定他(她)的性別),你能夠推斷出他(她)是男生的概率是多大嗎?

一些認知科學的研究表明(《決策與判斷》以及《Rationality for Mortals》第12章:小孩也可以解決貝葉斯問題),我們對形式化的貝葉斯問題不擅長,但對於以頻率形式呈現的等價問題卻很擅長。在這裏,我們不妨把問題重新敘述成:你在校園裏面隨機遊走,遇到了 N 個穿長褲的人(仍然假設你無法直接觀察到他們的性別),問這 N 個人裏面有多少個女生多少個男生。

你說,這還不簡單:算出學校裏面有多少穿長褲的,然後在這些人裏面再算出有多少女生,不就行了?

我們來算一算:假設學校裏面人的總數是 U 個。60% 的男生都穿長褲,於是我們得到了 U * P(Boy) * P(Pants|Boy) 個穿長褲的(男生)(其中 P(Boy) 是男生的概率 = 60%,這裏可以簡單的理解為男生的比例;P(Pants|Boy) 是條件概率,即在 Boy 這個條件下穿長褲的概率是多大,這裏是 100% ,因為所有男生都穿長褲)。40% 的女生裏面又有一半(50%)是穿長褲的,於是我們又得到了 U * P(Girl) * P(Pants|Girl) 個穿長褲的(女生)。加起來一共是 U * P(Boy) * P(Pants|Boy) + U * P(Girl) * P(Pants|Girl) 個穿長褲的,其中有 U * P(Girl) * P(Pants|Girl) 個女生。兩者一比就是你要求的答案。

下面我們把這個答案形式化一下:我們要求的是 P(Girl|Pants) (穿長褲的人裏面有多少女生),我們計算的結果是 U * P(Girl) * P(Pants|Girl) / [U * P(Boy) * P(Pants|Boy) + U * P(Girl) * P(Pants|Girl)] 。容易發現這裏校園內人的總數是無關的,可以消去。於是得到

P(Girl|Pants) = P(Girl) * P(Pants|Girl) / [P(Boy) * P(Pants|Boy) + P(Girl) * P(Pants|Girl)]

註意,如果把上式收縮起來,分母其實就是 P(Pants) ,分子其實就是 P(Pants, Girl) 。而這個比例很自然地就讀作:在穿長褲的人( P(Pants) )裏面有多少(穿長褲)的女孩( P(Pants, Girl) )。

上式中的 Pants 和 Boy/Girl 可以指代一切東西,所以其一般形式就是:

P(B|A) = P(A|B) * P(B) / [P(A|B) * P(B) + P(A|~B) * P(~B) ]

收縮起來就是:

P(B|A) = P(AB) / P(A)

其實這個就等於:

P(B|A) * P(A) = P(AB)

難怪拉普拉斯說概率論只是把常識用數學公式表達了出來

然而,後面我們會逐漸發現,看似這麽平凡的貝葉斯公式,背後卻隱含著非常深刻的原理。

2. 拼寫糾正

經典著作《人工智能:現代方法》的作者之一 Peter Norvig 曾經寫過一篇介紹如何寫一個拼寫檢查/糾正器的文章(原文在這裏,徐宥的翻譯版在這裏,這篇文章很深入淺出,強烈建議讀一讀),裏面用到的就是貝葉斯方法,這裏我們不打算復述他寫的文章,而是簡要地將其核心思想介紹一下。

首先,我們需要詢問的是:“問題是什麽?

問題是我們看到用戶輸入了一個不在字典中的單詞,我們需要去猜測:“這個家夥到底真正想輸入的單詞是什麽呢?”用剛才我們形式化的語言來敘述就是,我們需要求:

P(我們猜測他想輸入的單詞 | 他實際輸入的單詞)

這個概率。並找出那個使得這個概率最大的猜測單詞。顯然,我們的猜測未必是唯一的,就像前面舉的那個自然語言的歧義性的例子一樣;這裏,比如用戶輸入: thew ,那麽他到底是想輸入 the ,還是想輸入 thaw ?到底哪個猜測可能性更大呢?幸運的是我們可以用貝葉斯公式來直接出它們各自的概率,我們不妨將我們的多個猜測記為 h1 h2 .. ( h 代表 hypothesis),它們都屬於一個有限且離散的猜測空間 H (單詞總共就那麽多而已),將用戶實際輸入的單詞記為 D ( D 代表 Data ,即觀測數據),於是

P(我們的猜測1 | 他實際輸入的單詞)

可以抽象地記為:

P(h1 | D)

類似地,對於我們的猜測2,則是 P(h2 | D)。不妨統一記為:

P(h | D)

運用一次貝葉斯公式,我們得到:

P(h | D) = P(h) * P(D | h) / P(D)

對於不同的具體猜測 h1 h2 h3 .. ,P(D) 都是一樣的,所以在比較 P(h1 | D) 和 P(h2 | D) 的時候我們可以忽略這個常數。即我們只需要知道:

P(h | D) ∝ P(h) * P(D | h) (註:那個符號的意思是“正比例於”,不是無窮大,註意符號右端是有一個小缺口的。)

這個式子的抽象含義是:對於給定觀測數據,一個猜測是好是壞,取決於“這個猜測本身獨立的可能性大小(先驗概率,Prior )”和“這個猜測生成我們觀測到的數據的可能性大小”(似然,Likelihood )的乘積。具體到我們的那個 thew 例子上,含義就是,用戶實際是想輸入 the 的可能性大小取決於 the 本身在詞匯表中被使用的可能性(頻繁程度)大小(先驗概率)和 想打 the 卻打成 thew 的可能性大小(似然)的乘積。

下面的事情就很簡單了,對於我們猜測為可能的每個單詞計算一下 P(h) * P(D | h) 這個值,然後取最大的,得到的就是最靠譜的猜測。

一點註記:Norvig 的拼寫糾正器裏面只提取了編輯距離為 2 以內的所有已知單詞。這是為了避免去遍歷字典中每個單詞計算它們的 P(h) * P(D | h) ,但這種做法為了節省時間帶來了一些誤差。但話說回來難道我們人類真的回去遍歷每個可能的單詞來計算他們的後驗概率嗎?不可能。實際上,根據認知神經科學的觀點,我們首先根據錯誤的單詞做一個 bottom-up 的關聯提取,提取出有可能是實際單詞的那些候選單詞,這個提取過程就是所謂的基於內容的提取,可以根據錯誤單詞的一些模式片段提取出有限的一組候選,非常快地縮小的搜索空間(比如我輸入 explaination ,單詞裏面就有充分的信息使得我們的大腦在常數時間內把可能性 narrow down 到 explanation 這個單詞上,至於具體是根據哪些線索——如音節——來提取,又是如何在生物神經網絡中實現這個提取機制的,目前還是一個沒有弄清的領域)。然後,我們對這有限的幾個猜測做一個 top-down 的預測,看看到底哪個對於觀測數據(即錯誤單詞)的預測效力最好,而如何衡量預測效率則就是用貝葉斯公式裏面的那個 P(h) * P(D | h) 了——雖然我們很可能使用了一些啟發法來簡化計算。後面我們還會提到這樣的 bottom-up 的關聯提取。

3. 模型比較與奧卡姆剃刀

3.1 再訪拼寫糾正

介紹了貝葉斯拼寫糾正之後,接下來的一個自然而然的問題就來了:“為什麽?”為什麽要用貝葉斯公式?為什麽貝葉斯公式在這裏可以用?我們可以很容易地領會為什麽貝葉斯公式用在前面介紹的那個男生女生長褲裙子的問題裏是正確的。但為什麽這裏?

為了回答這個問題,一個常見的思路就是想想:非得這樣嗎?因為如果你想到了另一種做法並且證明了它也是靠譜的,那麽將它與現在這個一比較,也許就能得出很有價值的信息。那麽對於拼寫糾錯問題你能想到其他方案嗎?

不管怎樣,一個最常見的替代方案就是,選擇離 thew 的編輯距離最近的。然而 the 和 thaw 離 thew 的編輯距離都是 1 。這可咋辦捏?你說,不慌,那還是好辦。我們就看到底哪個更可能被錯打為 thew 就是了。我們註意到字母 e 和字母 w 在鍵盤上離得很緊,無名指一抽筋就不小心多打出一個 w 來,the 就變成 thew 了。而另一方面 thaw 被錯打成 thew 的可能性就相對小一點,因為 e 和 a 離得較遠而且使用的指頭相差一個指頭(一個是中指一個是小指,不像 e 和 w 使用的指頭靠在一塊——神經科學的證據表明緊鄰的身體設施之間容易串位)。OK,很好,因為你現在已經是在用最大似然方法了,或者直白一點,你就是在計算那個使得 P(D | h) 最大的 h 。

而貝葉斯方法計算的是什麽?是 P(h) * P(D | h) 。多出來了一個 P(h) 。我們剛才說了,這個多出來的 P(h) 是特定猜測的先驗概率。為什麽要摻和進一個先驗概率?剛才說的那個最大似然不是挺好麽?很雄辯地指出了 the 是更靠譜的猜測。有什麽問題呢?既然這樣,我們就從給最大似然找茬開始吧——我們假設兩者的似然程度是一樣或非常相近,這樣不就難以區分哪個猜測更靠譜了嗎?比如用戶輸入tlp ,那到底是 top 還是 tip ?(這個例子不怎麽好,因為 top 和 tip 的詞頻可能仍然是接近的,但一時想不到好的英文單詞的例子,我們不妨就假設 top 比 tip 常見許多吧,這個假設並不影響問題的本質。)這個時候,當最大似然不能作出決定性的判斷時,先驗概率就可以插手進來給出指示——“既然你無法決定,那麽我告訴你,一般來說 top 出現的程度要高許多,所以更可能他想打的是 top ”)。

以上只是最大似然的一個問題,即並不能提供決策的全部信息。

最大似然還有另一個問題:即便一個猜測與數據非常符合,也並不代表這個猜測就是更好的猜測,因為這個猜測本身的可能性也許就非常低。比如 MacKay 在《Information Theory : Inference and Learning Algorithms》裏面就舉了一個很好的例子:-1 3 7 11 你說是等差數列更有可能呢?還是 -X^3 / 11 + 9/11*X^2 + 23/11 每項把前項作為 X 帶入後計算得到的數列?此外曲線擬合也是,平面上 N 個點總是可以用 N-1 階多項式來完全擬合,當 N 個點近似但不精確共線的時候,用 N-1 階多項式來擬合能夠精確通過每一個點,然而用直線來做擬合/線性回歸的時候卻會使得某些點不能位於直線上。你說到底哪個好呢?多項式?還是直線?一般地說肯定是越低階的多項式越靠譜(當然前提是也不能忽視“似然”P(D | h) ,明擺著一個多項式分布您楞是去拿直線擬合也是不靠譜的,這就是為什麽要把它們兩者乘起來考慮。),原因之一就是低階多項式更常見,先驗概率( P(h) )較大(原因之二則隱藏在 P(D | h) 裏面),這就是為什麽我們要用樣條來插值,而不是直接搞一個 N-1 階多項式來通過任意 N 個點的原因。

以上分析當中隱含的哲學是,觀測數據總是會有各種各樣的誤差,比如觀測誤差(比如你觀測的時候一個 MM 經過你一不留神,手一抖就是一個誤差出現了),所以如果過分去尋求能夠完美解釋觀測數據的模型,就會落入所謂的數據過配(overfitting)的境地,一個過配的模型試圖連誤差(噪音)都去解釋(而實際上噪音又是不需要解釋的),顯然就過猶不及了。所以 P(D | h) 大不代表你的 h (猜測)就是更好的 h。還要看 P(h) 是怎樣的。所謂奧卡姆剃刀精神就是說:如果兩個理論具有相似的解釋力度,那麽優先選擇那個更簡單的(往往也正是更平凡的,更少繁復的,更常見的)。

過分匹配的另一個原因在於當觀測的結果並不是因為誤差而顯得“不精確”而是因為真實世界中對數據的結果產生貢獻的因素太多太多,跟噪音不同,這些偏差是一些另外的因素集體貢獻的結果,不是你的模型所能解釋的——噪音那是不需要解釋——一個現實的模型往往只提取出幾個與結果相關度很高,很重要的因素(cause)。這個時候觀察數據會傾向於圍繞你的有限模型的預測結果呈正態分布,於是你實際觀察到的結果就是這個正態分布的隨機取樣,這個取樣很可能受到其余因素的影響偏離你的模型所預測的中心,這個時候便不能貪心不足地試圖通過改變模型來“完美”匹配數據,因為那些使結果偏離你的預測的貢獻因素不是你這個有限模型裏面含有的因素所能概括的,硬要打腫臉充胖子只能導致不實際的模型,舉個教科書例子:身高和體重的實際關系近似於一個二階多項式的關系,但大家都知道並不是只有身高才會對體重產生影響,物理世界影響體重的因素太多太多了,有人身材高大卻瘦得跟稻草,有人卻是橫長豎不長。但不可否認的是總體上來說,那些特殊情況越是特殊就越是稀少,呈圍繞最普遍情況(胖瘦適中)的正態分布,這個分布就保證了我們的身高——體重相關模型能夠在大多數情況下做出靠譜的預測。但是——剛才說了,特例是存在的,就算不是特例,人有胖瘦,密度也有大小,所以完美符合身高——體重的某個假想的二階多項式關系的人是不存在的,我們又不是歐幾裏德幾何世界當中的理想多面體,所以,當我們對人群隨機抽取了 N 個樣本(數據點)試圖對這 N 個數據點擬合出一個多項式的話就得註意,它肯定得是二階多項式,我們要做的只是去根據數據點計算出多項式各項的參數(一個典型的方法就是最小二乘);它肯定不是直線(我們又不是稻草),也不是三階多項式四階多項式.. 如果硬要完美擬合 N 個點,你可能會整出一個 N-1 階多項式來——設想身高和體重的關系是 5 階多項式看看?

3.2 模型比較理論(Model Comparasion)與貝葉斯奧卡姆剃刀(Bayesian Occam’s Razor)

實際上,模型比較就是去比較哪個模型(猜測)更可能隱藏在觀察數據的背後。其基本思想前面已經用拼寫糾正的例子來說明了。我們對用戶實際想輸入的單詞的猜測就是模型,用戶輸錯的單詞就是觀測數據。我們通過:

P(h | D) ∝ P(h) * P(D | h)

來比較哪個模型最為靠譜。前面提到,光靠 P(D | h) (即“似然”)是不夠的,有時候還需要引入 P(h) 這個先驗概率。奧卡姆剃刀就是說 P(h) 較大的模型有較大的優勢,而最大似然則是說最符合觀測數據的(即 P(D | h) 最大的)最有優勢。整個模型比較就是這兩方力量的拉鋸。我們不妨再舉一個簡單的例子來說明這一精神:你隨便找枚硬幣,擲一下,觀察一下結果。好,你觀察到的結果要麽是“正”,要麽是“反”(不,不是少林足球那枚硬幣:P ),不妨假設你觀察到的是“正”。現在你要去根據這個觀測數據推斷這枚硬幣擲出“正”的概率是多大。根據最大似然估計的精神,我們應該猜測這枚硬幣擲出“正”的概率是 1 ,因為這個才是能最大化 P(D | h) 的那個猜測。然而每個人都會大搖其頭——很顯然,你隨機摸出一枚硬幣這枚硬幣居然沒有反面的概率是“不存在的”,我們對一枚隨機硬幣是否一枚有偏硬幣,偏了多少,是有著一個先驗的認識的,這個認識就是絕大多數硬幣都是基本公平的,偏得越多的硬幣越少見(可以用一個 beta 分布來表達這一先驗概率)。將這個先驗正態分布 p(θ) (其中 θ 表示硬幣擲出正面的比例,小寫的 p 代表這是概率密度函數)結合到我們的問題中,我們便不是去最大化 P(D | h) ,而是去最大化 P(D | θ) * p(θ) ,顯然 θ = 1 是不行的,因為 P(θ=1) 為 0 ,導致整個乘積也為 0 。實際上,只要對這個式子求一個導數就可以得到最值點。

以上說的是當我們知道先驗概率 P(h) 的時候,光用最大似然是不靠譜的,因為最大似然的猜測可能先驗概率非常小。然而,有些時候,我們對於先驗概率一無所知,只能假設每種猜測的先驗概率是均等的,這個時候就只有用最大似然了。實際上,統計學家和貝葉斯學家有一個有趣的爭論,統計學家說:我們讓數據自己說話。言下之意就是要摒棄先驗概率。而貝葉斯支持者則說:數據會有各種各樣的偏差,而一個靠譜的先驗概率則可以對這些隨機噪音做到健壯。事實證明貝葉斯派勝利了,勝利的關鍵在於所謂先驗概率其實也是經驗統計的結果,譬如為什麽我們會認為絕大多數硬幣是基本公平的?為什麽我們認為大多數人的肥胖適中?為什麽我們認為膚色是種族相關的,而體重則與種族無關?先驗概率裏面的“先驗”並不是指先於一切經驗,而是僅指先於我們“當前”給出的觀測數據而已,在硬幣的例子中先驗指的只是先於我們知道投擲的結果這個經驗,而並非“先天”。

然而,話說回來,有時候我們必須得承認,就算是基於以往的經驗,我們手頭的“先驗”概率還是均勻分布,這個時候就必須依賴用最大似然,我們用前面留下的一個自然語言二義性問題來說明這一點:

The girl saw the boy with a telescope.

到底是 The girl saw-with-a-telescope the boy 這一語法結構,還是 The girl saw the-boy-with-a-telescope 呢?兩種語法結構的常見程度都差不多(你可能會覺得後一種語法結構的常見程度較低,這是事後偏見,你只需想想 The girl saw the boy with a book 就知道了。當然,實際上從大規模語料統計結果來看後一種語法結構的確稍稍不常見一丁點,但是絕對不足以解釋我們對第一種結構的強烈傾向)。那麽到底為什麽呢?

我們不妨先來看看 MacKay 在書中舉的一個漂亮的例子:

  技術分享圖片

  圖中有多少個箱子?特別地,那棵書後面是一個箱子?還是兩個箱子?還是三個箱子?還是.. 你可能會覺得樹後面肯定是一個箱子,但為什麽不是兩個呢?如下圖:

  技術分享圖片

很簡單,你會說:要是真的有兩個箱子那才怪了,怎麽就那麽巧這兩個箱子剛剛好顏色相同,高度相同呢?

用概率論的語言來說,你剛才的話就翻譯為:猜測 h 不成立,因為 P(D | h) 太小(太巧合)了。我們的直覺是:巧合(小概率)事件不會發生。所以當一個猜測(假設)使得我們的觀測結果成為小概率事件的時候,我們就說“才怪呢,哪能那麽巧捏?!”

現在我們可以回到那個自然語言二義性的例子,並給出一個完美的解釋了:如果語法結構是 The girl saw the-boy-with-a-telecope 的話,怎麽那個男孩偏偏手裏拿的就是望遠鏡——一個可以被用來 saw-with 的東東捏?這也忒小概率了吧。他咋就不會拿本書呢?拿什麽都好。怎麽偏偏就拿了望遠鏡?所以唯一的解釋是,這個“巧合”背後肯定有它的必然性,這個必然性就是,如果我們將語法結構解釋為 The girl saw-with-a-telescope the boy 的話,就跟數據完美吻合了——既然那個女孩是用某個東西去看這個男孩的,那麽這個東西是一個望遠鏡就完全可以解釋了(不再是小概率事件了)。

自然語言二義性很常見,譬如上文中的一句話:

參見《決策與判斷》以及《Rationality for Mortals》第12章:小孩也可以解決貝葉斯問題

就有二義性:到底是參見這兩本書的第 12 章,還是僅僅是第二本書的第 12 章呢?如果是這兩本書的第 12 章那就是咄咄怪事了,怎麽恰好兩本書都有第 12 章,都是講同一個問題,更詭異的是,標題還相同呢?

註意,以上做的是似然估計(即只看 P(D | h) 的大小),不含先驗概率。通過這兩個例子,尤其是那個樹後面的箱子的例子我們可以看到,似然估計裏面也蘊含著奧卡姆剃刀:樹後面的箱子數目越多,這個模型就越復雜。單個箱子的模型是最簡單的。似然估計選擇了更簡單的模型。

這個就是所謂的貝葉斯奧卡姆剃刀(Bayesian Occam’s Razor),因為這個剃刀工作在貝葉斯公式的似然(P(D | h) )上,而不是模型本身( P(h) )的先驗概率上,後者是傳統的奧卡姆剃刀。關於貝葉斯奧卡姆剃刀我們再來看一個前面說到的曲線擬合的例子:如果平面上有 N 個點,近似構成一條直線,但絕不精確地位於一條直線上。這時我們既可以用直線來擬合(模型1),也可以用二階多項式(模型2)擬合,也可以用三階多項式(模型3),.. ,特別地,用 N-1 階多項式便能夠保證肯定能完美通過 N 個數據點。那麽,這些可能的模型之中到底哪個是最靠譜的呢?前面提到,一個衡量的依據是奧卡姆剃刀:越是高階的多項式越是繁復和不常見。然而,我們其實並不需要依賴於這個先驗的奧卡姆剃刀,因為有人可能會爭辯說:你怎麽就能說越高階的多項式越不常見呢?我偏偏覺得所有階多項式都是等可能的。好吧,既然如此那我們不妨就扔掉 P(h) 項,看看 P(D | h) 能告訴我們什麽。我們註意到越是高階的多項式,它的軌跡彎曲程度越是大,到了八九階簡直就是直上直下,於是我們不僅要問:一個比如說八階多項式在平面上隨機生成的一堆 N 個點偏偏恰好近似構成一條直線的概率(即 P(D | h) )有多大?太小太小了。反之,如果背後的模型是一條直線,那麽根據該模型生成一堆近似構成直線的點的概率就大得多了。這就是貝葉斯奧卡姆剃刀。

這裏只是提供一個關於貝葉斯奧卡姆剃刀的科普,強調直觀解釋,更多理論公式請參考 MacKay 的著作 《Information Theory : Inference and Learning Algorithms》第 28 章。

3.3 最小描述長度原則

貝葉斯模型比較理論與信息論有一個有趣的關聯:

P(h | D) ∝ P(h) * P(D | h)

兩邊求對數,將右式的乘積變成相加:

ln P(h | D) ∝ ln P(h) + ln P(D | h)

顯然,最大化 P(h | D) 也就是最大化 ln P(h | D)。而 ln P(h) + ln P(D | h) 則可以解釋為模型(或者稱“假設”、“猜測”)h 的編碼長度加上在該模型下數據 D 的編碼長度。使這個和最小的模型就是最佳模型。

而究竟如何定義一個模型的編碼長度,以及數據在模型下的編碼長度則是一個問題。更多可參考 Mitchell 的 《Machine Learning》的 6.6 節,或 Mackay 的 28.3 節)

3.4 最優貝葉斯推理

所謂的推理,分為兩個過程,第一步是對觀測數據建立一個模型。第二步則是使用這個模型來推測未知現象發生的概率。我們前面都是講的對於觀測數據給出最靠譜的那個模型。然而很多時候,雖然某個模型是所有模型裏面最靠譜的,但是別的模型也並不是一點機會都沒有。譬如第一個模型在觀測數據下的概率是 0.5 。第二個模型是 0.4 ,第三個是 0.1 。如果我們只想知道對於觀測數據哪個模型最可能,那麽只要取第一個就行了,故事到此結束。然而很多時候我們建立模型是為了推測未知的事情的發生概率,這個時候,三個模型對未知的事情發生的概率都會有自己的預測,僅僅因為某一個模型概率稍大一點就只聽他一個人的就太不民主了。所謂的最優貝葉斯推理就是將三個模型對於未知數據的預測結論加權平均起來(權值就是模型相應的概率)。顯然,這個推理是理論上的制高點,無法再優了,因為它已經把所有可能性都考慮進去了。

只不過實際上我們是基本不會使用這個框架的,因為計算模型可能非常費時間,二來模型空間可能是連續的,即有無窮多個模型(這個時候需要計算模型的概率分布)。結果還是非常費時間。所以這個被看作是一個理論基準。

4. 無處不在的貝葉斯

以下我們再舉一些實際例子來說明貝葉斯方法被運用的普遍性,這裏主要集中在機器學習方面,因為我不是學經濟的,否則還可以找到一堆經濟學的例子。

4.1 中文分詞

貝葉斯是機器學習的核心方法之一。比如中文分詞領域就用到了貝葉斯。Google 研究員吳軍在《數學之美》系列中就有一篇是介紹中文分詞的,這裏只介紹一下核心的思想,不做贅述,詳細請參考吳軍的文章(這裏)。

分詞問題的描述為:給定一個句子(字串),如:

南京市長江大橋

如何對這個句子進行分詞(詞串)才是最靠譜的。例如:

1. 南京市/長江大橋

2. 南京/市長/江大橋

這兩個分詞,到底哪個更靠譜呢?

我們用貝葉斯公式來形式化地描述這個問題,令 X 為字串(句子),Y 為詞串(一種特定的分詞假設)。我們就是需要尋找使得 P(Y|X) 最大的 Y ,使用一次貝葉斯可得:

P(Y|X) ∝ P(Y)*P(X|Y)

用自然語言來說就是 這種分詞方式(詞串)的可能性 乘以 這個詞串生成我們的句子的可能性。我們進一步容易看到:可以近似地將 P(X|Y) 看作是恒等於 1 的,因為任意假想的一種分詞方式之下生成我們的句子總是精準地生成的(只需把分詞之間的分界符號扔掉即可)。於是,我們就變成了去最大化 P(Y) ,也就是尋找一種分詞使得這個詞串(句子)的概率最大化。而如何計算一個詞串:

W1, W2, W3, W4 ..

的可能性呢?我們知道,根據聯合概率的公式展開:P(W1, W2, W3, W4 ..) = P(W1) * P(W2|W1) * P(W3|W2, W1) * P(W4|W1,W2,W3) * .. 於是我們可以通過一系列的條件概率(右式)的乘積來求整個聯合概率。然而不幸的是隨著條件數目的增加(P(Wn|Wn-1,Wn-2,..,W1) 的條件有 n-1 個),數據稀疏問題也會越來越嚴重,即便語料庫再大也無法統計出一個靠譜的 P(Wn|Wn-1,Wn-2,..,W1) 來。為了緩解這個問題,計算機科學家們一如既往地使用了“天真”假設:我們假設句子中一個詞的出現概率只依賴於它前面的有限的 k 個詞(k 一般不超過 3,如果只依賴於前面的一個詞,就是2元語言模型(2-gram),同理有 3-gram 、 4-gram 等),這個就是所謂的“有限地平線”假設。雖然這個假設很傻很天真,但結果卻表明它的結果往往是很好很強大的,後面要提到的樸素貝葉斯方法使用的假設跟這個精神上是完全一致的,我們會解釋為什麽像這樣一個天真的假設能夠得到強大的結果。目前我們只要知道,有了這個假設,剛才那個乘積就可以改寫成: P(W1) * P(W2|W1) * P(W3|W2) * P(W4|W3) .. (假設每個詞只依賴於它前面的一個詞)。而統計 P(W2|W1) 就不再受到數據稀疏問題的困擾了。對於我們上面提到的例子“南京市長江大橋”,如果按照自左到右的貪婪方法分詞的話,結果就成了“南京市長/江大橋”。但如果按照貝葉斯分詞的話(假設使用 3-gram),由於“南京市長”和“江大橋”在語料庫中一起出現的頻率為 0 ,這個整句的概率便會被判定為 0 。 從而使得“南京市/長江大橋”這一分詞方式勝出。

一點註記:有人可能會疑惑,難道我們人類也是基於這些天真的假設來進行推理的?不是的。事實上,統計機器學習方法所統計的東西往往處於相當表層(shallow)的層面,在這個層面機器學習只能看到一些非常表面的現象,有一點科學研究的理念的人都知道:越是往表層去,世界就越是繁復多變。從機器學習的角度來說,特征(feature)就越多,成百上千維度都是可能的。特征一多,好了,高維詛咒就產生了,數據就稀疏得要命,不夠用了。而我們人類的觀察水平顯然比機器學習的觀察水平要更深入一些,為了避免數據稀疏我們不斷地發明各種裝置(最典型就是顯微鏡),來幫助我們直接深入到更深層的事物層面去觀察更本質的聯系,而不是在淺層對表面現象作統計歸納。舉一個簡單的例子,通過對大規模語料庫的統計,機器學習可能會發現這樣一個規律:所有的“他”都是不會穿 bra 的,所有的“她”則都是穿的。然而,作為一個男人,卻完全無需進行任何統計學習,因為深層的規律就決定了我們根本不會去穿 bra 。至於機器學習能不能完成後者(像人類那樣的)這個推理,則是人工智能領域的經典問題。至少在那之前,聲稱統計學習方法能夠終結科學研究(原文)的說法是純粹外行人說的話。

4.2 統計機器翻譯

統計機器翻譯因為其簡單,自動(無需手動添加規則),迅速成為了機器翻譯的事實標準。而統計機器翻譯的核心算法也是使用的貝葉斯方法。

問題是什麽?統計機器翻譯的問題可以描述為:給定一個句子 e ,它的可能的外文翻譯 f 中哪個是最靠譜的。即我們需要計算:P(f|e) 。一旦出現條件概率貝葉斯總是挺身而出:

P(f|e) ∝ P(f) * P(e|f)

這個式子的右端很容易解釋:那些先驗概率較高,並且更可能生成句子 e 的外文句子 f 將會勝出。我們只需簡單統計(結合上面提到的 N-Gram 語言模型)就可以統計任意一個外文句子 f 的出現概率。然而 P(e|f) 卻不是那麽好求的,給定一個候選的外文局子 f ,它生成(或對應)句子 e 的概率是多大呢?我們需要定義什麽叫 “對應”,這裏需要用到一個分詞對齊的平行語料庫,有興趣的可以參考 《Foundations of Statistical Natural Language Processing》第 13 章,這裏摘選其中的一個例子:假設 e 為:John loves Mary 。我們需要考察的首選 f 是:Jean aime Marie (法文)。我們需要求出 P(e|f) 是多大,為此我們考慮 e 和 f 有多少種對齊的可能性,如:

John (Jean) loves (aime) Marie (Mary)

就是其中的一種(最靠譜的)對齊,為什麽要對齊,是因為一旦對齊了之後,就可以容易地計算在這個對齊之下的 P(e|f) 是多大,只需計算:

P(John|Jean) * P(loves|aime) * P(Marie|Mary)

即可。

然後我們遍歷所有的對齊方式,並將每種對齊方式之下的翻譯概率 ∑ 求和。便可以獲得整個的 P(e|f) 是多大。

一點註記:還是那個問題:難道我們人類真的是用這種方式進行翻譯的?highly unlikely 。這種計算復雜性非常高的東西連三位數乘法都搞不定的我們才不會笨到去使用呢。根據認知神經科學的認識,很可能我們是先從句子到語義(一個逐層往上(bottom-up)抽象的 folding 過程),然後從語義根據另一門語言的語法展開為另一門語言(一個逐層往下(top-down)的具體化 unfolding 過程)。如何可計算地實現這個過程,目前仍然是個難題。(我們看到很多地方都有 bottom-up/top-down 這樣一個對稱的過程,實際上有人猜測這正是生物神經網絡原則上的運作方式,對視覺神經系統的研究尤其證明了這一點,Hawkins 在 《On Intelligence》 裏面提出了一種 HTM (Hierarchical Temporal Memory)模型正是使用了這個原則。)

4.3 貝葉斯圖像識別,Analysis by Synthesis

貝葉斯方法是一個非常 general 的推理框架。其核心理念可以描述成:Analysis by Synthesis (通過合成來分析)。06 年的認知科學新進展上有一篇 paper 就是講用貝葉斯推理來解釋視覺識別的,一圖勝千言,下圖就是摘自這篇 paper :

  技術分享圖片

首先是視覺系統提取圖形的邊角特征,然後使用這些特征自底向上地激活高層的抽象概念(比如是 E 還是 F 還是等號),然後使用一個自頂向下的驗證來比較到底哪個概念最佳地解釋了觀察到的圖像。

4.4 EM 算法與基於模型的聚類

聚類是一種無指導的機器學習問題,問題描述:給你一堆數據點,讓你將它們最靠譜地分成一堆一堆的。聚類算法很多,不同的算法適應於不同的問題,這裏僅介紹一個基於模型的聚類,該聚類算法對數據點的假設是,這些數據點分別是圍繞 K 個核心的 K 個正態分布源所隨機生成的,使用 Han JiaWei 的《Data Ming: Concepts and Techniques》中的圖:

  技術分享圖片

圖中有兩個正態分布核心,生成了大致兩堆點。我們的聚類算法就是需要根據給出來的那些點,算出這兩個正態分布的核心在什麽位置,以及分布的參數是多少。這很明顯又是一個貝葉斯問題,但這次不同的是,答案是連續的且有無窮多種可能性,更糟的是,只有當我們知道了哪些點屬於同一個正態分布圈的時候才能夠對這個分布的參數作出靠譜的預測,現在兩堆點混在一塊我們又不知道哪些點屬於第一個正態分布,哪些屬於第二個。反過來,只有當我們對分布的參數作出了靠譜的預測時候,才能知道到底哪些點屬於第一個分布,那些點屬於第二個分布。這就成了一個先有雞還是先有蛋的問題了。為了解決這個循環依賴,總有一方要先打破僵局,說,不管了,我先隨便整一個值出來,看你怎麽變,然後我再根據你的變化調整我的變化,然後如此叠代著不斷互相推導,最終收斂到一個解。這就是 EM 算法。

EM 的意思是“Expectation-Maximazation”,在這個聚類問題裏面,我們是先隨便猜一下這兩個正態分布的參數:如核心在什麽地方,方差是多少。然後計算出每個數據點更可能屬於第一個還是第二個正態分布圈,這個是屬於 Expectation 一步。有了每個數據點的歸屬,我們就可以根據屬於第一個分布的數據點來重新評估第一個分布的參數(從蛋再回到雞),這個是 Maximazation 。如此往復,直到參數基本不再發生變化為止。這個叠代收斂過程中的貝葉斯方法在第二步,根據數據點求分布的參數上面。

4.5 最大似然與最小二乘

    技術分享圖片

學過線性代數的大概都知道經典的最小二乘方法來做線性回歸。問題描述是:給定平面上 N 個點,(這裏不妨假設我們想用一條直線來擬合這些點——回歸可以看作是擬合的特例,即允許誤差的擬合),找出一條最佳描述了這些點的直線。

一個接踵而來的問題就是,我們如何定義最佳?我們設每個點的坐標為 (Xi, Yi) 。如果直線為 y = f(x) 。那麽 (Xi, Yi) 跟直線對這個點的“預測”:(Xi, f(Xi)) 就相差了一個 ΔYi = |Yi – f(Xi)| 。最小二乘就是說尋找直線使得 (ΔY1)^2 + (ΔY2)^2 + .. (即誤差的平方和)最小,至於為什麽是誤差的平方和而不是誤差的絕對值和,統計學上也沒有什麽好的解釋。然而貝葉斯方法卻能對此提供一個完美的解釋。

我們假設直線對於坐標 Xi 給出的預測 f(Xi) 是最靠譜的預測,所有縱坐標偏離 f(Xi) 的那些數據點都含有噪音,是噪音使得它們偏離了完美的一條直線,一個合理的假設就是偏離路線越遠的概率越小,具體小多少,可以用一個正態分布曲線來模擬,這個分布曲線以直線對 Xi 給出的預測 f(Xi) 為中心,實際縱坐標為 Yi 的點 (Xi, Yi) 發生的概率就正比於 EXP[-(ΔYi)^2]。(EXP(..) 代表以常數 e 為底的多少次方)。

現在我們回到問題的貝葉斯方面,我們要想最大化的後驗概率是:

P(h|D) ∝ P(h) * P(D|h)

又見貝葉斯!這裏 h 就是指一條特定的直線,D 就是指這 N 個數據點。我們需要尋找一條直線 h 使得 P(h) * P(D|h) 最大。很顯然,P(h) 這個先驗概率是均勻的,因為哪條直線也不比另一條更優越。所以我們只需要看 P(D|h) 這一項,這一項是指這條直線生成這些數據點的概率,剛才說過了,生成數據點 (Xi, Yi) 的概率為 EXP[-(ΔYi)^2] 乘以一個常數。而 P(D|h) = P(d1|h) * P(d2|h) * .. 即假設各個數據點是獨立生成的,所以可以把每個概率乘起來。於是生成 N 個數據點的概率為 EXP[-(ΔY1)^2] * EXP[-(ΔY2)^2] * EXP[-(ΔY3)^2] * .. = EXP{-[(ΔY1)^2 + (ΔY2)^2 + (ΔY3)^2 + ..]} 最大化這個概率就是要最小化 (ΔY1)^2 + (ΔY2)^2 + (ΔY3)^2 + .. 。 熟悉這個式子嗎?

5. 樸素貝葉斯方法

樸素貝葉斯方法是一個很特別的方法,所以值得介紹一下。我們用樸素貝葉斯在垃圾郵件過濾中的應用來舉例說明。

5.1 貝葉斯垃圾郵件過濾器

問題是什麽?問題是,給定一封郵件,判定它是否屬於垃圾郵件。按照先例,我們還是用 D 來表示這封郵件,註意 D 由 N 個單詞組成。我們用 h+ 來表示垃圾郵件,h- 表示正常郵件。問題可以形式化地描述為求:

P(h+|D) = P(h+) * P(D|h+) / P(D)

P(h-|D) = P(h-) * P(D|h-) / P(D)

其中 P(h+) 和 P(h-) 這兩個先驗概率都是很容易求出來的,只需要計算一個郵件庫裏面垃圾郵件和正常郵件的比例就行了。然而 P(D|h+) 卻不容易求,因為 D 裏面含有 N 個單詞 d1, d2, d3, .. ,所以P(D|h+) = P(d1,d2,..,dn|h+) 。我們又一次遇到了數據稀疏性,為什麽這麽說呢?P(d1,d2,..,dn|h+) 就是說在垃圾郵件當中出現跟我們目前這封郵件一模一樣的一封郵件的概率是多大!開玩笑,每封郵件都是不同的,世界上有無窮多封郵件。瞧,這就是數據稀疏性,因為可以肯定地說,你收集的訓練數據庫不管裏面含了多少封郵件,也不可能找出一封跟目前這封一模一樣的。結果呢?我們又該如何來計算 P(d1,d2,..,dn|h+) 呢?

我們將 P(d1,d2,..,dn|h+) 擴展為: P(d1|h+) * P(d2|d1, h+) * P(d3|d2,d1, h+) * .. 。熟悉這個式子嗎?這裏我們會使用一個更激進的假設,我們假設 di 與 di-1 是完全條件無關的,於是式子就簡化為 P(d1|h+) * P(d2|h+) * P(d3|h+) * .. 。這個就是所謂的條件獨立假設,也正是樸素貝葉斯方法的樸素之處。而計算 P(d1|h+) * P(d2|h+) * P(d3|h+) * .. 就太簡單了,只要統計 di 這個單詞在垃圾郵件中出現的頻率即可。關於貝葉斯垃圾郵件過濾更多的內容可以參考這個條目,註意其中提到的其他資料。

一點註記:這裏,為什麽有這個數據稀疏問題,還是因為統計學習方法工作在淺層面,世界上的單詞就算不再變多也是非常之多的,單詞之間組成的句子也是變化多端,更不用說一篇文章了,文章數目則是無窮的,所以在這個層面作統計,肯定要被數據稀疏性困擾。我們要註意,雖然句子和文章的數目是無限的,然而就拿郵件來說,如果我們只關心郵件中句子的語義(進而更高抽象層面的“意圖”(語義,意圖如何可計算地定義出來是一個人工智能問題),在這個層面上可能性便大大縮減了,我們關心的抽象層面越高,可能性越小。單詞集合和句子的對應是多對一的,句子和語義的對應又是多對一的,語義和意圖的對應還是多對一的,這是個層級體系。神經科學的發現也表明大腦的皮層大致有一種層級結構,對應著越來越抽象的各個層面,至於如何具體實現一個可放在計算機內的大腦皮層,仍然是一個未解決問題,以上只是一個原則(principle)上的認識,只有當 computational 的 cortex 模型被建立起來了之後才可能將其放入電腦。

5.2 為什麽樸素貝葉斯方法令人詫異地好——一個理論解釋

樸素貝葉斯方法的條件獨立假設看上去很傻很天真,為什麽結果卻很好很強大呢?就拿一個句子來說,我們怎麽能魯莽地聲稱其中任意一個單詞出現的概率只受到它前面的 3 個或 4 個單詞的影響呢?別說 3 個,有時候一個單詞的概率受到上一句話的影響都是絕對可能的。那麽為什麽這個假設在實際中的表現卻不比決策樹差呢?有人對此提出了一個理論解釋,並且建立了什麽時候樸素貝葉斯的效果能夠等價於非樸素貝葉斯的充要條件,這個解釋的核心就是:有些獨立假設在各個分類之間的分布都是均勻的所以對於似然的相對大小不產生影響;即便不是如此,也有很大的可能性各個獨立假設所產生的消極影響或積極影響互相抵消,最終導致結果受到的影響不大。具體的數學公式請參考這篇 paper 。

6. 層級貝葉斯模型

    技術分享圖片

層級貝葉斯模型是現代貝葉斯方法的標誌性建築之一。前面講的貝葉斯,都是在同一個事物層次上的各個因素之間進行統計推理,然而層次貝葉斯模型在哲學上更深入了一層,將這些因素背後的因素(原因的原因,原因的原因,以此類推)囊括進來。一個教科書例子是:如果你手頭有 N 枚硬幣,它們是同一個工廠鑄出來的,你把每一枚硬幣擲出一個結果,然後基於這 N 個結果對這 N 個硬幣的 θ (出現正面的比例)進行推理。如果根據最大似然,每個硬幣的 θ 不是 1 就是 0 (這個前面提到過的),然而我們又知道每個硬幣的 p(θ) 是有一個先驗概率的,也許是一個 beta 分布。也就是說,每個硬幣的實際投擲結果 Xi 服從以 θ 為中心的正態分布,而 θ 又服從另一個以 Ψ 為中心的 beta 分布。層層因果關系就體現出來了。進而 Ψ 還可能依賴於因果鏈上更上層的因素,以此類推。

6.1 隱馬可夫模型(HMM)

技術分享圖片

吳軍在數學之美系列裏面介紹的隱馬可夫模型(HMM)就是一個簡單的層級貝葉斯模型:

那麽怎麽根據接收到的信息來推測說話者想表達的意思呢?我們可以利用叫做“隱含馬爾可夫模型”(Hidden Markov Model)來解決這些問題。以語音識別為例,當我們觀測到語音信號 o1,o2,o3 時,我們要根據這組信號推測出發送的句子 s1,s2,s3。顯然,我們應該在所有可能的句子中找最有可能性的一個。用數學語言來描述,就是在已知 o1,o2,o3,…的情況下,求使得條件概率 P (s1,s2,s3,…|o1,o2,o3….) 達到最大值的那個句子 s1,s2,s3,…

吳軍的文章中這裏省掉沒說的是,s1, s2, s3, .. 這個句子的生成概率同時又取決於一組參數,這組參數決定了 s1, s2, s3, .. 這個馬可夫鏈的先驗生成概率。如果我們將這組參數記為 λ ,我們實際上要求的是:P(S|O, λ) (其中 O 表示 o1,o2,o3,.. ,S表示 s1,s2,s3,..)

當然,上面的概率不容易直接求出,於是我們可以間接地計算它。利用貝葉斯公式並且省掉一個常數項,可以把上述公式等價變換成

P(o1,o2,o3,…|s1,s2,s3….) * P(s1,s2,s3,…)

其中

P(o1,o2,o3,…|s1,s2,s3….) 表示某句話 s1,s2,s3…被讀成 o1,o2,o3,…的可能性, 而 P(s1,s2,s3,…) 表示字串 s1,s2,s3,…本身能夠成為一個合乎情理的句子的可能性,所以這個公式的意義是用發送信號為 s1,s2,s3…這個數列的可能性乘以 s1,s2,s3.. 本身可以一個句子的可能性,得出概率。

這裏,s1,s2,s3…本身可以一個句子的可能性其實就取決於參數 λ ,也就是語言模型。所以簡而言之就是發出的語音信號取決於背後實際想發出的句子,而背後實際想發出的句子本身的獨立先驗概率又取決於語言模型。

7. 貝葉斯網絡

吳軍已經對貝葉斯網絡作了科普,請直接跳轉到這裏。更詳細的理論參考所有機器學習的書上都有。

文章轉自:

  劉未鵬博客 《數學之美番外篇:平凡而又神奇的貝葉斯方法》

機器學習-貝葉斯算法