Hamiltonian Monte Carlo抽样算法的初步理解
吐血学习
HMC 算法算是代码实现没几行,背后原理让人吐血的一个算法。
接受拒绝采样算法
我们的目标分布 p ~ \tilde{p} p~解析形式已知,例如
p ~ ( z ) = 0.3 e x p ( − ( z − 0.3 ) 2 ) + 0.7 e x p ( − ( z − 2 ) 2 / 0.3 ) \tilde{p}(z)=0.3exp(-(z-0.3)^2)+0.7exp(-(z-2)^2/0.3) p~(z)=0.3exp(−(z−0.3)2)+0.7exp(−(z−2)2/0.3)
我们要面临的问题是如何从上述复杂分布中采样?
拒绝采样算法通过使用一个已知的易于采样的分布 q ( z ) q(z) q(z) 去逼近我们要采样的目标分布 p ~ ( z ) \tilde{p} (z) p~(z),
MCMC回顾
平稳分布的定义
π = P π \pi = P \; \pi π=Pπ
称 π \pi π 为马尔可夫链的平稳分布
直观上,如果马尔科夫链的平稳分布存在,那么以该平稳分布作为初始分布,而未来进行随机状态转移,之后任何一个时刻的状态分布都是该平稳分布。
细致平衡条件:
p j i π j = p i j π i , i , j = 1 , 2 , ⋯ p_{ji}\pi_j = p_{ij} \pi_i ,i,j=1,2,\cdots pjiπj=pijπi,i,j=1,2,⋯
MCMC中最重要的一个定理
满足细致平衡方程的状态分布 π \pi π就是该马尔可夫链的平稳分布。即
π = P π \pi = P \pi π=Pπ
MH算法是怎样设计转移矩阵 P P P的?
MH算法中,细致平衡条件有如下表述:
π ( x ) \pi(x) π(x) 为要抽样的分布, 转移核为 p ( x ′ ∣ x ) p(x'|x) p(x′∣x)
p ( x ′ ∣ x ) = q ( x ′ ∣ x ) α ( x , x ′ ) p(x'|x)=q(x'|x) \alpha (x,x') p(x′∣x)=q(x′∣x)α(x,x′)
q ( x , x ′ ) q(x,x') q(x,x′) , α ( x , x ′ ) \alpha (x,x') α(x,x′) 分别称为建议分布和接受分布
α ( x , x ′ ) = min { 1 , π ( x ′ ) q ( x ∣ x ′ ) π ( x ) q ( x ′ ∣ x ) } \alpha (x,x') = \min \left\{1,\frac{\pi(x')q(x|x')}{\pi(x)q(x'|x)}\right\} α(x,x′)=min{ 1,π(x)q(x′∣x)π(x′)q(x∣x′)}
且满足细致平衡条件:
π ( x ) p ( x ′ ∣ x ) = π ( x ′ ) p ( x ∣ x ′ ) \pi(x)p(x'|x)= \pi(x')p(x|x') π(x)p(x′∣x)=π(x′)p(x∣x′)
我们可以自由的设计MH算法的转移核(transition kernel),对其进行的不同变化形成了不同的MCMC算法。从这个角度看,后来发展的HMC,slice sampling,Langevin Monte Carlo等等实际上都可以看作是MH的一种。很自然我们会思考有什么指导思想去自由设计转移核?
在实际应用MCMC过程中,可能会遇到下面的问题,比如:
-
MH的转移核(transition kernel)非常可能会造成随机游走(random walk behavior),使得状态在状态空间中进行小范围的探索而不能走出去,以至于退化成单纯的随机游走建议点,这样会造成有效采样个数(ESS)较小,抽样效率过低,还有就是当目标函数是多峰(multi-modal)的时候不能很好的找到所有的模式。
-
MH算法的拒绝率和转移核(transition kernel)有关,我们希望拒绝率尽量低。
设计转移核(transition kernel)的指导思想一般就是解决上面两个问题,而后提出的HMC算法就由于能很好的缓解上面的两个问题而出名。HMC的出现开辟了一条MCMC算法研究的新路。
Hamiltonian dynamics
拉格朗日方程
牛顿力学的运动微分方程:
m d 2 r ⃗ d t 2 = F ⃗ m \frac{d^2 \vec{r}}{dt^2}=\vec{F} mdt2d2r=F
拉格朗日方程的特点是避开矢量力,而利用标量动能和势能来描述运动。
从牛顿方程出发推导拉格朗日方程
1、 单个质点在保守力场中运动: U ( r ⃗ ) U(\vec{r}) U(r) —势能函数
直角坐标系中: r ⃗ = x i ⃗ + y j ⃗ + z k ⃗ \vec{r}=x \vec{i}+y\vec{j}+z \vec{k} r=xi+yj+zk
F ⃗ = − ∇ U = − ∂ U ∂ r ⃗ = − ∂ U ∂ x i ⃗ − ∂ U ∂ y j ⃗ − ∂ U ∂ z k ⃗ \vec{F}=-\nabla U=-\frac{\partial U}{\partial \vec{r}}=-\frac{\partial U}{\partial x} \vec{i}-\frac{\partial U}{\partial y} \vec{j}-\frac{\partial U}{\partial z} \vec{k} F=−∇U=−∂r∂U=−∂x∂Ui−∂y∂Uj−∂z∂Uk
由牛顿第二定律,质点的运动方程为: m r ⃗ ¨ = F ⃗ = − ∂ U ∂ r ⃗ m \ddot{\vec{r}}=\vec{F}=-\frac{\partial U}{\partial \vec{r}} mr¨=F=−∂r∂U
分量形式: { m x ¨ = F x m y ¨ = F y m z ¨ = F z \left\{\begin{array}{l}m \ddot{x}=F_{x} \\ m \ddot{y}=F_{y} \\ m \ddot{z}=F_{z}\end{array}\right. ⎩⎨⎧mx¨=Fxmy¨=Fymz¨=Fz
又记 x , y , z x,y,z x,y,z为 x 1 , x 2 , x 3 x_1,x_2,x_3 x1,x2,x3,上式又写为:
{ m x ¨ 1 = F ⃗ 1 = − ∂ U ∂ x 1 m x ¨ 2 = F ⃗ 2 = − ∂ U ∂ x 2 m x ¨ 3 = F ⃗ 3 = − ∂ U ∂ x 3 \left\{\begin{array}{c}m \ddot{x}_{1}=\vec{F}_{1}=-\frac{\partial U}{\partial x_{1}} \\ m \ddot{x}_{2}=\vec{F}_{2}=-\frac{\partial U}{\partial x_{2}} \\ m \ddot{x}_{3}=\vec{F}_{3}=-\frac{\partial U}{\partial x_{3}}\end{array}\right. ⎩⎪⎨⎪⎧mx¨1=F1=−∂x1∂Umx¨2=F2=−∂x2∂Umx¨3=F3=−∂x3∂U
上式合写为:
m x ¨ i = F i = − ∂ U ∂ x i ( i = 1 , 2 , 3 ) m \ddot{x}_{i}=F_{i}=-\frac{\partial U}{\partial x_{i}} \quad(i=1,2,3) mx¨i=Fi=−∂xi∂U(i=1,2,3)
2、 直角坐标系中质点的动能为
T = 1 2 m ( x ˙ 2 + y ˙ 2 + z ˙ 2 ) = 1 2 m ∑ i = 1 3 x ˙ i 2 T=\frac{1}{2} m\left(\dot{x}^{2}+\dot{y}^{2}+\dot{z}^{2}\right)=\frac{1}{2} m \sum_{i=1}^{3} \dot{x}_{i}^{2} T=21m(x˙2+y˙2+z˙2)=21mi=1∑3x˙i2
动能对 x i ˙ \dot{x_i} xi˙求偏导
∂ T ∂ x i ˙ = 1 2 m × 2 x i ˙ = m x i ˙ \frac{\partial{T}}{\partial{\dot{x_i}}}=\frac{1}{2}m \times 2 \dot{x_i}=m \dot{x_i} ∂xi˙∂T=21m×2xi˙=mxi˙
上式再对时间求微分得:
d d t ( ∂ T ∂ x i ˙ ) = m x i ¨ = F i \frac{d}{dt} \left( \frac{\partial{T}}{\partial{\dot{x_i}}} \right) = m\ddot{x_i}=F_i dtd(∂xi˙∂T)=mxi¨=Fi
由 d d t ( ∂ T ∂ x i ˙ ) = F i \frac{d}{dt}\left(\frac{\partial{T}}{\partial{\dot{x_i}}}\right)=F_i dtd(∂xi˙∂T)=Fi和 F i = − ∂ U ∂ x i F_{i}=-\frac{\partial U}{\partial x_{i}} Fi=−∂xi∂U二式相加得:
d d t ( ∂ T ∂ x ˙ i ) + ∂ U ∂ x i = 0 \frac{d}{d t}\left(\frac{\partial T}{\partial \dot{x}_{i}}\right)+\frac{\partial U}{\partial x_{i}}=0 dtd(∂x˙i∂T)+∂xi∂U=0
3、引入拉格朗日函数 L L L
L = T − U L=T-U L=T−U
动能 T T T仅是速度 x i ˙ \dot{x_i} xi˙的函数,势能 U U U仅是坐标 x i x_i xi的函数, 因此
d d t ( ∂ T ∂ x ˙ i ) = d d t ( ∂ ( T − U ) ∂ x ˙ i ) = d d t ( ∂ L ∂ x ˙ i ) \begin{array}{l}\frac{d}{d t}\left(\frac{\partial T}{\partial \dot{x}_{i}}\right)=\frac{d}{d t}\left(\frac{\partial(T-U)}{\partial \dot{x}_{i}}\right)=\frac{d}{d t}\left(\frac{\partial L}{\partial \dot{x}_{i}}\right) \end{array} dtd(∂x˙i∂T)=dtd(∂x˙i∂(T−U))=dtd(∂x˙i∂L)
∂ U ∂ x i = ∂ ( U − T ) ∂ x i = − ∂ L ∂ x i \begin{array}{l} \frac{\partial U}{\partial x_{i}}=\frac{\partial(U-T)}{\partial x_{i}}=-\frac{\partial L}{\partial x_{i}}\end{array} ∂xi∂U=∂xi∂(U−T)=−∂xi∂L
以上两式相加得:
d d t ( ∂ L ∂ x ˙ i ) − ∂ L ∂ x i = 0 \frac{d}{d t}\left(\frac{\partial L}{\partial \dot{x}_{i}}\right)-\frac{\partial L}{\partial x_{i}}=0 dtd(∂x˙i∂L)−∂xi∂L=0
此式即为用拉格朗日函数表示牛顿运动定律的拉格朗日方程。
可以证明,将 x 1 , x 2 , x 3 x_1,x_2,x_3 x1,x2,x3换成广义坐标 q 1 , q 2 , … , q s q_1,q_2,\dots,q_s q1,q2,…,qs,即可得到用广义坐标表示的具有 s s s个自由度的系统的般形式的拉格朗日方程。
d d t ( ∂ L ∂ q ˙ i ) − ∂ L ∂ q i = 0 ( i = 1 , 2 , ⋯ , s ) \frac{d}{d t}\left(\frac{\partial L}{\partial \dot{q}_{i}}\right)-\frac{\partial L}{\partial q_{i}}=0 (i=1,2,\cdots,s) dtd(∂q˙i∂L)−∂qi∂L=0(i=1,2,⋯,