infergo v0.2.1
infergo v0.2.1 is out.
What’s new:
infergo is a probabilistic
programming facility for the Go language.
infergo allows to write probabilistic models in almost
unrestricted Go and relies on automatic
differentiation
for optimization and inference. Works anywhere where Go does.
Hosted on Bitbucket.
Licensed under the MIT license.
Learning parameters of the Normal distribution from observations:
type Model struct {
Data []float64
}
// x[0] is the mean, x[1] is the log stddev of the distribution
func (m *Model) Observe(x []float64) float64 {
// Our prior is a unit normal ...
ll := Normal.Logps(0, 1, x...)
// ... but the posterior is based on data observations.
ll += Normal.Logps(x[0], math.Exp(x[1]), m.Data...)
return ll
}// Data
m := &Model{[]float64{
-0.854, 1.067, -1.220, 0.818, -0.749,
0.805, 1.443, 1.069, 1.426, 0.308}}
// Parameters
mean, logs := 0, 0
x := []float64{mean, logs}
// Optimization
opt := &infer.Momentum{
Rate: 0.01,
Decay: 0.998,
}
for iter := 0; iter != 1000; iter++ {
opt.Step(m, x)
}
mean, logs = x[0], x[1]
// Posterior
hmc := &infer.HMC{
Eps: 0.1,
}
samples := make(chan []float64)
hmc.Sample(m, x, samples)
for i := 0; i != 1000; i++ {
x = <-samples
}
hmc.Stop()I owe a debt of gratitude to Frank
Wood who introduced me to
probabilistic programming and inspired me to pursue
probabilistic programming paradigms and applications. I also
want to thank Jan-Willem van de
Meent, with whom I had
fruitful discussions of motives, ideas, and implementation
choices behind infergo, and whose thoughts and recommendations
significantly influenced infergo design. Finally, I want to
thank PUB+, the company I worked for during early
stages of development of Infergo, for
supporting me in development of Infergo and letting me
experiment with applying probabilistic programming to critical
decision-making in production environment.
infergo v0.2.1 is out.
What’s new:
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.