深度學習(四) 馬爾科夫鏈蒙特卡洛取樣(MCMC)

2022-04-06 06:14:29 字數 3935 閱讀 7025

拒絕取樣,重要性取樣的效率在高維空間很低,隨維度增長其難度也指數型增長,主要適用於一維的取樣。對於二維以上可以用馬氏鏈。馬爾可夫鏈蒙特卡洛取樣方法就是在高維空間取樣的方法。

馬爾可夫鏈就是滿足馬爾可夫假設的一組狀態序列$\left \ \right \}= ...,x_, x_, x_, x_,...$,其中假設某一時刻狀態$x_$發生狀態轉移的概率只依賴於它的前乙個狀態$x_$,這個就是馬爾可夫假設:

$p(x_\mid x_, x_, x_, x_ )=p(x_\mid x_)$

只要我們能知道系統中任意兩個狀態之間的轉移概率,整個馬爾可夫模型就知道了,定義轉移概率為:

$p_=p(x_=j\mid x_=i)$

轉移概率衡量的是兩個狀態之間的轉移機率,與時刻無關,僅涉及相鄰的兩個狀態,如果系統中的狀態有t種,那麼轉移概率可以構成乙個t×t的轉移矩陣p,馬爾可夫鏈有收斂性質,就是說從任意乙個初始分布出發,經過多次轉移後,得到的分布是平穩的,不再變化的分布q,這個平穩分布q與初始分布無關,只與狀態轉移矩陣p有關。

接下來用一段**說明這個問題:

matrix1=np.matrix([[0.9,0.075,0.025],[0.15,0.8,0.05],[0.25,0.25,0.5]],dtype=float)

vector1=np.matrix([[0.3,0.4,0.3]],dtype=float)

for i in range(100):

vector1=vector1*matrix1

print('

current round:

',i+1)

print(vector1)

輸出最開始定義的matrix1和vector1,分別是轉移概率和初始概率分布:

初始概率分布vector1表示的是在t=0時刻,$p(x_=0)=0.3$,$p(x_=1)=0.4$,$p(x_=2)=0.3$,描述的是起初時刻,狀態的分布情況,這裡預設有三種狀態,分別是1,2,3。

可以用vector1*matrix1用矩陣乘法公式來計算一下,會得到乙個形式和vector1一樣的矩陣,有三個元素,每個元素表示的就是該時刻的狀態分布情況:

根據矩陣乘法公式來計算一下下一時刻的狀態分布的第乙個元素為:(0.3*0.9+0.4*0.15+0.3*0.25),可以看出,它表示的是【不管上一時刻是取了哪個值,下一時刻狀態為1的概率】,這個元素的計算考慮了上乙個時刻的狀態分布概率,比如0.3*0.9,這個乘積的含義就是上一時刻狀態為1的概率是0.3,在上一時刻狀態為1的條件下下一時刻狀態仍為1的概率是0.9,注意這裡的0.9是個條件概率;相乘就可以得到上一時刻狀態為1,且下一時刻狀態為1的概率,這裡注意這是個聯合概率分布。

輸出一下整體的**結果:

我們發現最後得到的分布基本是平穩不變的,即:狀態取0和3的概率是0.625,狀態取1的概率是0.3125。我們可以改變初始vector1,但是最終收斂的平穩分布依舊是不變的。這個就是馬氏鏈的收斂。

我們的目標是希望從平穩分布q中進行取樣。現在的問題如下:

假設我們有初始概率分布為$\pi _\left ( x \right )$,基於$\pi _\left ( x \right )$取樣得到$x_$;

然後基於條件概率分布$p\left ( x\mid x_ \right )$取樣得到$x_$;

基於條件概率分布$p\left ( x\mid x_ \right )$取樣得到$x_$;

當這個過程進行到第n個時刻時,假設此時達到平穩分布,即條件概率不再變化,如果我們的目標是要採m個樣本的話,那麼就從第n個時刻開始,再根據平穩分布$q$採m次得到m個樣本,再做蒙特卡洛求和即可得到我們的目標期望。

這節只是為了引出下一節。在後面還會提到更具體的演算法來說明如何從平穩分布裡取樣。

但是往往,我們只知道我們要從乙個分布$q$中取樣,這個$q$很難採我們才去找馬爾可夫鏈,因為馬爾可夫鏈進行到最後所得到的樣本服從我們的目標分布$q$。但是$q$是多少主要取決於$p$,我們要怎麼去確定$p$?這就是下一節會解決的第二個問題。

這裡還要說明的就是,我們知道目標分布$q$的表示式,但這並不意味這我們可以直接從中取樣,因為很難採,所以引入馬爾可夫鏈,將直接取樣方式轉換為較為簡單的條件概率分布取樣。

上面**部分說明了馬氏鏈不斷進行更新,最後會得到乙個平穩分布,但是那是基於大量的計算才得到的結果。到底怎麼樣才算是乙個平穩分布,現在給出定義:

如果非週期馬爾可夫鏈的狀態轉移矩陣p和概率分布$\pi(x)$滿足$\pi(i)p_=\pi(j)p_$,那麼就稱\pi(x)是狀態轉移矩陣p的平穩分布,再進一步對該式兩邊對狀態i進行求和可得:

$\sum_^\pi(i)p_=\sum_^\pi(j)p_=\pi(j)\sum_^p_=\pi(j)$

上式證明了滿足$\pi(i)p_=\pi(j)p_$的話,的確可以收斂。這個條件稱為馬爾可夫鏈的細緻平穩條件,滿足了這個條件的分布才能稱為平穩分布。這個式子較為簡潔的搭建了平穩分布和狀態轉移矩陣之間的關係。可以用來解決我們上面提到的第二個問題。

首先規定乙個目標分布$\pi(x)$是我們希望得到的平穩分布,也就是很難直接取樣的分布$q$,和乙個馬爾可夫鏈狀態轉移矩陣$q$,顯然最開始它們是不滿足細緻平穩條件的:

$\pi(i)q_\neq \pi(j)q_$

我們引入乙個$\alpha (ij)$,使得上式成立:

$\pi(i)q_\alpha (ij)= \pi(j)q_\alpha (ji)$

其中有:

$\alpha (ij)= \pi(j)q_$

$\alpha (ji)=\pi(i)q_$

所以我們得出乙個結論:目標平穩分布對應的概率轉移矩陣$p$,可以由任意乙個狀態轉移矩陣$q$,乘上乙個接受率$\alpha (ij)$得到;也就是說,想要得到的$p$,可以通過不正確的$q$以一定的概率獲得。所以我們在

二、的基礎上進一步細化我們馬爾可夫鏈的取樣過程如下:

1)初始擁有:任意轉移矩陣q,平穩分布$\pi(x)$,轉移次數$n_$,所需樣本數$n_$

