Hamiltonian Monte Carlo抽样算法的初步理解

本文深入探讨了Hamiltonian Monte Carlo (HMC) 抽样算法,介绍了其背后的力学原理,包括拉格朗日方程、哈密顿方程、哈密顿动力学的性质以及离散化方法leapfrog。HMC利用动量变量来提高MCMC算法的效率,避免了随机游走行为,适用于复杂的概率分布采样。文章还详细阐述了HMC的接受率、遍历性以及算法流程,并给出了相关参考资料。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

吐血学习
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((z0.3)2)+0.7exp((z2)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(xx)
p ( x ′ ∣ x ) = q ( x ′ ∣ x ) α ( x , x ′ ) p(x'|x)=q(x'|x) \alpha (x,x') p(xx)=q(xx)α(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(xx)π(x)q(xx)}

且满足细致平衡条件:
π ( x ) p ( x ′ ∣ x ) = π ( x ′ ) p ( x ∣ x ′ ) \pi(x)p(x'|x)= \pi(x')p(x|x') π(x)p(xx)=π(x)p(xx)


我们可以自由的设计MH算法的转移核(transition kernel),对其进行的不同变化形成了不同的MCMC算法。从这个角度看,后来发展的HMC,slice sampling,Langevin Monte Carlo等等实际上都可以看作是MH的一种。很自然我们会思考有什么指导思想去自由设计转移核?

在实际应用MCMC过程中,可能会遇到下面的问题,比如:

  1. MH的转移核(transition kernel)非常可能会造成随机游走(random walk behavior),使得状态在状态空间中进行小范围的探索而不能走出去,以至于退化成单纯的随机游走建议点,这样会造成有效采样个数(ESS)较小,抽样效率过低,还有就是当目标函数是多峰(multi-modal)的时候不能很好的找到所有的模式。

  2. 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=xUi yUj zUk
由牛顿第二定律,质点的运动方程为: 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=F 1=x1Umx¨2=F 2=x2Umx¨3=F 3=x3U
上式合写为:
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=xiU(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=13x˙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=xiU二式相加得:
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˙iT)+xiU=0
3、引入拉格朗日函数 L L L
L = T − U L=T-U L=TU

动能 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˙iT)=dtd(x˙i(TU))=dtd(x˙iL)
∂ 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} xiU=xi(UT)=xiL
以上两式相加得:
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˙iL)xiL=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˙iL)qiL=0(i=1,2,,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值