马尔可夫链蒙特卡罗算法 MCMC
馬爾可夫鏈蒙特卡羅算法(MCMC)是貝葉斯推斷中的明星算法,困惑筆者頗久,閱讀了劉建平大佬的博客及知乎上的一些閱讀筆記后,終于有了些自己的理解。本文基于劉建平大佬的博客進(jìn)行梳理,復(fù)制粘貼較多(甚至截圖),權(quán)且當(dāng)成讀書筆記。
蒙特卡羅方法
原文鏈接:MCMC(一)蒙特卡羅方法
要理解好MCMC,得先從第二個(gè)MC——Monte Carlo開始說起。
引入
求解積分問題(即面積計(jì)算類問題,尤其是難以直接數(shù)學(xué)推導(dǎo)時(shí)),采用Monte Carlo算法是個(gè)不錯(cuò)的選擇。比如計(jì)算圓周率,可以在邊長為2的正方形內(nèi)畫一個(gè)內(nèi)切圓,然后再正方形內(nèi)進(jìn)行N次隨機(jī)采樣,求出圓內(nèi)樣本點(diǎn)的個(gè)數(shù)所占比例即可近似求出圓面積,從而間接推導(dǎo)圓周率的值。再比如下圖,求蝙蝠俠的大小,也可以用類似的思想求解。這便是蒙特卡洛(Monte Carlo)的基本哲學(xué)。
? ? ??
當(dāng)然,實(shí)際情況運(yùn)用這個(gè)思想,得稍微靈活一點(diǎn)。以下用原文的例子一步步貼近實(shí)際需求進(jìn)行說明。
問題:求解如下函數(shù)的積分:
? ? ????
? ? ??
這個(gè)例子很好,只是筆者在第一次讀的時(shí)候沒理解為什么求積分需要用到概率分布,總感覺均勻采樣就行了,使用概率分布的必要性在哪?仔細(xì)一想,發(fā)現(xiàn)其實(shí)這才是現(xiàn)實(shí)的需求,這種做法很有必要!以吃飯為例(暴露了吃貨的本質(zhì)):f(x)表示學(xué)生飯量隨身高的變化趨勢(shì)(曲線應(yīng)當(dāng)是逐漸上升),如果求食堂需要準(zhǔn)備多少米飯,此時(shí)我們還有必要了解學(xué)生的身高分布情況(頻數(shù)分布);如果求單個(gè)學(xué)生飯量的期望值,則要用身高的概率分布。這樣類似的例子還有很多很多。
接受-拒絕采樣
如果已知概率分布函數(shù),如何基于這個(gè)概率分布進(jìn)行采樣呢?
我們知道,對(duì)于正態(tài)分布、Beta分布、Gamma分布等等經(jīng)典分布,程序包都有相應(yīng)的隨機(jī)采樣方法可以直接調(diào)用。其實(shí)這些分布之所以能直接使用,是基于一些變換得到的(比如正態(tài)分布是在均勻分布的基礎(chǔ)上經(jīng)過Box?Muller變換得到)。
但是對(duì)于自定義的復(fù)雜概率分布,一般無法直接進(jìn)行隨機(jī)采樣。這時(shí),我們采取“接受-拒絕采樣”的策略。
? ? ??
總的來說,就是我們通過怎樣的采樣策略,讓獲得的樣本的分布形態(tài)與概率分布函數(shù)的形態(tài)接近。如何接地氣地理解上述策略,筆者思考如下。最自然的想法是,我們找一個(gè)矩形(定義域兩端開發(fā)時(shí) 矩形無限長),讓分布函數(shù)被包含在這個(gè)矩形內(nèi),然后在矩形內(nèi)均勻采樣,若樣本點(diǎn)落在了目標(biāo)概率函數(shù)下方,則保留該樣本。這其實(shí)就對(duì)應(yīng)著上述方法中的proposal distribution為均勻分布的情況。
接下來,我們考慮優(yōu)化這個(gè)自然的方法。矩形的高度和長度如何確定?選擇最小的能覆蓋目標(biāo)概率函數(shù)的矩形即可!如果目標(biāo)概率函數(shù)的兩端無限延長,中間高聳,類似于正態(tài)分布呢?此時(shí)矩形兩端無限延長,均勻采樣的效率極低。將proposal distribution改成正態(tài)分布,采樣效率明顯提升。實(shí)際情況采用怎樣的proposal distribution,需要根據(jù)目標(biāo)概率函數(shù)的特點(diǎn)而定。有時(shí)均勻分布不均合適,有時(shí)狀態(tài)分布合適,有時(shí)Beta分布更合適;合適的proposal distribution可以帶來更高的采用效率。
? ? ??
從上面可以看出,要想將蒙特卡羅方法作為一個(gè)通用的采樣模擬求和的方法,必須解決如何方便得到各種復(fù)雜概率分布的對(duì)應(yīng)的采樣樣本集的問題。接下來要講到的馬爾科夫鏈就是幫助找到這些復(fù)雜概率分布的對(duì)應(yīng)的采樣樣本集的白衣騎士。
?
馬爾科夫鏈
原文鏈接:MCMC(二)馬爾科夫鏈
概述
馬爾科夫鏈(Markov chain):假設(shè)某一時(shí)刻狀態(tài)轉(zhuǎn)移的概率只依賴于它的前一個(gè)狀態(tài)。舉個(gè)形象的比喻,假如每天的天氣是一個(gè)狀態(tài)的話,那個(gè)今天是不是晴天只依賴于昨天的天氣,而和前天的天氣沒有任何關(guān)系。當(dāng)然這么說可能有些武斷,但是這樣做可以大大簡化模型的復(fù)雜度,因此馬爾科夫鏈在很多時(shí)間序列模型中得到廣泛的應(yīng)用,比如循環(huán)神經(jīng)網(wǎng)絡(luò)RNN,隱式馬爾科夫模型HMM等,當(dāng)然MCMC也需要它。
? ? ??
注意:狀態(tài)轉(zhuǎn)移矩陣P的每一行的和為1。在連續(xù)概率分布中,馬爾科夫鏈的狀態(tài)數(shù)是無限的,也就是說,每一行的元素個(gè)數(shù)有無限個(gè)。馬爾科夫鏈轉(zhuǎn)移(以AB兩個(gè)狀態(tài)為例),不是指A狀態(tài)轉(zhuǎn)移到B狀態(tài),而是:當(dāng)前處于A或B狀態(tài)的概率,轉(zhuǎn)移到下一個(gè)階段(時(shí)刻)后,處于A或B狀態(tài)的概率分別變成了多少。
馬爾科夫鏈模型的狀態(tài)轉(zhuǎn)移矩陣的性質(zhì)
原文中,作者通過模擬,引出了馬爾科夫鏈的收斂性質(zhì),此處直接拋出結(jié)論(模擬及推導(dǎo)此處略去)。
馬爾科夫鏈的收斂性質(zhì)
? ? ??
? ? ??
?
基于馬爾科夫鏈采樣
? ? ??
馬爾科夫鏈和蒙特卡洛是怎么聯(lián)系起來的?先重新回顧之前蒙特卡洛采樣:給定概率分布函數(shù),如何獲得有代表性的采樣點(diǎn)。在初始的幾個(gè)采樣點(diǎn),形成的概率分布可能不符合概率分布函數(shù),但隨著采樣次數(shù)逐漸增加,越來越接近概率分布函數(shù)形態(tài),并且分布的形態(tài)將達(dá)到穩(wěn)態(tài),這對(duì)也就應(yīng)于馬爾科夫鏈的穩(wěn)態(tài)(馬爾科夫鏈的節(jié)點(diǎn)是當(dāng)前階段的概率分布)。我們?cè)谶_(dá)到平穩(wěn)分布后進(jìn)行采樣,這些樣本就可以用來進(jìn)行蒙特卡洛模擬了。也就是說,我們已知馬爾科夫鏈的穩(wěn)態(tài),需要重現(xiàn)馬爾科夫鏈的狀態(tài)轉(zhuǎn)移過程,也就是需要狀態(tài)轉(zhuǎn)移矩陣(初始狀態(tài)并不重要);狀態(tài)轉(zhuǎn)移矩陣如何求得,接下來的內(nèi)容將進(jìn)行闡述。
馬爾科夫鏈的細(xì)致平穩(wěn)條件
? ? ??
MCMC采樣
原文鏈接:MCMC(三)MCMC采樣和M-H采樣
? ? ??
? ? ??
仔細(xì)觀察第3c步,這里就和樸素的蒙特卡洛方法很像了。由此理解接受率,其實(shí)這個(gè)接受率和樸素蒙特卡洛中的接受率是類似的意思,都是動(dòng)態(tài)確定的,根據(jù)當(dāng)前概率分布(此處的,蒙特卡洛中的p分布)及使用的輔助分布(此處的Q,蒙特卡洛中的q分布)進(jìn)行計(jì)算確定。總的來說,上述MCMC采樣過程,就是Markov chain采樣過程和Monte Carlo采樣過程的綜合版。
上面這個(gè)過程基本上就是MCMC采樣的完整采樣理論了,但是這個(gè)采樣算法還是比較難在實(shí)際中應(yīng)用,為什么呢?問題在上面第三步的c步驟,接受率這兒。由于?可能非常的小,比如0.1,導(dǎo)致我們大部分的采樣值都被拒絕轉(zhuǎn)移,采樣效率很低。有可能我們采樣了上百萬次馬爾可夫鏈還沒有收斂,也就是上面這個(gè)n1要非常非常的大,這讓人難以接受,怎么辦呢?這時(shí)就輪到我們的M-H采樣出場了。
M-H采樣
M-H采樣是Metropolis-Hastings采樣的簡稱,這個(gè)算法首先由Metropolis提出,被Hastings改進(jìn),因此被稱之為Metropolis-Hastings采樣或M-H采樣。M-H采樣解決了我們上一節(jié)MCMC采樣接受率過低的問題。
? ? ??
?
很多時(shí)候,我們選擇的馬爾科夫鏈狀態(tài)轉(zhuǎn)移矩陣QQ如果是對(duì)稱的,即滿足Q(i,j)=Q(j,i),這時(shí)我們的接受率可以進(jìn)一步簡化為:
? ? ??
? ? ??
Gibbs采樣解決了上面兩個(gè)問題,因此在大數(shù)據(jù)時(shí)代,MCMC采樣基本是Gibbs采樣的天下,接下來我們就來討論Gibbs采樣。
Gibbs采樣
原文鏈接:MCMC(四)Gibbs采樣
Gibbs采樣系列,筆者尚未理解透,暫時(shí)把原文截圖存于此。
重新尋找合適的細(xì)致平穩(wěn)條件
在M-H采樣中我們通過引入接受率使細(xì)致平穩(wěn)條件滿足。現(xiàn)在我們換一個(gè)思路。
? ? ??
二維Gibbs采樣
? ? ??
? ? ??
多維Gibbs采樣
? ? ??
? ? ? ?由于Gibbs采樣在高維特征時(shí)的優(yōu)勢(shì),目前我們通常意義上的MCMC采樣都是用的Gibbs采樣。當(dāng)然Gibbs采樣是從M-H采樣的基礎(chǔ)上的進(jìn)化而來的,同時(shí)Gibbs采樣要求數(shù)據(jù)至少有兩個(gè)維度,一維概率分布的采樣是沒法用Gibbs采樣的,這時(shí)M-H采樣仍然成立。
有了Gibbs采樣來獲取概率分布的樣本集,有了蒙特卡羅方法來用樣本集模擬求和,他們一起就奠定了MCMC算法在大數(shù)據(jù)時(shí)代高維數(shù)據(jù)模擬求和時(shí)的作用。
?
參考資料:
MCMC(一)蒙特卡羅方法
MCMC(二)馬爾科夫鏈
MCMC(三)MCMC采樣和M-H采樣
MCMC(四)Gibbs采樣
馬爾可夫鏈蒙特卡羅算法(MCMC)
告別數(shù)學(xué)公式,圖文解讀什么是馬爾可夫鏈蒙特卡羅方法(MCMC)
?
總結(jié)
以上是生活随笔為你收集整理的马尔可夫链蒙特卡罗算法 MCMC的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: (ZT)VC++的链接错误LNK2001
- 下一篇: 熊猫烧香是天才作品吗?