1. 程式人生 > >貝葉斯模型及其應用總結

貝葉斯模型及其應用總結

本文參考整理眾多資料而成。

貝葉斯模型基礎

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

    實際上,貝葉斯當時的論文只是對這個問題的一個直接的求解嘗試,並不清楚他當時是不是已經意識到這裡麵包含著的深刻的思想。然而後來,貝葉斯方法席捲了概率論,並將應用延伸到各個問題領域,所有需要作出概率預測的地方都可以見到貝葉斯方法的影子,特別地,貝葉斯是機器學習的核心方法之一。這背後的深刻原因在於,現實世界本身就是不確定的,人類的觀察能力是有侷限性的(否則有很大一部分科學就沒有必要做了——設想我們能夠直接觀察到電子的執行,還需要對原子模型爭吵不休嗎?),我們日常所觀察到的只是事物表面上的結果,沿用剛才那個袋子裡面取球的比方,我們往往只能知道從裡面取出來的球是什麼顏色,而並不能直接看到袋子裡面實際的情況。這個時候,我們就需要提供一個猜測(hypothesis

,更為嚴格的說法是“假設”,這裡用“猜測”更通俗易懂一點),所謂猜測,當然就是不確定的(很可能有好多種乃至無數種猜測都能滿足目前的觀測),但也絕對不是兩眼一抹黑瞎蒙——具體地說,我們需要做兩件事情:1. 算出各種不同猜測的可能性大小。2. 算出最靠譜的猜測是什麼。第一個就是計算特定猜測的後驗概率,對於連續的猜測空間則是計算猜測的概率密度函式。第二個則是所謂的模型比較,模型比較如果不考慮先驗概率的話就是最大似然方法。

數學基礎

條件概率

    要理解貝葉斯推斷,必須先理解貝葉斯定理。後者實際上就是計算"條件概率"的公式。

    所謂"條件概率"(Conditionalprobability

),就是指在事件B發生的情況下,事件A發生的概率,用P(A|B)來表示。


    根據文氏圖,可以很清楚地看到在事件B發生的情況下,事件A發生的概率就是P(AB)除以P(B)。

        

    因此

        

    同理可得

        

   所以

       

   即

       

    這就是條件概率的計算公式

全概率公式

    假定樣本空間S,是兩個事件AA'的和。


    上圖中,紅色部分是事件A,綠色部分是事件A',它們共同構成了樣本空間S

    在這種情況下,事件B可以劃分成兩個部分。


    即

        

    已經得到

     

    所以有

        

    這就是全概率公式。它的含義是,如果AA'構成樣本空間的一個劃分,那麼事件B的概率,就等於AA'的概率分別乘以B對這兩個事件的條件概率之和。

    將這個公式代入上一節的條件概率公式,就得到了條件概率的另一種寫法:

       

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

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

    Thegirl saw the boy with a telescope.

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

貝葉斯公式

    貝葉斯公式是怎麼來的?

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

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

    一些認知科學的研究表明(《決策與判斷》以及《Rationalityfor 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) )。

   上式中的 PantsBoy/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)

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

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

