Markov-Chain-Montecarlo

我們為什麼要關心 MCMC 鏈中的快速混合?

  • January 1, 2012

當使用馬爾可夫鏈蒙特卡羅進行推理時,我們需要一個快速混合的鏈,即快速移動通過後驗分佈的支持。但我不明白為什麼我們需要這個屬性,因為據我了解,接受的候選抽籤應該並且將集中在後驗分佈的高密度部分。如果我的理解是真的,那麼我們是否仍然希望鏈條穿過支撐(包括低密度部分)?

另外,如果我使用MCMC做優化,是否還需要關心快速混合,為什麼?

感謝您分享您的想法!

理想的蒙特卡洛算法使用獨立的連續隨機值。在 MCMC 中,連續值不是獨立的,這使得該方法的收斂速度比理想的 Monte Carlo 慢;但是,它混合得越快,在連續迭代中依賴性衰減得越快¹,並且收斂得越快。

¹我的意思是連續值很快“幾乎獨立於”初始狀態,或者更確切地說,給定值在某一時刻,價值觀迅速變得“幾乎獨立”作為成長;因此,正如 qkhhly 在評論中所說,“鏈不會一直停留在狀態空間的某個區域”。

編輯:我認為以下示例可以提供幫助

想像一下,你想估計均勻分佈的平均值由 MCMC 提供。您從有序序列開始; 在每一步,你選擇序列中的元素並隨機打亂它們。在每一步,記錄位置 1 的元素;這收斂到均勻分佈。的價值控制混合速度:當,很慢;什麼時候,連續的元素是獨立的,混合速度很快。

這是此 MCMC 算法的 R 函數:

mcmc <- function(n, k = 2, N = 5000)
{
 x <- 1:n;
 res <- numeric(N)
 for(i in 1:N)
 {
   swap <- sample(1:n, k)
   x[swap] <- sample(x[swap],k);
   res[i] <- x[1];
 }
 return(res);
}

讓我們申請,並繪製均值的連續估計沿著 MCMC 迭代:

n <- 99; mu <- sum(1:n)/n;

mcmc(n) -> r1
plot(cumsum(r1)/1:length(r1), type="l", ylim=c(0,n), ylab="mean")
abline(mu,0,lty=2)

mcmc(n,round(n/2)) -> r2
lines(1:length(r2), cumsum(r2)/1:length(r2), col="blue")

mcmc(n,n) -> r3
lines(1:length(r3), cumsum(r3)/1:length(r3), col="red")

legend("topleft", c("k = 2", paste("k =",round(n/2)), paste("k =",n)), col=c("black","blue","red"), lwd=1)

mcmc 收斂

你可以在這裡看到(黑色),收斂慢;為了(藍色),它更快,但仍然比(紅色的)。

您還可以繪製固定迭代次數(例如 100 次迭代)後估計均值分佈的直方圖:

K <- 5000;
M1 <- numeric(K)
M2 <- numeric(K)
M3 <- numeric(K)
for(i in 1:K)
{
 M1[i] <- mean(mcmc(n,2,100));
 M2[i] <- mean(mcmc(n,round(n/2),100));
 M3[i] <- mean(mcmc(n,n,100));
}

dev.new()
par(mfrow=c(3,1))
hist(M1, xlim=c(0,n), freq=FALSE)
hist(M2, xlim=c(0,n), freq=FALSE)
hist(M3, xlim=c(0,n), freq=FALSE)

直方圖

你可以看到(M1),100次迭代後初始值的影響只會給你一個可怕的結果。和看起來沒問題,標準偏差比. 這是手段和sd:

> mean(M1)
[1] 19.046
> mean(M2)
[1] 49.51611
> mean(M3)
[1] 50.09301
> sd(M2)
[1] 5.013053
> sd(M3)
[1] 2.829185

引用自:https://stats.stackexchange.com/questions/20437

comments powered by Disqus

相關問答