开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 32 天,点击查看活动详情
对于一般的分布的采样,在很多的编程语言中都有实现,如最基本的满足均匀分布的随机数,但是对于复杂的分布,要想对其采样,却没有实现好的函数,在这里,可以使用马尔可夫链蒙特卡罗(Markov Chain Monte Carlo, MCMC)方法,其中Metropolis-Hastings采样和Gibbs采样是MCMC中使用较为广泛的两种形式。
MCMC的基础理论为马尔可夫过程,在MCMC算法中,为了在一个指定的分布上采样,根据马尔可夫过程,首先从任一状态出发,模拟马尔可夫过程,不断进行状态转移,最终收敛到平稳分布。
1. 马尔可夫链
1.1. 马尔可夫链
设X t X_t X t 表示随机变量X X X 在离散时间t t t 时刻的取值。若该变量随时间变化的转移概率仅仅依赖于它的当前取值,即
P ( X t + 1 = s j ∣ X 0 = s 0 , X 1 = s 1 , ⋯ , X t = s i ) = P ( X t + 1 = s j ∣ X t = s i ) P\left ( X_{t+1}=s_j\mid X_0=s_{0},X_1=s_{1}, \cdots ,X_t=s_i \right )=P\left ( X_{t+1}=s_j\mid X_t=s_i \right ) P ( X t + 1 = s j ∣ X 0 = s 0 , X 1 = s 1 , ⋯ , X t = s i ) = P ( X t + 1 = s j ∣ X t = s i )
也就是说状态转移的概率只依赖于前一个状态。称这个变量为马尔可夫变量,其中,s 0 , s 1 , ⋯ , s i , s j ∈ Ω s_0,s_1,\cdots ,s_i,s_j\in \Omega s 0 , s 1 , ⋯ , s i , s j ∈ Ω 为随机变量X X X 可能的状态。这个性质称为马尔可夫性质,具有马尔可夫性质的随机过程称为马尔可夫过程。
马尔可夫链指的是在一段时间内随机变量X X X 的取值序列( X 0 , X 1 , ⋯ , X m ) \left ( X_0,X_1,\cdots ,X_m \right ) ( X 0 , X 1 , ⋯ , X m ) ,它们满足如上的马尔可夫性质。
1.2. 转移概率
马尔可夫链是通过对应的转移概率定义的,转移概率指的是随机变量从一个时刻到下一个时刻,从状态s i s_i s i 转移到另一个状态s j s_j s j 的概率,即:
P ( i → j ) : = P i , j = P ( X t + 1 = s j ∣ X t = s i ) P\left ( i\rightarrow j \right ):=P_{i,j}=P\left ( X_{t+1}=s_j\mid X_t=s_i \right ) P ( i → j ) := P i , j = P ( X t + 1 = s j ∣ X t = s i )
记π k ( t ) \pi _k^{\left ( t \right )} π k ( t ) 表示随机变量X X X 在时刻t t t 的取值为s k s_k s k 的概率,则随机变量X X X 在时刻t + 1 t+1 t + 1 的取值为s i s_i s i 的概率为:
π i ( t + 1 ) = P ( X t + 1 = s i ) = ∑ k P ( X t + 1 = s i ∣ X t = s k ) ⋅ P ( X t = s k ) = ∑ k P k , i ⋅ π k ( t ) \begin{aligned}
\pi _i^{\left ( t+1 \right )} &=P\left ( X_{t+1}=s_i \right ) \\
&= \sum_{k}P\left ( X_{t+1}=s_i\mid X_{t}=s_k \right )\cdot P\left ( X_{t}=s_k \right )\\
&= \sum_{k}P_{k,i}\cdot \pi _k^{\left ( t \right )}
\end{aligned} π i ( t + 1 ) = P ( X t + 1 = s i ) = k ∑ P ( X t + 1 = s i ∣ X t = s k ) ⋅ P ( X t = s k ) = k ∑ P k , i ⋅ π k ( t )
假设状态的数目为n n n ,则有:
( π 1 ( t + 1 ) , ⋯ , π n ( t + 1 ) ) = ( π 1 ( t ) , ⋯ , π n ( t ) ) [ P 1 , 1 P 1 , 2 ⋯ P 1 , n P 2 , 1 P 2 , 2 ⋯ P 2 , n ⋮ ⋮ ⋮ P n , 1 P n , 2 ⋯ P n , n ] \left ( \pi _1^{\left ( t+1 \right )},\cdots ,\pi _n^{\left ( t+1 \right )} \right )=\left ( \pi _1^{\left ( t \right )},\cdots ,\pi _n^{\left ( t \right )} \right )\begin{bmatrix}
P_{1,1} & P_{1,2} & \cdots & P_{1,n}\\
P_{2,1} & P_{2,2} & \cdots & P_{2,n}\\
\vdots & \vdots & & \vdots \\
P_{n,1} & P_{n,2} & \cdots & P_{n,n}
\end{bmatrix} ( π 1 ( t + 1 ) , ⋯ , π n ( t + 1 ) ) = ( π 1 ( t ) , ⋯ , π n ( t ) ) ⎣ ⎡ P 1 , 1 P 2 , 1 ⋮ P n , 1 P 1 , 2 P 2 , 2 ⋮ P n , 2 ⋯ ⋯ ⋯ P 1 , n P 2 , n ⋮ P n , n ⎦ ⎤
1.3. 马尔可夫链的平稳分布
对于马尔可夫链,需要注意以下的两点:
1、周期性:即经过有限次的状态转移,又回到了自身;
2、不可约:即两个状态之间相互转移;
如果一个马尔可夫过程既没有周期性,又不可约,则称为各态遍历的。
对于一个各态遍历的马尔可夫过程,无论初始值π ( 0 ) \pi ^{\left ( 0 \right )} π ( 0 ) 取何值,随着转移次数的增多,随机变量的取值分布最终都会收敛到唯一的平稳分布π ∗ \pi ^{\ast } π ∗ ,即:
l i m t → ∞ π ( 0 ) P t = π ∗ \underset{t\rightarrow \infty }{lim}\pi ^{\left ( 0 \right )}\mathbf{P}^t=\pi ^{\ast } t → ∞ l im π ( 0 ) P t = π ∗
且这个平稳分布π ∗ \pi ^{\ast } π ∗ 满足:
π ∗ P = π ∗ \pi ^{\ast }\mathbf{P}=\pi ^{\ast } π ∗ P = π ∗
其中,P = ( p i , j ) n × n \mathbf{P}=\left ( p_{i,j} \right )_{n\times n} P = ( p i , j ) n × n 为转移概率矩阵。
2. 马尔可夫链蒙特卡罗方法
2.1. 基本思想
对于一个给定的概率分布P ( X ) P\left (X \right ) P ( X ) ,若是要得到其样本,通过上述的马尔可夫链的概念,我们可以构造一个转移矩阵为P \mathbf{P} P 的马尔可夫链,使得该马尔可夫链的平稳分布为P ( X ) P\left (X \right ) P ( X ) ,这样,无论其初始状态为何值,假设记为x 0 x_0 x 0 ,那么随着马尔科夫过程的转移,得到了一系列的状态值,如:x 0 , x 1 , x 2 , ⋯ , x n , x n + 1 , ⋯ , x_0,x_1,x_2,\cdots ,x_n,x_{n+1},\cdots , x 0 , x 1 , x 2 , ⋯ , x n , x n + 1 , ⋯ , ,如果这个马尔可夫过程在第n n n 步时已经收敛,那么分布P ( X ) P\left (X \right ) P ( X ) 的样本即为x n , x n + 1 , ⋯ x_n,x_{n+1},\cdots x n , x n + 1 , ⋯ 。
2.2. 细致平稳条件
对于一个各态遍历的马尔可夫过程,若其转移矩阵为P \mathbf{P} P ,分布为π ( x ) \pi \left ( x \right ) π ( x ) ,若满足:
π ( i ) P i , j = π ( j ) P j , i \pi \left ( i \right )P_{i,j}=\pi \left ( j \right )P_{j,i} π ( i ) P i , j = π ( j ) P j , i
则π ( x ) \pi \left ( x \right ) π ( x ) 是马尔可夫链的平稳分布,上式称为细致平稳条件。
2.3. Metropolis采样算法
Metropolis采样算法是最基本的基于MCMC的采样算法。
2.3.1. Metropolis采样算法的基本原理
假设需要从目标概率密度函数p ( θ ) p\left ( \theta \right ) p ( θ ) 中进行采样,同时,θ \theta θ 满足− ∞ < θ < ∞ -\infty <\theta <\infty − ∞ < θ < ∞ 。Metropolis采样算法根据马尔可夫链去生成一个序列:
θ ( 1 ) → θ ( 2 ) → ⋯ θ ( t ) → \theta ^{\left ( 1 \right )}\rightarrow \theta ^{\left ( 2 \right )}\rightarrow \cdots \theta ^{\left (t \right )}\rightarrow θ ( 1 ) → θ ( 2 ) → ⋯ θ ( t ) →
其中,θ ( t ) \theta ^{\left (t \right )} θ ( t ) 表示的是马尔可夫链在第t t t 代时的状态。
在Metropolis采样算法的过程中,首先初始化状态值θ ( 1 ) \theta ^{\left (1 \right )} θ ( 1 ) ,然后利用一个已知的分布q ( θ ∣ θ ( t − 1 ) ) q\left ( \theta \mid \theta ^{\left ( t-1 \right )} \right ) q ( θ ∣ θ ( t − 1 ) ) 生成一个新的候选状态θ ( ∗ ) \theta ^{\left (\ast \right )} θ ( ∗ ) ,随后根据一定的概率选择接受这个新值,或者拒绝这个新值,在Metropolis采样算法中,概率为:
α = m i n ( 1 , p ( θ ( ∗ ) ) p ( θ ( t − 1 ) ) ) \alpha =min\: \left ( 1,\; \frac{p\left ( \theta ^{\left ( \ast \right )} \right )}{p\left ( \theta ^{\left ( t-1 \right )} \right )} \right ) α = min ( 1 , p ( θ ( t − 1 ) ) p ( θ ( ∗ ) ) )
这样的过程一直持续到采样过程的收敛,当收敛以后,样本θ ( t ) \theta ^{\left (t \right )} θ ( t ) 即为目标分布p ( θ ) p\left ( \theta \right ) p ( θ ) 中的样本。
2.3.2. Metropolis采样算法的流程
基于以上的分析,可以总结出如下的Metropolis采样算法的流程:
初始化时间t = 1 t=1 t = 1
设置u u u 的值,并初始化初始状态θ ( t ) = u \theta ^{\left (t \right )}=u θ ( t ) = u
重复一下的过程:
令t = t + 1 t=t+1 t = t + 1
从已知分布q ( θ ∣ θ ( t − 1 ) ) q\left ( \theta \mid \theta ^{\left ( t-1 \right )} \right ) q ( θ ∣ θ ( t − 1 ) ) 中生成一个候选状态θ ( ∗ ) \theta ^{\left (\ast \right )} θ ( ∗ )
计算接受的概率:α = m i n ( 1 , p ( θ ( ∗ ) ) p ( θ ( t − 1 ) ) ) \alpha =min\: \left ( 1,\; \frac{p\left ( \theta ^{\left ( \ast \right )} \right )}{p\left ( \theta ^{\left ( t-1 \right )} \right )} \right ) α = min ( 1 , p ( θ ( t − 1 ) ) p ( θ ( ∗ ) ) )
从均匀分布U n i f o r m ( 0 , 1 ) Uniform\left ( 0, 1 \right ) U ni f or m ( 0 , 1 ) 生成一个随机值a a a
如果a ⩽ α a\leqslant \alpha a ⩽ α ,接受新生成的值:θ ( t ) = θ ( ∗ ) \theta ^{\left (t \right )}=\theta ^{\left (\ast \right )} θ ( t ) = θ ( ∗ ) ;否则:θ ( t ) = θ ( t − 1 ) \theta ^{\left (t \right )}=\theta ^{\left (t-1 \right )} θ ( t ) = θ ( t − 1 )
直到t = T t=T t = T
2.3.3. Metropolis算法的解释
要证明Metropolis采样算法的正确性,最重要的是要证明构造的马尔可夫过程满足如上的细致平稳条件,即:
π ( i ) P i , j = π ( j ) P j , i \pi \left ( i \right )P_{i,j}=\pi \left ( j \right )P_{j,i} π ( i ) P i , j = π ( j ) P j , i
对于上面所述的过程,分布为p ( θ ) p\left ( \theta \right ) p ( θ ) ,从状态i i i 转移到状态j j j 的转移概率为:
P i , j = α i , j ⋅ Q i , j P_{i,j} =\alpha _{i,j}\cdot Q_{i,j} P i , j = α i , j ⋅ Q i , j
其中,Q i , j Q_{i,j} Q i , j 为上述已知的分布。
对于选择该已知的分布,在Metropolis采样算法中,要求该已知的分布必须是对称的,即Q i , j = Q j , i Q_{i,j}=Q_{j,i} Q i , j = Q j , i ,即
q ( θ = θ ( t ) ∣ θ ( t − 1 ) ) = q ( θ = θ ( t − 1 ) ∣ θ ( t ) ) q\left ( \theta =\theta ^{\left ( t \right )}\mid \theta ^{\left ( t-1 \right )} \right )=q\left ( \theta =\theta ^{\left ( t-1 \right )}\mid \theta ^{\left ( t \right )} \right ) q ( θ = θ ( t ) ∣ θ ( t − 1 ) ) = q ( θ = θ ( t − 1 ) ∣ θ ( t ) )
常用的符合对称的分布主要有:正态分布,柯西分布以及均匀分布等。
接下来,需要证明在Metropolis采样算法中构造的马尔可夫链满足细致平稳条件。
p ( θ ( i ) ) P i , j = p ( θ ( i ) ) ⋅ α i , j ⋅ Q i , j = p ( θ ( i ) ) ⋅ m i n { 1 , p ( θ ( j ) ) p ( θ ( i ) ) } ⋅ Q i , j = m i n { p ( θ ( i ) ) Q i , j , p ( θ ( j ) ) Q i , j } = p ( θ ( j ) ) ⋅ m i n { p ( θ ( i ) ) p ( θ ( j ) ) , 1 } ⋅ Q j , i = p ( θ ( j ) ) ⋅ α j , i ⋅ Q j , i = p ( θ ( j ) ) P j , i \begin{aligned}
p\left ( \theta ^{\left ( i \right )} \right )P_{i,j} &=p\left ( \theta ^{\left ( i \right )} \right )\cdot \alpha _{i,j}\cdot Q_{i,j} \\
&= p\left ( \theta ^{\left ( i \right )} \right )\cdot min\; \left \{ 1,\frac{p\left ( \theta ^{\left ( j \right )} \right )}{p\left ( \theta ^{\left ( i \right )} \right )} \right \}\cdot Q_{i,j}\\
&=min\; \left \{ p\left ( \theta ^{\left ( i \right )} \right )Q_{i,j},p\left ( \theta ^{\left ( j \right )} \right )Q_{i,j} \right \}\\
&=p\left ( \theta ^{\left ( j \right )} \right )\cdot min\; \left \{ \frac{p\left ( \theta ^{\left ( i \right )} \right )}{p\left ( \theta ^{\left ( j \right )} \right )}, 1 \right \}\cdot Q_{j,i}\\
&=p\left ( \theta ^{\left ( j \right )} \right )\cdot \alpha _{j,i}\cdot Q_{j,i}\\
&=p\left ( \theta ^{\left ( j \right )} \right )P_{j,i}
\end{aligned} p ( θ ( i ) ) P i , j = p ( θ ( i ) ) ⋅ α i , j ⋅ Q i , j = p ( θ ( i ) ) ⋅ min { 1 , p ( θ ( i ) ) p ( θ ( j ) ) } ⋅ Q i , j = min { p ( θ ( i ) ) Q i , j , p ( θ ( j ) ) Q i , j } = p ( θ ( j ) ) ⋅ min { p ( θ ( j ) ) p ( θ ( i ) ) , 1 } ⋅ Q j , i = p ( θ ( j ) ) ⋅ α j , i ⋅ Q j , i = p ( θ ( j ) ) P j , i
因此,通过以上的方法构造出来的马尔可夫链是满足细致平稳条件的。
2.3.4. 实验
假设需要从柯西分布中采样数据,我们利用Metropolis采样算法来生成样本,其中,柯西分布的概率密度函数为:
f ( θ ) = 1 π ( 1 + θ 2 ) f\left ( \theta \right )=\frac{1}{\pi \left ( 1+\theta ^2 \right )} f ( θ ) = π ( 1 + θ 2 ) 1
那么,根据上述的Metropolis采样算法的流程,接受概率α \alpha α 的值为:
α = m i n ( 1 , 1 + [ θ ( t ) ] 2 1 + [ θ ( ∗ ) ] 2 ) \alpha =min\; \left ( 1,\frac{1+\left [ \theta ^{\left ( t \right )} \right ]^2}{1+\left [ \theta ^{\left ( \ast \right )} \right ]^2} \right ) α = min ( 1 , 1 + [ θ ( ∗ ) ] 2 1 + [ θ ( t ) ] 2 )
代码如下:
'''
Date:20160629
@author: zhaozhiyong
'''
import random
from scipy.stats import norm
import matplotlib.pyplot as plt
def cauchy (theta ):
y = 1.0 / (1.0 + theta ** 2 )
return y
T = 5000
sigma = 1
thetamin = -30
thetamax = 30
theta = [0.0 ] * (T+1 )
theta[0 ] = random.uniform(thetamin, thetamax)
t = 0
while t < T:
t = t + 1
theta_star = norm.rvs(loc=theta[t - 1 ], scale=sigma, size=1 , random_state=None )
alpha = min (1 , (cauchy(theta_star[0 ]) / cauchy(theta[t - 1 ])))
u = random.uniform(0 , 1 )
if u <= alpha:
theta[t] = theta_star[0 ]
else :
theta[t] = theta[t - 1 ]
ax1 = plt.subplot(211 )
ax2 = plt.subplot(212 )
plt.sca(ax1)
plt.ylim(thetamin, thetamax)
plt.plot(range (T+1 ), theta, 'g-' )
plt.sca(ax2)
num_bins = 50
plt.hist(theta, num_bins, normed=1 , facecolor='red' , alpha=0.5 )
plt.show()
实验的结果:
对于Metropolis采样算法,其要求选定的分布必须是对称的,为了弥补这样的一个缺陷,在下一篇中,介绍一下Metropolis-Hastings采样算法,其是Metropolis采样算法的推广形式。
参考文献
[1] 马尔可夫链蒙特卡罗算法
[2] 受限玻尔兹曼机(RBM)学习笔记(一)预备知识
[3] LDA数学八卦
开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 32 天,点击查看活动详情