Skip to main content

MCMC

· 11 min read
PuQing
AI, CVer, Pythoner, Half-stack Developer

马尔科夫链

马尔科夫及其有关的随机过程 中我们介绍过马尔科夫过程,其区别就是时间是否是离散的。整体分类可以见下面表格。

可数或有限的状态空间连续或一般的状态空间
离散时间在可数且有限状态空间下的马尔可夫链Harris chain (在一般状态空间下的马尔可夫链)
连续时间Continuous-time Markov process任何具备马尔可夫性质的连续随机过程,例如维纳过程

马尔可夫链假设某一时刻状态转移的概率只依赖于它的前一个状态。

P(Xt+1=jX0=k0,Xt1=kt1,Xt=i)=P(Xt+1=jXt=i)=pij,t=0,1,,k0,,kt1,i,jS\begin{aligned} & P\left(X_{t+1}=j \mid X_{0}=k_{0}, \ldots X_{t-1}=k_{t-1}, X_{t}=i\right) \\ = & P\left(X_{t+1}=j \mid X_{t}=i\right)=p_{i j}, t=0,1, \ldots, k_{0}, \ldots, k_{t-1}, i, j \in S \end{aligned}

则矩阵 P=(pij)m×mP=(p_{ij})_{m\times m} 为转移概率矩阵。显然有 j=1mpij=1,i=1,2,,m\sum_{j=1}^{m}p_{ij}=1,i=1,2,\dots,m

info

如果我们给定状态空间为 {s0,s1,s2}\{s_{0},s_{1},s_{2}\} 三种状态。并给定有转移概率矩阵:

P=[0.60.20.20.30.40.300.30.7]P = \begin{bmatrix} 0.6 & 0.2 & 0.2 \\ 0.3 & 0.4 & 0.3 \\ 0 & 0.3 & 0.7 \end{bmatrix}

假设初始状态分别为 [0.1,0.2,0.7]\left[ 0.1,0.2,0.7 \right] 。我们模拟一下直到 t=100t=100 时状态概率。

image.png 可以看到最后的状态概率收敛到一个固定值,我们尝试进行多次,初始不同的状态概率。

image.png

可以看到同样收敛到了一个固定值。

也就是说马尔科夫链模型的状态转移矩阵收敛到的稳定概率分布与初始状态概率分布无关。也就是说,如果我们得到了这个稳定概率分布对应的马尔科夫链模型的状态转移矩阵,则我们可以用任意的概率分布样本开始,带入马尔科夫链模型的状态转移矩阵,这样经过一些序列的转换,最终就可以得到符合对应稳定概率分布的样本。

用数学语言来描述就是

如果一个非周期的马尔科夫有状态转移矩阵 PP,并且他的任何两个状态是连通的,那么 limnPijn\lim _{n \rightarrow \infty} P_{i j}^{n} 与初始点 ii 无关。我们有

tip
limnPijn=π(j)\lim _{n \to \infty} P_{i j}^{n}=\pi(j)
对于马式链 P(Xt+k=jXt=i)=pij(k)P\left(X_{t+k}=j \mid X_{t}=i\right)=p_{i j}^{(k)},为 kk 步转移概率
tip
limnPn=[π(1)π(2)π(j)π(1)π(2)π(j)π(1)π(2)π(j)]\lim _{n \to \infty} P^{n}= \begin{bmatrix} \pi(1) & \pi(2) & \cdots & \pi(j) & \cdots \\ \pi(1) & \pi(2) & \cdots & \pi(j) & \cdots \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ \pi(1) & \pi(2) & \cdots & \pi(j) & \cdots \\ \vdots & \vdots & \vdots & \ddots & \vdots \end{bmatrix}
tip
π(j)=i=0mπ(i)Pij\pi(j)=\sum_{i=0}^{m} \pi(i) P_{i j}
证明
P(Xn+1=j)=i=0P(Xn=i)P(Xn+1=jXn=i)=i=0P(Xn=i)PijP\left(X_{n+1}=j\right)=\sum_{i=0}^{\infty} P\left(X_{n}=i\right) P\left(X_{n+1}=j \mid X_{n}=i\right)=\sum_{i=0}^{\infty} P\left(X_{n}=i\right) P_{i j}

