MCMC(Markov Chain Monte Carlo),即馬爾科夫鏈蒙特卡洛方法,是以馬爾科夫平穩狀態作為理論基礎,蒙特卡洛方法作為手段的概率序列生成技術。
MCMC理論基礎
如果轉移矩陣為P的馬爾科夫鏈平穩狀態和我們研究的概率質量函數(概率密度函數)分布一致,那么我么從任意初始值開始,經過一定次數的概率轉以后,后續的轉移值組成的序列必然服從馬爾科夫平穩狀態分布,也就是服從我們研究的概率分布,這樣就生成了我們研究的概率分布的模擬數據序列。
對於任意初始值X0,經過n次概率轉移后,生成值符合平穩狀態分布,並且后續概率轉移始終符合平穩狀態分布,所以我們可以認為從第n次開始的轉移值序列符合平穩狀態分布。數學表達如下
1、 初始值為X0,X0通過轉移矩陣P生成馬氏鏈序列。
2、 馬氏鏈經過n次轉移后達到平穩狀態。
3、 則從第n次開始的轉移序列符合平穩狀態分布。
我們用城市化進程中人口轉移模型來闡述一下這個思想的物理意義。我們假設第一代人為農村人。農村人下一代為農村人,第3代為城市人,城市人接下來9代為城市人,第10代為農村人(我們模擬農村人轉化為城市人概率為0.5,城市人轉化為農村人概率為0.1)。如下表,按照這種規律生成的隨機序列農村人城市人比例為1:5,與之前計算的平穩分布17:83基本相等。實際上該模型下的馬氏鏈平穩條件為:0.5 * 農村人 = 0.1 * 城市人,可以推測出農村人 : 城市人 = 1 : 5,與我們的模擬是一致的。

我們已經知道,使馬爾科夫鏈的平穩狀態等同於我們研究的概率分布,就可以構造出符合該概率分布的隨機序列。現在的問題是如何構造出這樣的馬爾科夫鏈,使得其穩定分布等於我們研究的概率分布。
細致平穩條件
如下更強的馬爾科夫鏈穩定狀態定理可以解決這個問題
定義顯而易見,從任意狀態i轉移到狀態j的速率等於從狀態j轉移到狀態i的速率,則狀態轉移穩定。城市化進程的例子充分說明了這一點。定理中π分布就是我們研究的概率分布,我們構造出P,則構造出了穩定狀態滿足π分布馬爾科夫鏈。
算法實現
我們隨機初始化一個轉移矩陣Q(比如均勻分布),q(i, j)表示從狀態i轉移到狀態j的概率。一般情況下Q顯然不滿足細致平穩條件,即
p(i)q(i, j) != p(j)q(j, i)
我們構造α(i, j)與α(j, i),使等式成立,即
其中
α(i, j) = p(j)q(j, i) α(j, i) = p(i)q(i, j)
這樣,我們通Q與α,構造了一個符合細致平穩條件的Q’。
Q一般來說是我們熟悉的概率分布,計算機易於模擬,但是Q’怎么模擬呢?在構造Q’的過程中,我們引入的α(i, j)稱作接受率,我們生成一個符合Q分布的狀態后,再以α(i, j)的概率來接受狀態轉移。(實際上q(j, i)α(i, j)就是轉移矩陣Q’中狀態i轉移到j的概率,我們以α(i, j)接受狀態轉移就是在進行乘以轉移矩陣Q’運算)
MCMC算法如下
上述算法還有一個小缺陷,接受率α(i, j)可能較小,導致狀態轉移概率太小,收斂較慢。實際上,對於細致平穩條件,等式兩邊同時乘以一個倍數,也是成立的。於是我們把細致平穩條件改造為
p(i)q(i, j) α(i, j)/ α(j, i) = p(j)q(j, i)
則可以用如下接受率進行狀態轉移
改進后的MCMC算法如下
參考:
https://www.jianshu.com/p/28d32aa7cc45
《LDA數學八卦》