Hej!
Have you ever wondered if momentum flips/refreshments are really needed in HMC or if we somehow can avoid to lose our sense of direction after each proposal step? Or even wondered if we could get rid of rejections in MCMC?
These thoughts and more have new answers in our paper about creating non-reversible, rejection-free and continuous-time Monte Carlo samplers.
Read it on arxiv [2504.12190] Creating non-reversible rejection-free samplers by rebalancing skew-balanced Markov jump processes ⦠or just try it out at
Letās take for example the evil banana target as Turing.jl model:
using Turing
@model function banana(μ, a, b)
X ~ Normal(μ, 1/ā(2a))
Y ~ Normal(X^2, 1/ā(2b))
return (X, Y)
end
model = banana(1., 1/10, 100/10)
With a bit of glue code powered by LogdensityProblems.jl and DynamicPPL.jl
using FFFSampler
# from paper
ϵ = 0.035 # stepsize
L = 20 # number of leapfrog steps
Ī» = 0.04 # the rate of momentum refreshments
fff = FFF(ϵ, L, λ)
chain_fff = @time sample(model, externalsampler(DiscreteFFF(fff,0.1)), 200_000)
chain_nuts = @time sample(model, NUTS(), 200_000)
So what does this sampler do?
- It moves along level curves of the Hamiltonians like HMC, but it visits more than one point on each Hamiltonian, keeping going in the same direction
- Internally it uses a continuous notion of time and spends a random time in each point, removing the need for rejections (here we call a wrapper
DiscreteFFF
to hide this from Turing)
Try it, we are curious about your experience!
Erik, Moritz, Ruben, Akash