Zenna Tavares

Computer Assisted Programming Group (PI: Armando Solar Lezama)
Department of Brain and Cognitive Sciences
CSAIL

JuliaCon 6/25/2015

What is Probabilistic Programming?

J Jara-Ettinger, L Schulz, JB Tenenbaum (2015). Example: Inverse Planning  Parameter Estimation

Infer rate parameter of exponential distribution $$\begin{split} \lambda &\sim \mathrm{Uniform}(0, 2)\\ x_n &\sim \mathrm{Exponential}(λ)\\ observe \; \mathbf{x} &= [0.083, 0.55, 2.37]\\ \end{split}$$

Conditional Samples

prior posterior Inference Queries

Conditional sampling with rand

λ = uniform(0,2)
x1 = exponential(λ)
x2 = exponential(λ)
x3 = exponential(λ)
observations = (x1 == 0.083) & (x2 == 0.55) & (x3 == 2.37)

rand(λ, observations, 100)

Conditional Sampling is Not Easy

probability of observation == true becomes vanishingly small

dream reality Random Variables are not Random!

They are functions

λ = uniform(0,2)
typeof(λ) => RandVar{Float64}
function λ(ω) = ω * 2 end  # input ω ∈ [0, 1]
λ(0.1) => 0.2  # x is just a function
λ = randunif()
λ(ω) => 0.6923295214 # to sample: call with uniformly sampled input

Pointwise Random Variable Algebra

$$\begin{split} Z &= X + Y\\ Z(\omega) &= X(\omega) + Y(\omega) \end{split}$$ Pointwise Random Variable Algebra

a = exponential(0.5); b = exponential(0.5)
c = a + b
typeof(c) => RandVar{Float64}
rand(c, 5) => [3.425, 2.990, 9.670, 0.45759, 3.6357]
d = c + 100
typeof(d) => RandVar{Float64}
rand(d, 5) => [104.883, 103.50, 100.50, 100.485, 100.549]
e = exponential(d)
typeof(e) => RandVar{Float64}
rand(e, 5) => [0.020, 0.0043, 0.00108, 0.0041, 0.0052]

Single Sample Space

Random Variables are dependent through $$\Omega$$ (Euclidean unit cube) Single Sample Space

Random Variables are dependent through $$\Omega$$ (Euclidean unit cube) Single Sample Space

Random Variables are dependent through $$\Omega$$ (Euclidean unit cube) Complete Example using Random Arrays

are arrays of RandVars

rand(X::RandVar{T}, Y::RandVar{Bool}, n::Integer) = ...
type RandArray{T,N} <: DenseArray{RandVar{T},N} ...
λ = uniform(0,2)
x = mvexponential(λ, 3)
observations = x == [0.083, 0.55, 2.37]

rand(x, observations, 100)

Single Sample Space

Random Variables are dependent through $$\Omega$$ (Euclidean unit cube) Conditional Sampling is Easy

Guess (probabilistically) and check until condition is satisfied

$$P(A|B) = \frac{P(A \cap B)}{P(B)}$$
function rand(X::RandVar, Y::RandVar{Bool})
while true
ω = rand_unif_vector()
if Y(ω)
return X(ω)
end
end
end

Conditional Sampling is Easy

Guess (probabilistically) and check until condition is satisfied

$$P(A|B) = \frac{P(A \cap B)}{P(B)}$$
function rand(X::RandVar, Y::RandVar{Bool})
while true
ω = rand_unif_vector()
if Y(ω)
return X(ω)
end
end
end

Conditional Sampling is Not Easy

probability Y(ω) == true becomes vanishingly small

dream reality Consider sets instead of single points

and let an Oracle (constraint solver) do the hard work $$\mathcal{O}_Y(A) = \left\{ \begin{array}{lr} T & : A \subseteq Y\\ F & : A \cap Y = \varnothing\\ TF & : Otherwise\\ \end{array} \right.$$

Play a game with the Oracle

Split and randomly choose one side    δ-Relaxation

Make thin lines thick - (S Gao, J Avidad, EM Clarke - 2012)

$$Y=X$$ $$Y-X<\delta$$ Example: Geometric Sampling

Sample from surface/interior of geometric objects   Sigma and Julia

The Good

• simplicity: model-algorithm separated
• type hierarchy: use RandVars in existing code
• runtime compilation

The Ugly

• types: RandVar{Float64} <: FloatingPoint ?
• control flow breaks things: if, while, for, &, |, ...

Conclusion

What is Probabilistic Programming?

• Bayesian and Conditional Inference are same-same but different
• Sigma is requires complete model - no black boxes
• One algorithm to rule them all?

Do we need new languages?

• Not really, no
• Maybe... Uncertain type Inference? Probabilistic parsing?

Thank You!

Contributors Welcome! - https://github.com/zenna/Sigma.jl