investigate: continuous AR predict warmup (cold vs warm u0) - #476
investigate: continuous AR predict warmup (cold vs warm u0)#476Saswatsusmoy wants to merge 2 commits into
Conversation
|
Hey @MartinuzziFrancesco — following up on the warmup deferral from #456. You asked to investigate warmup as a separate PR rather than land it inside ContinuousESN. This draft is that investigation: no package API change, harness under cd benchmarks/continuous_warmup
julia --project=. -e 'using Pkg; Pkg.develop(path="../.."); Pkg.instantiate()'
julia --project=. run.jl # full analysis (~5 min)
# optional plumbing check: julia --project=. run.jl --smokeWriteup: Full matrix config (#456 scale)
Experimental AR loop ( The actual story: short-horizon free-run (ContinuousESN)Full-horizon NRMSE over all 1250 steps is high for both once chaos has diverged (cold 1.48, warm 1.23). That is not the interesting metric. The free-run quality gap shows up in the first few Lyapunov times:
At 2–3 t_λ, warm is ~0.09 vs cold ~1.3–1.5 — same qualitative gap as the #456 Lorenz probe (cold ~1.5 → warm ~0.11). Cold AR looks like a broken model; it is mostly a missing warm-start. Valid prediction time (error threshold 0.5)
Even a short teacher-forced warmup (K=10) lifts usable free-run from ~0.2 → ~5 t_λ. Warmup time grid must use unit windows ( Seed ranking (why warm must be explicit)
Wrong non-zero seeds are much worse than cold. Warm is not “any Cross-checks
Structural (why the API has nowhere to put this today)
So continuous AR always cold-starts. Public warm workaround for generic SciML reservoirs: Wall times (order-of-magnitude — not a perf PR)
Warm vs cold AR cost is comparable; the extra cost of warm is mainly one teacher-forced collect for API lean (from the full data)
Working preference: ship What I’d like your read on
I’ll keep this PR draft until you’ve had a chance to push back on the shape. Happy to add more seeds / HP sweeps if you want a specific plot before locking the API. Thanks! |
|
CI note: this draft is investigation-only ( @MartinuzziFrancesco — findings stand on the full-matrix comment above; no need to wait on checks. |
|
Temporarily closing to stop the Actions matrix on this investigation-only draft (contributor can't cancel upstream runs — 403). Reopening as draft immediately; CI remains out of scope. |
|
sorry it took me so long to get to this. my main question in this issue was why is the warmup needed in the first place. after all, also nice idea on the |
Add benchmarks/continuous_warmup to measure cold vs warm reservoir state at continuous autoregressive predict time (deferred from SciML#456). No package src/ changes — experimental seeded AR loop only.
a870808 to
04c9f44
Compare
|
Hey @MartinuzziFrancesco — thanks for the read, no rush. On “why warmup if discrete doesn’t need it?”: continuous doesn’t need a special warmup concept — it’s missing the thing discrete already does. After Fully with you on the reorder:
This draft stays evidence-only. I’ll open the product PR for Thanks! |
Note
CI is out of scope for this draft. Investigation-only harness under
benchmarks/(no packagesrc//ext/changes). Full test matrix / Runic / Downgrade are not meaningful here and runs on this branch have been cancelled. Please treat red checks as expected until an eventual code PR.Summary
Investigation-only follow-up to the warmup discussion deferred from #456.
No package
src//ext/changes. Harness lives underbenchmarks/continuous_warmup/.Related: #397 · #456 · #467 (perf is separate)
Two run modes
julia --project=. run.jl --smokejulia --project=. run.jlFull config + numbers:
results/FINDINGS.md·summary_full.mdFull-matrix headline (ContinuousESN, N=300)
Short-horizon NRMSE (warm = train-terminal
u0):VPT (threshold 0.5): cold 0.22 t_λ → K=10 warmup 4.87 t_λ.
Structural: continuous
sthas no carry aftertrain!; discrete does. Seededu0=0bit-matches package coldpredict.remake(prob; u0=…)≡ experimental warm onSciMLProblemReservoir.Wrong seeds (randn / shuffled terminal) are catastrophic (~13 NRMSE) — worse than cold. Warm must be dynamically consistent.
Candidate API (after full data)
predict(...; initial_state=u0)predict(...; warmup_data=W)stChecklist
Questions for @MartinuzziFrancesco
initial_state,warmup_data, or both first?st?benchmarks/long-term?Draft until design is locked. Implementation is a follow-up PR.