馬爾可夫鏈蒙特卡羅算法 MCMC

馬爾可夫鏈蒙特卡羅算法(MCMC)是貝葉斯推斷中的明星算法,困惑筆者頗久,閱讀了劉建平大佬的博客及知乎上的一些閱讀筆記後,終於有了些自己的理解。本文基於劉建平大佬的博客進行梳理,複製粘貼較多(甚至截圖),權且當成讀書筆記。

蒙特卡羅方法

原文鏈接:MCMC(一)蒙特卡羅方法

要理解好MCMC,得先從第二個MC——Monte Carlo開始說起。

引入

求解積分問題(即面積計算類問題,尤其是難以直接數學推導時),採用Monte Carlo算法是個不錯的選擇。比如計算圓周率,可以在邊長爲2的正方形內畫一個內切圓,然後再正方形內進行N次隨機採樣,求出圓內樣本點的個數所佔比例即可近似求出圓面積,從而間接推導圓周率的值。再比如下圖,求蝙蝠俠的大小,也可以用類似的思想求解。這便是蒙特卡洛(Monte Carlo)的基本哲學。

      

當然,實際情況運用這個思想,得稍微靈活一點。以下用原文的例子一步步貼近實際需求進行說明。

問題:求解如下函數的積分:

        

      

這個例子很好,只是筆者在第一次讀的時候沒理解爲什麼求積分需要用到概率分佈,總感覺均勻採樣就行了,使用概率分佈的必要性在哪?仔細一想,發現其實這纔是現實的需求,這種做法很有必要!以喫飯爲例(暴露了喫貨的本質):f(x)表示學生飯量隨身高的變化趨勢(曲線應當是逐漸上升),如果求食堂需要準備多少米飯,此時我們還有必要了解學生的身高分佈情況(頻數分佈);如果求單個學生飯量的期望值,則要用身高的概率分佈。這樣類似的例子還有很多很多。

接受-拒絕採樣

如果已知概率分佈函數,如何基於這個概率分佈進行採樣呢?

我們知道,對於正態分佈、Beta分佈、Gamma分佈等等經典分佈,程序包都有相應的隨機採樣方法可以直接調用。其實這些分佈之所以能直接使用,是基於一些變換得到的(比如正態分佈是在均勻分佈的基礎上經過Box−Muller變換得到)。

但是對於自定義的複雜概率分佈,一般無法直接進行隨機採樣。這時,我們採取“接受-拒絕採樣”的策略。

      

總的來說,就是我們通過怎樣的採樣策略,讓獲得的樣本的分佈形態與概率分佈函數的形態接近。如何接地氣地理解上述策略,筆者思考如下。最自然的想法是,我們找一個矩形(定義域兩端開發時 矩形無限長),讓分佈函數被包含在這個矩形內,然後在矩形內均勻採樣,若樣本點落在了目標概率函數下方,則保留該樣本。這其實就對應着上述方法中的proposal distribution爲均勻分佈的情況。

接下來,我們考慮優化這個自然的方法。矩形的高度和長度如何確定?選擇最小的能覆蓋目標概率函數的矩形即可!如果目標概率函數的兩端無限延長,中間高聳,類似於正態分佈呢?此時矩形兩端無限延長,均勻採樣的效率極低。將proposal distribution改成正態分佈,採樣效率明顯提升。實際情況採用怎樣的proposal distribution,需要根據目標概率函數的特點而定。有時均勻分佈不均合適,有時狀態分佈合適,有時Beta分佈更合適;合適的proposal distribution可以帶來更高的採用效率。

      

從上面可以看出,要想將蒙特卡羅方法作爲一個通用的採樣模擬求和的方法,必須解決如何方便得到各種複雜概率分佈的對應的採樣樣本集的問題。接下來要講到的馬爾科夫鏈就是幫助找到這些複雜概率分佈的對應的採樣樣本集的白衣騎士。

 

馬爾科夫鏈

原文鏈接:MCMC(二)馬爾科夫鏈

概述

馬爾科夫鏈(Markov chain):假設某一時刻狀態轉移的概率只依賴於它的前一個狀態。舉個形象的比喻,假如每天的天氣是一個狀態的話,那個今天是不是晴天只依賴於昨天的天氣,而和前天的天氣沒有任何關係。當然這麼說可能有些武斷,但是這樣做可以大大簡化模型的複雜度,因此馬爾科夫鏈在很多時間序列模型中得到廣泛的應用,比如循環神經網絡RNN,隱式馬爾科夫模型HMM等,當然MCMC也需要它。

      

