In MCMC there is always the issue that there are no established benchmarks. C.f. for example machine learning - Performance benchmarks for MCMC - Cross Validated .
There are some related efforts in the community, e.g. GitHub - StatisticalRethinkingJulia/MCMCBenchmarks.jl: Comparing performance and results of mcmc options using Julia and internal tests in packages. I think the only way to approach is to learn from the ML community and put a bit of a competitive element to it, where it’s not enough to use your approach to beat your own half-assed efforts with an alternative method you have no stakes in –
but you have established data sets and metrics and you have to beat previous records on those by people trying to do the best with their own methods…
I also happen to get the impression that https://discourse.julialang.org loves to optimise stuff…
Now I have this downright evil banana shaped (5 dimensional banana to be precise) density, the hybrid Rosenbrock https://arxiv.org/abs/1903.09556 .
using Distributions
struct HybridRosenbrock{Tμ,Ta,Tb}
μ::Tμ
a::Ta
b::Tb
end
function Distributions.logpdf(D::HybridRosenbrock, x)
n2, n1 = size(D.b)
n = length(x)
X = reshape(@view(x[2:end]), n1, n2)
y = -D.a*(x[1] - D.μ)^2
for j in 1:n2
y -= D.b[j,1]*(X[j,1] - x[1]^2)^2
for i in 2:n1
y -= D.b[j,i]*(X[j,i] - X[j,i-1]^2)^2
end
end
C = 0.5log(D.a) + 0.5sum(log.(D.b)) - n/2*log(pi)
y + C
end
I’d like to propose that as a benchmark problem.
I think the first thing to do is NUTS
from GitHub - TuringLang/AdvancedHMC.jl: Robust, modular and efficient implementation of advanced Hamiltonian Monte Carlo algorithms, I made a simple implementation (see Evil Rosenbrock density with nuts · GitHub. )
With that and some 3 minutes of effort:
Showing the trace plot of the 5 dimensions and the samples of pairs of dimensions.
In black are the NUTS samples, as yellow points samples my python sampler which correctly manages to visit the tails of the distribution. Can I do better? I already try some things, like rescaling the marginals by their standard deviation σ0
.
Gist: Evil Rosenbrock density with nuts · GitHub
Also input on how to quantify success here would be valuable.