-
Notifications
You must be signed in to change notification settings - Fork 123
CLP(Prob)
We should look at HANSEI, Church, Prism, ProbLog, CLP(BN) and all of the other interesting approaches to probabilistic logic programming.
Markov Chain Monte Carlo & Gibbs Sampling seem to be the hot topic these days. It's interesting that some promising work has been done executing this stuff on GPUs.
Nils has already written a really neat probabilistic embedding in Clojure
- The repo is on GitHub
- A paper describing the work
- This is based on the bher compiler for Church using the approach described here. There's also a video
The approach is to create a program where each stochastic element (choice point), and its dependent stochastic elements are annotated. The whole program is considered as generating a single sample in a MH algorithm. Proposals are generated by selecting a choice point, making a local proposal to its RV, and computing the downstream changes, which is then accepted/rejected in the MH framework.
- The MH proposals are generated locally. Can this be improved ? Can HMC be applied ?
- A possible improvement is that currently the coder must manually tag all the choice-point dependencies. Perhaps if the computation is specified using a structure like Flow or Graph this could be avoided ?
Infer.net is Microsoft's probabilistic programming language in F#
- The webpage links to many good resources on the area.
New project based around Hamiltonian Monte Carlo, which has advantages in situations with correlated variables.
- The Stan project
- The Reference Manual
- The code repo
A probabilistic programming language, based on Gibbs Sampling, that has been in use for a long time is BUGS. A more recent implementation is JAGS, which largely supercedes BUGS. The beauty of these are that you can actually get them up and running in R without much effort.
- The rjags R package lets you quickly do some probabilistic programming. In particular, you can actually run the examples in the blog post below.
- A good blog post on the sort of model BUGS/JAGS can represent.
- The jags repo
- The jags user manual is easy to miss!