Involutive MCMC over savepoint traces (Neklyudov et al. 2020; Gen's
involutive_mh).
A move draws auxiliary variables u ~ q(· ; x) from the current choices x, maps (x, u) through an involution h to (x', u'), replays the program with x', and accepts with
log α = log p(x') − log p(x) + log q(u' ; x') − log q(u ; x) + log |det ∂h/∂(x,u)|
Random-walk, scale, swap and data-driven moves are all such pairs (q, h).
The Jacobian term is the caller's (:log-jacobian from the involution);
fd-log-jacobian computes it numerically for real-valued maps — raster's AD
is the intended replacement.
Scope: moves that keep the set of sites (fixed dimension). A site the replay reaches afresh is drawn from its prior and one it no longer reaches is dropped, both scored as in single-site MH; moves that create or remove sites through the involution itself (reversible jump) are future work.
Involutive MCMC over savepoint traces (Neklyudov et al. 2020; Gen's `involutive_mh`). A move draws auxiliary variables u ~ q(· ; x) from the current choices x, maps (x, u) through an involution h to (x', u'), replays the program with x', and accepts with log α = log p(x') − log p(x) + log q(u' ; x') − log q(u ; x) + log |det ∂h/∂(x,u)| Random-walk, scale, swap and data-driven moves are all such pairs (q, h). The Jacobian term is the caller's (`:log-jacobian` from the involution); `fd-log-jacobian` computes it numerically for real-valued maps — raster's AD is the intended replacement. Scope: moves that keep the set of sites (fixed dimension). A site the replay reaches afresh is drawn from its prior and one it no longer reaches is dropped, both scored as in single-site MH; moves that create or remove sites through the involution itself (reversible jump) are future work.
(fd-log-jacobian f v)(fd-log-jacobian f v eps)log |det ∂f/∂v| at v by central differences, for f from vectors of
reals to vectors of the same length.
log |det ∂f/∂v| at `v` by central differences, for `f` from vectors of reals to vectors of the same length.
(step trace {:keys [propose log-q involution]})One involutive MH move on trace.
:propose (fn [choices]) -> {:aux u :log-q log q(u ; x)}
:log-q (fn [choices u]) -> log q(u ; x), for the reverse move
:involution (fn [choices u]) -> {:choices x' :aux u' :log-jacobian l}
where x' gives new values for some addresses of choices
choices is foerster.trace/choices of the trace ({address value}).
Resolves {:trace t :accepted? b :log-ratio r}; the loser's worlds are
given back.
One involutive MH move on `trace`.
:propose (fn [choices]) -> {:aux u :log-q log q(u ; x)}
:log-q (fn [choices u]) -> log q(u ; x), for the reverse move
:involution (fn [choices u]) -> {:choices x' :aux u' :log-jacobian l}
where x' gives new values for some addresses of `choices`
`choices` is `foerster.trace/choices` of the trace ({address value}).
Resolves {:trace t :accepted? b :log-ratio r}; the loser's worlds are
given back.cljdoc builds & hosts documentation for Clojure/Script libraries
| Ctrl+k | Jump to recent docs |
| ← | Move to previous article |
| → | Move to next article |
| Ctrl+/ | Jump to the search field |