• Hamiltonian Monte Carlo简介
  • Hamiltonian dynamics的物理含义
  • Simulating Hamiltonian dynamics the Leap Frog Method
    • Example 1 Simulating Hamiltonian dynamics of an harmonic oscillator
  • Hamiltonian dynamics and the target distribution
  • Hamiltonian Monte Carlo
    • Example 2 Hamiltonian Monte for sampling a Bivariate Normal distribution
  • 参考
  • 相关文章

本文作者:合肥工业大学 管理学院 钱洋 email:1563178220@qq.com 内容可能有不到之处,欢迎交流。
未经本人,允许禁止转载。

下面是本文博客的另一个地址,该网站是师兄弄得一个专门做机器学习的网站,非常不错。
http://www.datalearner.com/blog/1051484459699809

Hamiltonian Monte Carlo简介

Hamiltonian Monte Carlo也叫Hybrid Monte Carlo,是一种快速抽样方法。在MCMC算法中随机游走的方式使得Markov链收敛于固定的分布p(x) 然效率不高。Hamiltonian or Hybrid Monte Carlo (HMC)这种MCMC算法应用的是物理系统中动力学的概念来计算Markov链中的未来状态,而不是概率分布。相比于随机游走,通过这种方式,能够更加高效的分析状态空间,从而达到更快的收敛。接下来,将一步一步介绍Hamiltonian dynamics(Hamiltonian动力学)中的基础性分析及相关概念。之后,介绍Hamiltonian动力学是如何用于MCMC抽样算法中Markov链建议函数的。

Hamiltonian dynamics的物理含义

由于下面写的东西有公式,而敲公式太浪费时间,在此,把我的学习笔记,通过图片的方式,展现。如果有需要电子版的话,请发邮件。

物理学中的证明,大家也可以找一些关于Hamiltonian动力学方面的博客看看。

Simulating Hamiltonian dynamics — the Leap Frog Method

Example 1: Simulating Hamiltonian dynamics of an harmonic oscillator


以下是matlab程序:

% EXAMPLE 1: SIMULATING HAMILTONIAN DYNAMICS
%            OF HARMONIC OSCILLATOR
% STEP SIZE
delta = 0.1;% # LEAP FROG
L = 70;% DEFINE KINETIC ENERGY FUNCTION
K = inline('p^2/2','p');% DEFINE POTENTIAL ENERGY FUNCTION FOR SPRING (K =1)
U = inline('1/2*x^2','x');% DEFINE GRADIENT OF POTENTIAL ENERGY
dU = inline('x','x');% INITIAL CONDITIONS
x0 = -4; % POSTIION
p0 = 1;  % MOMENTUM
figure%% SIMULATE HAMILTONIAN DYNAMICS WITH LEAPFROG METHOD
% FIRST HALF STEP FOR MOMENTUM
pStep = p0 - delta/2*dU(x0)';% FIRST FULL STEP FOR POSITION/SAMPLE
xStep = x0 + delta*pStep;% FULL STEPS
for jL = 1:L-1% UPDATE MOMENTUMpStep = pStep - delta*dU(xStep);% UPDATE POSITIONxStep = xStep + delta*pStep;% UPDATE DISPLAYSsubplot(211), clahold on;xx = linspace(-6,xStep,1000);plot(xx,sin(6*linspace(0,2*pi,1000)),'k-');plot(xStep+.5,0,'bo','Linewidth',20)xlim([-6 6]);ylim([-1 1])hold off;title('Harmonic Oscillator')subplot(223), clab = bar([U(xStep),K(pStep);0,U(xStep)+K(pStep)],'stacked');set(gca,'xTickLabel',{'U+K','H'})ylim([0 10]);title('Energy')subplot(224);plot(xStep,pStep,'ko','Linewidth',20);xlim([-6 6]); ylim([-6 6]); axis squarexlabel('x'); ylabel('p');title('Phase Space')pause(.1)
end
% (LAST HALF STEP FOR MOMENTUM)
pStep = pStep - delta/2*dU(xStep);

Hamiltonian dynamics and the target distribution


