# Metropolis-Hastings (MH) 算法

# 算法流程

  1. 定义目标分布与提议分布

    • 目标分布为 p(θy)p(\theta \mid y),这是我们希望采样的分布。
    • 提议分布(Proposal Distribution)为 g(θθ(t))g(\theta^* \mid \theta^{(t)}),用于生成新的候选样本 θ\theta^*
  2. 迭代采样过程

    • 给定当前样本 θ(t)\theta^{(t)}
    • 从提议分布中采样一个候选值:θg(θθ(t))\theta^* \sim g(\theta \mid \theta^{(t)})
    • 计算接受率 rr

      r=r(θ(t),θ)=p(θy)/g(θθ(t))p(θ(t)y)/g(θ(t)θ)=p(θy)p(θ(t)y)g(θ(t)θ)g(θθ(t))r = r(\theta^{(t)}, \theta^*) = \frac{p(\theta^* \mid y) / g(\theta^* \mid \theta^{(t)})}{p(\theta^{(t)} \mid y) / g(\theta^{(t)} \mid \theta^*)} = \frac{p(\theta^* \mid y)}{p(\theta^{(t)} \mid y)} \frac{g(\theta^{(t)} \mid \theta^*)}{g(\theta^* \mid \theta^{(t)})}

    • 接受或拒绝:以 min(1,r)\min(1, r) 的概率接受 θ\theta^*
      • 若接受,则设置 θ(t+1)=θ\theta^{(t+1)} = \theta^*
      • 若拒绝,则保留当前样本,设置 θ(t+1)=θ(t)\theta^{(t+1)} = \theta^{(t)}
    • 为了避免计算精度问题,通常比较 log(r)\log(r)log(u)\log(u)(其中 uU(0,1)u \sim U(0,1))。

# 算法特点与效率

  • 如果目标函数 pp 未归一化,可以用其未归一化的形式 qq 代替,算法不受影响。
  • θ=θ(t)\theta^* = \theta^{(t)} 时,接受率 r=1r=1,提议总是被接受。
  • 理想的提议分布:理论上,最优的提议分布是目标分布本身 g(θθ(t))=p(θy)g(\theta \mid \theta^{(t)}) = p(\theta \mid y),此时接受率 r=1r=1。然而,这在实践中通常无法实现。
  • 选择提议分布的原则
    • 提议分布 gg 必须易于采样。
    • 接受率 rr 必须易于计算。
    • 采样点 θ(t)\theta^{(t)} 之间的跳跃(leap)应足够远,以确保马尔可夫链能在整个参数空间中自由探索,但又不能太远(否则接受率过低)。

# 独立提议 Metropolis-Hastings

  1. 算法流程

    • 提议分布与当前值独立:g(θθ(t))=g(θ)g(\theta \mid \theta^{(t)}) = g(\theta)
    • 接受率 rr 简化为:

      r=q(θy)/g(θ)q(θ(t)y)/g(θ(t))=q(θy)q(θ(t)y)g(θ(t))g(θ)r = \frac{q(\theta^* \mid y) / g(\theta^*)}{q(\theta^{(t)} \mid y) / g(\theta^{(t)})} = \frac{q(\theta^* \mid y)}{q(\theta^{(t)} \mid y)} \frac{g(\theta^{(t)})}{g(\theta^*)}

  2. 重尾效应

    • 为了确保算法高效,提议分布 gg 的尾部应该与目标分布 pp 相同或更重。
    • 原因:如果 pp 的尾部比 gg 更重,当马尔可夫链到达 pp 的尾部区域(即 p(θ(t)y)g(θ(t))p(\theta^{(t)} \mid y) \gg g(\theta^{(t)}))时,任何新提出的非尾部区域的样本 θ\theta^* 都将以极低的概率被接受,因为:

      r=g(θ(t))p(θ(t)y)p(θy)g(θ)0r = \frac{g(\theta^{(t)})}{p(\theta^{(t)} \mid y)} \frac{p(\theta^* \mid y)}{g(\theta^*)} \approx 0

    • 在散点图中,这种效应表现为尾部出现水平带状,这表明马尔可夫链被困在尾部区域,无法有效探索空间。

# 随机游走 Metropolis-Hastings

  1. 算法流程

    • 提议分布 gg 是对称的:g(θθ(t))=g(θ(t)θ)g(\theta^* \mid \theta^{(t)}) = g(\theta^{(t)} \mid \theta^*)
    • 接受率 rr 简化为:

      r=q(θy)q(θ(t)y)r = \frac{q(\theta^* \mid y)}{q(\theta^{(t)} \mid y)}

    • 一个常见的例子是使用正态分布作为提议分布:θθ(t)N(θ(t),v2I)\theta^* \mid \theta^{(t)} \sim N(\theta^{(t)}, v^2 I)
  2. 参数选择

    • 提议方差 v2v^2 是一个关键参数。
    • 如果 v20v^2 \to 0,则 θθ(t)\theta^* \approx \theta^{(t)}r1r \approx 1,提议总是被接受,但马尔可夫链移动缓慢,无法充分探索参数空间。
    • 如果 v2v^2 \to \infty,则 q(θy)0q(\theta^* \mid y) \approx 0r0r \approx 0,提议总是被拒绝,马尔可夫链停滞不前。
    • 存在一个最优的方差。对于正态目标分布,当维度为 dd 时,最优提议方差为 2.42Var(θy)/d2.4^2 \text{Var}(\theta \mid y)/d。这使得单维度时接受率约为 44%,当 dd \to \infty 时,接受率降至 23%。
  3. 参数自适应调整

    • 由于目标分布的方差 Var(θy)\text{Var}(\theta \mid y) 通常未知,我们可以通过迭代来估计它。
    • 流程
      1. 设置一个初始的协方差矩阵 S0S_0
      2. 进行 MCMC 采样,提议方差为 2.42Sb/d2.4^2 S_b/d
      3. 使用所有已采样的样本,计算新的协方差矩阵 Sb+1S_{b+1}
      4. 重复此过程 BB 轮。
      5. 最后,丢弃预热(burn-in)阶段的所有样本,并使用最终的协方差矩阵 SBS_B 进行正式采样。

