Residual-screened Koopman latent bottleneck
Implementation & benchmark of arXiv:2607.25086 — On residual bounds of the EDMD solution to the eigenvalue problem for the Koopman operator and backward shadowing stability of the EDMD/KMD
Source paper: On residual bounds of the EDMD solution to the eigenvalue problem for the Koopman operator and backward shadowing stability of the EDMD/KMD arXiv:2607.25086 ⓘ · analyzed Aug 31, 2026
AI-generated research hypothesis, automatically tested. Not peer-reviewed.
Idea description
Add a small linear latent transition to a neural encoder-decoder and use normalized Koopman eigenfunction residuals to identify unreliable latent modes. Rather than retaining every eigenmode of the learned transition, reconstruct forecasts only from modes whose one-step residual is small on held-out temporal windows. This turns spectral decomposition into an explicit denoising and model-selection mechanism for neural state-space models.
Formulas
Mathematical statement
For a dynamical map T and Koopman operator K defined by (K phi)(x)=phi(T(x)), the paper measures an approximate eigenpair (lambda_i, phi_i) using the normalized residual ||K phi_i-lambda_i phi_i||/||phi_i||. In an encoder-based model, x_t is mapped to an observable vector z_t=phi_theta(x_t) in R^m, and the learned latent transition is K_theta in R^{m x m}. The empirical analogue of the paper's L2 residual is rho_i^2=sum_{t=1}^{N-1} w_t |u_i^* z_{t+1}-lambda_i u_i^* z_t|^2 divided by sum_t w_t |u_i^*z_t|^2, where lambda_i and u_i are an eigenvalue and right eigenvector of K_theta, u_i^* is the conjugate transpose, and w_t are optional confidence weights. Modes with residual above a validation quantile are discarded or downweighted. The local Taylor bound in the paper motivates separately monitoring whether large residuals arise from strongly nonlinear local regions.
Implementation notes
Integrate this into a recurrent world model or neural state-space model. Use an encoder E_theta(x_t)=z_t in R^m, a linear latent transition z_{t+1}=K_theta z_t, and a decoder D_theta(z_t) for reconstruction. During each training epoch, collect a minibatch of contiguous sequences, form Z_- and Z_+, and compute K_theta=Z_+Z_-^dagger using a differentiable least-squares solve or a periodically refreshed detached solve. Eigendecompose K_theta to obtain eigenvalues lambda_i and right eigenvectors u_i. For numerical stability, normalize each mode denominator with epsilon and combine conjugate-paired modes into real-valued channels. Compute rho_i using the displayed empirical formula over a held-out temporal minibatch rather than only the training batch. Define s_i=1[rho_i<=tau] for hard pruning, or s_i=exp(-rho_i^2/tau^2) for soft weighting, where tau is the 75th percentile of validation residuals during warmup. Forecast by transforming z into the eigenbasis, multiplying retained mode amplitudes by lambda_i at each step, then decoding. The paper supplies the normalized residual criterion; K estimation, eigendecomposition, and tau selection are empirical choices. Start with a 2-layer MLP encoder/decoder and m=32 on Lorenz-63, pendulum, or a small video-prediction dataset. Compare a vanilla latent linear model and an unconstrained recurrent baseline at equal parameter count. Measure one-step MSE, 50-step rollout error, spectral radius, and retained-mode count. Success is lower long-horizon error at equal one-step loss, fewer active modes, and reduced sensitivity to observation noise.
Verification
Stage 1 · Toy mechanism gate: Passed ✓
Stage 2 · Mechanism transferred to benchmark: Confirmed ✓
Stage 2 · Practical benchmark result: Inconclusive
Methodology: 8 paired seeds, permutation test (p<0.05) against a learning-rate-tuned baseline. How verification works
Stage 1 — Mechanism check agent confidence 9/10
Built a NumPy MVP for normalized Koopman modal residuals, quantile screening, and spectral forecasting. Clean eigenmodes had zero residual; observed residual energies closely matched analytic predictions across noise-variance and corruption-rate sweeps; screening removed the corrupted mode and reduced 50-step rollout MSE from 0.004739 to 0.0000290. This is a clear toy-setting win, but not yet evidence from a trained neural encoder-decoder.
- Agent confidence
- 9/10
- Baseline
- Unscreened spectral rollout MSE: 0.0047392583; retained modes: 2.
- Idea
- Residual-screened rollout MSE: 0.0000290028; retained modes: 1; validation residuals [0.0, 1.40006], threshold 0.70003. Noise-variance observed versus predicted residual-energy means were [0, 0.01653, 0.06366, 0.20961, 0.54901] versus [0, 0.01640, 0.06266, 0.21311, 0.54860]. Impulse-rate observed versus predicted values were [0, 0.01721, 0.04439, 0.09971, 0.17761, 0.30453] versus [0, 0.02042, 0.04960, 0.09473, 0.17399, 0.30027].
Limitations: Only a controlled two-mode synthetic linear latent system was tested. A neural encoder-decoder, RNN baseline, equal-parameter comparison, nonlinear Lorenz dynamics, confidence weighting, complex conjugate handling, and computational overhead were not tested.
How to run: python3 run_experiment.py
Stage 2 — Benchmark vs. tuned baseline (arXiv:2607.25086)
Ahead of the baseline (−2.5%) but not statistically significant (p=0.0554, wins 6 / 8 paired seeds).
- Benchmark
- Dynamics forecasting
- Model
- rnn_small
- Paired seeds
- 8
- Baseline mean
- 0.0012
- Idea mean
- 0.0011
- Effect (Δ)
- -0 (−2.5%; negative = idea better)
- Wins
- 6 / 8 paired seeds
- p-value
- 0.0554 (permutation test, 20 000 shuffles)
- Smallest detectable effect
- n/a
- Mechanism
- Confirmed ✓
- Practical effect
- Inconclusive
- Baseline tuning
- swept over 3 configs
The experiment used the built-in controlled-pendulum dynamics track with 400 training and 400 test examples and 15 epochs, rather than the larger default dataset or a long-horizon rollout metric. Only the residual-loss intervention was tested; no detached periodic refresh schedule, confidence weights, complex-pair handling, or separate decoder bottleneck was evaluated.
How to run: python3 stage2_koopman_bench.py
Verdict computed by deterministic test code from paired-seed statistics — not by the language model.
Stage 2 — Benchmark latest Failed ✗
Agent confidence: 9/10
Implemented the residual-screened Koopman latent bottleneck on the structurally matched dynamics track using the same rnn_small GRU/head for both systems, differing only by the residual regularization loss. The idea reduced mean test MSE from 0.0011708620 to 0.0011421148 across 8 paired seeds, with 6/8 wins, but the permutation p-value was 0.05535, so there was no significant win. The trained-model mechanism signature was confirmed: observed retained fraction 0.75 matched the predicted 75th-percentile screening fraction.
- Baseline
- lr=0.006; 8-seed test MSE mean=0.0011708620, std=0.0004510333
- Idea
- lr=0.006, alpha=0.03, quantile=0.75; 8-seed test MSE mean=0.0011421148, std=0.0004499894; paired delta=-0.0000287472; p=0.05535; 6/8 wins
- Mechanism signature
- mean residual=0.6372733; retained modes=48/64; observed retained fraction=0.75; predicted retained fraction=0.75; latent transition fit RMSE=0.0157470; confirmed=true
Benchmark result
Ahead of the baseline (−2.5%) but not statistically significant (p=0.0554, wins 6 / 8 paired seeds).
- Benchmark
- Dynamics forecasting
- Model
- rnn_small
- Paired seeds
- 8
- Baseline mean
- 0.0012
- Idea mean
- 0.0011
- Effect (Δ)
- -0 (−2.5%; negative = idea better)
- Wins
- 6 / 8 paired seeds
- p-value
- 0.0554 (permutation test, 20 000 shuffles)
- Smallest detectable effect
- n/a
- Mechanism
- Confirmed ✓
- Practical effect
- Inconclusive
- Baseline tuning
- swept over 3 configs
The experiment used the built-in controlled-pendulum dynamics track with 400 training and 400 test examples and 15 epochs, rather than the larger default dataset or a long-horizon rollout metric. Only the residual-loss intervention was tested; no detached periodic refresh schedule, confidence weights, complex-pair handling, or separate decoder bottleneck was evaluated.
How to run: python3 stage2_koopman_bench.py
Artifacts
- bench_report.json 4.0 KB View Raw
- report.md 1.5 KB View
- report_bench_2026-08-31T171917.md 4.1 KB View
- residual_screened_koopman.py 1.6 KB View Raw
- results.json 1.2 KB View Raw
- run_experiment.py 3.2 KB View Raw
- stage2_koopman_bench.py 6.7 KB View Raw