一份數(shù)學小白也能讀懂的「馬爾可夫鏈蒙特卡洛方法」入門指南
↓↓↓點擊關注,回復資料,10個G的驚喜
選自Medium??作者:Ben Shaver??機器之心編譯?參與:黃小天、劉曉坤
在眾多經(jīng)典的貝葉斯方法中,馬爾可夫鏈蒙特卡洛(MCMC)由于包含大量數(shù)學知識,且計算量很大,而顯得格外特別。本文反其道而行之,試圖通過通俗易懂且不包含數(shù)學語言的方法,幫助讀者對 MCMC 有一個直觀的理解,使得毫無數(shù)學基礎的人搞明白 MCMC。
在我們中的很多人看來,貝葉斯統(tǒng)計學家不是巫術師,就是完全主觀的胡說八道者。在貝葉斯經(jīng)典方法中,馬爾可夫鏈蒙特卡洛(Markov chain Monte Carlo/MCMC)尤其神秘,其中數(shù)學很多,計算量很大,但其背后原理與數(shù)據(jù)科學有諸多相似之處,并可闡釋清楚,使得毫無數(shù)學基礎的人搞明白 MCMC。這正是本文的目標。
那么,到底什么是 MCMC 方法?一言以蔽之:
MCMC 通過在概率空間中隨機采樣以近似興趣參數(shù)(parameter of interest)的后驗分布。
我將在本文中做出簡短明了的解釋,并且不借助任何數(shù)學知識。
首先,解釋重要的術語?!概d趣參數(shù)」(parameter of interest)可以總結我們感興趣現(xiàn)象的一些數(shù)字。我們通常使用統(tǒng)計學評估參數(shù),比如,如果想要了解成年人的身高,我們的興趣參數(shù)可以是精確到英寸的平均身高?!阜植肌故菂?shù)的每個可能值、以及我們有多大可能觀察每個參數(shù)的數(shù)學表征,其最著名的實例是鐘形曲線:

在貝葉斯統(tǒng)計學中,分布還有另外一種解釋。貝葉斯不是僅僅表征一個參數(shù)值以及每個參數(shù)有多大可能是真值,而是把分布看作是我們對參數(shù)的「信念」。因此,鐘形曲線表明我們非常確定參數(shù)值相當接近于零,但是我們認為在一定程度上真值高于或低于該值的可能性是相等的。
事實上,人的身高確實遵從一個正態(tài)曲線,因此我們假定平均身高的真值符合鐘形曲線,如下所示:

很明顯,上圖表征是巨人的身高分布,因為據(jù)圖可知,最有可能的平均身高是 6'2"(但他們也并非超級自信)。
讓我們假設其中某個人后來收集到一些數(shù)據(jù),并且觀察了身高在 5"和 6"之間的一些人。我們可以用另一條正態(tài)曲線表征下面的數(shù)據(jù),該曲線表明了哪些平均身高值能最好地解釋這些數(shù)據(jù):

在貝葉斯統(tǒng)計中,表征我們對參數(shù)信念的分布被稱為「先驗分布」,因為它在我們看到任何數(shù)據(jù)之前捕捉到了我們的信念。「可能性分布」(likelihood distribution)通過表征一系列參數(shù)值以及伴隨的每個參數(shù)值解釋觀察數(shù)據(jù)的可能性,以總結數(shù)據(jù)之中的信息。評估最大化可能性分布的參數(shù)值只是回答這一問題:什么參數(shù)值會使我們更可能觀察到已經(jīng)觀察過的數(shù)據(jù)?如果沒有先驗信念,我們可能無法對此作出評估。
但是,貝葉斯分析的關鍵是結合先驗與可能性分布以確定后驗分布。它可以告訴我們哪個參數(shù)值最大化了觀察到已觀察過的特定數(shù)據(jù)的概率,并把先驗信念考慮在內(nèi)。在我們的實例中,后驗分布如下所示:

如上所示,紅線表征后驗分布。你可以將其看作先驗和可能性分布的一種平均值。由于先驗分布較小且更加分散,它表征了一組關于平均身高真值的「不太確定」的信念。同時,可能性分布在相對較窄的范圍內(nèi)總結數(shù)據(jù),因此它表征了對真參數(shù)值的「更確定」的猜測。
當先驗與可能性分布結合在一起,數(shù)據(jù)(由可能性分布表征)主導了假定存在于這些巨人之中的個體的先驗弱信念。盡管該個體依然認為平均身高比數(shù)據(jù)告訴他的稍高一些,但是他非??赡鼙粩?shù)據(jù)說服。
在兩條鐘形曲線的情況下,求解后驗分布非常容易。有一個結合了兩者的簡單等式。但是如果我們的先驗和可能性分布表現(xiàn)很差呢?有時使用非簡化的形狀建模數(shù)據(jù)或先驗信念時是最精確的。如果可能性分布需要帶有兩個峰值的分布才能得到最好地表征呢?并且出于某些原因我們想要解釋一些非常奇怪的先驗分布?通過手動繪制一個丑陋的先驗分布,我已可視化了該情景,如下所示:

