Design and Implementation of Probabilistic Programming Language Anglican
By David Tolpin, Jan-Willem van de Meent, Hongseok Yang, Frank D. Wood. 2016
117 citations recorded by the source corpus.
Anglican is a probabilistic programming system designed to interoperate with Clojure and other JVM languages. We introduce the programming language Anglican, outline our design choices, and discuss in depth the implementation of the Anglican language and runtime, including macro-based compilation, extended CPS-based evaluation model, and functional representations for probabilistic paradigms, such as a distribution, a random process, and an inference algorithm. We show that a probabilistic functional language can be implemented efficiently and integrated tightly with a conventional functional language with only moderate computational overhead. We also demonstrate how advanced probabilistic modelling concepts are mapped naturally to the functional foundation.
Subfields: Artificial Intelligence, Computer Networks and Communications, Probabilistic & Bayesian Methods, Signal Processing
How researchers see this paper
The researchers whose trusted networks rank it highest, strongest advocate first. Every researcher gets a different order.
In Artificial Intelligence
- Frank D. Wood
- Hongseok Yang
- Yura N. Perov
- Brooks Paige
- Stephan Mandt
- Quoc V. Le
- Yoshua Bengio
- Jan-Willem van de Meent
In Computer Networks and Communications
- Tom Rainforth
- Frank D. Wood
- Jan-Willem van de Meent
- Hongseok Yang
- Yura N. Perov
- Brooks Paige
- Daniel Lundén
- Jascha Narain Sohl-Dickstein
In Probabilistic & Bayesian Methods
- Frank D. Wood
- Hongseok Yang
- Yura N. Perov
- Brooks Paige
- Jan-Willem van de Meent
- Tom Rainforth
- Stephan Mandt
- Dustin Tran
In Signal Processing
- Tom Rainforth
- Matthew D. Hoffman
- Frank D. Wood
- Hongseok Yang
- Brooks Paige
- Daniel Lundén
- Jascha Narain Sohl-Dickstein
- Raphael Gontijo Lopes
Citations in the corpus
- Language Model Cascades (2022, background): “Previous work in particle based inference for probabilistic programs provides some hope in this direction (Tolpin et al., 2016).”
- Foundation Posteriors for Approximate Probabilistic Inference (2022, neutral): “Many probabilistic programming languages (PPLs) have been developed [27, 45, 28, 44, 18, 58, 47, 53, 59, 12, 23, 17, 7, 57] each with inference approaches with strengths and weaknesses.”
- Pyro: Deep Universal Probabilistic Programming (2018, background): “Anglican (Tolpin et al. (2016)) and webPPL (Goodman and Stuhlm¨uller (2014)) are lightweight successors to Church, embedded as syntactic subsets (Wingate et al. (2011)) in the general-purpose programming languages Clojure and JavaScript.”
- An Introduction to Probabilistic Programming (2018, methodology): “The implementation in Anglican makes use of this optimization (Tolpin et al., 2016).”
- MultiVerse: Causal Reasoning using Importance Sampling in Probabilistic Programming (2019, background): “Also, similar ideas can be implemented in existing probabilistic programming languages like Pyro, Anglican (Wood et al., 2014; Tolpin et al., 2015, 2016), Venture, Church (Goodman et al., 2012) language engines, Gen (Cusumano-Towner and Mansinghka, 2018), and others (Probabilistic Programming Wiki…”
- Compiling Stan to generative probabilistic languages and extension to deep probabilistic programming (2021, methodology): “This section shows how to compile Stan [7], which specifies a joint probability distribution, to a generative PPL like Church, Anglican, or Pyro.”
- Advances in Variational Inference (2017, methodology): “Net [126], which is based on variational message passing and EP, Automatic Statistician [52] and Anglican [198], which mainly rely on sampling methods, Edward [200], which supports BBVI as well as Monte Carlo sampling, and Zhusuan [176], which features VI for Bayesian Deep learning.”
- Nesting Probabilistic Programs (2018, result): “At times, we will Anglican [28, 29] syntax as a basis for discussion, an introduction for which is provided in Appendix A, noting that our results apply more generally.”
- Simple, Distributed, and Accelerated Probabilistic Programming (2018, methodology): “To enable flexible training, we apply tracing, a classic technique used across probabilistic programming [e.g., 28, 45, 36, 11, 7] as well as automatic differentiation [e.g., 27].”
- Delayed Sampling and Automatic Rao-Blackwellization of Probabilistic Programs (2017, methodology): “Anglican is a functional probabilistic programming language integrated with Clojure.”