JEPA into dormouse — the wiring map, the KoLeo replacement, and the one arm to run first
Date: 2026-10-16. Read-only: no config touched, no code changed, nothing committed.
A: given dormouse’s exact forward (ONE weight-shared loop block, 2–4 iterations, byte vocab 256, KDA
linear attention, host Engram, port/src/dormouse/model/model.py:151-189), which JEPA variant and
which exact attachment point is best, and which pieces of the burn-era JEPA+KoLeo recipe (d8062d1:
6.343 vs 6.425 BPB, 3/3 seeds) to keep, drop or replace.
Builds on, does not repeat: docs/research/2026-10-16-jepa-dspark-alternatives.md (the incumbent sweep
— read it first; rows 1/1b/3/5 and §4.1 are the baseline this document moves past) and
docs/research/2026-10-15-1b-tech-verification.md. Method: full repo read (aux.rs, its call sites,
burn-jepa/{lib,mask,losses,predictor,ema}.rs, model.rs, fb.py, config.py) + 11 arXiv queries / 21
abstract reads, 2025-01→2026-10. Marks: (A) abstract-level claim · (ours) measured here, file named ·
(S) SPECULATION, no source.
- The burn wiring has neither of the two published conditions for latent prediction to beat token
prediction: the predictor sees the FULL latent (
aux.rs:225) and the target is the SAME depth (out_acc,model.rs:304-310+:430) on the SAME inputs — no input bottleneck (2212.07525, A), no “target more abstract than the student’s own state” (ProteinJEPA2605.07554, A). What is left is lagged self-distillation, which2607.23531(A) predicts will collapse on text. - The incumbent doc’s strongest anti-JEPA citation is misread.
2604.17228(A) is not a JEPA-aux A/B but conditional-depth-routing gates: the 3/3 win came from removing oracleutil/ranksupervision (its own caveat: which also cut the FLOPs proxy 1.53×→1.07×), and the JEPA-guided gate G3 beat the MLP gate G1 in 3/3 seeds. Correct the record — the case against JEPA is only ProteinJEPA’s random-initp=0.059(A) + PRISM (A, a VLM regime), weaker than it read. jepa_aux_lossbundles two signals under one weight —l1 + 0.1·koleo(aux.rs:229) ×jepa_weight(model.rs:~645), against the repo’s own rule (config.py:168-169: “the A/B attributes its verdict to ONE signal per run”).d8062d1therefore cannot say whether the 0.082 BPB came from the prediction or the regularizer — the largest open question here, answerable at zero VRAM.- KoLeo is not the published estimator here (
aux.rs:227-229):mean_dim(1)pools over time, so the statistic runs overbatchrows (10; 4 where the teacher OOMs the batch) instead of DINOv2’s thousands of patches. Its successor is the SIGReg / LeJEPA family (2511.08544, A, 2025-11-11;2609.35288λ-JEPA/SACReg, A, 2026-09-28, improves over LeJEPA), andlejepa_lossis already implemented in our own crate (burn-jepa/src/losses.rs:33) and imported nowhere. - The EMA teacher is the piece to drop. LeJEPA’s own claim is “no stop-gradient, no teacher-student,
no hyper-parameter schedulers” (A), and
2609.36227(A) gives the reason a regularizer is separable from the predictor: “an isotropy penalty … its partial derivative in the transition weights is zero.” - ONE arm first:
CE + w_reg·SIGReg, teacher-free, predictor-free, mask-free — the missing control, on position-subsampled latents. Only if it ties, the JEPA-proper assembly: causal next-latent (predict stop-gradh[p+h]fromh[p], same forward, no teacher) + SIGReg — no 2026 paper does span/char-level masked latent prediction on bytes (two queries, 0 hits), and for a causal byte LM “mask a span, predict it from before+after” is unrealisable (§1d).
1. The wiring map — five attachment points, costed in our terms
Section titled “1. The wiring map — five attachment points, costed in our terms”| # | where the signal attaches | extra forward | extra params | gradient path | published evidence (id, date, type) |
|---|---|---|---|---|---|
| a | per-iteration out_acc vs EMA teacher of the SAME model (the burn shape) |
yes — a second full forward; measured: aux off = batch 16 @ 5908 MiB, teacher on ⇒ batch 4 OOMs (ours) | +1× model, serialized in every checkpoint (train/src/lib.rs:459-490,563-581) |
L1 → JepaPredictor → out_acc → all student params; teacher no_grad-frozen (aux.rs:274-282) |
ours d8062d1 3/3; no ≤100M AR byte-LM study exists either way. Nearest: 2605.07554 2026-05-08 (A/M, protein ESM2, p=0.059 from random init), 2606.05753 2026-06-04 (A/M, VLM latents) |
| b | the FUTURE latent, stop-grad, from the same forward — predict h[p+h] from h[p]; no teacher |
no (h[p+h] is already computed in this batch) | +d_model² predictor only (or 0 if reused) |
loss → predictor → h[p] → backbone; target detached. In a causal model the predictor’s input has strictly less information than the target’s — the bottleneck (a) lacks |
technique real: 2609.36227 2026-09-28 (A, time series, its headline is a roll-out negative, silent on LM loss); 2608.05806 2026-08-06 (A/M: plain NextLat weak alone); 2607.23531 2026-07-26 (A, T-JEPA on text). Cross-batch caching instead of +h: 1 extra [b,t,d] f32 ≈ 15.7 MB + a resume-sidecar — strictly worse |
| c | against the Engram readout (predict out_acc from (hash-keys, hidden)) |
no | ~0 | self-supervised by construction | none. 2601.07372 2026-01-12 (A) argues against spending an aux here: the lookup “relieves the backbone’s early layers from static reconstruction” — it already covers the local/static part. (S) |
| d | sub-byte temporal spans, data2vec-LLM shape | yes — a real input bottleneck needs the target’s view on the UNMASKED input (2605.07554: “half-depth hidden states of a teacher given the unmasked sequence”) ⇒ a second forward, i.e. (a)’s price |
+teacher | as (a) | no byte/char-level paper found (2 queries, 0 hits). In a causal AR model “predict the masked span from before and after” is unrealisable; it degenerates to (b) with a masked prefix. (S) |
| e | drop JEPA; future-byte head + probe (incumbent verdict) | no | 196 864 = 2.14% of small (ours, fb.py:FB_PARAMS_AT_SMALL) |
CE → head → norm(out_acc) → backbone; no teacher, no detach, one plain CE |
2404.19737 2024-04-30 (A: “no overhead in training time”, “increasingly useful for larger model sizes”); the on-regime negative is 2505.22757 2025-05-28 (A: SLMs struggle with MTP). Pre-registered: AB-PROTOCOL row 1b |
Reading of the table. (a) pays the binding resource (AGENTS.md §2.2) for a signal whose own 2026 paper says it works without improving the loss; (c) has no evidence; (d) does not exist causally; (b) is the only latent-prediction shape that costs nothing and satisfies the bottleneck condition.
2. KoLeo specifically, and what 2026 replaced it with
Section titled “2. KoLeo specifically, and what 2026 replaced it with”- What it does in the burn recipe: a uniformity pressure on the time-pooled latent —
student_latent.mean_dim(1)→[b, d]→-mean(log nn_dist)with a soft-min (τ=0.25) surrogate for the row-min (aux.rs:227-229;losses.rs:63-97; DINOv22304.07193, A/M). - The sample count is the defect: it runs over
batchrows (10; 4 on the arm where the teacher OOMs the batch), not the published estimator’s thousands of patches; atn ≤ 1koleo_lossdegenerates to the constant-log(1e3) ≈ -6.908(losses.rs:66,86-97, ours). - The 2025-26 successor is the SIGReg / LeJEPA family.
2511.085442025-11-11 Balestriero & LeCun (A): isotropic-Gaussian regularisation, one trade-off hyperparameter, linear time/memory, “no stop-gradient, no teacher-student, no hyper-parameter schedulers”, ~50 lines. Already in our tree:lejepa_loss=‖mean(z)‖² + ‖cov(z) − I‖²/D(losses.rs:33-50), imported nowhere. VICReg (2105.04906, 2021) is not the successor:2607.136122026-07-15 (A, Lean-4-verified) finds “VICReg and LogDet unsafe upper bounds, PairDist a safe lower bound, and SIGReg eliminates the gap.” - 2026 split into two directions. (i) Better regulariser:
2609.352882026-09-28 λ-JEPA/SACReg (A) beats LeJEPA and VISReg on ImageNet-1k and 8-dataset transfer (LeVJEPA/V-JEPA 2 on video); its motivation is literally our defect — regularising a projection while the backbone stays rank-starved. (ii) Anti-collapse from the data rather than a prescribed geometry:2608.175422026-08-18 AC-MTM (A, inverse dynamics + NCE; matches SIGReg on average, beats it 80.0±2.0% vs 58.0±2.0% where the Gaussian becomes a bottleneck) and2609.238812026-09-20 MotionJEPA/DISReg (A: plain JEPA has a strong inductive bias towards slow features — a lagged EMA target is a slow-feature target). - Cheapest anti-collapse IF JEPA stays:
lejepa_losson [S, d], S ≈ 256 positions subsampled by stride across the batch — 3 tensor ops (mean, cov, eye), O(S·d²), cheaper than KoLeo’s O(S²) pairwise distances. Notmean_dim(1).
3. The recipe assembly — the ONE arm to implement first on the port
Section titled “3. The recipe assembly — the ONE arm to implement first on the port”Arm “reg-only” (the missing control): loss = CE + w_reg · lejepa_loss(z), z = norm(out_acc) (the
state lm_head reads, model.py:162) reshaped to [S, d] by striding the b·t positions. No teacher,
no predictor, no mask, no second forward, no new parameters. mechanism ← 2511.08544 (A) +
2609.35288 (A). w_reg ∈ {0.005 (= today’s effective 0.05 × 0.1), 0.05, 0.1} — publish which.
- why first: it isolates the only half of
d8062d1testable without paying the VRAM price — the burn term cannot separate prediction from regularisation (aux.rs:229,model.rs:~645vsconfig.py:168-169) — and2609.36227(A) licenses the control: the regulariser’s gradient into the transition weights is exactly zero. - Pre-registered A/B: 3 seeds × 2 000 steps,
preset small(9.2M), the port’s landed WSD recipe, batch × seq_len equal across arms so the eval window (81 920 B) matches (AGENTS.md§2.6); control = the port’s existing pure CE (BPB 3.001 @5k,1b-readiness-plan.md:479). Metrics in order: (1) held-out BPB at matched steps, window printed; (2) the void-check counter — aprobe::SIGREGbumped where the term is added and asserted inpreset_exec(theprobe::JEPAprecedent: a counter bumped nowhere made the arm look alive,model.rs:637-646); (3) PRISM — a linear probe onnorm(out_acc)for the byte att+1plus a corruption test (2606.05753). Win = mean BPB below the CE mean by more than the spread across the control’s own 3 seeds; inside the spread = delete (ADR-0002). - Predicted outcome (S): tie ~55-60% · win ≤0.05 BPB ~25% · loss ~20% —
d8062d1’s effect (0.082) sits at the edge of plausible seed spread, the standalone-regulariser support (2603.05924, A, single-author preprint, supervised vision) is off-regime, and the on-regime random-init study (2605.07554) replicates atp=0.059. - If it ties: arm “nextlat+SIGReg” — target
stop_grad(h[p+h])(h = 2bytes to start;2609.36227favours a window: 8-step context reaches 0.056 vs 0.778 at 16 steps), inputh[p], loss cosine, not L1 (2607.23531,2605.07554). If it wins: delete the teacher, the predictor and the mask from the JEPA lane. Either way: 2 000 steps at 9.2M falsifies cheaply and cannot confirm.
4. What to delete from the burn recipe, and the D1-style check on aux.rs
Section titled “4. What to delete from the burn recipe, and the D1-style check on aux.rs”Delete (2026 evidence says dead weight):
- The EMA teacher + its live forward (
aux.rs:274-282,model.rs:304-310): a halved legal batch and 1× model params for an objective whose own paper needs no teacher-student (2511.08544, A), plus KoLeo onmean_dim(1)(aux.rs:227-229) — the wrong estimator, superseded by SIGReg (§2). - The bundled weight
l1 + 0.1·koleounder onejepa_weight(aux.rs:229,model.rs:~645): two signals, one attribution — forbidden by the repo’s own rule (config.py:168-169), and the reasond8062d1cannot be attributed. Unramped fixedTEACHER_MOMENTUM = 0.999(aux.rs:25) goes with it: our own crate’s doc says a ramp is recommended (burn-jepa/src/lib.rs:20). - Keep, with a caveat: the offline lane
--jepa-precompute/--jepa-targets(train/src/lib.rs:173-176,728-790) is the one burn-era piece worth keeping — it converts (a)’s “husband the batch forever” into “one precompute pass, full batch in the hot loop”. Moot once the teacher is gone; if (a) is ever re-run for a shape claim, run it through this lane.
aux.rs defect list (read line by line; the file is the burn-side formula source):
- D-a — the doc is inverted, the code is right.
:169-171says “a start coversspanpositions ENDING AT ITSELF”;:176-179masksspanpositions starting at the start, andburn_jepa::mask_indices(mask.rs:31-35,c − shift(c,span) > 0= “≥1 start in(i−span, i]”) is forward too. The FNV golden (:885) pins the bits, so “fixing the prose into the code” would be caught. - D-b — the EMA arithmetic has no coverage.
:259ist.mul_scalar(m) + s.mul_scalar(1−m), and every call site in the tree passes momentum 0.0 (future_byte.rs:314,jepa_teacher_seam.rs:111,210,preset_exec.rs:158,609) — deletingmul_scalar(self.m)leaves the suite green.burn-jepa’sema_update_tracks_student(lib.rs:86) tests the scalarEmaTarget, not this function. - D-c — a same-shape param swap is silent.
ParamCollectorwalks the student (:275-276),EmaMapperthe teacher (:281); the only guard isexpect(..)on a count (:256). Two[768,768]projections swapped corrupt the teacher silently — the §1.1 defect class. - D-d — KoLeo is not the published estimator:
:227-229(see §2); atn ≤ 1it returns the constant-log(1e3)(losses.rs:66,86-97). D-e — no input bottleneck and the target is the same depth::225feeds the predictor the full latent, and the teacher target isout_accat the same depth on the same inputs (model.rs:286-310). - D-f — the wrong latent metric.
:226uses L1; three 2026 sources point to cosine/normalised (2607.23531squared-error mismatch for text;2605.07554cosine beats MSE;2606.05753cosine alignment anti-correlates with accuracy at r=−0.94 — as a metric, hence the probe).
5. New verified ids (fetched 2026-10-16, arXiv API; date = the API’s published)
Section titled “5. New verified ids (fetched 2026-10-16, arXiv API; date = the API’s published)”| id | date | who | one line |
|---|---|---|---|
| 2511.08544 | 2025-11-11 | Balestriero, LeCun | LeJEPA/SIGReg: isotropic Gaussian, one hyperparameter, no teacher-student, no stop-gradient, no schedulers; ViT-H/14 79% IN-1k linear probe. |
| 2607.23531 | 2026-07-26 | Dinh, Vo | The JEPA Paradox in Language: three conditions (predictability, non-collapse, low conditional variance); matched I-JEPA/T-JEPA on text; collapse order = MI saturation → target-variance rise → rank degeneration → cosine collapse, over 5 seeds. |
| 2609.36227 | 2026-09-28 | Wang, Cai, Hong | LeNEPA: next-latent prediction, the isotropy penalty replacing stop-grad; the isotropy penalty’s derivative in the transition weights is zero; a window beats one step; its roll-out claim is negative. |
| 2609.35288 | 2026-09-28 | Demirel, Dominé, Maiorca, Fumero, Mondelli, Locatello | λ-JEPA/SACReg: spectral anti-collapse on the backbone; beats LeJEPA and VISReg on IN-1k + 8-dataset transfer, LeVJEPA/V-JEPA 2 on video. |
| 2609.23881 | 2026-09-20 | Karmann et al. (Balestriero, Torr, …) | MotionJEPA/DISReg: plain JEPA has a slow-feature bias causing collapse; a dynamic term with no constraint on the embedding’s shape fixes it. |
| 2608.17542 | 2026-08-18 | Boylan, Hokamp | AC-MTM: anti-collapse from the transition data (inverse-dynamics + NCE), no target net/stop-grad; 80.0±2.0% vs SIGReg 58.0±2.0% on OGBench Visual Scene. |
| 2603.05924 | 2026-03-06 | Akbar | Weak-SIGReg as a general optimiser stabiliser (covariance via random sketching); ViT CIFAR-100 collapse 20.73%→72.02%. Low-credibility venue: preprint, single author. |
| 2605.27734 | 2026-05-26 | Korchinski, Favero, Wyart | Latent prediction needs constant samples in latent depth vs exponential for token-level SSL — for a hierarchical latent, not a lagged self-target. |
| 2608.28625 | 2026-07-31 | Zuo, de la Clergerie, Sagot | SciJEPA: asymmetric within-document prediction (title+abstract→method→conclusion); plain predictive training loses to contrastive, SIGReg closes much of the gap. |
| 2601.07372 | 2026-01-12 | Cheng et al. (DeepSeek) | Engram: conditional memory as a sparsity axis; the lookup frees the backbone’s early layers from static reconstruction. |
| 2607.13612 | 2026-07-15 | Arnez, Gomez-Villa | SIGReg as variational free energy: VICReg/LogDet unsafe upper bounds, PairDist safe lower, SIGReg eliminates the gap; Lean 4-verified. |
| 2105.04906 | 2021-05-11 | Bardes, Ponce, LeCun | VICReg: variance + invariance + covariance — real, but ranked unsafe by 2607.13612, so not the KoLeo successor. |
| 2604.17228 | 2026-04-19 | Lin | Correction: Revisiting Auxiliary Losses for Conditional Depth Routing — routing gates at 157.5M. The 3/3 win is from removing oracle util/rank (confounded with −39% FLOPs); the JEPA-guided gate G3 beat G1 3/3. Not a JEPA-aux negative. |
| 2601.16531 | 2026-01-23 | Lin | Engram-Nine (already in 2026-10-15-1b-tech-verification.md); carried because aux.rs’s KoLeo and Engram paths both touch hashed keys. |
6. VERIFIED (sourced) vs SPECULATION (my inference)
Section titled “6. VERIFIED (sourced) vs SPECULATION (my inference)”VERIFIED. Every id above resolved through the API on 2026-10-16 at the date shown; numbers are the
authors’ abstract-level claims unless marked (ours). Ours, from the tree: the JEPA target is out_acc
at the same depth on the same inputs (model.rs:286-310, :430-431); the predictor is fed the unmasked
latent (aux.rs:225); KoLeo runs on [b,d] (aux.rs:227-229); the term is l1 + 0.1·koleo under one
weight (aux.rs:229, model.rs:~645); every ema_update call site passes momentum 0.0; lejepa_loss
exists at losses.rs:33 and is imported nowhere; the port refuses JEPA/DSpark (config.py:181-182) and
refuses aux_fb_weight with them (config.py:364-372); the fb head is 196 864 params, one plain CE, with a
fb=<ran>/<asked> counter (fb.py:44,105-120, train/loop.py:47-58); 2604.17228’s misreading stands.
SPECULATION (mine, no source). S1 that a regulariser-only term is the right first arm — the
sizing (3 seeds × 2 000 steps) and the attribution argument are mine, and 2603.05924 is off-regime.
S2 that a causal next-latent target escapes 2607.23531’s conditional-variance collapse because the
target is a deterministic function of the input rather than one of several valid completions — the paper’s
conditions support this reading, the paper does not test it. S3 the predicted 55-60% tie in §3: an
inference from our own effect size and the control’s unknown spread, not a measurement. S4 that a
corruption test would show the burn JEPA term is not load-bearing (the incumbent doc’s S4, unchanged).
S5 that an inverse-dynamics/NCE anti-collapse (2608.17542) fits an enumerable 256-symbol byte vocabulary.
I cannot answer on available information: (i) whether any 2026 study gives a latent-prediction aux
win on an AR byte-level or ≤100M LM at the loss — none exists in either direction; (ii) whether a
char/byte-level span-masked latent objective has ever been published — two targeted queries returned
zero relevant hits; (iii) the VRAM cost of any draft/JEPA head in the published record.
7. Open questions
Section titled “7. Open questions”- Does the corruption test show
d8062d1’s contribution is load-bearing onout_acc? One checkpoint, zero the aux path, re-score — the cheapest experiment in this document. - What is the control’s own 3-seed spread at 9.2M/2 000 steps? Nothing in §3 can be decided before it
is printed, and
d8062d1never printed it. - Does SIGReg-only reproduce 6.343? That arm decides whether the teacher exists at all. And
docs-site/tools/manifest.mjsneeds a line for this document beforenpm run checkis green — not done.
8. Sources
Section titled “8. Sources”arXiv, fetched 2026-10-16 via the API: 2105.04906 2021-05-11 · 2212.07525 (data2vec 2.0, via
burn-jepa/src/lib.rs:13) · 2304.07193 (DINOv2/KoLeo, via losses.rs:15) · 2404.19737 2024-04-30 ·
2505.22757 2025-05-28 · 2511.08544 2025-11-11 · 2601.07372 2026-01-12 · 2603.05924 2026-03-06 ·
2604.17228 2026-04-19 (corrected here) · 2605.07554 2026-05-08 · 2605.27734 2026-05-26 ·
2606.05753 2026-06-04 · 2606.30356 2026-06-29 · 2607.13612 2026-07-15 · 2607.23531 2026-07-26 ·
2608.05806 2026-08-06 · 2608.17542 2026-08-18 · 2608.28625 2026-07-31 · 2609.23881 2026-09-20 ·
2609.35288 2026-09-28 · 2609.36227 2026-09-28. Repo: crates/dormouse-core/src/{aux,model,future_byte}.rs · vendor/dormouse-fused/crates/burn-jepa/src/{lib,mask,losses,predictor,ema}.rs ·
crates/dormouse-train/src/lib.rs · crates/dormouse-core/tests/{jepa_teacher_seam,preset_exec}.rs ·
port/src/dormouse/{config.py,model/{model,fb}.py,train/loop.py} · benches/history.tsv:51-56 ·
AGENTS.md §2.2/§3.2 · docs/decisions/2026-10-15-1b-readiness-plan.md:477-479.