MCMC抽樣與LDA參數求解

一、 MCMC抽樣

也許讀者會覺得詫異,爲什麼在一本介紹主題模型的書中卻看到了抽樣的知識?作者是不是偏題了?

答案當然是沒有。

相信你應該聽說過有一門課程叫做統計學,在這門課程中,抽樣佔據着舉足輕重的地位。當統計學的研究者們想要了解一個總體的某些參數時,他們的方案是,先去抽樣獲得樣本,通過樣本參數去估計總體參數。比如,想知道某財經高校學生們(總體)的平均月消費水平(總體參數),做法是:a.先抽樣一部分樣本,如從每個學院抽取20個人去調查他們的月消費水平,假設有20個學院,那麼就獲得了400個人(樣本)的月消費水平;b.算出這400個樣本的平均月消費水平(樣本參數);c.可以認爲該財經高校學生們的平均月消費水平估計爲這400個樣本的平均月消費水平。

本篇的MCMC抽樣與LDA主題模型的關係類比統計學裏的抽樣。在LDA主題模型的參數求解中,我們會使用MCMC抽樣去做。

MCMC四個字母的含義

第一個MC ,是Monte Carlo(蒙特卡洛)的首字母縮寫。本篇的蒙特卡洛指一種隨機模擬方法,以概率和統計理論方法爲基礎的一種計算方法,是使用隨機數(或更常見的僞隨機數)來解決很多計算問題的方法。採樣過程通常通過計算機來來實現。

蒙特卡洛此名由烏拉姆提出,事實上蒙特卡洛是摩納哥公國的一座城市,是著名的賭場,世人稱之爲“賭博之國”。衆人皆知,賭博總是和統計密切關聯的,所以這個命名風趣而貼切、不僅有意思而且有意義。

第二個MC:Markov Chain(馬爾科夫鏈)。這是MCMC抽樣中很重要的一個思想,將會在後篇細講。

(一)逆變換採樣

剛剛有提到,蒙特卡洛指一種隨機模擬方法,通常通過計算機來實現。然而,從本質上來說,計算機只能實現對均勻分佈的採樣。在此基礎上對更爲複雜的分佈進行採樣,應該怎麼做呢?這就需要用到逆變換採樣:

溫故兩個定義

對於隨機變量 X,如下定義的函數 F:

F(x)=PXx,<x<

稱爲X 的累積分佈函數。對於連續型隨機變量 X 的累積分佈函數 F(x),如果存在一個定義在實數軸上的非負函數 f(x),使得對於任意實數 x,有下式成立:
F(x)=f(t)dt

則稱 f(x) 爲 X 的概率密度函數。顯然,當概率密度函數存在的時候,累積分佈函數是概率密度函數的積分。概率等於區間乘概率密度。
步驟

欲對密度函數fx 採樣,並得到m 個觀察值,則重複下面的步驟 m 次:

1、從Uniform(0,1)中隨機生成一個值,用 u 表示。

2、計算反函數F(1)(u) 的值 x,則x 就是從f(x) 中得出的一個採樣點。

舉例:

想對一個複雜概率密度函數f(x) 抽樣,其概率密度形式如下:

