1. 程式人生 > >貝葉斯推斷--Gibbs Sampling

貝葉斯推斷--Gibbs Sampling

簡介

    當我們用貝葉斯模型去建模複雜的問題時,就越來越需要有效的推斷方法來求解這些模型了。一言以蔽之,貝葉斯推斷的目的就是在一組隨即變數上維護一組完全後驗概率分佈。維護和應用這個概率分佈常包含積分步驟,在面對較為複雜的模型時,是無法有效計算的。基於MCMC的抽樣技術是一種可能的方法來求解和推斷這些模型。

    MCMC抽樣的基本思想是,通過均值遍歷來估計任意期望分佈。也就是說,只要我們能夠得到一個後驗的足夠樣本,就可以計算這個的任意統計量值。如下:

E|f(s)|p1Ni=1Nf(s(i))

    其中 P 就是我們討論的後驗概率分佈,f(s) 是要求的期望值,也就是目標統計量。f

(s(i)) 是從後驗分佈中抽得的 第 i 個(模擬)樣本。

    那麼如何從後驗分佈得到所需的樣本呢?Gibbs sampling就是適合這種需求的一種MCMC技術。Gibbs sampling的基本思想是,在每一個變數之間進行不斷切換來得到他們的條件分佈,在得到其中某一個變數的條件分佈的時候,需要保持其他變數的值固定在當前抽樣值。舉例來說,假定有三個隨即變數 X1X2X3 ,首先對它們進行初始化賦值為 x(0)1x(0)2x(0)3 (即由先驗分佈抽得的值,在LDA中就是由具有引數 λ 的dirichilet分佈抽樣值)。那麼條件分佈的抽取過程就是,在第 i 次迭代中,依次抽取

x(i)1p(X1=x1|X2=x(i1)2,X3=x(i1)3)
x(i)2p(X2=x2|X1=x(i1)1,X3=x(i1)3)
x(i)3p(X3=x3|X1=x(i1)1,X2=x(i1)2)

    重複上述過程直至演算法收斂。這樣得到的(模擬)樣本值就好象真的是從後驗分佈抽得一樣。演算法一給出了一個上述問題的抽樣過程:

演算法 1 Gibbs sampler

  Initialize x(0)q(x)
  for iteration i=1,2,… do
    x(i)1p(X1=x1|X2=x(i1)2,...,XD=x(

i1)D)
    x(i)2p(X2=x2|X1=x(i1)1,X3=x(i1)3,...,XD=x(i1)D)
    x(i)Dp(XD=xD|X1=x(i1)1