Hi all,
As part of the Turing ecosystem, we recently created a collection of slice-sampling MCMC algorithms:
Why slice sampling algorithms are great:
- Don’t need gradients!
- For low dimensional problems, they perform very well with minimal tuning
- Even if the tuning is off, they automatically adjust the amount of computation and result in adequate samples.
- They handle complex posterior geometry, such as multi modality, very well. This is because they don’t rely on gradient information.
We provide the following algorithms:
- The classic univariate slice sampling algorithms [1]
- Latent slice sampling[2]
- Gibbsian polar slice sampling[3]
The package supports Turing and can be used as follows:
using Distributions
using Turing
using SliceSampling
@model function demo()
s ~ InverseGamma(3, 3)
m ~ Normal(0, sqrt(s))
end
sampler = RandPermGibbs(SliceSteppingOut(2))
n_samples = 10000
model = demo()
sample(model, externalsampler(sampler), n_samples; initial_params=[exp(1.0), 0.0])
There are also plans to make it officially part of Turing so that it can be used in combination with Turing.Gibbs
, so stay tuned!
Neal, R. M. (2003). Slice sampling. The annals of statistics, 31(3), 705-767. ↩︎
Li, Y., & Walker, S. G. (2023). A latent slice sampling algorithm. Computational Statistics & Data Analysis, 179, 107652. ↩︎
Schär, P., Habeck, M., & Rudolf, D. (2023, July). Gibbsian polar slice sampling. In International Conference on Machine Learning. ↩︎