diff options
Diffstat (limited to 'docs/campaign/FINDINGS.md')
| -rw-r--r-- | docs/campaign/FINDINGS.md | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/docs/campaign/FINDINGS.md b/docs/campaign/FINDINGS.md index 0cb8b53..cfd6fdf 100644 --- a/docs/campaign/FINDINGS.md +++ b/docs/campaign/FINDINGS.md @@ -607,3 +607,40 @@ Full write-up: **`SESSION_2026-06-24_HOPF_DIAGNOSIS_RESREG_FIX.md`**. This pins **Infra (#14).** `--compile` EXONERATED + SAFE (compiles the free-phase `tforce`; numerically identical to eager — z150 rel-diff 1.6e-7, pure fp32; ~1.43x, ~3.3x with t2sel40). **`--tf32` UNSAFE — do NOT use** (10-bit mantissa ≈ 1e-3 perturbation; the relaxation is hyper-sensitive — ε 0.1→0.05 alone moved the wall 0.33 — so TF32 is too coarse). EP parallelism for the deep/scaling phase: no sequential backward, coupled equilibrium stack (#13) → depth-parallel, adaptive-T1 (residual-stopped) cleaner than adaptive-ε. **Lit anchor.** Hopfield-ResNet (arXiv 2509.26003) EP-trained 12 layers — but it's **conservative** (energy Φ, symmetric weights, no oscillation by construction). Confirms non-conservativity is our culprit; **we are the first to EP-train non-conservative attention** (which has the Hopf), solved via resreg/jacreg. + +--- + +## 2026-07-03 — ω/norm family REFUTED as stability signal; fingerprint story RETRACTED; eigreg v2 (true map-eig) + the "one fundamental reg" verdict + +**Trigger.** Fable judge-pass on the reg causal chain (`‖J‖_F ⟹ ω ⟹ α → res`) caught that `eig_control.num_abscissa` used *plain* power iteration on the indefinite Sym(J_nc) — which converges to the largest-|λ| end (or a mixture), not λmax. Fixed with shifted PI; then audited everything with gold-standard Lanczos (`ep_run/eig_recheck.py`, scipy eigsh LA/SA, matvec-only, B=6 z_T1 states, same seeded batches). + +**Retraction.** The `--fingerprint` story "warm s2000 = deeply contractive (num_abscissa −10.14) vs from-scratch plateau = near-boundary (+1.11); training drifts the operator toward the boundary" is **withdrawn**: both numbers were PI-mixture artifacts (sign set by which spectrum end slightly dominates). The audit table: + +| operator | λmax(Sym) | λmin(Sym) | oldPI (bug) | res(abs,150) | val | +|---|---|---|---|---|---| +| rand-init | +5.02 | −4.98 | −0.16 | 13.6 | 8.49 | +| s2000 (warm src) | **+12.84** | −15.62 | −6.43 | 2.65 | 3.10 | +| resreg-scratch | +10.64 | −9.85 | +1.40 | 6.24 | 2.24 | +| fast-adaptive | +7.89 | −7.46 | +2.41 | 1.69 | 2.18 | +| warm-fast (live) | +8.47 | −8.21 | −0.08 | 2.71 | 2.34 | +| self-restart (live) | +10.67 | −10.62 | +0.10 | 1.01 | 2.39 | + +**ω is dead here**: +5..+13 on every operator, stable and unstable alike; the *stablest* op (s2000, true α≈−0.02 per eig_probe) has the *largest* ω. Non-normality gap ω−α ≈ 10, and ω anti-correlates with stability (rand +5 → s2000 +12.8). An ω-margin penalty would fire permanently → over-constraint ≫ jacreg. Corollary: **the whole norm family (jacreg's ‖J‖_F, log-norm, ω) measures the wrong axis** on this operator; the frozen jr=0.1 floor in the ★2.09 recipe is a weak generic contraction bias, not spectral control. `num_abscissa`/`eig_penalty` demoted to diagnostics. + +**eigreg v2 = `eig_control.spec_penalty`**: soft one-sided penalty on the TRUE leading map eigenvalue |λ|(M), M = I+εJ_F, via warm-started 2-D Rayleigh-Ritz (captures the complex Hopf pair; matvec-only; aep-dynamics 'spectral' ported, applied softly). Wired to `--eigreg` / `--eig_margin 0.995`; `--fingerprint` now reports ρ/Re μ instead of ω. Smoke (`eig_v2_smoke.py`): mechanics work (fires, 11 finite grads at rand-init), BUT precision ±0.01..0.04 vs ARPACK (cluster under-resolution at s2000, field-of-values overshoot at rand-init on the non-normal M). + +**The decisive twist (`eig_v2_depth.py`, s2000, same batch, ARPACK at 3 depths):** + +| relax depth | res(abs) | top-3 |λ|(M) | +|---|---|---| +| 150 | 2.58 | 1.00880, 1.00615, 1.00509 | +| 400 | 4.6e-2 | 0.99798, 0.99788, 0.99753 | +| 800 | 3.3e-3 | 0.99942, 0.99804, 0.99698 | + +(μ=(λ−1)/ε ⇒ −0.02..−0.006 at depth — matches eig_probe's −0.024.) So: (a) the >1 readings at z_T1=150 are **unconverged-state contamination** — spec_penalty applied at the training state would punish healthy operators; use it in *measure mode*: deep-relaxed state (400+), small sub-batch, every K steps. (b) The fixed-point spectrum's top is not an isolated pair but a **band of slow modes hugging the boundary from below** — a rank-2 scalpel cannot compress a band; only broadband control (resreg) can. The Hopf failure mode is a complex pair **detaching from the band** (eig_probe: +0.44±1.37j in blown runs) — *that* is the scalpel's target. + +**Verdict on "which reg is fundamental" (the resreg+jacreg redundancy question):** +1. **Fundamental quantity = finite-horizon path growth (finite-T1 LE) — resreg's axis.** Broadband (handles the band), path-true (no state-contamination issue), and exactly the quantity EP-estimator validity needs. resreg's known weakness is its *shape*, not its axis: ρ^T1 is a cliff (silent until ρ≈1, then explosive — the live jr/res oscillation in ep_warm_fast is that cliff ringing). +2. **The "one reg" candidate: de-cliff resreg → a graded finite-horizon LE penalty (aep 'floss' ported, "floss-ept")** — penalize the measured per-step contraction rate over the last q relax steps (differentiable through q≈8–16 steps on a sub-batch), giving a linear early signal of the same fundamental quantity. resreg = its cliff-shaped special case; spec_penalty = its rank-1 approximation. +3. **spec_penalty stays as the surgical scalpel** for a detached Hopf pair (measure-mode application), **jacreg retires** from stability duty. +4. Three-arm from-scratch ablation when GPU frees: floss-ept-only vs resreg-only (never cleanly run — ROUND2 only had specnorm+jacreg0 / queued no-penalty) vs proven pair (resreg 0.2 + frozen jr 0.1) — logs res + measure-mode ρ + val. |
