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(x1,y1)p(y2∣x1)=p(x1)p(y1∣x1)p(y2∣x1)
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(x1,y2)p(y1∣x1)=p(x1)p(y2∣x1)p(y1∣x1)
即:
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(y2∣x1)=P(B)p(y1∣x1)
同理,对于场景二:
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(x2∣y1)=P(C)p(x1∣y1)
对于场景三,规定不允许转移
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(yB∣x1)−−−xA=xB=x1
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(xC∣y1)−−−yA=yC=y1
Q
(
A
−
>
D
)
=
0
−
−
−
其
他
Q(A->D) = 0---其他
Q(A−>D)=0−−−其他
这里的
y
B
y_{B}
yB就是
y
2
y_{2}
y2,
x
C
x_{C}
xC就是
x
2
x_{2}
x2,由此可得:
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.70,80.30.2]
当v与n个P相乘,n趋于无穷大时,发现最后得到的向量会收敛到一个稳定值:
lim
n
−
>
∞
v
p
n
=
[
0.73
,
0.27
]
\lim_{n->\infty }vp^{n} = [0.73,0.27]
n−>∞limvpn=[0.73,0.27]
代码验证:
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}
πiPij=πjPji
则此马尔科夫链具有一个平稳分布(Stationary Distribution)π
回到上面,直观理解就是从X点走到Y点,需要沿着坐标轴轮换着走若干步,其路径就是一条折线
最后这个二维空间的马氏链会收敛到平稳分布p(x,y)
最后,Gibbs Sampling算法的大概流程
- 随机初始化 X 0 = x 0 X_{0}=x_{0} X0=x0, Y 0 = y 0 Y_{0}=y_{0} Y0=y0
- 对t=0,1,2,…,循环采样
1、 y t + 1 y_{t+1} yt+1 ~ p(y|x_{t})
2、 x t + 1 x_{t+1} xt+1 ~ p(x|y_{t+1})
马氏链的转换就是轮换着沿着x轴、y轴不断走折线,得到样本 ( x 0 , y 0 ) , ( x 0 , y 1 ) , ( x 1 , y 1 ) , ( x 1 , y 2 ) , . . . , (x_{0},y_{0}),(x_{0},y_{1}),(x_{1},y_{1}),(x_{1},y_{2}),..., (x0,y0),(x0,y1),(x1,y1),(x1,y2),...,直到马氏链收敛,也就是平稳。