Metropolis-adjusted Langevin algorithm (MALA) is a Markov chain Monte Carlo
(MCMC) algorithm that takes a step of a discretised Langevin diffusion as a
proposal. This class implements one step of MALA using Euler-Maruyama method
for a given current_state and diagonal preconditioning volatility matrix.
mcmc_metropolis_adjusted_langevin_algorithm(
target_log_prob_fn,
step_size,
volatility_fn = NULL,
seed = NULL,
parallel_iterations = 10,
name = NULL
)Function which takes an argument like
current_state (if it's a list current_state will be unpacked) and returns its
(possibly unnormalized) log-density under the target distribution.
Tensor or list of Tensors representing the step
size for the leapfrog integrator. Must broadcast with the shape of
current_state. Larger step sizes lead to faster progress, but
too-large step sizes make rejection exponentially more likely. When
possible, it's often helpful to match per-variable step sizes to the
standard deviations of the target distribution in each variable.
function which takes an argument like
current_state (or *current_state if it's a list) and returns
volatility value at current_state. Should return a Tensor or
list of Tensors that must broadcast with the shape of
current_state. Defaults to the identity function.
integer to seed the random number generator.
the number of coordinates for which the gradients of
the volatility matrix volatility_fn can be computed in parallel.
String prefixed to Ops created by this function.
Default value: NULL (i.e., 'mala_kernel').
Mathematical details and derivations can be found in Roberts and Rosenthal (1998) and Xifara et al. (2013).
The one_step function can update multiple chains in parallel. It assumes
that all leftmost dimensions of current_state index independent chain states
(and are therefore updated independently). The output of
target_log_prob_fn(current_state) should reduce log-probabilities across
all event dimensions. Slices along the rightmost dimensions may have different
target distributions; for example, current_state[0, :] could have a
different target distribution from current_state[1, :]. These semantics are
governed by target_log_prob_fn(current_state). (The number of independent
chains is tf.size(target_log_prob_fn(current_state)).)
Other mcmc_kernels:
mcmc_dual_averaging_step_size_adaptation(),
mcmc_hamiltonian_monte_carlo(),
mcmc_metropolis_hastings(),
mcmc_no_u_turn_sampler(),
mcmc_random_walk_metropolis(),
mcmc_replica_exchange_mc(),
mcmc_simple_step_size_adaptation(),
mcmc_slice_sampler(),
mcmc_transformed_transition_kernel(),
mcmc_uncalibrated_hamiltonian_monte_carlo(),
mcmc_uncalibrated_langevin(),
mcmc_uncalibrated_random_walk()