Gibbs Sampling
假設二維場景下,狀態(x, y)轉移到(x’, y’),可以分爲三種場景
平行於y軸轉移,如上圖中從狀態A轉移到狀態B
平行於x軸轉移,如上圖中從狀態A轉移到狀態C
其他情況轉移,如上圖從狀態A轉移到狀態D
A->B:
p ( x 1 , y 1 ) p ( y 2 ∣ x 1 ) = p ( x 1 ) p ( y 1 ∣ x 1 ) p ( y 2 ∣ x 1 )
p(x_{1},y_{1})p(y_{2}|x_{1}) = p(x_{1})p(y_{1}|x_{1})p(y_{2}|x_{1})
p ( x 1 , y 1 ) p ( y 2 ∣ x 1 ) = p ( x 1 ) p ( y 1 ∣ x 1 ) p ( y 2 ∣ x 1 )
B->A:
p ( x 1 , y 2 ) p ( y 1 ∣ x 1 ) = p ( x 1 ) p ( y 2 ∣ x 1 ) p ( y 1 ∣ x 1 )
p(x_{1},y_{2})p(y_{1}|x_{1}) = p(x_{1})p(y_{2}|x_{1})p(y_{1}|x_{1})
p ( x 1 , y 2 ) p ( y 1 ∣ x 1 ) = p ( x 1 ) p ( y 2 ∣ x 1 ) p ( y 1 ∣ x 1 )
即:
P ( A ) p ( y 2 ∣ x 1 ) = P ( B ) p ( y 1 ∣ x 1 )
P(A)p(y_{2}|x_{1}) = P(B)p(y_{1}|x_{1})
P ( A ) p ( y 2 ∣ x 1 ) = P ( B ) p ( y 1 ∣ x 1 )
同理,對於場景二:
P ( A ) p ( x 2 ∣ y 1 ) = P ( C ) p ( x 1 ∣ y 1 )
P(A)p(x_{2}|y_{1}) = P(C)p(x_{1}|y_{1})
P ( A ) p ( x 2 ∣ y 1 ) = P ( C ) p ( x 1 ∣ y 1 )
對於場景三,規定不允許轉移
P ( A ) ∗ 0 = P ( D ) ∗ 0
P(A) * 0 = P(D) * 0
P ( A ) ∗ 0 = P ( D ) ∗ 0
實際上,從狀態A轉移到狀態D可以通過一次場景一轉移和一次場景二轉移得到。所以即使規定A到D的轉移概率爲0,也滿足A到D可以經過有限次轉移達到。
於是,我們可以構造二維平面上任意兩點之間的轉移概率矩陣Q:
Q ( A − > B ) = p ( y B ∣ x 1 ) − − − x A = x B = x 1
Q(A->B) = p(y_{B}|x_{1})---x_{A} = x_{B} = x_{1}
Q ( A − > B ) = p ( y B ∣ x 1 ) − − − x A = x B = x 1
Q ( A − > C ) = p ( x C ∣ y 1 ) − − − y A = y C = y 1
Q(A->C) = p(x_{C}|y_{1})---y_{A} = y_{C} = y_{1}
Q ( A − > C ) = p ( x C ∣ y 1 ) − − − y A = y C = y 1
Q ( A − > D ) = 0 − − − 其 他
Q(A->D) = 0---其他
Q ( A − > D ) = 0 − − − 其 他
這裏的y B y_{B} y B 就是y 2 y_{2} y 2 ,x C x_{C} x C 就是x 2 x_{2} x 2 ,由此可得:
p ( A ) Q ( A − > B ) = p ( B ) Q ( B − > A )
p(A)Q(A->B) = p(B)Q(B->A)
p ( A ) Q ( A − > B ) = p ( B ) Q ( B − > A )
p ( A ) Q ( A − > C ) = p ( C ) Q ( C − > A )
p(A)Q(A->C) = p(C)Q(C->A)
p ( A ) Q ( A − > C ) = p ( C ) Q ( C − > A )
對於這樣的概率轉移Q,很容易驗證對於平面上任意兩點X和Y,滿足細緻平穩條件:
p ( X ) P ( X − > Y ) = p ( Y ) P ( Y − > X )
p(X)P(X->Y) = p(Y)P(Y->X)
p ( X ) P ( X − > Y ) = p ( Y ) P ( Y − > X )
什麼是細緻平穩條件?
假設向量v:
v = [ 0.6 , 0.4 ]
v = [0.6,0.4]
v = [ 0 . 6 , 0 . 4 ]
和一個概率轉移矩陣P:
P = [ 0.7 0.3 0 , 8 0.2 ]
P = \begin{bmatrix}
0.7&0.3 \\
0,8& 0.2
\end{bmatrix}
P = [ 0 . 7 0 , 8 0 . 3 0 . 2 ]
當v與n個P相乘,n趨於無窮大時,發現最後得到的向量會收斂到一個穩定值:
lim n − > ∞ v p n = [ 0.73 , 0.27 ]
\lim_{n->\infty }vp^{n} = [0.73,0.27]
n − > ∞ lim v p n = [ 0 . 7 3 , 0 . 2 7 ]
代碼驗證:
import numpy as np
v = np. array( [ 0.6 , 0.4 ] )
P = np. array( [ [ 0.7 , 0.3 ] , [ 0.8 , 0.2 ] ] )
for n in range ( 1000 ) :
v = np. dot( v, P)
print v
Out:
. . .
[ 0.72727273 0.27272727 ]
[ 0.72727273 0.27272727 ]
細緻平衡條件(Detailed Balance Condition):給定一個馬爾科夫鏈,分佈π和概率轉移矩陣P,如果下面等式成立
π i P i j = π j P j i
π_{i}P_{ij} = π_{j}P_{ji}
π i P i j = π j P j i
則此馬爾科夫鏈具有一個平穩分佈(Stationary Distribution)π
回到上面,直觀理解就是從X點走到Y點,需要沿着座標軸輪換着走若干步,其路徑就是一條折線
最後這個二維空間的馬氏鏈會收斂到平穩分佈p(x,y)
最後,Gibbs Sampling算法的大概流程
隨機初始化X 0 = x 0 X_{0}=x_{0} X 0 = x 0 ,Y 0 = y 0 Y_{0}=y_{0} Y 0 = y 0
對t=0,1,2,…,循環採樣
1、y t + 1 y_{t+1} y t + 1 ~ p(y|x_{t})
2、x t + 1 x_{t+1} x t + 1 ~ p(x|y_{t+1})
馬氏鏈的轉換就是輪換着沿着x軸、y軸不斷走折線,得到樣本(x_{0},y_{0}),(x_{0},y_{1}),(x_{1},y_{1}),(x_{1},y_{2}),…,直到馬氏鏈收斂,也就是平穩。