Abstract
This document is designed to be a first-year graduate-level introduction to
probabilistic programming. It not only provides a thorough background for
anyone wishing to use a probabilistic programming system, but also introduces
the techniques needed to design and build these systems. It is aimed at people
who have an undergraduate-level understanding of either or, ideally, both
probabilistic machine learning and programming languages.
We start with a discussion of model-based reasoning and explain why
conditioning as a foundational computation is central to the fields of
probabilistic machine learning and artificial intelligence. We then introduce a
simple first-order probabilistic programming language (PPL) whose programs
define static-computation-graph, finite-variable-cardinality models. In the
context of this restricted PPL we introduce fundamental inference algorithms
and describe how they can be implemented in the context of models denoted by
probabilistic programs.
In the second part of this document, we introduce a higher-order
probabilistic programming language, with a functionality analogous to that of
established programming languages. This affords the opportunity to define
models with dynamic computation graphs, at the cost of requiring inference
methods that generate samples by repeatedly executing the program. Foundational
inference algorithms for this kind of probabilistic programming language are
explained in the context of an interface between program executions and an
inference controller.
This document closes with a chapter on advanced topics which we believe to
be, at the time of writing, interesting directions for probabilistic
programming research; directions that point towards a tight integration with
deep neural network research and the development of systems for next-generation
artificial intelligence applications.
Users
Please
log in to take part in the discussion (add own reviews or comments).