Contractive Uncertainty-Gated Rollouts
Implementation & benchmark of arXiv:2608.16431 — Stable Multi-Step Rollouts via Uncertainty-Guided Hybrid Dynamics
Source paper: Stable Multi-Step Rollouts via Uncertainty-Guided Hybrid Dynamics arXiv:2608.16431 ⓘ · analyzed Sep 1, 2026
AI-generated research hypothesis, automatically tested. Not peer-reviewed.
Idea description
Split a learned transition model into a contractive nominal branch and a high-capacity excursion branch, and blend them using calibrated epistemic uncertainty. The nominal branch is used exclusively in the well-supported region, while the excursion branch is activated when the current latent state leaves that region, preventing flexible model errors from being recursively amplified during ordinary rollouts.
Formulas
Mathematical statement
Let zₜ be a latent state in Rᵈ, aₜ an action, g_nom a nominal transition, g_exc an excursion transition, and ζ(zₜ,aₜ) a nonnegative epistemic-uncertainty estimate. The hybrid transition is zₜ₊₁ = αₜ g_nom(zₜ,aₜ) + (1 − αₜ) g_exc(zₜ,aₜ), where αₜ = σ(ζ(zₜ,aₜ)), αₜ = 1 whenever ζ ≤ ζ⋆, and αₜ < 1 otherwise. Require the nominal branch to be contractive in a metric induced by positive-definite matrix P: ||g_nom(z,a) − g_nom(z′,a)||_P ≤ ρ ||z − z′||_P with 0 ≤ ρ < 1, where ||v||_P = √(vᵀPv). Nominal rollout discrepancies then satisfy ||e_k||_P ≤ ρᵏ ||e₀||_P. For excursions, assume ||g_exc(z,a)||_P ≤ c₀ + c₁ ||z||_P with c₁ ≤ 1, so growth is at most affine rather than unconstrained exponential. For a neural network with a 1-Lipschitz activation, a sufficient practical constraint is ||W_L||₂ times the product of ||W_ℓ||₂ over ℓ = 1,...,L−1 being at most ρ.
Implementation notes
Use this as the transition module of a latent world model, RSSM, SSM, or recurrent predictor. Instantiate two branches with identical input and output dimensions: a spectrally normalized nominal MLP or GRU branch and a wider, unconstrained excursion branch. Estimate epistemic uncertainty with an ensemble of K transition heads. For predictions g_k(z,a), compute the ensemble mean ḡ(z,a) = (1/K) times the sum of g_k(z,a), and uncertainty ζ(z,a) = (1/K) times the sum of ||g_k(z,a) − ḡ(z,a)||₂². Set ζ⋆ to the 90th or 95th percentile on held-out in-distribution transitions. During rollout, use α = 1 below threshold and α = exp(−β(ζ − ζ⋆)) above threshold, then return z′ = α g_nom + (1 − α) g_exc. Train both branches with one-step prediction loss and add a penalty λ max(0, L_nom − ρ)², where L_nom is the product of the nominal branch spectral norms. Compute ensemble variance and spectral norms online; estimate actual local Lipschitz ratios and excursion constants empirically. The first cheap experiment should use a small GRU or MLP latent model trained on Duffing oscillator, pendulum, or CartPole transitions. Compare an unconstrained single model, a contractive-only model, and the gated hybrid for 50- to 200-step open-loop rollouts from in-distribution and perturbed initial states. The predicted signature is geometric error decay or saturation below threshold, with log-error slope near log(ρ); the rollout-growth transition should occur near ζ⋆, and measured nominal local Lipschitz ratios should remain below ρ within 20 percent.
Verification
Stage 1 · Toy mechanism gate: Passed ✓
Stage 2 · Mechanism transferred to benchmark: Not reproduced ✗
Stage 2 · Practical benchmark result: Significantly worse ✗
Methodology: 8 paired seeds, permutation test (p<0.05) against a learning-rate-tuned baseline. How verification works
Stage 1 — Mechanism check agent confidence 7/10
Built a reproducible uncertainty-gated nominal/excursion transition experiment in experiment.py. The three mechanism checks matched their quantitative predictions: contraction log-slopes equaled log(rho) to below 3e-16, the gate transition occurred at zeta=0.2501 versus 0.25 with slope -4.0000 versus -4, and affine excursion behavior switched from bounded to linear/exponential at c1=1. In the learned rollout test, the contractive model substantially beat the unconstrained baseline, while the hybrid matched the contractive model; this is a promising stability signal, but not evidence that uncertainty gating itself improves this simple dataset.
- Agent confidence
- 7/10
- Baseline
- 100-step error: in-distribution 0.05725, perturbed 0.05725; first-20-step mean error 0.05808
- Idea
- Hybrid 100-step error: in-distribution 0.003775, perturbed 0.003775; first-20-step mean error 0.007918. Contraction slope errors were below 3e-16; gate transition was 0.2501 versus predicted 0.25; gate log-alpha slope was -4.0000 versus predicted -4; excursion c1=1.2 reached 355.56 after 30 steps.
Limitations: The learned hybrid was tested on a small synthetic stable system and did not outperform the contractive-only branch. Explicit spectral normalization, the proposed Lipschitz penalty, uncertainty calibration quality, action-conditioned distribution shift, longer training comparisons, FLOPs, and real Duffing, pendulum, or CartPole data were not tested.
How to run: python3 experiment.py
Stage 2 — Benchmark vs. tuned baseline (arXiv:2608.16431)
Significantly WORSE than the tuned baseline (+38978.2%, p=0.0081, wins 0 / 8 paired seeds).
- Benchmark
- Dynamics forecasting
- Model
- rnn_small
- Paired seeds
- 8
- Baseline mean
- 0.0004
- Idea mean
- 0.1415
- Effect (Δ)
- 0.1412 (+38978.2%; negative = idea better)
- Wins
- 0 / 8 paired seeds
- p-value
- 0.0081 (permutation test, 20 000 shuffles)
- Smallest detectable effect
- n/a
- Mechanism
- Not confirmed ✗
- Practical effect
- Hurts
- Baseline tuning
- swept over 3 configs
Only the built-in dynamics track was tested. The harness evaluates one-step next-value MSE rather than 50-200-step open-loop rollout stability, and no separate rho/beta/ensemble-size sweep was performed. The excursion heads were trained inside the gated model while the training path optimized the nominal forward output, so this MVP does not implement separate joint one-step losses for both branches or explicit spectral normalization.
How to run: python3 bench_experiment.py
Verdict computed by deterministic test code from paired-seed statistics — not by the language model.
Stage 2 — Benchmark latest Failed ✗
Agent confidence: 10/10
Built and ran Contractive Uncertainty-Gated Rollouts on the structurally matched dynamics track using the bench rnn_small setup, with 8 paired seeds and a shared three-point learning-rate/epoch search space. The idea had test MSE 0.141519 versus baseline 0.000362, paired delta +0.141157, and permutation p=0.0081, so it was significantly worse. The trained-model mechanism signature was also not confirmed: perturbed inputs activated the gate less often than in-distribution inputs, contrary to the prediction.
- Baseline
- Dynamics/rnn_small, best lr=0.006 epochs=30; 8-seed test MSE mean 0.0003621434, std 0.0000900067
- Idea
- Dynamics/rnn_small gated nominal/excursion ensemble, best lr=0.006 epochs=30; 8-seed test MSE mean 0.1415190, std 0.0327710; paired delta +0.1411568; permutation p=0.0081; 0/8 wins
Benchmark result
Significantly WORSE than the tuned baseline (+38978.2%, p=0.0081, wins 0 / 8 paired seeds).
- Benchmark
- Dynamics forecasting
- Model
- rnn_small
- Paired seeds
- 8
- Baseline mean
- 0.0004
- Idea mean
- 0.1415
- Effect (Δ)
- 0.1412 (+38978.2%; negative = idea better)
- Wins
- 0 / 8 paired seeds
- p-value
- 0.0081 (permutation test, 20 000 shuffles)
- Smallest detectable effect
- n/a
- Mechanism
- Not confirmed ✗
- Practical effect
- Hurts
- Baseline tuning
- swept over 3 configs
Only the built-in dynamics track was tested. The harness evaluates one-step next-value MSE rather than 50-200-step open-loop rollout stability, and no separate rho/beta/ensemble-size sweep was performed. The excursion heads were trained inside the gated model while the training path optimized the nominal forward output, so this MVP does not implement separate joint one-step losses for both branches or explicit spectral normalization.
How to run: python3 bench_experiment.py
Artifacts
- bench_experiment.py 6.6 KB View Raw
- bench_report.json 3.8 KB View Raw
- experiment.py 6.6 KB View Raw
- report.md 1.7 KB View
- report_bench_2026-09-01T110845.md 4.1 KB View
- results.json 2.4 KB View Raw