貝葉斯推斷

    貝葉斯推斷(Bayesian inference)是一種統計學方法,用來估計統計量的某種性質。

    貝葉斯推斷與其他統計學推斷方法截然不同。它建立在主觀判斷的基礎上,也就是說,你可以不需要客觀證據,先估計一個值,然後根據實際結果不斷修正。正是因為它的主觀性太強,曾經遭到許多統計學家的詬病。

    貝葉斯推斷需要大量的計算,因此歷史上很長一段時間,無法得到廣泛應用。只有計算機誕生以後,它才獲得真正的重視。人們發現,許多統計量是無法事先進行客觀判斷的,而網際網路時代出現的大型資料集,再加上高速運算能力,為驗證這些統計量提供了方便,也為應用貝葉斯推斷創造了條件,它的威力正在日益顯現。

    對條件概率公式進行變形,可以得到如下形式:

           

    我們把P(A)稱為"先驗概率"(Prior probability),即在B事件發生之前,我們對A事件概率的一個判斷。P(A|B)稱為"後驗概率"(Posterior probability),即在B事件發生之後,我們對A事件概率的重新評估。P(B|A)/P(B)稱為"可能性函式"(Likelyhood),這是一個調整因子,使得預估概率更接近真實概率。

    所以,條件概率可以理解成下面的式子:

  後驗概率 = 先驗概率 調整因子

    在這裡,如果"可能性函式"P(B|A)/P(B)>1,意味著"先驗概率"被增強,事件A的發生的可能性變大;如果"可能性函式"=1,意味著B事件無助於判斷事件A的可能性;如果"可能性函式"<1,意味著"先驗概率"被削弱,事件A的可能性變小。

    我們再來看一個用貝葉斯推理分析伊索寓言“孩子與狼”的例子。

    伊索寓言“孩子與狼”講的是一個小孩每天到山上放羊,山裡有狼出沒。第一天,他在山上喊:“狼來了!狼來了!”,山下的村民聞聲便去打狼,可到山上發現狼沒有來。第二天仍是如此。第三天狼真的來了,可無論小孩怎麼喊叫,也沒有人來救他,因為前二次他說了謊,人們不再相信他了。現在用貝葉斯推理來分析此寓言中村民對這個小孩的可信程度是如何下降的。

    我們用E表示“小孩說謊 用H表示“小孩可信”。不妨設村民過去對這個小孩的印象為P(H)=0.8,則P('H)=0.2

    我們現在用貝葉斯推理來推斷P(H/E),也即這個小孩說了一次謊後,村民對他可信程度的改變。

    在貝葉斯推斷中我們要用到概率P(E/H)和P(E/'H),前者為可信的孩子說謊的可能性,後者為不可信的孩子說謊的可能性。在此不妨設P(E/H)=0.1,P(E/'H)=0.5

    第一次村民上山打狼,發現狼沒有來,即小孩說了謊。村民根據這個資訊,對這個小孩的可信程度改變為P(H/E)=0.8×0.1/((0.8×0.1)+(0.2×0.5))=0.444這表明村民上了一次當後,對這個小孩的可信程度由原來的0.8下降到了0.444。

    在此基礎上,我們再一次用貝葉斯推理來推斷P(H/E),也即這個小孩第二次說謊後,村民對他的可信程度改變為P(H/E)=0.444×0.1/((0.444×0.1)+(0.556×0.5))=0.138這表明村民們經過兩次上當,對這個小孩的可信程度已經從0.8下降到了0.138,如此低的可信度,村民聽到第三次呼叫時怎麼再會上山打狼呢?

     對於貝葉斯公式:

          

    貝葉斯公式————>最大似然估計、奧卡姆剃刀————>貝葉斯奧卡姆剃刀————>最優貝葉斯推理

    最大似然估計:最大似然方法,直白一點,就是在計算那個使得 P(D | h) 最大的 h

    奧卡姆剃刀: P(h) 較大的模型有較大的優勢

    貝葉斯奧卡姆剃刀:也稱作樸素貝葉斯,這個剃刀工作在貝葉斯公式的似然(P(D | h))上,而不是模型本身(P(h))的先驗概率上。

最優貝葉斯推理

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

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

樸素貝葉斯

   樸素貝葉斯分類是一種十分簡單的分類演算法,叫它樸素貝葉斯分類是因為這種方法的思想真的很樸素,樸素貝葉斯的思想基礎是這樣的:對於給出的待分類項,求解在此項出現的條件下各個類別出現的概率,哪個最大,就認為此待分類項屬於哪個類別。通俗來說,就好比這麼個道理,你在街上看到一個黑人,我問你你猜這哥們哪裡來的,你十有八九猜非洲。為什麼呢?因為黑人中非洲人的比率最高,當然人家也可能是美洲人或亞洲人,但在沒有其它可用資訊下,我們會選擇條件概率最大的類別,這就是樸素貝葉斯的思想基礎。

    樸素貝葉斯分類的正式定義如下:

          1、設x={a1,a2,…,am}為一個待分類項,而每個ax的一個特徵屬性。

          2、有類別集合C={y1,y2,…,yn}。

          3、計算P(y1|x),P(y2|x),…P{yn|x}。

          4、如果,P(yk|x)=max{ P(y1|x),P(y2|x),…P{yn|x}}則。

    那麼現在的關鍵就是如何計算第3步中的各個條件概率。我們可以這麼做:

          1、找到一個已知分類的待分類項集合,這個集合叫做訓練樣本集。

          2、統計得到在各類別下各個特徵屬性的條件概率估計。即

                 

         3、如果各個特徵屬性是條件獨立的,則根據貝葉斯定理有如下推導:

                       

    因為分母對於所有類別為常數,因為我們只要將分子最大化皆可。又因為各特徵屬性是條件獨立的,所以有:

                

    可以看到,整個樸素貝葉斯分類分為三個階段:

    第一階段——準備工作階段,這個階段的任務是為樸素貝葉斯分類做必要的準備,主要工作是根據具體情況確定特徵屬性,並對每個特徵屬性進行適當劃分,然後由人工對一部分待分類項進行分類,形成訓練樣本集合。這一階段的輸入是所有待分類資料,輸出是特徵屬性和訓練樣本。這一階段是整個樸素貝葉斯分類中唯一需要人工完成的階段,其質量對整個過程將有重要影響,分類器的質量很大程度上由特徵屬性、特徵屬性劃分及訓練樣本質量決定。

    第二階段——分類器訓練階段,這個階段的任務就是生成分類器,主要工作是計算每個類別在訓練樣本中的出現頻率及每個特徵屬性劃分對每個類別的條件概率估計,並將結果記錄。其輸入是特徵屬性和訓練樣本,輸出是分類器。這一階段是機械性階段,根據前面討論的公式可以由程式自動計算完成。

    第三階段——應用階段。這個階段的任務是使用分類器對待分類項進行分類,其輸入是分類器和待分類項,輸出是待分類項與類別的對映關係。這一階段也是機械性階段,由程式完成。   

貝葉斯模型應用舉例

樸素貝葉斯分類例項:檢測SNS社群中不真實賬號

    下面討論一個使用樸素貝葉斯分類解決實際問題的例子,為了簡單起見,對例子中的資料做了適當的簡化。

    這個問題是這樣的,對於SNS社群來說,不真實賬號(使用虛假身份或使用者的小號)是一個普遍存在的問題,作為SNS社群的運營商,希望可以檢測出這些不真實賬號,從而在一些運營分析報告中避免這些賬號的干擾,亦可以加強對SNS社群的瞭解與監管。

    如果通過純人工檢測,需要耗費大量的人力,效率也十分低下,如能引入自動檢測機制,必將大大提升工作效率。這個問題說白了,就是要將社群中所有賬號在真實賬號和不真實賬號兩個類別上進行分類,下面我們一步一步實現這個過程。

    首先設C=0表示真實賬號,C=1表示不真實賬號。

1、確定特徵屬性及劃分

    這一步要找出可以幫助我們區分真實賬號與不真實賬號的特徵屬性,在實際應用中,特徵屬性的數量是很多的,劃分也會比較細緻,但這裡為了簡單起見,我們用少量的特徵屬性以及較粗的劃分,並對資料做了修改。

    我們選擇三個特徵屬性:a1:日誌數量/註冊天數,a2:好友數量/註冊天數,a3:是否使用真實頭像。在SNS社群中這三項都是可以直接從資料庫裡得到或計算出來的。

    下面給出劃分:a1:{a<=0.05, 0.05<a<0.2, a>=0.2},a2:{a<=0.1, 0.1<a<0.8, a>=0.8},a3:{a=0(不是),a=1(是)}。

2、獲取訓練樣本

    這裡使用運維人員曾經人工檢測過的1萬個賬號作為訓練樣本。

3、計算訓練樣本中每個類別的頻率

    用訓練樣本中真實賬號和不真實賬號數量分別除以一萬,得到:


4、計算每個類別條件下各個特徵屬性劃分的頻率


5、使用分類器進行鑑別

     下面我們使用上面訓練得到的分類器鑑別一個賬號,這個賬號使用非真實頭像,日誌數量與註冊天數的比率為0.1,好友數與註冊天數的比率為0.2。


     可以看到,雖然這個使用者沒有使用真實頭像,但是通過分類器的鑑別,更傾向於將此賬號歸入真實賬號類別。這個例子也展示了當特徵屬性充分多時,樸素貝葉斯分類對個別屬性的抗干擾性。

拼寫糾正

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

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

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

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

    這個概率。並找出那個使得這個概率最大的猜測單詞。顯然,我們的猜測未必是唯一的,就像前面舉的那個自然語言的歧義性的例子一樣;這裡,比如使用者輸入:thew ,那麼他到底是想輸入 the,還是想輸入 thaw ?到底哪個猜測可能性更大呢?幸運的是我們可以用貝葉斯公式來直接出它們各自的概率,我們不妨將我們的多個猜測記為h1 h2 .. ( h 代表 hypothesis),它們都屬於一個有限且離散的猜測空間H (單詞總共就那麼多而已),將使用者實際輸入的單詞記為 DD 代表 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 downexplanation 這個單詞上,至於具體是根據哪些線索——如音節——來提取,又是如何在生物神經網路中實現這個提取機制的,目前還是一個沒有弄清的領域)。然後,我們對這有限的幾個猜測做一個top-down 的預測,看看到底哪個對於觀測資料(即錯誤單詞)的預測效力最好,而如何衡量預測效率則就是用貝葉斯公式裡面的那個P(h) * P(D | h) 了——雖然我們很可能使用了一些啟發法來簡化計算。後面我們還會提到這樣的 bottom-up 的關聯提取。

