summaryrefslogtreecommitdiff
path: root/design/preregistration.md
diff options
context:
space:
mode:
authorVoid Agent <void@jayrup.hermes>2026-08-15 00:00:41 +0100
committerVoid Agent <void@jayrup.hermes>2026-08-15 00:00:41 +0100
commit38d6553048808f6b53488894fdb4c83211590ad4 (patch)
tree3ab5686c8c1738bb04ba23546bd2c2d8ac1826b2 /design/preregistration.md
parent921a9ffe541e90ba120f2875401e03560eb9f163 (diff)
speedup: batched eval (46x, sieve-stub verified), run_sweep orchestrator (2-way parallel, idempotent, summaries), E1 jobs; 36 tests
Diffstat (limited to 'design/preregistration.md')
-rw-r--r--design/preregistration.md52
1 files changed, 52 insertions, 0 deletions
diff --git a/design/preregistration.md b/design/preregistration.md
index 91e5036..89e4fee 100644
--- a/design/preregistration.md
+++ b/design/preregistration.md
@@ -165,3 +165,55 @@ results were seen.
3. **P1 thresholds (replace Addendum 2's):** ≥ 3 errors total, ≥ 3 DISTINCT flagged predictions,
≥ 80% of error predictions flagged. A pure {2,3,5,7} sieve produces exactly 22 errors, 100%
flagged (5 distinct values). P2–P4 unchanged.
+
+---
+
+## Addendum 4 (2026-08-14, pre-launch — Phase 2+ sweep plan)
+
+Precedes all sweep phases. Locked before any of these runs. Infrastructure changes recorded:
+`evaluate()` now batches greedy decoding (measured 46× eval speedup: 4.72 s → 0.10 s per
+eval cycle; semantics preserved — batch-invariance is enforced by regression tests, and a
+known-model sieve stub verifies exact-match counting). New runner: `scripts/run_sweep.py`
+(2-way parallel, one thread per child, fresh deterministic dirs, idempotent skip,
+`summary.csv` aggregation). All sweep runs: CPU, same metrics, early stop, eval cadence
+(every 200) and O/H/P operationalizations as Experiment 1.
+
+### E1 — Seed replication (seeds {1, 2} × {rnn, transformer}; 4 runs)
+Identical hyperparameters to Experiment 1.
+- **"Replicated"** = same O-code and P-code across ≥ 2 of 3 seeds (0, 1, 2); RNN additionally
+ same H-code across ≥ 2 of 3.
+- Transformer O-PARTIAL + P4 in ≥ 2 seeds → partial in-range generalization + zero transfer
+ is seed-stable (a real claim).
+- RNN O4/H4 + P4 in ≥ 2 seeds → tied-cell instability + unstructured halting is seed-stable.
+- Any disagreement → report the per-seed pattern and claim nothing beyond it (high seed
+ variance is itself a finding).
+
+### E2 — Weight-decay sweep (wd ∈ {0.01, 0.1, 0.3, 1.0, 3.0} × both models, seed 0; wd=1.0 is the existing control)
+- **O1 at ≥ 1 wd value** → grokking exists for this task; the transition is
+ regularization-sensitive; that (model, wd) cell becomes the study object for later phases.
+- **No O1 anywhere + val EM rises monotonically with wd** → the memorization attractor
+ weakens with regularization, but no algorithmic basin was found at this scale.
+- **No O1 anywhere + val EM flat or declining with wd** → memorization strongly dominant;
+ heavier wd only hurts.
+- **RNN never ≥ transformer at any wd** (same-seed val EM) → weight-tying + ACT fails to
+ earn its keep at this scale (architecture-negative result).
+- Anything else → report per-cell codes + measurements, no further claim.
+
+### E3 — Learning-rate annealing (both models, seed 0; cosine 1e-3 → 1e-4)
+Targets the late-run val-EM decay. Final val EM ABOVE the constant-lr control and no
+late-run decay → the rollover is optimizer dynamics. Identical or below → the decay is
+solution instability (more fundamental).
+
+### E4 — halting=False ablation (RNN, seed 0)
+Fixed-K (K = 20) beats the ACT RNN (same seed, val EM) → ACT actively hurt it (consistent
+with H4). Equal or worse → the halt gate was not the problem.
+
+### E5 — Training-fraction sweep {40%, 50%} (both models, seed 0)
+- **O1 at a smaller fraction** → grokking needs memorization to be only barely possible
+ (the classic grokking recipe).
+- **Monotone val-EM gain as the fraction shrinks, no O1** → data pressure helps but does
+ not produce the transition.
+- **No change** → memorization dominated at every data level tested.
+
+E3–E5 run after the E1/E2 gate, at jayrup's call. Range scaling ([2, 1000]) is its own
+addendum when it becomes the active phase.