小白都能读懂的Gibbs Sampling

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(y2x1)=p(x1)p(y1x1)p(y2x1)

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(y1x1)=p(x1)p(y2x1)p(y1x1)

即:
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(y2x1)=P(B)p(y1x1)
同理,对于场景二:
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(x2y1)=P(C)p(x1y1)
对于场景三,规定不允许转移
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(yBx1)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(xCy1)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),...,直到马氏链收敛,也就是平稳。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值