模型比較與奧卡姆剃刀

再訪拼寫糾正

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

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

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

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

模型比較理論(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) 太小(太巧合)了。我們的直覺是:巧合(小概率)事件不會發生。所以當一個猜測(假設)使得我們的觀測結果成為小概率事件的時候,我們就說“才怪呢,哪能那麼巧捏?!”

    現在我們可以回到那個自然語言二義性的例子,並給出一個完美的解釋了:如果語法結構是 Thegirl 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) 的大小),不含先驗概率。通過這兩個例子,尤其是那個樹後面的箱子的例子我們可以看到,似然估計裡面也蘊含著奧卡姆剃刀:樹後面的箱子數目越多,這個模型就越複雜。單個箱子的模型是最簡單的。似然估計選擇了更簡單的模型。

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

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

最小描述長度原則

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

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

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

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

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

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

最優貝葉斯推理

    所謂的推理,分為兩個過程,第一步是對觀測資料建立一個模型。第二步則是使用這個模型來推測未知現象發生的概率。我們前面都是講的對於觀測資料給出最靠譜的那個模型。然而很多時候,雖然某個模型是所有模型裡面最靠譜的,但是別的模型也並不是一點機會都沒有。譬如第一個模型在觀測資料下的概率是 0.5 。第二個模型是 0.4 ,第三個是 0.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 。至於機器學習能不能完成後者(像人類那樣的)這個推理,則是人工智慧領域的經典問題。至少在那之前,聲稱統計學習方法能夠終結科學研究(原文)的說法是純粹外行人說的話。

統計機器翻譯

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

    問題是什麼?統計機器翻譯的問題可以描述為:給定一個句子 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 為:Johnloves Mary 。我們需要考察的首選 f 是:Jean aime Marie (法文)。我們需要求出 P(e|f) 是多大,為此我們考慮 ef 有多少種對齊的可能性,如:

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

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

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

即可。

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

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

貝葉斯影象識別,Analysis by Synthesis

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


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

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

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