You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求Hamiltonian Monte Carlo傻瓜式分步工作原理详细解释

Hamiltonian Monte Carlo 傻瓜式分步拆解

咱先把晦涩的术语全扔一边,用「找山谷里的宝藏」来类比,一步步搞懂HMC到底在干啥——毕竟HMC的本质,就是帮我们在概率分布这个「地形」里,高效找到那些概率最高的区域(就像山谷最深处的宝藏)。


第一步:把概率分布变成「能量地形」

首先,我们有个目标概率分布P(x)(比如我们要采样的模型后验分布),先把它转换成能量函数:U(x) = -ln(P(x))。
这一步相当于把概率地图换成了地形:

  • 概率越高的地方(我们需要的样本)= 地形里的山谷(能量U(x)越低)
  • 概率越低的地方 = 地形里的山峰(能量越高)
    HMC的任务就是在这个地形里逛,尽量多待在山谷,少爬没用的山峰。

第二步:给采样点加个「动量」

普通采样方法(比如Metropolis-Hastings)就像盲人在地形里瞎摸,走一步算一步,很容易陷在小土坑里出不来。HMC不一样,它给当前的位置x(也就是我们手里的样本)配一个随机动量p——就像给你一个随机的初始速度,你带着这个速度在地形里跑。
这个动量是从正态分布里抽的:p ~ N(0, M),这里的M可以理解成你的「体重」,体重越大,惯性越强,跑起来越不容易被坡度影响。

第三步:算一下当前的「总能量」

现在我们有了位置x和动量p,总能量用哈密顿量表示:H(x,p) = U(x) + K(p)。

  • U(x)是势能(就是刚才的地形能量,位置越高势能越大)
  • K(p)是动能,公式是K(p) = p²/(2M),和物理里的动能公式一模一样——动量越大、体重越小,动能越高。
    在理想的无摩擦环境里,总能量是守恒的:你跑的时候不会凭空获得或失去能量,只会在同一个能量水平的等高线上移动,不会随便爬到高能量的山峰(对应概率极低的区域)。

第四步:用「跳步法」在地形里跑一段

这是HMC最核心的一步!我们用Leapfrog跳步法来模拟你在地形里的运动,更新位置和动量:

  1. 先给动量「加个力」:p = p - (ε/2) * ∇U(x)
    这里ε是你每一步的步长,∇U(x)是势能的梯度(也就是地形的坡度)——下坡时坡度向下,你会加速;上坡时坡度向上,你会减速。这一步相当于先调整速度,再开始移动。
  2. 用更新后的动量移动位置:x = x + ε * (p/M)
    顺着动量的方向走一步,步长由你的动量和体重决定——动量越大、体重越小,走得越远。
  3. 再给动量加一次力:p = p - (ε/2) * ∇U(x)
    这一步是为了让整个运动更准确,保证总能量近似守恒,避免因为步长问题导致能量漂移。
    把上面三步重复N次(N是预设的步数),你就会跑到一个新的位置x',同时有了新的动量p'。

第五步:决定要不要留下这个新位置

跑完一段后,我们有了新状态(x', p')和旧状态(x,p),现在用Metropolis准则判断要不要把x'作为新样本:
计算接受概率:α = min(1, exp(H(x,p) - H(x',p')))

  • 如果新的总能量H(x',p')比旧的H(x,p)低(也就是新位置概率更高),α=1,100%接受这个新位置;
  • 如果新能量更高(跑到了山坡上),就按α的概率决定要不要接受——偶尔爬爬山,能避免我们一直陷在同一个小山谷里,错过更大的宝藏。
    注意:不管接不接受,跑完后我们都会丢弃当前的动量,下次采样重新抽新的动量,所以不用管动量的方向,只关心位置x'就行。

第六步:循环往复,收集样本

把上面的步骤重复成千上万次:
每次从当前样本x出发 → 抽随机动量p → 用Leapfrog跑一段得到x' → 用Metropolis判断是否接受 → 接受就把x'作为下一个样本,不接受就继续用x。
最后收集到的这一串样本,就是来自目标概率分布P(x)的有效样本啦!


为啥HMC比普通采样方法好用?

普通MH就像瞎逛,要么步长太小走得慢,半天出不了小区域;要么步长太大,一下子跳到山峰上被拒绝。HMC因为用了动量和物理运动,能沿着等概率的等高线移动,一下子就能跨越大片区域,而且总能量近似守恒,被拒绝的概率极低,采样效率高太多了!

内容的提问来源于stack exchange,提问作者user188529

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:16:47