2)任意取樣初始狀態值$x_$

3)$for t=0 to n_+n_-1$:

a)從條件概率分布$q\left ( x\mid x_ \right )$中取樣得到樣本$x_$

b)取樣$u\sim u[0,1]$

c)如果u< \alpha (x_,x_)=\pi(x_)q(x_,x_),就接受轉移,即取樣$x_$,否則不接受,有$x_=x_$

為什麼這裡要取樣乙個均勻分布u樣本點,來和接受率進行比較呢?因為接受率反應了一件事——原來的轉移矩陣q不符合我們的需求,它太大了,有一些樣本不符合我們的所需,需要丟掉,但是怎麼丟,就是看接受率,只有很少一部分的樣本可以被我們選到。取樣均勻分布體現了乙個任意性,每個樣本的接受率都是均勻的,意思是不存在有100個樣本的接受率是0.9,而只有1個樣本的接受率是0.1,均勻分布就是避免了這種情況,說明我們的樣本集非常完整。就像如果要統計某病在人群中的發病率,我們最好控制變數,最好我們的樣本集男女數目一樣多,全國各省人的比例也和地區人數呈正比。

還有這裡的轉移次數$n_$要怎麼確定的問題,轉移次數其實可以設定得大一些,因為我們採的樣本是從第$n_+1$次開始採的,前面都在使馬爾科夫鏈達到平穩,只有平穩了我們才能開始收集樣本。

這個方法也有缺點,就是如果我們的接受率很小$\alpha (x_,x_)$,使得我們的大部分取樣點都被拒絕了,這樣的話,取樣效率很低,也就是說會出現很多$x_=x_$的情況,取樣樣本中有很多相同的點,這不利於我們拿這些樣本來做蒙特卡洛求和,因為很有可能這些樣本對應的函式值很小,對整體起不到很大的作用。

蒙特卡洛 馬爾科夫鏈 MCMC 初步

解決什麼問題?我們常常遇到這樣的問題 模型構建好之後,有乙個概率p x p x 稱為目標分布 不能顯式的給出其表達,只能生成一系列符合這個分布的xx。這種問題稱為 取樣 特別地,在貝葉斯方法中,關注的是後驗概率p x d p x d 在給定觀測dd的情況下,需要估計系統引數xx。如果後驗概率沒有明確...

蒙特卡洛方法 簡潔清晰解釋馬爾可夫鏈蒙特卡洛方法

有三種解釋mcmc的方法 本文,讓你達到中級水平。什麼是mcmc?要回答這個問題,我們首先需要重新審視貝葉斯統計。貝葉斯統計建立在這樣一種觀點的基礎上,即事物發生的概率受先驗概率假設和事件發生的可能性的影響,如資料所示。對於貝葉斯統計,概率由分布表示。如果先驗和似然概率分布是正態分佈的,我們能夠用函...

隱馬爾科夫學習四

出處 四 隱馬爾科夫模型 hidden markov models 1 定義 definition of a hidden markov model 乙個隱馬爾科夫模型是乙個三元組 pi,a,b 在狀態轉移矩陣及混淆矩陣中的每乙個概率都是時間無關的 也就是說,當系統演化時這些矩陣並不隨時間改變。實際...