A fast and furious domain-specific language for variational inference in Julia.
32 Stars
Updated Last
1 Year Ago
Started In
December 2015

VinDsl.jl: Fast and furious variational inference

Documentation Status Build Status Coverage Status


VinDsl.jl is a work in progress. Not quite alpha, but watch this space!


While updating of Distributions.jl for automatic differentiation is in progress, this package will rely on the current master of that package. Use Pkg.checkout("Distributions") to be sure you have the latest updates.


For contributors: documentation of design, internals, and todos, see here

See also this presentation

A Variational Inference Domain-Specific Language

Variational inference is an approximate method of statistical inference based on optimization. Unlike conventional Bayesian methods based on Markov Chain Monte Carlo (MCMC), it scales well to large and streaming datasets, making it a competitive technique for machine learning applications.

However, coding variational inference models by hand traditionally involves lots of tedious algebra and careful index accounting. New techniques like black-box variational inference and local expectation gradients allow much of this to be avoided, and implementations for some models are already possible in Stan, but no current framework allows these rapidly developing techniques to be mixed and matched by researchers.

The goal of VinDsl.jl is to provide a set of data abstractions and macros that take the pain out of coding variational inference models. In particular, because the syntactic sugar for defining models is implemented in the same language as the underlying building blocks, the entire framework is easily extensible and hackable.

Things we have:

  • Intelligent index handling: you define the model structure, VinDsl handles the sum over indices automatically
  • A set of macros for coding conjugate models and updates
  • Limited support for automatic expectation-taking
  • built-in support for Hidden Markov Models
  • preliminary support for ADVI

On our hit list:

  • Automatic differentiation (it's coming)
  • support for state-space models
  • variational deep networks/autoencoders
  • GPU support