Paul Horsfall - Bio


I've worked as a freelance/contract computer programmer since 2008. I initially worked on web development projects, but later switched to doing work on probabilistic programming. On recent projects I've primarily worked with Python, and have experience with a range of libraries used for numerical computing including NumPy, JAX and PyTorch. I also have varying degrees of experience with several other languages, including JavaScript, Haskell, Julia, and C.

Recent Experience

Error Correction

In 2023 I was contracted to work on an error correction research project. My main contribution was a Python/JAX implementation of a Neural Belief-Propagation based decoder. I also worked on testing, documenting and refactoring existing code within the project.

Probabilistic Programming

For several years I worked on probabilistic programming, a field at the intersection of probability theory, programming languages, and machine learning.

From 2015 to 2018 I worked for Stanford University on the WebPPL project.

The single biggest strand of work I contributed to was a research project that aimed to bring together ideas from probabilistic programming and deep neural networks. This is described in Deep Amortized Inference for Probabilistic Programs.

Along side this, I also did all the usual kinds of work required on a typical software project: fix bugs, refactor, write documentation, write tests, field issues, etc.

During 2018 and 2019 I worked for Uber AI, where the amortized inference work from WebPPL was being refined and extended by the Pyro project. This is described in Pyro: Deep Universal Probabilistic Programming.

I contributed an implementation of DeepMind's Attend, Infer, Repeat model to the project and wrote a tutorial that describes how it works.

I also developed BRMP, a tool that aimed to make it easy to fit Bayesian regression models using Pyro.

The Web

I have experience with HTML, CSS, Javascript, HTTP, DOM, etc. It's been a while since I last did any commercial web development, but I do occasionally use web technologies to create cross-platform GUIs.

For example, I built a data annotation tool as part of a machine learning pipeline, and I developed the infrastructure used to run a series of adaptive psychology experiments on Mechanical Turk. (See section 6.3 and appendix D2 of this paper for more details.)