可視化由?Matplotlib?渲染,并使用?MS?Paint?做了改善
如前所述,存在一些后驗分布,它給出了每個參數(shù)值的可能性分布。但是很難得到完整的分布,也無法解析地求解。這就是使用 MCMC 方法的時候了。
MCMC 允許我們在無法直接計算的情況下評估后驗分布的形狀。為了理解其工作原理,我將首先介紹蒙特卡洛模擬(Monte Carlo simulation),接著討論馬爾可夫鏈。
蒙特卡洛模擬只是一種通過不斷地生成隨機數(shù)來評估固定參數(shù)的方法。通過生成隨機數(shù)并對其做一些計算,蒙特卡洛模擬給出了一個參數(shù)的近似值(其中直接計算是不可能的或者計算量過大)。
假設我們想評估下圖中的圓圈面積:

由于圓在邊長為 10?英寸的正方形之內(nèi),所以通過簡單計算可知其面積為 78.5 平方英寸。但是,如果我們隨機地在正方形之內(nèi)放置 20?個點,接著我們計算點落在圓內(nèi)的比例,并乘以正方形的面積,所得結果非常近似于圓圈面積。

由于 15 個點落在了圓內(nèi),那么圓的面積可以近似地為 75 平方英寸,對于只有 20?個隨機點的蒙特卡洛模擬來說,結果并不差。
現(xiàn)在,假設我們想要計算下圖中由蝙蝠俠方程(Batman Equation)繪制的圖形的面積:

我們從來沒有學過一個方程可以求這樣的面積。不管怎樣,通過隨機地放入隨機點,蒙特卡洛模擬可以相當容易地為該面積提供一個近似值。
蒙特卡洛模擬不只用于估算復雜形狀的面積。通過生成大量隨機數(shù)字,它還可用于建模非常復雜的過程。實際上,蒙特卡洛模擬還可以預測天氣,或者評估選舉獲勝的概率。
理解 MCMC 方法的第二個要素是馬爾科夫鏈(Markov chains)。馬爾科夫鏈由存在概率相關性的事件的序列構成。每個事件源于一個結果集合,根據(jù)一個固定的概率集合,每個結果決定了下一個將出現(xiàn)的結果。
馬爾科夫鏈的一個重要特征是「無記憶性」:可能需要用于預測下一個時間的一切都已經(jīng)包含在當前的狀態(tài)中,從事件的歷史中得不到任何新信息。例如 Chutes and Ladders 這個游戲就展示了這種無記憶性,或者說馬爾科夫性,但在現(xiàn)實世界中很少事物是這種性質(zhì)的。盡管如此,馬爾科夫鏈也是理解現(xiàn)實世界的強大工具。
在十九世紀,人們觀察到鐘形曲線在自然中是一種很常見的模式。(我們注意到,例如,人類的身高服從鐘形曲線分布。)Galton Boards 曾通過將彈珠墜落并通過布滿木釘?shù)陌迥M了重復隨機事件的平均值,在彈珠的最終數(shù)量分布中重現(xiàn)了鐘形曲線:

