News

infergo v0.6.1

Infergo v0.6.1 is out. What’s new: I moved many things around, some in a backward-incompatible way, but should only affect a minority of users. As a side-effect of using Infergo for a rather involved model, I fixed two bugs in the automatic differentiation transformation. The bugs manifested in edge cases I didn’t even think they exist. The accompanying repository infergo-studies now contains a new case study — a rewrite of Stan’s LDA example.

infergo v0.5.0

infergo v0.5.0 is out. What’s new: Multithreading support. Differentiation can be performed concurrently in multiple goroutines without locking of calls to Observe or Gradient, and with little contention. Examples and case studies performing inference in parallel, both using Infergo’s own inference algorithms, or through integration in Gonum.

The Tale of GoIDs

2.16 And the LORD God commanded the man, saying: ‘Of every tree of the garden thou mayest freely eat; 2.17 but of the tree of the knowledge of good and evil, thou shalt not eat of it; for in the day that thou eatest thereof thou shalt surely die.’ The Book of Genesis Go gives the programmer introspection into every aspect of the language, and of a running program.

infergo v0.3.0

infergo v0.3.0 is out. What’s new: Only methods returning float64 or nothing are differentiated. This allows to define helper methods on the model, such as returning the number of parameters, and call the methods outside of differentiated context. infergo models can be optimized using Gonum optimization algorithms. This includes BFGS and variants. Case study lr-gonum applies L-BFGS to linear regression. Case studies have been extended. New studies include: linear regression, solved using either stochastic gradient descent and BFGS; compilation of infergo models and inference into WebAssembly and running in the browser; integration with Gonum; Neal’s funnel, a re-parameterization example borrowed from Stan documentation.

infergo v0.2.2

infergo v0.2.2 is out. What’s new: Constant folding. Automatic import of packages required for short variable declarations (see issue #10).

Why infergo

I share here my experiences from integrating probabilistic programming into a server-side software system and implementing a probabilistic programming facility for Go, a modern programming language of choice for server-side software development. Server-side application of probabilistic programming poses challenges for a probabilistic programming system. I discuss the challenges and my experience in overcoming them, and suggest guidelines that can help in a wider adoption of probabilistic programming in server-side software systems.