Fast and Correct Gradient-Based Optimisation for Probabilistic Programming via Smoothing

Basim Khajwal, C. -H. Luke Ong, Dominik Wagner
1/9/2023
cs.PLcs.LG

No confident code implementation found for this paper.

Abstract

We study the foundations of variational inference, which frames posterior inference as an optimisation problem, for probabilistic programming. The dominant approach for optimisation in practice is stochastic gradient descent. In particular, a variant using the so-called reparameterisation gradient estimator exhibits fast convergence in a traditional statistics setting. Unfortunately, discontinuities, which are readily expressible in programming languages, can compromise the correctness of this approach. We consider a simple (higher-order, probabilistic) programming language with conditionals, and we endow our language with both a measurable and a smoothed (approximate) value semantics. We present type systems which establish technical pre-conditions. Thus we can prove stochastic gradient descent with the reparameterisation gradient estimator to be correct when applied to the smoothed problem. Besides, we can solve the original problem up to any error tolerance by choosing an accuracy coefficient suitably. Empirically we demonstrate that our approach has a similar convergence as a key competitor, but is simpler, faster, and attains orders of magnitude reduction in work-normalised variance.

View on arXivView PDF

Code Implementations

No confident code match yet

We couldn't find an author-owned or strongly-evidenced community implementation for this paper. Any repos shown below are weak matches — verify before relying on them.

No code implementations found yet.

Know of an implementation? Let us know in the comments below!

Similar Papers

Cite this paper

@article{khajwal2023fast,
  title  = {Fast and Correct Gradient-Based Optimisation for Probabilistic Programming via Smoothing},
  author = {Basim Khajwal and C. -H. Luke Ong and Dominik Wagner},
  year   = {2023},
  eprint = {2301.03415},
  archivePrefix = {arXiv},
  url    = {http://arxiv.org/abs/2301.03415v1}
}

Add a badge to your README

Shows whether official code is linked for this paper.

Code of Paper badge
[![Code of Paper](https://codeofpaper.com/badge/2301.03415.svg)](https://codeofpaper.com/paper/2301.03415)

Discussion