注意:狀態轉移矩陣P的每一行的和爲1。在連續概率分佈中,馬爾科夫鏈的狀態數是無限的,也就是說,每一行的元素個數有無限個。馬爾科夫鏈轉移(以AB兩個狀態爲例),不是指A狀態轉移到B狀態,而是:當前處於A或B狀態的概率,轉移到下一個階段(時刻)後,處於A或B狀態的概率分別變成了多少。

馬爾科夫鏈模型的狀態轉移矩陣的性質

原文中,作者通過模擬,引出了馬爾科夫鏈的收斂性質,此處直接拋出結論(模擬及推導此處略去)。

馬爾科夫鏈的收斂性質

      

      

 

基於馬爾科夫鏈採樣

      

馬爾科夫鏈和蒙特卡洛是怎麼聯繫起來的?先重新回顧之前蒙特卡洛採樣:給定概率分佈函數,如何獲得有代表性的採樣點。在初始的幾個採樣點,形成的概率分佈可能不符合概率分佈函數,但隨着採樣次數逐漸增加,越來越接近概率分佈函數形態,並且分佈的形態將達到穩態,這對也就應於馬爾科夫鏈的穩態(馬爾科夫鏈的節點是當前階段的概率分佈)。我們在達到平穩分佈後進行採樣,這些樣本就可以用來進行蒙特卡洛模擬了。也就是說,我們已知馬爾科夫鏈的穩態,需要重現馬爾科夫鏈的狀態轉移過程,也就是需要狀態轉移矩陣(初始狀態並不重要);狀態轉移矩陣如何求得,接下來的內容將進行闡述。

馬爾科夫鏈的細緻平穩條件

      

MCMC採樣

原文鏈接:MCMC(三)MCMC採樣和M-H採樣

      

      

仔細觀察第3c步,這裏就和樸素的蒙特卡洛方法很像了。由此理解接受率,其實這個接受率和樸素蒙特卡洛中的接受率是類似的意思,都是動態確定的,根據當前概率分佈(此處的\pi,蒙特卡洛中的p分佈)及使用的輔助分佈(此處的Q,蒙特卡洛中的q分佈)進行計算確定。總的來說,上述MCMC採樣過程,就是Markov chain採樣過程和Monte Carlo採樣過程的綜合版。

上面這個過程基本上就是MCMC採樣的完整採樣理論了,但是這個採樣算法還是比較難在實際中應用,爲什麼呢?問題在上面第三步的c步驟,接受率這兒。由於\alpha (x_t,x_*) 可能非常的小,比如0.1,導致我們大部分的採樣值都被拒絕轉移,採樣效率很低。有可能我們採樣了上百萬次馬爾可夫鏈還沒有收斂,也就是上面這個n1要非常非常的大,這讓人難以接受,怎麼辦呢?這時就輪到我們的M-H採樣出場了。

M-H採樣

M-H採樣是Metropolis-Hastings採樣的簡稱,這個算法首先由Metropolis提出,被Hastings改進,因此被稱之爲Metropolis-Hastings採樣或M-H採樣。M-H採樣解決了我們上一節MCMC採樣接受率過低的問題。

      

 

很多時候,我們選擇的馬爾科夫鏈狀態轉移矩陣QQ如果是對稱的,即滿足Q(i,j)=Q(j,i),這時我們的接受率可以進一步簡化爲:

      

      

Gibbs採樣解決了上面兩個問題,因此在大數據時代,MCMC採樣基本是Gibbs採樣的天下,接下來我們就來討論Gibbs採樣。

Gibbs採樣

原文鏈接:MCMC(四)Gibbs採樣

Gibbs採樣系列,筆者尚未理解透,暫時把原文截圖存於此。

重新尋找合適的細緻平穩條件

在M-H採樣中我們通過引入接受率使細緻平穩條件滿足。現在我們換一個思路。

      

二維Gibbs採樣

      

      

多維Gibbs採樣

      

       由於Gibbs採樣在高維特徵時的優勢,目前我們通常意義上的MCMC採樣都是用的Gibbs採樣。當然Gibbs採樣是從M-H採樣的基礎上的進化而來的,同時Gibbs採樣要求數據至少有兩個維度,一維概率分佈的採樣是沒法用Gibbs採樣的,這時M-H採樣仍然成立。

  有了Gibbs採樣來獲取概率分佈的樣本集,有了蒙特卡羅方法來用樣本集模擬求和,他們一起就奠定了MCMC算法在大數據時代高維數據模擬求和時的作用。

 

參考資料:

MCMC(一)蒙特卡羅方法

MCMC(二)馬爾科夫鏈

MCMC(三)MCMC採樣和M-H採樣

MCMC(四)Gibbs採樣

馬爾可夫鏈蒙特卡羅算法(MCMC)

告別數學公式,圖文解讀什麼是馬爾可夫鏈蒙特卡羅方法(MCMC)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章