Hamiltonian Monte Carlo

或者更详细的伪代码:

Example 2: Hamiltonian Monte for sampling a Bivariate Normal distribution


HMC的matlab代码为:

% EXAMPLE 2: HYBRID MONTE CARLO SAMPLING -- BIVARIATE NORMAL
rand('seed',12345);
randn('seed',12345);% STEP SIZE
delta = 0.3;
nSamples = 1000;
L = 20;% DEFINE POTENTIAL ENERGY FUNCTION
U = inline('transp(x)*inv([1,.8;.8,1])*x','x');% DEFINE GRADIENT OF POTENTIAL ENERGY
dU = inline('transp(x)*inv([1,.8;.8,1])','x');% DEFINE KINETIC ENERGY FUNCTION
K = inline('sum((transp(p)*p))/2','p');% INITIAL STATE
x = zeros(2,nSamples);
x0 = [0;6];
x(:,1) = x0;t = 1;
while t < nSamplest = t + 1;% SAMPLE RANDOM MOMENTUMp0 = randn(2,1);%% SIMULATE HAMILTONIAN DYNAMICS% FIRST 1/2 STEP OF MOMENTUMpStar = p0 - delta/2*dU(x(:,t-1))';% FIRST FULL STEP FOR POSITION/SAMPLExStar = x(:,t-1) + delta*pStar;% FULL STEPSfor jL = 1:L-1% MOMENTUMpStar = pStar - delta*dU(xStar)';% POSITION/SAMPLExStar = xStar + delta*pStar;end% LAST HALP STEPpStar = pStar - delta/2*dU(xStar)';% COULD NEGATE MOMENTUM HERE TO LEAVE% THE PROPOSAL DISTRIBUTION SYMMETRIC.% HOWEVER WE THROW THIS AWAY FOR NEXT% SAMPLE, SO IT DOESN'T MATTER% EVALUATE ENERGIES AT% START AND END OF TRAJECTORYU0 = U(x(:,t-1));UStar = U(xStar);K0 = K(p0);KStar = K(pStar);% ACCEPTANCE/REJECTION CRITERIONalpha = min(1,exp((U0 + K0) - (UStar + KStar)));u = rand;if u < alphax(:,t) = xStar;elsex(:,t) = x(:,t-1);end
end% DISPLAY
figure
scatter(x(1,:),x(2,:),'k.'); hold on;
plot(x(1,1:50),x(2,1:50),'ro-','Linewidth',2);
xlim([-6 6]); ylim([-6 6]);
legend({'Samples','1st 50 States'},'Location','Northwest')
title('Hamiltonian Monte Carlo')

参考

(1)

MCMC: Hamiltonian Monte Carlo (a.k.a. Hybrid Monte Carlo)
(2)
Niederreiter H. Quasi‐Monte Carlo Methods[M]. John Wiley & Sons, Ltd, 2010.

相关文章

Chen T, Fox E B, Guestrin C. Stochastic Gradient Hamiltonian Monte Carlo[C]//ICML. 2014: 1683-1691.

Neal R M. MCMC using Hamiltonian dynamics[J]. Handbook of Markov Chain Monte Carlo, 2011, 2: 113-162.

Shahbaba B, Lan S, Johnson W O, et al. Split hamiltonian monte carlo[J]. Statistics and Computing, 2014, 24(3): 339-349.

