Example: Hamiltonian Monte Carlo
Click on an algorithm below to view an interactive demo where you can change algorithm parameters on-the-fly:
- Random Walk Metropolis Hastings
- Adaptive Metropolis Hastings [1]
- Hamiltonian Monte Carlo [2]
- No-U-Turn Sampler [2]
- Metropolis-adjusted Langevin Algorithm (MALA) [3]
- Hessian-Hamiltonian Monte Carlo (H2MC) [4]
- Gibbs Sampling
[1] H. Haario, E. Saksman, and J. Tamminen, An adaptive Metropolis algorithm (2001)
[2] M. D. Hoffman, A. Gelman, The No-U-Turn Sampler: Adaptively Setting Path Lengths in Hamiltonian Monte Carlo (2011)
[3] G. O. Roberts, R. L. Tweedie, Exponential Convergence of Langevin Distributions and Their Discrete Approximations (1996)
[4] Li, Tzu-Mao, et al. Anisotropic Gaussian mutations for metropolis light transport through Hessian-Hamiltonian dynamics ACM Transactions on Graphics 34.6 (2015): 209.
[5] Q. Liu, et al. Stein Variational Gradient Descent: A General Purpose Bayesian Inference Algorithm Advances in Neural Information Processing Systems. 2016.
[6] J. Buchner A statistical test for Nested Sampling algorithms Statistics and Computing. 2014.
Clone or download the repository and open index.html
in your web browser. All dependencies are included in in lib/
.
- Copy one of the existing algorithms in the
algorithms
directory (a good starting point isalgorithms/HamiltonianMC.js
). - in
app.html
include the your algorithm's javascript file at the bottom of the page. This will add your algorithm to the dropdown menu. - Add any new visualizations to the
Visualizer.prototype.dequeue
function defined inmain/Visualizer.js
. The MCMC simulation adds visualization "events" onto an animation queue. Most common events such as accepting or rejecting a proposal have already been implemented. The renderer composites the contents of three offscreen canvases (densityCanvas, samplesCanvas, and overlayCanvas) - Add a link to your algorithm in
README.md
andindex.html
- There is a lightweight linear algebra library in
lib/linalg.core.js
- It works by "overloading" the built-in Float64Array type by adding the
rows
andcols
properties and adds many useful linear algebra methods to the object prototype.