深度学习基础(七)—— Gibbs 采样

仅知道概率密度是不狗的,需要的是样本,gibbs sampling 就是获取样本的。

  • Gibbs 抽样将高维的连续概率密度分布退化为一维概率密度函数分布的抽样;
    • 2 维 ⇒ 1 维;
    • Gibbs 采样极大地降低了高维概率分布函数采样的难度;
  • Gibbs 抽样的三阶段:
    • Initialization
    • burn-in
    • sampling
  • 为了使得采样样本之间尽可能地保持独立,可在采样阶段设置每隔 L 次采样一次:

    
    # L, num_burn, num_samples
    
    samples = []
    for i in range(num_burn+L*num_samples):
        if i > num_burn:
            ...
            x = ...
            if (i-num_burn) % L == 0:
                samples.append(x)

Gibbs 抽样是一种基于 MCMC(Markov Chain Monte Carlo)策略的抽样方法,具体来说对于一个 d 维的随机向量 X=(x1,x2,,xd) ,但是我们无法直接求出 X 的概率分布 p(X) ,但我们知道给定的 X 的其他分量关于第 i 个分量 xi 的条件分布,即 p(xi|xi),xi=(x1,x2,,xi1,xi+1,xd) 。那么,我们可以从 x 的任意状态,如 (x1(0),x2(0),,xd(0)) 开始,利用条件分布 p(xi|xi) 迭代地对这状态的每个分量进行抽样

x = np.random.randn(d)
for i in range(d):
    x[i] = conditional_prob(...)
    ...

随着抽样次数的增加,随机变量 (x1(n),x2(n),,xd(n)) 的概率分布将以 n 的几何级数的速度收敛于 x 的联合概率分布 p(x)

例如,一个样本是 3 维的,姑且设为 (g,u,b) ,一般来说,我们无法直接获得样本的分布,但我们知道条件概率 p(g|u,b) p(u|g,b) p(b|g,u)

  • (1)给 (g,u,b) 赋初值, (g0,u0,b0)
  • (2)利用 p(g|u0,b0) ,计算 g1
  • (3)利用 p(u|g1,b0) ,计算 u1
  • (4)利用 p(b|g1,u1) ,计算 b1
  • (5)重复 (2)-(4),这样我们就得到一个 Markov Chain {(g0,u0,b0),(g1,u1,b1),,(gt,ut,bt)}

你可能感兴趣的:(深度学习,采样)