通俗易懂講解貝葉斯定理

轉自:https://blog.csdn.net/sdutacm/article/details/50938957php

0. 前言html

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

1. 歷史數據庫

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

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

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

1.1 一個例子:天然語言的二義性機器學習

下面舉一個天然語言的不肯定性的例子。當你看到這句話:函數

The girl saw the boy with a telescope.post

你對這句話的含義有什麼猜想?日常人確定會說:那個女孩拿望遠鏡看見了那個男孩(即你對這個句子背後的實際語法結構的猜想是: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 在書中舉的一個漂亮的例子:

i1

圖中有多少個箱子?特別地,那棵書後面是一個箱子?仍是兩個箱子?仍是三個箱子?仍是.. 你可能會以爲樹後面確定是一個箱子,但爲何不是兩個呢?以下圖:

i2

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

用機率論的語言來講,你剛纔的話就翻譯爲:猜想 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 :

i3

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

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

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

i4

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

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

4.5 最大似然與最小二乘

i5

學過線性代數的大概都知道經典的最小二乘方法來作線性迴歸。問題描述是:給定平面上 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. 層級貝葉斯模型

i6

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

6.1 隱馬可夫模型(HMM)

i7

吳軍在數學之美系列裏面介紹的隱馬可夫模型(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…自己能夠一個句子的可能性其實就取決於參數 λ ,也就是語言模型。因此簡而言之就是發出的語音信號取決於背後實際想發出的句子,而背後實際想發出的句子自己的獨立先驗機率又取決於語言模型。

相關文章
相關標籤/搜索