然后两边取极限,实际上就是在描述极限状况下,任意状态的概率为所有概率转换到该状态的概率和

tip

π\piπP=π\pi P=\pi 唯一非负解,π=[π(1),π(2),,π(j),]\pi=[\pi(1), \pi(2), \cdots, \pi(j), \cdots],并且有 i=1π(i)=1\sum_{i=1}^{\infty}\pi(i)=1π\pi 被称为马氏链的平稳分布。

马尔科夫链采样

如果我们知道转移概率矩阵,则我们可以非常方便的采样得到平稳分布的样本集。

  1. 输入马尔科夫链状态转移矩阵 PP
  2. 从任意分布中采样初始状态 x0x_{0}
  3. 根据条件概率 P(xxt)P(x\mid x_{t}) 采样得到 P(xt+1)P(x_{t+1})

tt 很大时,xtx_{t} 的分布就近似服从 π\pi,抛弃开始的一段后的 xtx_{t} 序列就可以做为分布 π\pi 的相关的样本,抛弃的一段序列叫做老化期

均匀分布,Box-Muller 变换

在说 MCMC 采样前,先引入一些前置知识。

均匀分布是很容易采样的,比如在计算机中生成 [0,1][0,1] 之间的伪随机数序列,就可以看成是一种均匀分布。而我们常见的概率分布,无论是连续的还是离散的分布,都可以基于 Uniform(0,1)\mathrm{Uniform}(0,1) 的样本生成。例如正态分布可以通过著名的 Box−Muller 变换得到:

Box-Muller 变换

如果随机变量 U1,U2U_{1},U_{2},独立且 U1,U2U(0,1)U_{1},U_{2} \sim \mathbf{U}(0,1)

Z0=2lnU1cos(2πU2)Z1=2lnU1sin(2πU2)\begin{array}{l} Z_{0}=\sqrt{-2 \ln U_{1}} \cos \left(2 \pi U_{2}\right) \\ Z_{1}=\sqrt{-2 \ln U_{1}} \sin \left(2 \pi U_{2}\right) \end{array}

Z0,Z1Z_{0},Z_{1} 独立且服从标准正态分布。

其他的连续分布也可以通过一个均匀分布变换得到相应的分布,见 逆变换采样

拒绝接受采样(Acceptance-Rejection Sampling)

上面采样看上去一片岁月静好的样子,但是如果我们需要对下面概率密度函数对应分布进行采样

f(x)=(x0.4)401(x0.4)4dxf(x)= \frac{(x-0.4)^{4}}{\displaystyle \int_{0}^{1}(x-0.4)^{4} d x}

这个时候上面两种采样方式均无法进行采样。这个时候引入拒绝接受采样。

info

我们首先需要一个建议分布 (proposal distribution)GG(并且是已知概率密度函数 g(x)g(x)) 来产生候选样本。比如均匀分布、正态分布

然后还需要一个辅助的均匀分布 U(0,1)\mathbf{U}(0,1) 估算一个常值 cc。-- 满足不等式 cg(x)f(x)c * g(x)\ge f(x) 的最小值 cc

开始样本生成
  • 从建议分布 GG 采样,得到样本 YY
  • 从分布 U(0,1)\mathbf{U(0,1)} 采样,得到样本 UU
  • 如果 Uf(Y)cg(Y)U\le \displaystyle \frac{f(Y)}{c*g(Y)},则令 X=YX=Y(接受 Y 作为采样样本),否则重新开始
note

如何理解上述采样过程呢?

image.png

可以看图,上方红色的就是 cg(Y)c*g(Y),蓝色的就是目标概率函数 f(Y)f(Y)。考查下面比值:

0<f(Y)cg(Y)<10< \frac{f(Y)}{c*g(Y)} <1

所以我们使用一个辅助的随机变量,如果该随机变量采样使得:

Uf(Y)cg(Y)U \le \frac{f(Y)}{c*g(Y)}

即,该采样落在了 f(Y)cg(Y)\frac{f(Y)}{c*g(Y)} 的下方,我们就认为该采样值是目标分布 " 采样得到 ",因为接受的概率与拒绝的概率对应着概率密度函数的比值。

细致平稳条件 (Detailed Balance Condition)

再引入细致平稳条件。

