MCMC和Gibbs Sampling
1.隨機模擬
? ? ? ?隨機模擬又名蒙特卡羅方法,蒙特卡羅方法的源頭就是當年用來計算π的著名的的投針實驗,由于統計采樣的方法成本很高,一直到計算機迅猛發展以后,隨機模擬技術才進入實用階段,對那些確定算法不可行或者不可能解決的問題,蒙特卡羅方法為大家帶來希望
? ? ? ?隨機模擬技術有一個很重要的問題就是:給定一個概率分布p(x),如何在計算機中生成它的樣本。一般而言,均勻分布U(0,1)的樣本是很容易生成的,我們常見的概率分布無論是離散的還是連續的分布都可以基于均勻分布U(0,1)的樣本生成,例如正態分布可以基于著名的Box-Muller變換得到,洽談幾個著名的分布,包括指數分布、Gamma分布、t分布、F分布、Beta分布、Dirichlet分布等都可以通過類似的數學變換得到:離散的分布通過均勻分布更加容易生成。
? ? ? ?不過我們并不總是幸運的,當p(x)的分布很復雜,或者p(x)的分布是高維的分布時,樣本的生成可能就很困難了,此時就需要一些更加復雜的隨機模擬的方法來生成樣本,MCMC和Gibbs算法就是最常用的,要了解這兩個算法,我們首先對馬氏鏈的平穩分布的性質有基本的認識。
2.馬氏鏈及其平穩分布
? ? ? 馬氏鏈的數學定義:狀態轉移的概率只依賴于前一個狀態
? ? ? 在一個例子中:社會學家按照人的經濟情況把人分為三類:下層、中層、上層、并且決定一個人收入的重要因素是父母的收入階層,從父代到子代變化的轉移概率是:
? ? ?使用矩陣方式,轉移概率矩陣表示為:
? ? ? ?我們發現當給定不同的初始概率分布時,然后我們計算n代人的概率分布,最后都收斂到相同的概率分布,也就是說,收斂的行為和初始概率分布無關,而是取決于轉移概率矩陣P,通過計算,發現P的n次方,發現當n足夠大時,P的n次方這個矩陣的每一行都是最后收斂的概率分布,自然的,這個收斂行為并非是這個馬氏鏈所獨有的,而是絕大多數馬氏鏈的共同行為,關于馬氏鏈的收斂我們有一個定理:
? ? 這個馬氏鏈收斂定理非常重要,所有的MCMC方法都是以這定理為理論基礎的,下面給這個定理進行一些說明:
(1)馬氏鏈的狀態不要求有限,可以是無窮多個
(2)兩個狀態i,j連通并非指的是狀態i可以一步轉移到狀態j,而是指的是狀態i可以經過有限步轉移到狀態j,馬氏鏈的任意兩個狀態連通是指存在一個n,使得矩陣P的n次方中的任何一個元素的數值都大于0
? ? ? 由馬氏鏈的收斂定理:從初始狀態出發,概率分布將收斂到平穩分布,假設經過n步收斂,那么n步以后的轉移序列都是平穩分布的樣本
3.Markov Chain Monte Carlo
(1)Metropolis算法
? ? ? 給定概率分布p(x),我們希望有便捷的方式生成它對應的樣本,由于馬氏鏈能收斂到平穩分布,那么:如果我們能構造一個轉移矩陣為P的馬氏鏈,使得該馬氏鏈的平穩分布恰好是p(x),那么我們從任何一個初始狀態出發沿著馬氏鏈轉移,得到一個轉移序列,如果馬氏鏈在第n步收斂了,那么我們取n步以后的轉移序列,就得到了平穩分布p(x)的樣本
? ? ? Metropolis基于這個絕妙的想法,首次提出了基于馬氏鏈的蒙特卡羅方法,即Metropolis算法,并在最早的計算機上編程實現,Metropolis算法是首個普適的采樣方法,并啟發了一系列的MCMC方法,所以人們視他為隨機模擬技術騰飛的起點
(2)MCMC算法
?①細致平穩條件
? ? ?接下來介紹的MCMC算法是Metropolis算法的一個改進變種,即常用的Metropolis-Hastings算法,由前面介紹的可知:馬氏鏈的收斂性質主要由轉移矩陣P決定,所以基于馬氏鏈做采樣的關鍵問題是如何構建轉移矩陣P,使得平穩分布恰好是我們要的分布p(x),如何做到這一點呢?我們使用如下的定理:
? ? ? 其實這個定理是顯而易見的,因為細致平穩條件的物理意義是:對于任何兩個狀態i,j,從i轉移出去到j而丟失的概率質量,恰好會被j轉移回來i丟失的概率質量補充回來,所以狀態i上概率質量π(i)是穩定的,從而π(x)是馬氏鏈的平穩分布
②改造馬氏鏈
? ? ? 假設我們已經有一個轉移矩陣Q的馬氏鏈,q(i,j)表示從狀態i轉移到狀態j的概率,顯然,通常情況下,p(i)q(i,j)≠p(j)q(j,i),也就是細致平穩條件不成立,所以p(x)不太可能是這個馬氏鏈的平穩分布。我們可否做一個改造使得細致平穩條件成立呢?
? ? 譬如,我們引入一個α(i,j),我們希望p(i)q(i,j)α(i,j)=p(j)q(j,i)α(j,i),那么取什么樣的α(i,j)使得這個等式成立呢?最簡單的按照對稱性,我們取:α(i,j)=p(j)q(j,i),α(j,i)=p(i)q(i,j),于是上面這個等式就成立了,所以有:
? ? ?于是我們把原來具有轉移矩陣Q的一個很普通的馬氏鏈改造為了具有轉移矩陣Q'的馬氏鏈,而Q'恰好滿足細致平穩條件,由此馬氏鏈Q'的平穩分布就是p(x)!
? ? 在改造Q的過程中引入的α(i,j)稱為接受率,物理意義可以理解為在原來的馬氏鏈上,從狀態i以q(i,j)的概率跳轉到狀態j的時候,我們以α(i,j)的概率接受轉移,于是得到新的馬氏鏈Q'的轉移概率為q(i,j)α(i,j)
③MCMC算法步驟概述
? ? 假設我們已經有一個轉移矩陣Q,我們把上面的過程整理一下,就得到了如下采樣概率分布p(x)的算法:
MCMC采樣算法
1.初始化馬氏鏈初始狀態X0=x0,
2.對t=0,1,2...,循環以下過程進行采樣
? ●第t個時刻馬氏鏈狀態Xt=xt,采樣y~q(x|xt)
? ●從均勻分布u~Uniform[0,1]
? ●如果u<α(xt,y)=p(y)q(y,xt),則接受xt->y,則Xt+1=y
? ●否則不接受轉移,即Xt+1=xt
?對這個采樣算法的過程說明幾點:
? ? ? (1)q(x|xt)表示轉移概率分布,是在當前狀態為xt時,下一個狀態的概率分布,取值是可能從xt轉移到的狀態,而不是概率,對應到轉移概率矩陣Q中的元素
? ? ?(2)均勻分布隨機取樣u能落在0到接受率α(xt,y)區間的的概率就是接受率,也就是如果我隨機取樣取到這個區間,就從當前狀態xt轉移到下一個狀態y,等價于當前狀態為xt時按照這個接受率α(xt,y)轉移到y,兩個說法是一個意思
? ? ?上述過程中p(x),q(x|y)說的都是離散的情形,事實上,即使這兩個分布是連續的,以上算法仍然是有效的,于是就得到了更一般的連續概率分布p(x)的采樣算法,而q(x|y)就是任意一個連續二元概率分布對應的條件分布
? ? ? 以上的MCMC算法已經能很漂亮的工作了,不過有一個小的問題就是:馬氏鏈Q在轉移過程中的接受率α(i,j)可能偏小,這樣的采樣過程,馬氏鏈容易原地踏步,拒絕大量的跳轉,這使得馬氏鏈遍歷所有的狀態空間可能要花費太長的時間,收斂到平穩分布p(x)的速度太慢,有沒有辦法提升一些接受率呢?
④改進MCMC算法-Mereopolis-Hastings算法
? ? ? 假設α(i,j)=0.1,α(j,i)=0.1,此時滿足細致平穩條件,于是:p(i)q(i,j)×0.1=p(j)q(j|i)×0.2,將式子 兩邊擴大五倍,改寫為:p(i)q(i,j)×0.5=p(j)q(j|i)×1,看,我們提高了接受率,但是細致平穩條件并沒有被打破,這啟發我們可以把細致平穩條件p(i)q(i,j)α(i,j)=p(j)q(j,i)α(j,i)兩邊的α(i,j),α(j,i)同比例擴大,使得兩數中的最大的一個放大到1,這樣我們就提高了采樣中的跳轉接受率,所以我們可以取:
? ? ? 于是經過對上述MCMC采樣算法中接受率的微小改造,我們就得到了最常見的Mereopolis-Hastings算法
? ? ? 對于分布p(x),我們構造轉移矩陣Q'使其滿足細致平穩條件:p(x)Q'(x->y)=p(y)Q'(y->x),此處x并不要求是一維的,對于高維空間的p(x),如果滿足細致平穩條件:p(X)Q'(X->Y)=p(Y)Q'(Y->X)
Mereopolis-Hastings采樣算法
1.初始化馬氏鏈初始狀態X0=x0
2.對t=0,1,2...,循環一下過程進行采樣
?●第t個時刻馬氏鏈狀態Xt=xt,采樣y~q(x|xt)
?●從均勻分布u~Uniform[0,1]
?●如果u<α(xt,y)=min{p(y)q(xt|y)/p(xt)q(y|xt),1},則接受xt->y,則Xt+1=y
?●否則不接受轉移,即Xt+1=xt
那么以上的Mereopolis-Hastings算法一樣有效
4.Gibbs Sampling
(1)二維Gibbs Sampling
? ? ? ?對于高維的情形,由于接受率α(通常α<1)的存在,以上Mereopolis-Hastings算法的效率不夠高,能否找到一個轉移矩陣Q使得接受率α=1呢?
? ? ?我們先看看二維的情形,假設有一個概率分布p(x,y),考察x坐標相同的兩個點,A(x1,y1),B(x2,y2),我們發現,p(x1,y1).p(y2|x1)=p(x1).p(y1|x1).p(y2|x1)
p(x1,y2).p(y1|x1)=p(x1).p(y2|x1).p(y1|x1)
所以得到p(x1,y1).p(y2|x1)=p(x1,y2).p(y1|x1)
即p(A)p(y2|x1)=p(B)p(y1|x1)
? ? ? 基于以上等式我們發現:
? ? ? 在x=x1這條平行于y軸的直線上,如果使用條件分布p(y|x1)作為任何兩個點之間的轉移概率,那么任何兩個點之間的轉移滿足細致平穩條件。同樣的:
? ? ?如果我們在y=y1這條直線上任意取兩個點A(x1,y1),C(x2,y1),也有如下等式:p(A)p(x2|y1)=p(C)p(x1|y1),也滿足細致平穩條件
? ? ?那么在沿著坐標軸方向的轉移都是滿足細致平穩條件的,此時的接受率是1,因為我們不需要兩邊乘以一個α使得原來的p(i)q(i,j)≠p(j)q(j|i)這個不等式變成等式,因為這個等式在這種情況下是成立的,也可以理解為兩邊都乘以接受率1,等式成立
? ? ?于是我們可以構造平面上任意兩點之間的轉移概率矩陣Q:
? ? ?Q(A->B)=p(y2|x1) ? ?如果xA=xB=x1
? ? ?Q(A->C)=p(x2|y1) ? ?如果yA=yC=y1
? ? ?Q(A->D)=0 ? ? ? ? ? ? ? ?其他
? ? ?有了如上的轉移概率矩陣Q,我們很容易驗證對于平面上任意兩點X,Y,滿足細致平穩條件:p(X)Q(X->Y)=p(Y)Q(Y->X)
? ? 于是這個二維空間上的馬氏鏈將收斂到平穩分布p(x,y),而這個算法就稱為Gibbs Sampling算法
二維Gibbs Sampling算法
1.隨機初始化X0=x0,Y0=y0
2.對t=0,1,2...,循環采樣
●y(t+1)~p(y|xt)
●x(t+1)~p(x|y(t+1))
? ? ? ?以上采樣過程中,馬氏鏈的轉移只是輪換沿著坐標軸x軸和y軸做轉移,于是得到樣本(x0,y0),(x0,y1),(x1,y1),(x1,y2),(x2,y2),....馬氏鏈收斂后,最后得到的樣本就是p(x,y)的樣本,而收斂之前的階段稱為burn-in period,額外說明一下,教科書上看到的Gibbs Sampling算法大都是沿著坐標軸輪換采樣的,但是這是不強求的。
? ? ? 最一般的情形可以是:在t時刻,可以在x軸和y軸之間隨機的選一個坐標軸,然后按照條件概率做轉移,馬氏鏈也是一樣收斂的,輪換坐標軸只是一種方便的形式
(2)n維Gibbs Sampling
? ? ? 以上的形式我們很容易推廣到高維的情形,如果x1變為,多維情形X1,可以看出推導過程不變,所以細致平穩條件同樣是成立的,P(X1,Y1)P(Y2|X1)=P(X1,Y2)P(Y1|X1),此時轉移矩陣Q由條件分布p(Y|X1)定義。上式只是說明一根坐標軸的情形,和二維情形類似,很容易驗證對所有坐標軸都有類似的結論,所以n維空間中,對于概率分布p(x1,x2,...,xn)可以定義如下轉移矩陣:
? ? ?1.如果當前狀態是x1,x2,..,xn,馬氏鏈轉移的過程中,只能沿著坐標軸做轉移。沿著xi這根坐標軸做轉移的時候,轉移概率由條件概率p(xi|x1,...,xi-1,xi+1,...,xn)定義
? ? ?2.其他無法沿著單根坐標軸做的跳轉,轉移概率都設置為0,
? ? ? 于是我們把Gibbs Sampling算法從采樣二維p(x,y)推廣到了采樣n維的p(x1,x2,..,xn)
? ? ? ?以上算法收斂后,得到的就是概率分布p(x1,x2,..,xn)的樣本,當然這些樣本并不獨立,但是此處要求的是采樣得到的樣本符合給定的概率分布,并不要求獨立。
? ? ? 同樣的,在以上的算法中,坐標軸輪換采樣并不是必須的,可以在坐標軸輪換中引入隨機性,這時候轉移矩陣Q中任意兩個點的轉移概率中就會包含坐標軸選擇的概率,而在通常的Gibbs Sampling采樣算法中,坐標軸輪換是個確定性的過程,也就是在給定時刻t,在一根固定的坐標軸上轉移的概率是1
n維Gibbs Sampling算法
1.隨機初始化{xi:i=1,2,..,n}
2.對t=0,1,2...,循環采樣
5.總結
? ? ? 本部分的內容主要是介紹幾種隨機模擬的采樣方法,作用是:給定一個概率分布p(x),然后采樣得到這個概率分布的樣本,其中發展過程是:
? ? ? 首先Metropolis基于"如果能構造馬氏鏈的轉移概率矩陣P,使得該馬氏鏈的平穩分布恰好是p(x),那么我們從任何一個初始狀態出發沿著馬氏鏈轉移,得到一個轉移序列,如果馬氏鏈在第n步收斂了,那么我們取第n步以后的即收斂后的序列,就得到了平穩分布p(x)的樣本"的思想提出了Metropolis算法,開創了隨機模擬技術的起點;
? ? ? 隨后,啟發了一系列的MCMC算法,MCMC算法的過程是:馬氏鏈的收斂性質主要由轉移矩陣P決定,所以基于馬氏鏈做采樣的關鍵問題是如何構建轉移矩陣P,使得平穩分布恰好是我們要的分布p(x),如何做到這一點呢?首先提出了一個細致平穩條件,根據這個細致平穩條件,我們來構造馬氏鏈的轉移矩陣Q,因為不是所有的馬氏鏈都滿足這個條件,我們通過引入接受率來保證細致平穩條件成立,即通過重新構造新的轉移矩陣Q'使得馬氏鏈滿足細致平穩條件,具體實現這一改造馬氏鏈的過程是:首先從任何一個隨機初始狀態出發,不斷的循環采樣,采樣過程是:每一次狀態的跳轉取決于接受率:我們從均勻分布U(0,1)取樣,如果落在(0,接受率)區間上,那么就按照轉移矩陣Q跳轉到下一個狀態,否則就拒絕跳轉,停在當前狀態;這樣的采樣過程存在一個小問題:馬氏鏈Q在轉移過程中的接受率α(i,j)可能偏小,這樣的采樣過程,馬氏鏈容易原地踏步,拒絕大量的跳轉,這使得馬氏鏈遍歷所有的狀態空間可能要花費太長的時間,收斂到平穩分布p(x)的速度太慢,有沒有辦法提升一些接受率呢?
? ? ?此時,我們的新的改進算法Metropolis-Hastings算法出現了,即在MCMC算法的基礎上對接受率進行改進,具體是:由細致平穩條件的兩邊同時擴大同樣的倍數,仍然成立,那么我們將等式兩邊的接受率的最大值增加到1,另外一個接受率增加相同的倍數,在不違背細致平穩條件的情況下,增大了接受率,增加了跳轉的幾率,即減少了馬氏鏈收斂所需要的時間。問題又來了,由于接受率小于1,Metropolis-Hastings算法在高維情況下的效率不夠高,那么能否找到一個接受率為1呢?
? ? ? 接著又引入一個新的算法是Gibbs Sampling算法,首先是在二維情況下,驗證沿著坐標軸方向的轉移都是滿足細致平穩條件的,此時的接受率是1,在已知概率分布p(x,y)下,基于沿著坐標軸的條件轉移概率構造轉移矩陣Q,在此轉移矩陣下,對于平面上任意兩點X,Y,滿足細致平穩條件,因此馬氏鏈收斂到平穩分布p(x,y),采樣的過程是從任意一個初始狀態出發,沿著狀態轉移矩陣進行循環采樣,每一輪都得到了新的一個狀態(x,y),同樣的可延伸到多維情況下。
? ? ? 到此,按照實際過程介紹了三種隨機模擬的采樣方法,后面的文章將會介紹文本建模的過程,并將隨機模擬采樣的方法應用到文本建模中。
參考資料:LDA數學八卦