From 28b150c02186297fe802f5f0485a68ec311fb6f2 Mon Sep 17 00:00:00 2001 From: David Date: Fri, 21 Aug 2026 13:31:52 +0200 Subject: [PATCH 1/3] Add NUTS: the No-U-Turn Sampler (self-tuning trajectory length) Multinomial NUTS (Hoffman & Gelman 2014) with dual-averaging step-size warmup: HMC that doubles each trajectory until a whole-span U-turn and tunes epsilon to target_accept, so it needs neither leapfrog_steps nor a step-size sweep. All B chains run in lockstep with a per-chain freeze mask (every state write gated by an active bool), so each chain's draw is identical to independent single-chain NUTS. Log-space multinomial weights keep the progressive sampling numerically stable; divergence and tree-depth are exposed as diagnostics. Co-Authored-By: Claude Opus 4.8 (1M context) --- src/ebm/__init__.py | 2 + src/ebm/samplers/__init__.py | 2 + src/ebm/samplers/nuts.py | 289 +++++++++++++++++++++++++++++++++++ 3 files changed, 293 insertions(+) create mode 100644 src/ebm/samplers/nuts.py diff --git a/src/ebm/__init__.py b/src/ebm/__init__.py index 816cb77..92b3fbd 100644 --- a/src/ebm/__init__.py +++ b/src/ebm/__init__.py @@ -31,6 +31,7 @@ from ebm.samplers import ( HMC, MALA, + NUTS, SVGD, AdaptiveMALA, AnnealedLangevinDynamics, @@ -55,6 +56,7 @@ "EMA", "HMC", "MALA", + "NUTS", "SVGD", "AISResult", "AdaptiveMALA", diff --git a/src/ebm/samplers/__init__.py b/src/ebm/samplers/__init__.py index 85ca709..0ef92ae 100644 --- a/src/ebm/samplers/__init__.py +++ b/src/ebm/samplers/__init__.py @@ -10,6 +10,7 @@ PreconditionedLangevin, UnderdampedLangevin, ) +from ebm.samplers.nuts import NUTS from ebm.samplers.score_sde import PredictorCorrector, ProbabilityFlowODE from ebm.samplers.svgd import SVGD from ebm.samplers.tempering import ParallelTempering, TemperedTransitions @@ -17,6 +18,7 @@ __all__ = [ "HMC", "MALA", + "NUTS", "SVGD", "AdaptiveMALA", "AnnealedLangevinDynamics", diff --git a/src/ebm/samplers/nuts.py b/src/ebm/samplers/nuts.py new file mode 100644 index 0000000..56af096 --- /dev/null +++ b/src/ebm/samplers/nuts.py @@ -0,0 +1,289 @@ +"""No-U-Turn Sampler (NUTS): HMC that picks its own trajectory length.""" + +from __future__ import annotations + +import math + +import torch +from torch import Tensor, nn + +from ebm._functional import flat_sum as _flat_sum +from ebm.energy import EnergyFn +from ebm.samplers.base import Sampler +from ebm.utils import frozen_params + +_NEG_INF = float("-inf") + + +def _bcast(mask: Tensor, like: Tensor) -> Tensor: + """Reshape a ``(B,)`` mask to broadcast against ``like``'s event dims.""" + return mask.reshape(-1, *([1] * (like.dim() - 1))) + + +class NUTS(Sampler): + """No-U-Turn Sampler (Hoffman & Gelman 2014), the multinomial variant. + + HMC with two things automated: the trajectory length (doubled until the path + makes a U-turn, so it needs no ``leapfrog_steps``) and the step size (tuned to + ``target_accept`` by dual averaging during a warmup, then frozen). Best on + smooth, low-dimensional continuous targets; unbiased (targets exactly + ``p ∝ exp(-E)``). + + All ``B`` chains are evolved together in **lockstep**: they build their trees to + a shared depth each doubling, but a chain that has already met its stop + criterion (a whole-span U-turn or a divergence) is frozen — every state write + is masked, so a stopped chain's draw is identical to what an independent + single-chain NUTS would have produced. Wasted leapfrogs on finished chains are + the only cost; correctness is unaffected. + + Diagnostics after a run: ``last_accept_rate`` (mean Metropolis acceptance of + the last draw), ``last_tree_depth`` (per-chain tree depth reached), and + ``divergences`` (count over the sampling phase — persistently nonzero means the + step size is too large or the geometry too sharp for an identity metric, e.g. + Neal's funnel). + + Args: + step_size: initial ε (a starting guess; warmup overwrites it). + steps: default number of post-warmup draws per ``sample`` call. + warmup: dual-averaging iterations (0 disables adaptation). + target_accept: δ the warmup targets (0.8 is the NUTS default). + max_depth: cap on tree depth (``2**max_depth`` leapfrogs per draw). + max_delta_h: divergence threshold on the Hamiltonian error. + gamma, t0, kappa: dual-averaging shrinkage / stabilization / decay constants. + """ + + def __init__( + self, + step_size: float = 0.1, + steps: int = 100, + *, + warmup: int = 1000, + target_accept: float = 0.8, + max_depth: int = 10, + max_delta_h: float = 1000.0, + gamma: float = 0.05, + t0: float = 10.0, + kappa: float = 0.75, + ): + super().__init__(steps) + if not 0.0 < target_accept < 1.0: + raise ValueError("target_accept must be in (0, 1)") + if warmup < 0: + raise ValueError("warmup must be >= 0") + if max_depth < 1: + raise ValueError("max_depth must be >= 1") + self.step_size = step_size + self.warmup = warmup + self.target_accept = target_accept + self.max_depth = max_depth + self.max_delta_h = max_delta_h + self.gamma = gamma + self.t0 = t0 + self.kappa = kappa + self.last_tree_depth: Tensor | None = None + self.divergences = 0 + + def _leapfrog( + self, energy: EnergyFn, x: Tensor, p: Tensor, grad: Tensor, signed_eps: Tensor + ) -> tuple[Tensor, Tensor, Tensor, Tensor]: + """One leapfrog step with per-chain signed step ``signed_eps`` (``v·ε``).""" + e = signed_eps.reshape(-1, *([1] * (x.dim() - 1))) + p = p - 0.5 * e * grad + x = x + e * p + e_new, grad = self._energy_grad(energy, x) + p = p - 0.5 * e * grad + return x, p, grad, e_new + + @staticmethod + def _no_uturn(x_minus: Tensor, x_plus: Tensor, p: Tensor) -> Tensor: + return _flat_sum((x_plus - x_minus) * p) >= 0 + + def _span_ok(self, xm: Tensor, xp: Tensor, pm: Tensor, pp: Tensor) -> Tensor: + """Whole-span no-U-turn: the span still advances at both ends.""" + return self._no_uturn(xm, xp, pm) & self._no_uturn(xm, xp, pp) + + def _build_tree( + self, + energy: EnergyFn, + x: Tensor, + p: Tensor, + grad: Tensor, + v: Tensor, + depth: int, + eps: float, + h0: Tensor, + active: Tensor, + ) -> tuple[Tensor, ...]: + """Recursively double the trajectory; every write gated by ``active``. + + Returns ``(x⁻, p⁻, g⁻, x⁺, p⁺, g⁺, x_prop, logw, s, diverged, a_sum, n_a)`` + with log-space multinomial weight ``logw = logsumexp(H0 − H)`` over the + subtree's leaves and validity mask ``s``. + """ + if depth == 0: + x1, p1, g1, e1 = self._leapfrog(energy, x, p, grad, v * eps) + h1 = e1 + 0.5 * _flat_sum(p1.pow(2)) + d_h = h0 - h1 + finite = torch.isfinite(h1) + over = (h1 - h0) > self.max_delta_h + diverged = active & (~finite | over) + valid = active & finite & ~over + m = _bcast(active, x1) # freeze inactive chains at their input state + x1 = torch.where(m, x1, x) + p1 = torch.where(m, p1, p) + g1 = torch.where(m, g1, grad) + logw = torch.where(valid, d_h, torch.full_like(d_h, _NEG_INF)) + a = torch.where(active, torch.exp(d_h.clamp(max=0.0)), torch.zeros_like(d_h)) + n_a = active.to(d_h.dtype) + return (x1, p1, g1, x1, p1, g1, x1, logw, valid, diverged, a, n_a) + + xm, pm, gm, xp, pp, gp, prop1, logw1, s1, d1, a1, na1 = self._build_tree( + energy, x, p, grad, v, depth - 1, eps, h0, active + ) + active2 = active & s1 # only chains still valid extend a second subtree + plus = _bcast(v > 0, xm) + x2s = torch.where(plus, xp, xm) + p2s = torch.where(plus, pp, pm) + g2s = torch.where(plus, gp, gm) + xm2, pm2, gm2, xp2, pp2, gp2, prop2, logw2, s2, d2, a2, na2 = self._build_tree( + energy, x2s, p2s, g2s, v, depth - 1, eps, h0, active2 + ) + new_xm = torch.where(plus, xm, xm2) + new_pm = torch.where(plus, pm, pm2) + new_gm = torch.where(plus, gm, gm2) + new_xp = torch.where(plus, xp2, xp) + new_pp = torch.where(plus, pp2, pp) + new_gp = torch.where(plus, gp2, gp) + + denom = torch.logaddexp(logw1, logw2) + log_u = torch.log(torch.rand_like(logw1)) + replace = (log_u < (logw2 - denom)) & s2 & active2 # multinomial pick, -inf-safe + prop = torch.where(_bcast(replace, prop1), prop2, prop1) + + no_uturn = self._span_ok(new_xm, new_xp, new_pm, new_pp) + s = s1 & s2 & no_uturn & active + return ( + new_xm, + new_pm, + new_gm, + new_xp, + new_pp, + new_gp, + prop, + denom, + s, + d1 | d2, + a1 + a2, + na1 + na2, + ) + + def _draw( + self, energy: EnergyFn, x0: Tensor, eps: float + ) -> tuple[Tensor, Tensor, Tensor, Tensor]: + """One NUTS transition for the whole batch; returns ``(x, ᾱ, depth, diverged)``.""" + b = x0.shape[0] + p = torch.randn_like(x0) + e0, grad0 = self._energy_grad(energy, x0) + h0 = e0 + 0.5 * _flat_sum(p.pow(2)) + + xm = xp = x0 + pm = pp = p + gm = gp = grad0 + x_prop = x0 + logw = torch.zeros(b, device=x0.device, dtype=x0.dtype) + alive = torch.ones(b, device=x0.device, dtype=torch.bool) + a_tot = torch.zeros(b, device=x0.device, dtype=x0.dtype) + na_tot = torch.zeros(b, device=x0.device, dtype=x0.dtype) + depth_reached = torch.zeros(b, device=x0.device, dtype=torch.long) + diverged = torch.zeros(b, device=x0.device, dtype=torch.bool) + + for depth in range(self.max_depth): + if not bool(alive.any()): + break + depth_reached += alive.long() + v = torch.where( + torch.rand(b, device=x0.device) < 0.5, + torch.full((b,), -1.0, device=x0.device), + torch.full((b,), 1.0, device=x0.device), + ) + plus = _bcast(v > 0, xm) + xs = torch.where(plus, xp, xm) + ps = torch.where(plus, pp, pm) + gs = torch.where(plus, gp, gm) + nm, npm, ngm, npx, npp, ngp, prop_s, logw_s, s_s, d_s, a_s, na_s = self._build_tree( + energy, xs, ps, gs, v, depth, eps, h0, alive + ) + upd_p = _bcast(alive & (v > 0), xm) + upd_m = _bcast(alive & (v < 0), xm) + xp = torch.where(upd_p, npx, xp) + pp = torch.where(upd_p, npp, pp) + gp = torch.where(upd_p, ngp, gp) + xm = torch.where(upd_m, nm, xm) + pm = torch.where(upd_m, npm, pm) + gm = torch.where(upd_m, ngm, gm) + + log_u = torch.log(torch.rand_like(logw)) + replace = (log_u < (logw_s - logw)) & s_s & alive + x_prop = torch.where(_bcast(replace, x_prop), prop_s, x_prop) + logw = torch.logaddexp( + logw, torch.where(alive, logw_s, torch.full_like(logw_s, _NEG_INF)) + ) + a_tot += torch.where(alive, a_s, torch.zeros_like(a_s)) + na_tot += torch.where(alive, na_s, torch.zeros_like(na_s)) + diverged |= d_s & alive + alive = alive & s_s & self._span_ok(xm, xp, pm, pp) + + alpha_bar = a_tot / na_tot.clamp_min(1.0) + return x_prop.detach(), alpha_bar, depth_reached, diverged + + def step(self, energy: EnergyFn, x: Tensor) -> Tensor: + x_next, alpha_bar, depth, diverged = self._draw(energy, x.detach(), self.step_size) + self._last_accept = alpha_bar.mean() + self.last_tree_depth = depth + self.divergences += int(diverged.sum()) + return x_next + + def _dual_average( + self, energy: EnergyFn, x: Tensor, n: int, eps0: float + ) -> tuple[Tensor, float]: + """Run ``n`` dual-averaging warmup draws from ``eps0``; return ``(x, ε̄)``.""" + if n == 0: + return x, eps0 + mu = math.log(10 * eps0) + log_eps = math.log(eps0) + log_ebar = 0.0 + h_bar = 0.0 + for m in range(1, n + 1): + x, alpha_bar, _, _ = self._draw(energy, x, math.exp(log_eps)) + x = x.detach() + gap = self.target_accept - float(alpha_bar.mean()) + h_bar = (1 - 1 / (m + self.t0)) * h_bar + gap / (m + self.t0) + log_eps = mu - math.sqrt(m) / self.gamma * h_bar + eta = m**-self.kappa + log_ebar = eta * log_eps + (1 - eta) * log_ebar + return x, math.exp(log_ebar) + + def sample( + self, + energy: EnergyFn, + x_init: Tensor, + *, + steps: int | None = None, + return_trajectory: bool = False, + ) -> Tensor: + """Warm up (tuning ε), freeze, then draw. See the class docstring.""" + n_steps = self.steps if steps is None else steps + x = x_init.detach().clone() + self.divergences = 0 + module = energy if isinstance(energy, nn.Module) else None + with frozen_params(module), torch.enable_grad(): + x, eps = self._dual_average(energy, x, self.warmup, self.step_size) + self.step_size = eps # freeze the averaged step size + trajectory = [x.clone()] if return_trajectory else None + for _ in range(n_steps): + x = self.step(energy, x).detach() + if trajectory is not None: + trajectory.append(x.clone()) + if trajectory is not None: + return torch.stack(trajectory) + return x From a31de41dee3a21c9da9ae7fb433f85e8edc7d44e Mon Sep 17 00:00:00 2001 From: David Date: Fri, 21 Aug 2026 13:31:52 +0200 Subject: [PATCH 2/3] Test NUTS: Gaussian/funnel recovery, target accept, U-turn termination Recovers a standard and a correlated Gaussian's covariance (pooling late near-independent draws), tunes to 0.8 acceptance with zero divergences on the Gaussian, enters Neal's funnel (finite, loose v.std band), and terminates by U-turn at small tree depths rather than bottoming out at max_depth. Plus the accept-rate lifecycle and constructor validation. Co-Authored-By: Claude Opus 4.8 (1M context) --- tests/test_samplers.py | 57 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/tests/test_samplers.py b/tests/test_samplers.py index 757bc85..cfaed93 100644 --- a/tests/test_samplers.py +++ b/tests/test_samplers.py @@ -245,3 +245,60 @@ def test_adaptive_mala_zero_warmup_keeps_step_size_and_validates(): ebm.AdaptiveMALA(target_accept=1.5) with pytest.raises(ValueError): ebm.AdaptiveMALA(warmup=-1) + + +def test_nuts_targets_standard_normal_and_tunes_step_size(): + sampler = ebm.NUTS(step_size=0.5, steps=80, warmup=200) + samples = sampler.sample(quadratic_energy, 3 * torch.randn(2000, 2)) + _check_standard_normal(samples) + assert not samples.requires_grad + assert abs(sampler.last_accept_rate - 0.8) < 0.1 # dual averaging hits the target + assert sampler.divergences == 0 # a smooth Gaussian never diverges + + +def test_nuts_recovers_a_correlated_gaussian(): + cov = torch.tensor([[2.0, 1.2], [1.2, 1.5]]) + sampler = ebm.NUTS(step_size=0.5, steps=160, warmup=250) + traj = sampler.sample( + _correlated_gaussian(cov), 3 * torch.randn(3000, 2), return_trajectory=True + ) + pooled = traj[-20:].reshape(-1, 2) # pool near-independent late draws to cut MC noise + assert (torch.cov(pooled.T) - cov).abs().max().item() < 0.15 + + +def test_nuts_explores_neals_funnel(): + # Identity-metric NUTS enters but under-samples the funnel neck, so v.std biases + # below the true 3 — assert only that it stays finite and spreads (loose band). + energy = ebm.nets.FunnelEnergy(dim=2, v_scale=3.0) + sampler = ebm.NUTS(step_size=0.3, steps=150, warmup=200) + samples = sampler.sample(energy, torch.randn(1500, 2)) + assert torch.isfinite(samples).all() + assert 1.8 < samples[:, 0].std().item() < 3.3 + + +def test_nuts_tree_depth_terminates_by_uturn(): + # On an easy Gaussian the U-turn fires at small depths — the tree should never + # bottom out at max_depth (which would mean it never detected a U-turn). + sampler = ebm.NUTS(step_size=0.5, steps=1, warmup=150) + x = sampler.sample(quadratic_energy, torch.randn(1024, 2)) + depths = [] + for _ in range(30): + x = sampler.step(quadratic_energy, x) + depths.append(sampler.last_tree_depth) + depths = torch.stack(depths) + assert (depths < sampler.max_depth).all() + assert depths.float().median().item() <= 3 + assert (depths <= 3).float().mean().item() > 0.8 + + +def test_nuts_accept_lifecycle_and_validation(): + sampler = ebm.NUTS(step_size=0.5, steps=5, warmup=0) + assert sampler.last_accept_rate is None # nothing drawn yet + sampler.sample(quadratic_energy, torch.randn(64, 2)) + assert isinstance(sampler.last_accept_rate, float) + with pytest.raises(ValueError): + ebm.NUTS(target_accept=1.5) + with pytest.raises(ValueError): + ebm.NUTS(warmup=-1) + with pytest.raises(ValueError): + ebm.NUTS(max_depth=0) From dce2afadf8e6649f1441fed5f658a5f932ac8373 Mon Sep 17 00:00:00 2001 From: David Date: Fri, 21 Aug 2026 13:31:52 +0200 Subject: [PATCH 3/3] Add nuts_sampling example + document NUTS Example runs NUTS on Neal's funnel and plots the per-draw tree-depth distribution (trajectory length adapts; it doesn't bottom out at max_depth), printing tuned step size, acceptance, and divergences. README samplers row + examples list and the unreleased 0.16.0 CHANGELOG updated. Co-Authored-By: Claude Opus 4.8 (1M context) --- CHANGELOG.md | 9 ++++ README.md | 3 +- examples/nuts_sampling.py | 70 ++++++++++++++++++++++++++++++ examples/nuts_sampling_result.png | Bin 0 -> 87078 bytes 4 files changed, 81 insertions(+), 1 deletion(-) create mode 100644 examples/nuts_sampling.py create mode 100644 examples/nuts_sampling_result.png diff --git a/CHANGELOG.md b/CHANGELOG.md index f7a850e..37e0ef4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,15 @@ ## 0.16.0 — unreleased +- **`NUTS`** — the No-U-Turn Sampler (Hoffman & Gelman 2014, multinomial variant): + HMC that tunes its own trajectory length (doubling until a whole-span U-turn) and + step size (dual-averaging warmup to `target_accept`), so it needs neither + `leapfrog_steps` nor a step-size sweep. All chains are evolved in lockstep with a + per-chain freeze mask, so each chain's draw is identical to independent + single-chain NUTS. Exposes `last_tree_depth` and a `divergences` count. Validated: + recovers a standard and a correlated Gaussian's covariance, tunes to 0.8 + acceptance, enters Neal's funnel, and terminates by U-turn (small tree depths, + zero divergences on the Gaussian). Example `nuts_sampling.py`. - **`LatentEBM`** — a latent-variable EBM: a joint `E(x, z) = E_prior(z) + E(x | z)` coupling a prior over a latent `z` (default standard normal) with a decoder energy. The data marginal is intractable, so `sample_joint` runs block diff --git a/README.md b/README.md index 649db4c..c0aac6c 100644 --- a/README.md +++ b/README.md @@ -45,7 +45,7 @@ returns `LossOutput(loss, metrics, x_neg)`; call `out.loss.backward()`). | Piece | Contents | |---|---| | **Energies** | any callable `(B, *shape) -> (B,)`; `nets.MLPEnergy` / `ConvEnergy` / `ResNetEnergy` / `ConvClassifier` (SiLU, optional spectral norm, no batch norm), `nets.RBM` (Bernoulli RBM with exact `log_z`), `GuidedEnergy` (classifier-free guidance), `nets.IsingEnergy` / `PottsEnergy` (discrete lattices), `nets.FunnelEnergy` / `GaussianMixtureEnergy` / `BananaEnergy` (closed-form targets), `nets.AffineCouplingFlow` (RealNVP) / `nets.NeuralSplineCouplingFlow` (rational-quadratic spline) / `nets.ContinuousNormalizingFlow` (FFJORD — trainable exact-likelihood flows / self-normalized energies), noise-conditional variants for NCSN; `EnergyModel`, `ebm.score` | -| **Samplers** | `LangevinDynamics` (ULA/SGLD), `MALA`, `AdaptiveMALA` (dual-averaging step-size warmup + diagonal metric), `HMC`, `UnderdampedLangevin` (SGHMC), `PreconditionedLangevin`, `ParallelTempering` (replica exchange), `TemperedTransitions`, `SVGD` (Stein variational), `GibbsSampler` (block Gibbs), `GibbsWithGradients` + `CategoricalGibbsWithGradients`, `AnnealedLangevinDynamics`, `ProbabilityFlowODE` / `PredictorCorrector` (score-SDE), `DDPMAncestralSampler` (VP diffusion) | +| **Samplers** | `LangevinDynamics` (ULA/SGLD), `MALA`, `AdaptiveMALA` (dual-averaging step-size warmup + diagonal metric), `HMC`, `NUTS` (No-U-Turn Sampler, self-tuning trajectory length), `UnderdampedLangevin` (SGHMC), `PreconditionedLangevin`, `ParallelTempering` (replica exchange), `TemperedTransitions`, `SVGD` (Stein variational), `GibbsSampler` (block Gibbs), `GibbsWithGradients` + `CategoricalGibbsWithGradients`, `AnnealedLangevinDynamics`, `ProbabilityFlowODE` / `PredictorCorrector` (score-SDE), `DDPMAncestralSampler` (VP diffusion) | | **Losses** | `ContrastiveDivergence` (CD-k / persistent CD), `DiffusionRecoveryLikelihood` + `drl_sample`, `DenoisingScoreMatching` / `MultiSigmaDenoisingScoreMatching` (NCSN), `VPDenoisingScoreMatching` (DDPM), `SlicedScoreMatching`, `ExactScoreMatching`, `EnergyDiscrepancy` (MCMC-free), `PseudoLikelihood` / `RatioMatching` / `ConcreteScoreMatching` (MCMC-free, discrete), `NoiseContrastiveEstimation`, `JEMLoss` | | **Composition** | `SumEnergy` (product of experts), `MixtureEnergy`, `EnsembleEnergy` (deep-ensemble mean energy + member disagreement), `TemperedEnergy`, `LatentEBM` (joint `E(x, z)` with a prior + decoder, block-Gibbs sampled) — energies compose like densities and nest | | **Training** | thin `Trainer` (device, EMA, supervised batches, `save`/`load` checkpointing), `ReplayBuffer`, `EMA` | @@ -76,6 +76,7 @@ Runnable scripts in [`examples/`](https://github.com/davidkhjo/ebmkit/tree/main/ - `train_energy_discrepancy.py` — two-moons trained MCMC-free (energy discrepancy) - `sampling_hard_targets.py` — parallel tempering escapes a trapped mode; ESS / R̂ diagnostics - `adaptive_mala.py` — a self-tuning MALA: dual-averaging step size + a learned diagonal metric +- `nuts_sampling.py` — the No-U-Turn Sampler on Neal's funnel: trajectory length adapts per draw - `goodness_of_fit.py` — KSD for model selection; classifier two-sample test - `ensemble_ood.py` — a deep-ensemble EBM whose member disagreement flags OOD - `latent_ebm.py` — a latent-variable EBM: block-Gibbs on a joint `E(x, z)` matches ancestral sampling diff --git a/examples/nuts_sampling.py b/examples/nuts_sampling.py new file mode 100644 index 0000000..71c37a4 --- /dev/null +++ b/examples/nuts_sampling.py @@ -0,0 +1,70 @@ +"""NUTS: HMC that picks its own trajectory length, on Neal's funnel. + +The No-U-Turn Sampler removes HMC's two hand-tuned knobs: it doubles each +trajectory until the path starts to double back (a U-turn), and it tunes the step +size to a target acceptance by dual averaging during a warmup. No `leapfrog_steps`, +no step-size sweep. Neal's funnel — a Gaussian whose width is itself a Gaussian +latent `v` — is the classic stress test: the neck is sharp where `v` is negative, +so the sampler must *lengthen* its trajectories there. We plot the samples and the +distribution of tree depths (how far NUTS doubled each draw), and print the tuned +step size, mean acceptance, and divergence count. + +Run: python examples/nuts_sampling.py +Outputs nuts_sampling_result.png next to this script (needs the [viz] extra). +""" + +from __future__ import annotations + +from pathlib import Path + +import torch + +import ebm + + +def main() -> None: + torch.manual_seed(0) + energy = ebm.nets.FunnelEnergy(dim=2, v_scale=3.0) # v ~ N(0, 9), x | v ~ N(0, e^v) + + sampler = ebm.NUTS(step_size=0.3, steps=300, warmup=300, target_accept=0.8) + x = sampler.sample(energy, torch.randn(3000, 2)) + print(f"tuned step size = {sampler.step_size:.3f}") + print(f"mean acceptance = {sampler.last_accept_rate:.3f} (target 0.8)") + print( + f"v marginal std = {x[:, 0].std():.2f} (true 3.0; identity metric under-samples the neck)" + ) + print(f"divergences = {sampler.divergences}") + + # Collect tree depths over a batch of post-warmup draws (step size now frozen). + depths = [] + xd = x + for _ in range(40): + xd = sampler.step(energy, xd) + depths.append(sampler.last_tree_depth) + depths = torch.stack(depths).reshape(-1) + + import matplotlib + + matplotlib.use("Agg") + import matplotlib.pyplot as plt + + fig, axes = plt.subplots(1, 2, figsize=(12, 5)) + axes[0].scatter(x[:, 1], x[:, 0], s=5, alpha=0.3, color="#5c50c9") + axes[0].set_xlabel("x (neck coordinate)") + axes[0].set_ylabel("v (log-scale latent)") + axes[0].set_title("NUTS samples of Neal's funnel") + axes[0].set_xlim(-15, 15) + + hi = int(depths.max().item()) + axes[1].hist(depths.numpy(), bins=range(hi + 2), align="left", rwidth=0.8, color="#5c50c9") + axes[1].set_xlabel("tree depth reached") + axes[1].set_ylabel("draws") + axes[1].set_title("Trajectory length adapts per draw (U-turn, not a fixed length)") + + out = Path(__file__).parent / "nuts_sampling_result.png" + fig.savefig(out, dpi=120, bbox_inches="tight") + print(f"saved {out}") + + +if __name__ == "__main__": + main() diff --git a/examples/nuts_sampling_result.png b/examples/nuts_sampling_result.png new file mode 100644 index 0000000000000000000000000000000000000000..7d8e346c2e684b86c794d38ca6e0ee69120b9d10 GIT binary patch literal 87078 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 literal 0 HcmV?d00001