Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/Sohl-Dickstein/LAHMC
Look Ahead Hamiltonian Monte Carlo
https://github.com/Sohl-Dickstein/LAHMC
Last synced: 14 days ago
JSON representation
Look Ahead Hamiltonian Monte Carlo
- Host: GitHub
- URL: https://github.com/Sohl-Dickstein/LAHMC
- Owner: Sohl-Dickstein
- Created: 2014-01-09T02:14:12.000Z (almost 11 years ago)
- Default Branch: master
- Last Pushed: 2015-03-29T04:35:12.000Z (over 9 years ago)
- Last Synced: 2024-08-01T16:49:04.225Z (3 months ago)
- Language: Matlab
- Size: 232 KB
- Stars: 30
- Watchers: 5
- Forks: 12
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
Look Ahead Hamiltonian Monte Carlo
==================================Implements Look Ahead Hamiltonian Monte Carlo (LAHMC) and standard Hamiltonian Monte Carlo (HMC) in both Python and MATLAB.
LAHMC is described in the paper:
> Sohl-Dickstein, Jascha and Mudigonda, Mayur and DeWeese, Michael R.
> Hamiltonian Monte Carlo Without Detailed Balance.
> International Conference on Machine Learning. 2014
> http://arxiv.org/abs/1409.5191## Example Python Code
The following code draws samples from an isotropic Gaussian distribution using LAHMC.
```python
from LAHMC import LAHMC
import numpy as np# Define the energy function and gradient
def E(X, sigma=1.):
""" Energy function for isotropic Gaussian """
return np.sum(X**2, axis=0).reshape((1,-1))/2./sigma**2
def dEdX(X, sigma=1.):
""" Energy function gradient for isotropic Gaussian """
return X/sigma**2# Initialize the sample locations -- 2 dimensions, 100 particles
Xinit = np.random.randn(2,100)# initialize the sampler.
sampler = LAHMC(Xinit, E, dEdX, epsilon=0.1, beta=0.1, kwargs={'sigma':0.1})
# perform 10 sampling steps for all 100 particles
X = sampler.sample(num_steps = 10)
# perform another 10 sampling steps
X = sampler.sample(num_steps = 10)
```More detailed documentation, and additional options, can be found in **python/LAHMC.py**
## Example MATLAB Code
The following code draws samples from an isotropic Gaussian distribution using LAHMC.
```MATLAB
% opts holds all parameters which will be passed to the sampler
opts = [];
opts.epsilon = 0.1;
opts.beta = 0.1;
% number of sampling steps
opts.T = 10;
% energy function and gradient
opts.E = @E_gauss;
opts.dEdX = @dEdX_gauss;% state will hold the particle positions and velocities between
% sampler calls, as well as counters for the number of transitions
% and function evaluations
state = []% Initialize sample locations -- 2 dimensions, 100 particles
opts.Xinit = randn(2,100);
% Gaussian coupling matrix expected by E_gauss and dEdX_gauss
J = eye(2)*100;% perform 10 sampling steps for all 100 particles
[X, state] = LAHMC(opts, state, J);
% perform another 10 sampling steps
[X, state] = LAHMC(opts, state, J);
```More detailed documentation, and additional options, can be found in **matlab/LAHMC.m**.
## Reproduce Figure from the Paper
Code reproducing Figure 2 and Table 1 of the paper, and demonstrating usage of the sampler, can be found in **python/generate_figure_2.py** and **matlab/generate_figure_2.m**. The exact plots appearing in the paper were generated using the MATLAB version of the code.