1. 程式人生 > >隨機過程--Metropolis-Hastings演算法

隨機過程--Metropolis-Hastings演算法

隨機過程–Metropolis-Hastings演算法

蒙特卡羅方法

  蒙特卡羅(Monte Carlo)方法又稱隨機抽樣或統計試驗方法,簡單地理解就是利用隨機數去解決許多計算問題,通過實驗去求解一些數學問題。通常是通過一些隨機模擬實驗去求解一些概率或者期望的問題。

生成隨機數


  我們知道,其實計算機只能產生均勻分佈的偽隨機數,但很多時候,我們希望得到一連串服從一定分佈(如高斯分佈,泊松分佈)的隨機數。我們就要想辦法把均勻分佈的數對映到服從一定分佈的數,這樣就通過模擬生成一些服從一定分佈的隨機數來解決一些複雜的數學問題。

求解概率和期望問題

  1. 求解概率問題
      貝葉斯先驗轉後驗:
    p
    (θ|D)=p(D|θ)p(θ)D

       概率歸一化問題:
    p(θ)=p˜(θ)Z
       通常,我們需要從貝葉斯後驗和歸一化後的概率中抽樣,但是通常這兩個概率很難求,主要是因為分母很難求,分母可能涉及到複雜的積分計算。因此,我們無法通過簡單的數學公式將均勻分佈的隨機數對映到服從該分佈的隨機數。
  2. 求解期望問題
      如上所述,如果一個概率的表示式沒法求出,我們無法求得期望。但是如果我們能生成許多連續的服從該分佈的隨機數,根據切比雪夫大數定理就能通過簡單地加和近似地求得概率。
    切比雪夫大數定理:
    limnp(|1Ss=1Sf(xs)1Ss=1SE[fX]|<ϵ)=1
    計算期望:
    E
    [fX]=fxpxdx1Ss=1Sf(xs)

    xsp(X)

栗子

估計圓周率:我們可以在一個包含圓的正方形中隨機生成資料點,然後統計一下落在圓內的點的個數與總個數的比例,就可以大約估算出圓周率的值。


還有一個比較出名的求圓周率的實驗就是蒲豐投針,這是1777年法國科學家布豐提出的一種計算圓周率的方法:
  1. 取一張白紙,在上面畫上許多條間距為a的平行線。
  2. 取一根長度為l(l=a/2) 的針,隨機地向畫有平行直線的紙上擲n次,觀察針與直線相交的次數,記為m。
  3. 計算針與直線相交的概率:p=2lπa
  4. 可以計算得到π=2lap

馬爾可夫鏈

  馬爾可夫鏈(Markov Chain )簡單地來說就是狀態機,能實現狀態之間的轉移,下一個狀態只與當前的狀態有關,與之前的狀態沒有關係。

p(xN|x1,,xN1)=p(xN|xN1)

現實生活中也有很多事情的變化規律是形成一個馬爾可夫鏈的:
這裡寫圖片描述

  1. 蛋白質分子的變化過程:蛋白質的下一個狀態只與它現在的結構有關。
  2. 股市行情:下一段時間股市的行情只與當前的股價有關。
  3. 賭徒賭資:一個賭徒經過下一個賭局後的資金只與他現在所擁有的資金有關。
  4. 交通擁堵狀態:一個路口下一個時間點的擁堵狀況只與當前的交通狀態有關。

現在讓我們來舉一個栗子:
  假設現在社會根據人民所擁有的資產分為上層,中層,下層,且它們之間可以轉換,也就是每一層的人民都有一定的機率變成其他層,它們之間的跳轉概率為:

- 下層 中層 上層
下層 0.65 0.28 0.17
中層 0.15 0.67 0.18
下層 0.12 0.36 0.52

它們之間的狀態轉移圖為:

現在,我們要計算第N代後,整個社會中各階層人數的比例:

  1. 計算概率轉移矩陣P=0.650.150.120.280.670.360.170.180.52
  2. 初始化第0代各階層的人數比例:
    π0=[a,b,c],a+b+c=1
  3. 不斷地迭代更新知道收斂:
    πN=πN1P=πN2P2=...π0PN

我們隨機初始化,且做了A與B兩組實驗,實驗結果分別如下:
A組

代數 下層 中層 上層
0 0.210 0.680 0.110
1 0.252 0.554 0.194
2 0.270 0.512 0.218
3 0.278 0.497 0.225
4 0.282 0.490 0.226
5 0.285 0.489 0.225
6 0.286 0.489 0.225
7 0.289 0.489 0.225
8 0.286 0.488 0.225
9 0.286 0.489 0.225

B組

代數 下層 中層 上層
0 0.750 0.150 0.100
1 0.522 0.347 0.132
2 0.407 0.426 0.167
3 0.349 0.459 0.192
4 0.318 0.475 0.207
5 0.303 0.482 0.215
6 0.295 0.485 0.220
7 0.291 0.487 0.222
8 0.289 0.488 0.225
9 0.286 0.489 0.225

  根據實驗結果,我們可以發現,就算給予不同的初始化,最終收斂後的結果都是相同的。當馬爾科夫鏈滿足細緻平穩性就會有這樣的結果。

細緻平穩性(detail balance condition):當非週期性的馬爾可夫鏈的概率轉移矩陣和每一個狀態的概率滿足:

π(i)p(j|i)=π(j)p(i|j)
最終得到的狀態π是該馬爾可夫鏈的平穩分佈。

證明:

i=1π(i)p(j|i)=i=1π(j)p(i|j)=π(j)i=1p(i|j)=π(j)

Metropolis演算法

我們先介紹提議分佈,其實提議分佈可以隨意給,通常我們可以假設提議分佈服從高斯分佈:

q(j|i)=N(j|i,σ)
但是這樣的話,通常不能滿足細緻平穩性,即:
π(i)q(j|i)π(