MCMC算法解析
MCMC算法的核心思想是我們已知一個概率密度函數(shù),需要從這個概率分布中采樣,來分析這個分布的一些統(tǒng)計特性,然而這個這個函數(shù)非常之復(fù)雜,怎么去采樣?這時,就可以借助MCMC的思想。
它與變分自編碼不同在于:VAE是已知一些樣本點,這些樣本肯定是來自于同一分布,但是我們不知道這個分布函數(shù)的具體表達(dá)式,然而我們需要從這個分布中去采取新的樣本,怎么采樣,這時,就需要借助VAE的思想。
個人的一點總結(jié),不知道是否正確,如果有不同的理解,希望指正批評!
MCMC原理講解
以下內(nèi)容博客轉(zhuǎn)自: https://www.cnblogs.com/xbinworld/p/4266146.html
背景
隨機(jī)模擬也可以叫做蒙特卡羅模擬(Monte Carlo Simulation)。這個方法的發(fā)展始于20世紀(jì)40年代,和原子彈制造的曼哈頓計劃密切相關(guān),當(dāng)時的幾個大牛,包括烏拉姆、馮.諾依曼、費(fèi)米、費(fèi)曼、Nicholas Metropolis, 在美國洛斯阿拉莫斯國家實驗室研究裂變物質(zhì)的中子連鎖反應(yīng)的時候,開始使用統(tǒng)計模擬的方法,并在最早的計算機(jī)上進(jìn)行編程實現(xiàn)。[3]
隨機(jī)模擬中有一個重要的問題就是給定一個概率分布p(x),我們?nèi)绾卧谟嬎銠C(jī)中生成它的樣本。一般而言均勻分布?Uniform(0,1)的樣本是相對容易生成的。 通過線性同余發(fā)生器可以生成偽隨機(jī)數(shù),我們用確定性算法生成[0,1]之間的偽隨機(jī)數(shù)序列后,這些序列的各種統(tǒng)計指標(biāo)和均勻分布?Uniform(0,1)?的理論計算結(jié)果非常接近。這樣的偽隨機(jī)序列就有比較好的統(tǒng)計性質(zhì),可以被當(dāng)成真實的隨機(jī)數(shù)使用。
?
下面總結(jié)這么幾點:
1、蒙特卡洛數(shù)值積分
2、均勻分布,Box-Muller 變換
3、Monte Carlo principle
4、接受-拒絕抽樣(Acceptance-Rejection sampling)
5、重要性抽樣(Importance sampling)
6、馬爾科夫鏈,馬爾科夫穩(wěn)態(tài)
7、MCMC——Metropolis-Hasting算法
8、MCMC——Gibbs Sampling算法
?
1、蒙特卡洛數(shù)值積分
如果我們要求f(x)的積分,如
而f(x)的形式比較復(fù)雜積分不好求,則可以通過數(shù)值解法來求近似的結(jié)果。常用的方法是蒙特卡洛積分:
這樣把q(x)看做是x在區(qū)間內(nèi)的概率分布,而把前面的分?jǐn)?shù)部門看做一個函數(shù),然后在q(x)下抽取n個樣本,當(dāng)n足夠大時,可以用采用均值來近似:
因此只要q(x)比較容易采到數(shù)據(jù)樣本就行了。隨機(jī)模擬方法的核心就是如何對一個概率分布得到樣本,即抽樣(sampling)。下面我們將介紹常用的抽樣方法。
?
2、均勻分布,Box-Muller 變換
在計算機(jī)中生成[0,1]之間的偽隨機(jī)數(shù)序列,就可以看成是一種均勻分布。而隨機(jī)數(shù)生成方法有很多,最簡單的如:
當(dāng)然計算機(jī)產(chǎn)生的隨機(jī)數(shù)都是偽隨機(jī)數(shù),不過一般也就夠用了。
?
[Box-Muller 變換]? 如果隨機(jī)變量 U1,U2 獨立且U1,U2~Uniform[0,1],
則 Z0,Z1 獨立且服從標(biāo)準(zhǔn)正態(tài)分布。
?
3、Monte Carlo principle
Monte Carlo 抽樣計算隨即變量的期望值是接下來內(nèi)容的重點:X 表示隨即變量,服從概率分布 p(x), 那么要計算 f(x) 的期望,只需要我們不停從 p(x) 中抽樣xi,然后對這些f(xi)取平均即可近似f(x)的期望。
?
?
4、接受-拒絕抽樣(Acceptance-Rejection sampling)[2]
很多實際問題中,p(x)是很難直接采樣的的,因此,我們需要求助其他的手段來采樣。既然 p(x) 太復(fù)雜在程序中沒法直接采樣,那么我設(shè)定一個程序可抽樣的分布 q(x) 比如高斯分布,然后按照一定的方法拒絕某些樣本,達(dá)到接近 p(x) 分布的目的,其中q(x)叫做 proposal distribution 。
具體操作如下,設(shè)定一個方便抽樣的函數(shù) q(x),以及一個常量 k,使得 p(x) 總在 kq(x) 的下方。(參考上圖)
- x 軸方向:從 q(x) 分布抽樣得到 a。(如果是高斯,就用之前說過的 tricky and faster 的算法更快)
- y 軸方向:從均勻分布(0, kq(a)) 中抽樣得到 u。
- 如果剛好落到灰色區(qū)域: u > p(a), 拒絕, 否則接受這次抽樣
- 重復(fù)以上過程
在高維的情況下,Rejection Sampling 會出現(xiàn)兩個問題,第一是合適的 q 分布比較難以找到,第二是很難確定一個合理的 k 值。這兩個問題會導(dǎo)致拒絕率很高,無用計算增加。
?
5、重要性抽樣(Importance sampling)[2]
Importance Sampling 也是借助了容易抽樣的分布 q (proposal distribution)來解決這個問題,直接從公式出發(fā):
其中,p(z) / q(z) 可以看做 importance weight。我們來考察一下上面的式子,p 和 f 是確定的,我們要確定的是 q。要確定一個什么樣的分布才會讓采樣的效果比較好呢?直觀的感覺是,樣本的方差越小期望收斂速率越快。比如一次采樣是 0, 一次采樣是 1000, 平均值是 500,這樣采樣效果很差,如果一次采樣是 499, 一次采樣是 501, 你說期望是 500,可信度還比較高。在上式中,我們目標(biāo)是 p×f/q 方差越小越好,所以 |p×f| 大的地方,proposal distribution q(z) 也應(yīng)該大。舉個稍微極端的例子:
第一個圖表示 p 分布, 第二個圖的陰影區(qū)域 f = 1,非陰影區(qū)域 f = 0, 那么一個良好的 q 分布應(yīng)該在左邊箭頭所指的區(qū)域有很高的分布概率,因為在其他區(qū)域的采樣計算實際上都是無效的。這表明 Importance Sampling 有可能比用原來的 p 分布抽樣更加有效。
但是可惜的是,在高維空間里找到一個這樣合適的 q 非常難。即使有 Adaptive importance sampling 和 Sampling-Importance-Resampling(SIR) 的出現(xiàn),要找到一個同時滿足 easy to sample 并且 good approximations 的 proposal distribution, it is often impossible!
?
6、馬爾科夫鏈,馬爾科夫穩(wěn)態(tài)
在講蒙特卡洛方法之前,必須要先講一下馬爾科夫鏈;馬氏鏈的數(shù)學(xué)定義:
也就是說前一個狀態(tài)只與當(dāng)前狀態(tài)有關(guān),而與其他狀態(tài)無關(guān),Markov Chain 體現(xiàn)的是狀態(tài)空間的轉(zhuǎn)換關(guān)系,下一個狀態(tài)只決定與當(dāng)前的狀態(tài)(可以聯(lián)想網(wǎng)頁爬蟲原理,根據(jù)當(dāng)前頁面的超鏈接訪問下一個網(wǎng)頁)。如下圖:
舉一個例子,如果當(dāng)前狀態(tài)為 u(x) = (0.5, 0.2, 0.3), 那么下一個矩陣的狀態(tài)就是 u(x)T = (0.18, 0.64, 0.18), 依照這個轉(zhuǎn)換矩陣一直轉(zhuǎn)換下去,最后的系統(tǒng)就趨近于一個穩(wěn)定狀態(tài) (0.22, 0.41, 0.37) (此處只保留了兩位有效數(shù)字)。而事實證明無論你從那個點出發(fā),經(jīng)過很長的 Markov Chain 之后都會匯集到這一點。[2]
再舉一個例子,社會學(xué)家經(jīng)常把人按其經(jīng)濟(jì)狀況分成3類:下層(lower-class)、中層(middle-class)、上層(upper-class),我們用1,2,3 分別代表這三個階層。社會學(xué)家們發(fā)現(xiàn)決定一個人的收入階層的最重要的因素就是其父母的收入階層。如果一個人的收入屬于下層類別,那么他的孩子屬于下層收入的概率是 0.65, 屬于中層收入的概率是 0.28, 屬于上層收入的概率是 0.07。事實上,從父代到子代,收入階層的變化的轉(zhuǎn)移概率如下
使用矩陣的表示方式,轉(zhuǎn)移概率矩陣記為
我們發(fā)現(xiàn)從第7代人開始,這個分布就穩(wěn)定不變了,事實上,在這個問題中,從任意初始概率分布開始都會收斂到這個上面這個穩(wěn)定的結(jié)果。
注:要求圖是聯(lián)通的(沒有孤立點),同時不存在一個聯(lián)通的子圖是沒有對外的出邊的(就像黑洞一樣)。
這個馬氏鏈的收斂定理非常重要,所有的 MCMC(Markov Chain Monte Carlo) 方法都是以這個定理作為理論基礎(chǔ)的。
對于給定的概率分布p(x),我們希望能有便捷的方式生成它對應(yīng)的樣本。由于馬氏鏈能收斂到平穩(wěn)分布, 于是一個很的漂亮想法是:如果我們能構(gòu)造一個轉(zhuǎn)移矩陣為P的馬氏鏈,使得該馬氏鏈的平穩(wěn)分布恰好是p(x), 那么我們從任何一個初始狀態(tài)x0出發(fā)沿著馬氏鏈轉(zhuǎn)移, 得到一個轉(zhuǎn)移序列 x0,x1,x2,?xn,xn+1?,, 如果馬氏鏈在第n步已經(jīng)收斂了,于是我們就得到了 π(x) 的樣本xn,xn+1?。
這個絕妙的想法在1953年被 Metropolis想到了,為了研究粒子系統(tǒng)的平穩(wěn)性質(zhì), Metropolis 考慮了物理學(xué)中常見的波爾茲曼分布的采樣問題,首次提出了基于馬氏鏈的蒙特卡羅方法,即Metropolis算法,并在最早的計算機(jī)上編程實現(xiàn)。Metropolis 算法是首個普適的采樣方法,并啟發(fā)了一系列 MCMC方法,所以人們把它視為隨機(jī)模擬技術(shù)騰飛的起點。 Metropolis的這篇論文被收錄在《統(tǒng)計學(xué)中的重大突破》中, Metropolis算法也被遴選為二十世紀(jì)的十個最重要的算法之一。
我們接下來介紹的MCMC 算法是 Metropolis 算法的一個改進(jìn)變種,即常用的 Metropolis-Hastings 算法。由上一節(jié)的例子和定理我們看到了,馬氏鏈的收斂性質(zhì)主要由轉(zhuǎn)移矩陣P 決定, 所以基于馬氏鏈做采樣的關(guān)鍵問題是如何構(gòu)造轉(zhuǎn)移矩陣P,使得平穩(wěn)分布恰好是我們要的分布p(x)。如何能做到這一點呢?我們主要使用如下的定理。
?
?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 馬氏鏈轉(zhuǎn)移和接受概率
?
假設(shè)我們已經(jīng)有一個轉(zhuǎn)移矩陣Q(對應(yīng)元素為q(i,j)), 把以上的過程整理一下,我們就得到了如下的用于采樣概率分布p(x)的算法。
?
?
8、MCMC——Gibbs Sampling算法
????????? 平面上馬氏鏈轉(zhuǎn)移矩陣的構(gòu)造
?
?
以上算法收斂后,得到的就是概率分布p(x1,x2,?,xn)的樣本,當(dāng)然這些樣本并不獨立,但是我們此處要求的是采樣得到的樣本符合給定的概率分布,并不要求獨立。同樣的,在以上算法中,坐標(biāo)軸輪換采樣不是必須的,可以在坐標(biāo)軸輪換中引入隨機(jī)性,這時候轉(zhuǎn)移矩陣 Q 中任何兩個點的轉(zhuǎn)移概率中就會包含坐標(biāo)軸選擇的概率,而在通常的 Gibbs Sampling 算法中,坐標(biāo)軸輪換是一個確定性的過程,也就是在給定時刻t,在一根固定的坐標(biāo)軸上轉(zhuǎn)移的概率是1。
轉(zhuǎn)載于:https://www.cnblogs.com/chaofn/p/9425218.html
總結(jié)
- 上一篇: netcore 编译 html,Asp.
- 下一篇: c语输入单引号_C语言的printf不能