Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Provide a resimulation Metropolis TransitionKernel #218

Open
axch opened this issue Nov 6, 2018 · 4 comments
Open

Provide a resimulation Metropolis TransitionKernel #218

axch opened this issue Nov 6, 2018 · 4 comments

Comments

@axch
Copy link
Contributor

axch commented Nov 6, 2018

Idea for usage:

kernel = tfp.mcmc.ResimulationMetropolis(
  target_log_prob_fn=...,
  proposal_dist=tfp.some.distribution,
  seed=124)
@axch axch changed the title Provide a Metropolis independence proposal function Provide a resimulation Metropolis TransitionKernel Nov 7, 2018
@davmre
Copy link
Contributor

davmre commented Nov 27, 2018

Do you have a reference describing what this is? Does 'resimulation' mean the same thing as an independence sampler (i.e., always propose from the given distribution ignoring the current state of the chain)?

@axch
Copy link
Contributor Author

axch commented Nov 28, 2018

Yes. At least, I meant constructing valid transition kernels from independence proposals. I don't know how standard or non-standard a term that is.

@SiegeLordEx
Copy link
Member

SiegeLordEx commented Nov 28, 2018

One somewhat hacky way of implementing this is by creating a new next_state_fn for RandomWalkMetropolis that ignores the current state. Usage would look like:

kernel = tfp.mcmc.RandomWalkMetropolis(
  target_log_prob_fn=...,
  new_state_fn=resimulation_fn(tfd.Distribution))

EDIT: Nevermind, RandomWalkMetropolis assumes symmetry around the current state, but perhaps that's a defect of RandomWalkMetropolis.

@axch
Copy link
Contributor Author

axch commented Nov 28, 2018

Symmetry is a useful assumption, because it lets you use proposals whose densities you can't evaluate -- as long as they are symmetric. I think it's reasonable for these two to be different classes.

We could also add the class of asymmetric, dependent proposals with tractable densities. That looks like a TransitionKernel made out of a function that accepts the current state and emits a Distribution representing the (conditional) proposal. One would have invoke this function backwards to compute the corresponding term in the acceptance ratio.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

5 participants