如果非周期马尔科夫链状态转移矩阵 PP 和概率分布 π(x)\pi(x) 对所有的 i,ji,j 满足:

π(i)P(i,j)=π(j)P(j,i), for all i,j\pi(i) P(i, j)=\pi(j) P(j, i), \quad \text { for all } i, j

那么 π(x)\pi(x) 就是转移概率矩阵的平稳分布。

这也很容易证明。

证明
i=1π(i)Pij=i=1π(j)Pji=π(j)i=1Pji=π(j)πP=π\begin{array}{c} \displaystyle \sum_{i=1}^{\infty} \pi(i) P_{i j}=\sum_{i=1}^{\infty} \pi(j) P_{j i}=\pi(j) \sum_{i=1}^{\infty} P_{j i}=\pi(j) \\ \Rightarrow \pi P=\pi \end{array}

当然该条件是一个充分不必要条件。

MCMC 采样

终于可以说 MCMC 采样了,回顾均匀采样、逆变换采样、拒绝接受采样,他们是没有 " 历史信息的 ",所以他们效率非常低。而马氏链这一特性,造就了 MCMC 采样的高效性,采样是一个条件概率采样。

还是同样的问题,对于一个非常复杂的,不可求反函数的高维概率密度函数 π(x)\pi(x) 如何采样。

前面我们已经说了对于马氏链来说平稳分布与初始状态分布是无关的,这也就启发我们同样可以采用某种 "proposal distribution"GG 然后在 GG 上采样然后转换概率矩阵得到平稳分布 π(x)\pi(x) 的采样。

但是问题就是如何构造转换概率矩阵?要知道,对于给定的平稳分布 π(x)\pi(x) 和某一个马尔可夫状态转移矩阵 QQ 不满足细致平稳条件。即:

π(i)Q(i,j)π(j)Q(j,i)\pi(i) Q(i, j) \neq \pi(j) Q(j, i)

其中的 Q(i,j)Q(i,j) 还可以表示为 Q(i,j)Q(ji)Q(ij)Q(i, j) \Leftrightarrow Q(j \mid i) \Leftrightarrow Q(i \rightarrow j),表示 iijj 转移的概率。

但是有意思的来了,虽然 aba \ne b,但是 ab=baab=ba(废话)。同样的构造,我们令 a(i,j)=π(j)Q(j,i)a(i,j)=\pi(j)Q(j,i),我们就有

π(i)Q(i,j)α(i,j)Q^(i,j)=π(j)Q(j,i)α(j,i)Q^(j,i)\pi(i) \underbrace{Q(i, j) \alpha(i, j)}_{\hat{Q}(i,j)} =\pi(j) \underbrace{Q(j, i) \alpha(j, i)}_{\hat{Q}(j,i)}

而这个新的状态转移矩阵正好满足了细致平稳条件,而平稳分布 π(i)\pi(i) 就是在新的 Q^\hat{Q} 下的平稳分布,我们不妨把原始 QQ 的平稳分布记做 π^\hat{\pi}。而这恰好构成了拒绝接受采样的两组概率分布。

其中的 π^\hat{\pi} 是我们容易得到的,因为其转换概率矩阵 QQ 已知。

所以我们就有 MCMC 采样方法:

  • 从任意简单概率分布采样得到 x0x_{0}
  • 从条件概率分布 Q(xxt)Q(x\mid x_{t}) 得到 xx^*(类似于拒绝接受采样中的已知概率密度函数的采样)
  • 从均匀分布中采样 UU(0,1)U\sim \mathbf{U}(0,1)
  • 如果 U<a(xt,x)=π(x)Q(x,xt)U< a(x_{t},x_{*})=\pi(x_{*})Q(x_{*},x_{t}),则接受 xtxx_{t}\to x_{*},即 xt+1=xx_{t+1}=x_{*}
这里的 U<a(xt,x)U< a(x_{t},x_{*}) 是如何得到的?

我们在拒绝接受采样中知道;这实际上目标概率密度与已知概率密度的比值

π(x)π^(x)=π(xt)Q^π(xt)Q=a(xt,x)\frac{\pi(x_{*})}{\hat{\pi}(x_{*})} = \frac{\pi(x_{t})\hat{Q}}{\pi(x_{t})Q} = a(x_{t},x_{*})

参考