俄羅斯數(shù)學家和神學家 Pavel Nekrasov 認為鐘形曲線,或者更一般的說,大數(shù)規(guī)律只不過是小孩子的游戲和普通的謎題中的偽假象,其中每個事件之間都是完全獨立的。他認為現(xiàn)實世界中的互相依賴的事件,例如人類行為,并不遵循漂亮的數(shù)學模式或分布。
Andrey Markov(馬爾科夫鏈正是以他的名字命名)試圖證明非獨立的事件可能也遵循特定的模式。他的其中一個最著名的例子是從一份俄羅斯詩歌作品中數(shù)出幾千個兩字符對(two-character pairs)。他使用這些兩字符對計算了每個字符的條件概率。即,給定一個確定的上述字母或空白,關于下一個字母將是 A、T 或者空白等,存在一個確定的概率。通過這些概率,Markov 可以模擬一個任意的長字符序列。這就是馬爾科夫鏈。雖然早先的幾個字符很大程度上依賴于初始字符的選擇,Markov 表明在長字符序列中,字符的分布會出現(xiàn)特定的模式。因此,即使是互相依賴的事件,如果服從固定的概率分布,將遵循平均水平的模式。
舉一個更有意義的例子,假設你住在一個有 5 個房間的房子里,里面有一個臥室、浴室、客廳、廚房、飯廳。然后我們收集一些數(shù)據(jù),假定只需要當前你所處的房間和相應的時間就可以預測下一個你所處的房間的概率。例如,如果你在廚房,你有 30%?的概率會留在廚房,有 30%?的概率會走到飯廳,有 20%?的概率會走到客廳,有 10%?的概率會走到浴室,以及有 10%?的概率會走到臥室。使用每個房間的概率集合,我們可以構建一個關于你接下來要去的房間的預測鏈。
如果想預測一個人處于廚房之后所在的房間,基于幾個狀態(tài)而做出預測可能有效。但由于我們的預測僅僅基于一個人在房子中的單次觀察,可以合理地認為預測結果是不夠好的。例如,如果一個人從臥室走到浴室,相比從廚房走到浴室的情況,他更可能會返回原來的房間。因此,馬爾科夫鏈并不真正適用于現(xiàn)實世界。
然而,通過迭代運行馬爾科夫鏈數(shù)千次,確實能給出關于你接下來可能所處的房間的長期預測。更重要的是,這個預測并不受這個人起始所處的房間的影響。對此可以直觀地理解為:在模擬和描述長期過程(或普遍情況)一個人所處房間的概率時,時間因素是不重要的。因此,如果我們理解了控制行為的概率,就可以使用馬爾科夫鏈計算變化的長期趨勢。
希望通過介紹一些蒙特卡洛模擬和馬爾科夫鏈,可以使你對 MCMC 方法的零數(shù)學解釋有更直觀的理解。
回到原來的問題,即評估平均身高的后驗分布:

這個平均身高的后驗分布的實例沒有基于真實數(shù)據(jù)。
我們知道后驗分布在某種程度上處于先驗分布和可能性分布的范圍內(nèi),但無論如何都無法直接計算。使用 MCMC 方法,我們可以有效地從后驗分布中提取樣本,然后計算統(tǒng)計特征,例如提取樣本的平均值。
首先,MCMC 方法選擇一個隨機參數(shù)值。模擬過程中會持續(xù)生成隨機的值(即蒙特卡洛部分),但服從某些能生成更好參數(shù)值的規(guī)則。即對于一對參數(shù)值,可以通過給定先驗信度計算每個值解釋數(shù)據(jù)的有效性,從而確定哪個值更好。我們會將更好的參數(shù)值以及由這個值的解釋數(shù)據(jù)有效性決定的特定概率添加到參數(shù)值的鏈中(即馬爾科夫鏈部分)。
為了可視化地解釋上述過程,首先強調(diào)一下,一個分布的特定值的高度代表的是觀察到該值的概率。因此,參數(shù)值(x 軸)對應的概率(y 軸)可能或高或低。對于單個參數(shù),MCMC 方法會從隨機在 x 軸上采樣開始。

紅點表征隨機參數(shù)采樣。
由于隨機采樣服從固定的概率,它們傾向于經(jīng)過一段時間后收斂于參數(shù)的高概率區(qū)域:

藍點表示當采樣收斂之后,經(jīng)過任意時間的隨機采樣。注意:垂直堆疊這些點僅僅是為了說明目的。
收斂出現(xiàn)之后,MCMC 采樣會得到作為后驗分布樣本的一系列點。用這些點畫直方圖,然后你可以計算任何感興趣的統(tǒng)計特征:

通過 MCMC 模擬生成的樣本集合計算的任何統(tǒng)計特征,都是對真實后驗分布的統(tǒng)計特征的最佳近似。
MCMC 方法也可以用于評估多于一個參數(shù)的后驗分布(例如,人類身高和體重)。對于 n 個參數(shù),在 n 維空間中存在高概率的區(qū)域,其中特定的參數(shù)值集合可以更有效地解釋數(shù)據(jù)。因此,我認為 MCMC 方法的本質(zhì),就是在一個概率空間中進行隨機采樣以近似后驗分布。
原文鏈接:https://towardsdatascience.com/a-zero-math-introduction-to-markov-chain-monte-carlo-methods-dcba889e0c50
推薦閱讀
用Python學線性代數(shù):自動擬合數(shù)據(jù)分布 Python 用一行代碼搞事情,機器學習通吃 Github 上最大的開源算法庫,還能學機器學習! JupyterLab 這插件太強了,Excel靈魂附體 終于把 jupyter notebook 玩明白了 一個超好用的 Python 標準庫,666? 幾百本編程中文書籍(含Python)持續(xù)更新
好文點個在看吧!
