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. ↩︎