Skip to content
Eric Ihli edited this page Nov 11, 2020 · 10 revisions

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.

Existing Projects in the space

Nils Bertschinger's Work

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.

Ramblings

  • 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 ?

Church

Infer.net

Infer.net is Microsoft's probabilistic programming language in F#

  • The webpage links to many good resources on the area.

Stan

New project based around Hamiltonian Monte Carlo, which has advantages in situations with correlated variables.

Bugs and JAGS

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!