# Gibbs 采样器

# 基本概念

Gibbs 采样器是 MH 算法的一个特例,它通过分解目标分布为一系列条件分布来简化采样过程。每个步骤都从一个完全条件分布中采样,并且接受率 rr 始终为 1。

# 二元 Gibbs 采样器

  • 前提条件:目标分布为 p(θy)p(\theta \mid y),其中 θ=(θ1,θ2)\theta = (\theta_1, \theta_2),且完全条件分布 p(θ1θ2,y)p(\theta_1 \mid \theta_2, y)p(θ2θ1,y)p(\theta_2 \mid \theta_1, y) 都是已知的且易于采样。

  • 算法流程

    1. 给定初始值 (θ1(0),θ2(0))(\theta_1^{(0)}, \theta_2^{(0)})
    2. 重复以下迭代过程:
      • 从第一个完全条件分布中采样:θ1(t)p(θ1θ2(t1),y)\theta_1^{(t)} \sim p(\theta_1 \mid \theta_2^{(t-1)}, y)
      • 从第二个完全条件分布中采样:θ2(t)p(θ2θ1(t),y)\theta_2^{(t)} \sim p(\theta_2 \mid \theta_1^{(t)}, y)
  • 例子:如果目标分布是二元正态分布 θN2(0,Σ)\theta \sim N_2(0, \Sigma),其中 Σ\Sigma 的协方差为 ρ\rho,那么其条件分布是:

    • θ1θ2N(ρθ2,1ρ2)\theta_1 \mid \theta_2 \sim N(\rho\theta_2, 1-\rho^2)
    • θ2θ1N(ρθ1,1ρ2)\theta_2 \mid \theta_1 \sim N(\rho\theta_1, 1-\rho^2)
  • 收敛速度:收敛速度取决于变量之间的相关性。相关性越大,马尔可夫链的移动越慢,收敛也越慢。在本例中,收敛速度取决于 ρ2\rho^2

# 多元 Gibbs 采样器

  • 前提条件:目标分布为 p(θy)p(\theta \mid y),其中 θ=(θ1,,θK)\theta = (\theta_1, \dots, \theta_K),并且每个分量的完全条件分布 p(θkθk,y)p(\theta_k \mid \theta_{-k}, y) 都是已知的且易于采样(其中 θk\theta_{-k} 表示除 θk\theta_k 之外的所有变量)。
  • 算法流程
    1. 给定初始值 (θ1(0),,θK(0))(\theta_1^{(0)}, \dots, \theta_K^{(0)})
    2. 重复以下迭代过程:
      • 对于 k=1,,Kk=1, \dots, K,依次采样:

        θk(t)p(θkθ1(t),,θk1(t),θk+1(t1),,θK(t1),y)\theta_k^{(t)} \sim p(\theta_k \mid \theta_1^{(t)}, \dots, \theta_{k-1}^{(t)}, \theta_{k+1}^{(t-1)}, \dots, \theta_K^{(t-1)}, y)

    • 注意:在每个步骤中,置于条件的变量都应使用其最新的采样值。

# Gibbs 采样器的变体

  • 系统扫描 Gibbs 采样器:按固定的顺序(例如 1,,K1, \dots, K)依次更新每个参数。
  • 随机扫描 Gibbs 采样器:在每次迭代中,随机选择一个参数进行更新。
  • 成块(组)Gibbs 采样器:将多个参数组合成一个“块”进行更新,而不是逐个更新。
  • 折叠 Gibbs 采样器:通过积分方式移除一些变量,只对剩余的变量进行迭代采样,然后再从其条件分布中直接采样被移除的变量。

# Metropolis-within-Gibbs (MwG)

# 主要思想

  • 当 Gibbs 采样器中的某个完全条件分布 p(θkθk,y)p(\theta_k \mid \theta_{-k}, y) 不易于直接采样时,可以使用一步 MH 算法来代替。

  • 实现方式:在 Gibbs 采样器的迭代中,对难以采样的分量 θk\theta_k,将其完全条件分布 p(θkθk,y)p(\theta_k \mid \theta_{-k}, y) 作为目标分布,并使用 MH 算法进行一次迭代采样。

  • 例如,在二元正态模型中,如果 θ1\theta_1 可以用 Gibbs 采样,而 θ2\theta_2 的条件分布难以采样,则可以:

    • 使用 Gibbs 采样 θ1(t)p(θ1θ2(t1),y)\theta_1^{(t)} \sim p(\theta_1 \mid \theta_2^{(t-1)}, y)
    • 使用 MH 算法采样 θ2(t)\theta_2^{(t)},其目标分布为 p(θ2θ1(t),y)p(\theta_2 \mid \theta_1^{(t)}, y)
  • MH 算法可以是随机游走 MH,独立提议 MH,甚至是拒绝采样等。