F(x)={8x,if0x<0.258383x,if0.25x<1 0,otherwise

1、求f(x) 的累計分佈函數F(x)
F(x)={0,ifx<04x2,if0x<0.2583x43x213,if0.25x<1 1,ifx>1

2、求F(x) 的反函數:F(1)(u)
F(x)={u2,if0u<0.2513(1u)2,if0.25x<1 

重複m次逆變換採樣以下步驟:從Uniform(0,1)中隨機生成一個值,用 u 表示。計算反函數F(1)(u) 的值 x,則x 就是從f(x) 中得出的一個採樣點。最終將採樣點圖像(藍色)與實際密度函數(紅色)比較,得圖如下:

![這裏寫圖片描述](https://img-blog.csdn.net/20180309142510837?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbTBfMzc3ODgzMDg=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70) 可以看到兩條線幾乎重合,這表明逆變換採樣可以很好的模擬出某些複雜分佈。 **存在問題:** 逆變換採樣有求解累積分佈函數和反函數這兩個過程,而有些分佈的概率分佈函數可能很難通過對概率密度p(x)的積分得到,再或者概率分佈函數的反函數也很不容易求。這個時候應該怎麼辦呢?此時提出了拒絕採樣的解決方案。

(二)拒絕採樣

欲對逆變換採樣不再適用的密度函數p(x) 採樣,如果能找到另外一個概率密度爲 q(x) 的函數,它相對容易採樣。如採用逆變換採樣方法可以很容易對q(x) 進行採樣,甚至q(x) 就是計算機可以直接模擬的均勻分佈。此時我們可直接對q(x) 採樣,然後按照一定的方法拒絕某些樣本,達到接近p(x) 分佈的目的。

步驟
![這裏寫圖片描述](https://img-blog.csdn.net/20180309142551680?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbTBfMzc3ODgzMDg=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70) 當我們將q(x) 與一個常數 K 相乘之後,可以實現下圖所示之關係,即 K⋅q(x)將p(x)完全“罩住”:p(x) ≤Kq(x)。重複以下步驟抽樣: •x 軸方向:從q(x)分佈抽樣得到Z0 。 •y 軸方向:從均勻分佈0,Kq(Z0)) 中抽樣得到u0 。 •如果剛好落到灰色區域,否則接受這次抽樣: u0 > p(Z0) , 拒絕該樣本。 •重複以上過程。
舉例:利用拒絕採樣計算π
![這裏寫圖片描述](https://img-blog.csdn.net/20180309142639562?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbTBfMzc3ODgzMDg=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70) 如圖所示,陰影區域有一個邊長爲1的正方形,正方形裏有一個半徑爲1的1/4圓。則有:S(1/4圓)= 1/4*π*R^2= 1/4π;S(正方形)=1。現在對這個正方形隨機取點,某點到原點的距離小於1,則說明它在1/4圓內。可以認爲,落在圓內的次數/取點總次數=1/4圓的面積/正方形的面積。即: π=4s() 隨着採樣點的增多,最後的結果π會越精準。 這裏也就是用到了拒絕採樣的思想。要計算π 值,即尋求對圓這個複雜分佈抽樣,圓不好搞定,於是我們選擇了一個相對容易的正方形分佈,在對正方形隨機取點的時候,如果某點到原點的距離小於1,則說明它在1/4圓內,接受這個樣本,否則拒絕它。 而抽樣的時候; 基於以上思想我們可以利用計算機建模。

(三)馬爾科夫鏈

馬爾科夫鏈就是第二個MC:Markov Chain。定義爲:根據概率分佈,可以從一個狀態轉移到另一個狀態,但是狀態轉移之間服從馬氏性的一種分佈。

解釋一下定義中提到的兩個名詞:

馬氏性:狀態轉移的概率只依賴與他的前一狀態。數學表達爲:P(Xn+1=k|Xn=kn,Xn1=kn1,,X1=k1)=P(Xn+1=k|Xn=kn)
狀態轉移:狀態的改變叫做轉移(狀態可以向自身轉移),與不同的狀態改變相關的概率叫做轉移概率。q(i,j)=q(j|i)=q(ij) 表示狀態 i轉移到狀態j的概率。

如在天氣事件中,由前天的下雨轉移到昨天的多雲,昨天的多雲轉變到今天的豔陽天。這裏所說的下雨、多雲、豔陽天都是一種狀態。從下雨轉移到多雲,稱之爲狀態轉移。而今天的豔陽天只與昨天的多雲有關,與前天的天氣沒有半點關係,這就是所謂馬氏性。

案例

社會學家經常把人按其經濟狀況分成三類:下、中、上層;我們用1,2,3分別代表這三個階層(對應於馬氏鏈中環境下的三個狀態)。如果一個人的收入屬於下層類別,則他的孩屬於下層收入的概率是0.665,屬於中層的概率是0.28,屬於上層的概率是0.07。這裏彙總了階層收入變化的轉移概率如下圖所示:

![這裏寫圖片描述](https://img-blog.csdn.net/20180309143115479?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbTBfMzc3ODgzMDg=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70) 狀態轉移的概率只依賴與他的前一狀態,也就是考察父代爲第i層則子代爲第j層的概率。 由此得出轉移概率矩陣:
[0.650.280.070.150.670.180.120.360.52]
給定當前這一代人處於下、中、上層的概率分佈向量是:π0=(π0(1),π0(2),π0(3)) ,那麼他們的子女的分佈比例將是π1=π0P ,孫子代的分佈比例將是π2=π1P=π0P2 ,以此類推,第n代的分佈比例將是πn=π0Pn . 顯然,第n+1代中處於第j個階層的概率爲:

π(Xn+1=j)=i=0nπ(Xn=i).P(Xn+1=j|Xn=i)

給定初始概率π0=(0.21,0.68,0.11) ,即第0代的時候各階層佔比是(0.21,0.68,0.11)。顯然由此公式我們可以分別計算第一代的第1、2、3階層的佔比,第二代的第1、2、3階層的佔比,….。

如:計算第一代的第1階層的佔比爲:0.21.65+0.680.15+0.110.12=0.25170.252

以此類推,各代各階層的佔比如下:

![這裏寫圖片描述](https://img-blog.csdn.net/20180309143942495?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbTBfMzc3ODgzMDg=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70) 可以看到,從第5代開始,各階層的分佈就穩定不變了。這個是偶然的嗎?如若不是,那是初始概率決定的還是轉移概率矩陣決定的呢?接下來驗證一下。 換一個初始概率π0=(0.75,0.15,0.1) ,迭代結果如下:
![這裏寫圖片描述](https://img-blog.csdn.net/20180309144146304?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbTBfMzc3ODgzMDg=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70) 我們發現,到第9代的時候,分佈又收斂了,而且收斂的分佈都是π=(0.286,0.489,0.225) ,也就是說收斂的分佈與初始概率無關。 這裏還有一個神奇的地方:我們計算一下轉移矩陣P的n次冪,發現:

P20=P21==P100=Pn=[0.2860.4890.2250.2860.4890.2250.2860.4890.225]

也就是說,當n足夠大的時候,Pn 矩陣每一行都收斂到π=(0.286,0.489,0.225) 這個概率分佈。於是關於馬氏鏈我們有定理如下:
定理一:(馬氏鏈的平穩分佈)
如果一個非週期馬氏鏈具有概率轉移矩陣 P,且它的任何兩個狀態都是連通的,則
limnPijn
存在且與 i 無關(也即矩陣 P^n 的每一行元素都相同),記
limnPijn=π(j)
,我們有:
(1)
limnPn=[π(1)...π(n).........π(1)...π(n)]

(2)π(j)=0π(i)Pijπ=πP
(3)π 是方程 π=πP 的唯一非負解。
其中,π=[π(1),π(2),,π(j),]0π(i)=1 (符合概率上對分佈的要求),π 稱爲馬氏鏈的平穩分佈。

定理二(細緻平穩條件)
如果非週期馬氏鏈的轉移矩陣Pπ(x)滿π(i)Pij=π(j)Pjiπ(x)
以上兩個定理極其重要,是MCMC理論不可缺少的理論基礎。

(四)從馬爾科夫鏈到抽樣

對於給定的概率分佈π(x) ,我們希望有快捷的方式生成它對應的樣本。由於馬氏鏈能收斂到平穩分佈,於是一個很漂亮的想法是:如果我們能夠構造一個轉移矩陣爲 P的馬氏鏈,使得該馬氏鏈的平穩分佈恰好是 π(x) ,那麼我們從任何一個初始狀態出發沿着馬氏鏈轉移,得到一個轉移序列x1,x2,,xn,x(n+1), 如果馬氏鏈在第 n 步已經收斂了,於是x1,x2,,xn,x(n+1), 自然是分佈π(x) 的樣本。
馬氏鏈的收斂性質主要有轉移矩陣 P決定,所以基於馬氏鏈做採樣(比如MCMC)
的關鍵問題是如何構造轉移矩陣,使得其對應的平穩分佈恰是我們需要的分佈 π(x)

MCMC採樣

根據細緻平穩理論,只要我們找到了可以使概率分佈π(x) 滿足細緻平穩分佈的矩陣P即可。這給了我們尋找從平穩分佈π, 找到對應的馬爾科夫鏈狀態轉移矩P的新思路。
假設我們已經有一個轉移矩陣爲Q的馬氏鏈。q(i,j) 表示狀態 i轉移到狀態j的概率.通常情況下,細緻平穩條件不成立,即:

p(i)q(i,j)p(j)q(j,i)

對上式改造使細緻平穩條件成立:引入一個α(i,j)和α(j,i) ,並讓等式兩端取等:
p(i)q(i,j)α(i,j)=p(j)q(j,i)α(j,i)

問題是什麼樣的α(i,j)和α(j,i)可以使等式成立呢?按照對稱性,可以取:
α(i,j)=p(j)q(j,i)

α(j,i)=p(i)q(i,j)

所以我們改造後的馬氏鏈Q 如下。並且Q 恰好滿足細緻平穩條件,所以馬氏鏈Q 的平穩分佈就是P(x)
![這裏寫圖片描述](https://img-blog.csdn.net/20180309145958456?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbTBfMzc3ODgzMDg=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70) **步驟** (1)初始化馬氏鏈初始狀態X0=x0 (2)對t=0,1,2,3, 循環一下過程進行採樣: 第t 時刻馬氏鏈狀態爲Xt=xt ,採樣yq(x|x(t)) ; 從均勻分佈採樣uUniform[0,1] 如果u<α(xt,y)=p(y)q(xty), 則接受 xtyxt+1)y ;否則不接受概率轉移,即Xt+1=xt

(五)Metropolis-Hastings採樣

以上過程不論是離散或是連續分佈,都適用。
以上的MCMC採樣算法已經能正常採樣了,但是馬氏鏈Q在轉移的過程中的接受率α(i,j)可能偏小,這樣我們會拒絕大量的跳轉,這使得收斂到平穩分佈的速度太慢。有沒有辦法提升接受率呢?
我們回到MCMC採樣的細緻平穩條件:

p(i)q(i,j)α(i,j)=p(j)q(j,i)α(j,i)

我們採樣效率低的原因是α(i,j)α(i,j) 太小了,比如爲α(j,i)0.1α(j,i) 爲0.2。即:
p(i)q(i,j)0.1=p(j)q(j,i)0.2

這時我們可以看到,如果兩邊同時擴大五倍,接受率提高到了0.5,但是細緻平穩條件卻仍然是滿足的,即:
p(i)q(i,j)0.5=p(j)q(j,i)0.2

這樣我們的接受率可以做如下改進,即:
α(i,j)=min{p(j)q(ji)p(i)p(ij),1}

此時便得到了常見的MetropolisHastings 採樣算法。
步驟
(1)初始化馬氏鏈初始狀態X0=x0
(2)對t=0,1,2,3, 循環一下過程進行採樣:
第t時刻馬氏鏈狀態爲Xt=xt ,採樣yq(x|x(t))
從均勻分佈採樣uUniform[0,1]
如果u<α(xt,y)=min{p(j)q(ji)p(i)p(ij),1} ,則接受 xty ,即xt+1y ;否則不接受概率轉移,即Xt+1=xt
以上M-H算法只針對低維的情況,對於高維情況,我們採用Gibbs採樣。

(六)Gibbs採樣

對於高維情況,我們採用Gibbs採樣。
以二維爲例,假設p(x,y) 是一個二維聯合數據分佈,考察x座標相同的兩個點A(x1,y1)B(x1,y2) ,容易發現下面兩式成立:

p(x1,y1)p(y2x1)=p(x1)p(y1x1)p(y2|x1)

p(x1,y2)p(y1x1)=p(x1)p(y2x1)p(y1|x1)

所以得到:
p(x1,y1)p(y2x1)=p(x1,y2)p(y1x1)

即:
p(A)p(y2x1)=p(B)p(y1x1)

觀察上式再觀察細緻平穩條件的公式,我們發現在x=x1 這條直線上,如果用條件概率分佈p(y|x1) 作爲馬爾科夫鏈的狀態轉移概率,則任意兩個點之間的轉移滿足細緻平穩條件!
同樣,y=y1 這條直線上,取兩點A(x1,y1),C(x2,y1) 也有如下等式:

這裏寫圖片描述

基於上面的發現,我們可以構造平面上兩點之間的轉移概率矩陣Q:

Q(AB)=p(yBx1)ifxA=xB=x1

Q(AC)=p(xcx1)ifyA=yc=y1

Q(AD)=0otherwise

有了上面這個狀態轉移矩陣,我們很容易驗證平面上的兩點X,Y,滿足細緻平穩條件。
p(X)Q(XY)=p(Y)Q(YX)

於是這個二維空間上的馬氏鏈收斂到平穩分佈p(x,y). 於是可以得到二維Gibbs採樣的步驟:
隨機初始化X0=x0Y0=y0
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)的樣本了。但其實座標軸輪換不是強制要求的最一般的情形可以是,在t時刻,可以在x軸和y軸之間隨機的選一個座標軸,然後按條件概率轉移,馬氏鏈一樣可以收斂。輪換兩個座標軸只是一種簡便形式。
以上二維推廣到高維的情形,即x1x1 ,推導過程不變,細緻平穩條件依然成立:
p(x1,y1)p(y2x1)=p(x1,y2)p(y1x1)
此時轉移矩陣Q由條件分佈p(yx1) 定義。

Gibbs採樣步驟
(1)隨機初始化{x_i:i=1,…,n}
(2)對t=0,1,2,….循環採樣:

x1(t+1)p(x1|x2t),x3(t),,xn(t))

x2(t+1)p(x2|x1(t+1),x3(t),,xn(t))

···

xj(t+1)p(xj|x2(t+1),...,xj1(t+1),xj(t),,xn(t))

···

xn(t+1)p(xn|x1(t+1),x2(t+1),,xn1(t+1))

二、主題模型與MCMC採樣

回顧一下主題模型步驟:
0、 首先隨機地給每個詞分配一個主題,之後按以下1、2步驟更新主題;
求某一個詞wi 對應主題特徵z_i的條件概率分佈p(zi=k|w,zi) 。其中,zi 代表去掉下標爲i的詞後的主題分佈。
條件概率分佈p(zi=k|w,zi) ,我們就可以進行Gibbs採樣,最終在Gibbs採樣收斂後得到第i個詞的主題。
採樣得到了所有詞的主題,那麼通過統計所有詞的主題計數,就可以得到各個主題的詞分佈。
接着統計各個文檔對應詞的主題計數,就可以得到各個文檔的主題分佈。
在上一節介紹LDA主題模型的時候得到了生成整個語料庫的聯合分佈概率。我們知道,在概率論中,如果得到了聯合分佈,則能很輕易地得到條件分佈、邊緣分佈。那麼今天我們就由聯合分佈
去求條件分佈p(zi=k|w,zi)
求解條件分佈p(zi=k|w,zi)

對於下標i,由於它對應的詞wi是可以觀察到的,所以, p(zi=k|w,zi)p(zi=k,wi=t|wi,zi) ,對於zi=k,wi=t, 它只涉及到第d篇文檔和第k個主題兩個Dirichlet-multi共軛,即:


這裏寫圖片描述

於是有:


這裏寫圖片描述

再由Dirichlet期望公式可得:


這裏寫圖片描述

有了這個公式,我們就可以用Gibbs採樣去採樣所有詞的主題,當Gibbs採樣收斂後,即得到所有詞的採樣主題。採樣得到了所有詞的主題,那麼通過統計所有詞的主題計數,就可以得到各個主題的詞分佈。接着統計各個文檔對應詞的主題計數,就可以得到各個文檔的主題分佈。
應用於LDA的Gibbs採樣算法流程:
1)選擇合適的主題數K, 選擇合適的超參數向量α,η
2) 對應語料庫中每一篇文檔的每一個詞,隨機的賦予一個主題編號z
3) 重新掃描語料庫,對於每一個詞,利用Gibbs採樣公式更新它的topic編號,並更新語料庫中該詞的編號。
4) 重複第2步的基於座標軸輪換的Gibbs採樣,直到Gibbs採樣收斂。
5) 統計語料庫中的各個文檔各個詞的主題,得到文檔主題分佈θ_d,統計語料庫中各個主題詞的分佈,得到LDA的主題與詞的分佈β_k。

參考文獻:

博客:http://blog.csdn.net/u010159842/article/details/48637095
https://www.cnblogs.com/pinard/p/6867828.html
http://blog.csdn.net/baimafujinji/article/details/51407703
《LDA數學八卦》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章