HMC(Hamiltonian Monte Carlo抽样算法详细介绍)相关推荐

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

    Hamiltonian Monte Carlo抽样算法的初步理解 接受拒绝采样算法 MCMC回顾 Hamiltonian dynamics 拉格朗日方程 从牛顿方程出发推导拉格朗日方程 勒让德变换 哈 ...

  2. Langevin dynamic 和 Hamiltonian Monte Carlo

    开这个坑慢慢写吧- Langevin dynamic 和 Hamiltonian Monte Carlo 众所周知,sampling在Bayeisan中十分重要.比较高级的方法之一就是基于随机微分方程 ...

  3. Stochastic Gradient Hamiltonian Monte Carlo论文笔记

    Abstract 哈密​​尔顿蒙特卡罗(HMC)抽样方法提供了一种机制,用于在Metropolis-Hastings框架中定义具有高接受概率的远程建议,从而比标准随机游走建议更有效地探索状态空间.近年 ...

  4. 论文笔记 Stochastic Gradient Hamiltonian Monte Carlo (SGHMC)

    随机梯度哈密顿量蒙特卡罗 0.摘要 Hamiltonian Monte Carlo (HMC) 采样方法提供了一种机制,用于在 Metropolis-Hastings 框架中定义具有高接受概率的远距离 ...

  5. 如何自己去写一个鼠标驱动_为什么要用哈密顿采样器(Hamiltonian Monte Carlo),以及如何自己写一个...

    背景介绍:(了解采样的可以跳过) 1)为什么需要采样: 简单的分布,比如高斯.exponential.gamma等等的样本都可以直接用numpy.random生成,但复杂的分布需要采样器生成.在贝叶斯 ...

  6. 哈密尔顿蒙特卡洛(Hamiltonian Monte Carlo)

    哈密尔顿蒙特卡洛(Hamiltonian Monte Carlo) Metropolis-Hastings 采样方法的一个问题是它会展现出随机漫步式的行为,而随机漫步对参数空间的探索效率并不高--平均 ...

  7. 红黑树(一)之 原理和算法详细介绍---转帖

    目录 1 红黑树的介绍 2 红黑树的应用 3 红黑树的时间复杂度和相关证明 4 红黑树的基本操作(一) 左旋和右旋 5 红黑树的基本操作(二) 添加 6 红黑树的基本操作(三) 删除 作者:Sky W ...

  8. 红黑树(一)之 原理和算法详细介绍

    出处:http://www.cnblogs.com/skywang12345/p/3245399.html 概要 目录 1 红黑树的介绍 2 红黑树的应用 3 红黑树的时间复杂度和相关证明 4 红黑树 ...

  9. 红黑树 —— 原理和算法详细介绍

    红黑树 -- 原理和算法详细介绍 R-B Tree简介 R-B Tree,全称是Red-Black Tree,又称为"红黑树",它一种特殊的二叉查找树.红黑树的每个节点上都有存储位 ...

最新文章

  1. 通过事件同步两个窗体之间的数据
  2. 读书印记 - 《技术元素》
  3. 郑卅航院计算机与科学是一本吗,郑州航空工业管理学院计算机科学与应用系
  4. metasploit命令大全
  5. 90后IT男被准丈母娘拒绝:家境不重要,重要的是…戳中痛处
  6. jquery radio,select相关操作
  7. 我的IC之旅——资深芯片设计验证工程师成长——“胡”说IC工程师完美进阶
  8. java实验指导书 王立新,java实验指导书
  9. 计算机指令窗口如何放大,我电脑每次打开一个窗口都好小,怎么设置为每次都全屏啊?...
  10. 【IDE】Intellij IDEA启动正常,但是任务栏不显示图标
  11. 面试之springboot是什么?
  12. commonAncestor
  13. 计算机基础长文档的排版,“WORD长文档排版技术
  14. 真无线蓝牙耳机性价比高?真无线蓝牙耳机性价比排行
  15. 系统架构中概念总结二
  16. Windows10如何设置定时开机
  17. 一对数的和等于给定的数
  18. C++实现基于区块链的物流信息存储系统
  19. 2017云栖大会参会感想
  20. jemter在linux上怎么安装_jmeter 在linux服务器的安装和运行教程图解

热门文章

  1. 当async/await遇上forEach
  2. Spring5 新特性
  3. Hystrix面试 - 基于 timeout 机制为服务接口调用超时提供安全保护
  4. Linux——更改文件及目录权限(d rwx r-x r-x字段详解+更改代码指令)
  5. git cherry-pick 复制其他分支内容到当前分支
  6. 【C语言】创建一个函数,利用该函数将两个字符串连接起来
  7. javascript指南_JavaScript的完整指南
  8. css一行点点点_如何通过一点点创意使CSS成为不可能
  9. pymongo操作方法
  10. 非常实用的Python库