diff options
Diffstat (limited to 'design/preregistration.md')
| -rw-r--r-- | design/preregistration.md | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/design/preregistration.md b/design/preregistration.md index f800461..30f731f 100644 --- a/design/preregistration.md +++ b/design/preregistration.md @@ -92,3 +92,55 @@ The interpretation matrix (O/H/P codes) above is NOT amended; only setup details - Giannou et al. (2023), "Looped Transformers as Programmable Computers", arXiv:2301.13196 - Xu et al. (ICLR 2020), "What Can Neural Networks Reason About?", arXiv:1905.13211 - Xu et al. (2021), "How Neural Networks Extrapolate: From Feedforward to Graph Neural Networks", arXiv:2009.11848 + +--- + +## Addendum 2 (2026-08-14, pre-launch — operationalization + correctness fixes) + +Trigger: OpenAI Codex code review (experiment repo `design/reviews/codex-review.md`). +The interpretation matrix is unchanged; this addendum (a) locks the code thresholds that the +prose left unquantified, and (b) records setup correctness fixes. Everything below is +pre-launch and pre-run. + +### Operationalization of O/H/P codes (thresholds now locked) + +- **O1:** train EM ≥ 0.95 for ≥ 10 CONSECUTIVE evals (window start `sat_start`), THEN val EM + reaches ≥ 0.9 at eval `hi` with `hi ≥ sat_start + 10` (strictly after the window), where the + last eval with val ≤ 0.2 (`lo`) satisfies `hi - lo ≤ 5`. +- **O2:** train EM ≥ 0.95 sustained AND val EM never reaches 0.9 AND final val EM ≤ 0.3. +- **O3:** train EM ≥ 0.95 sustained AND val EM reaches 0.9 but not via the O1 pattern. +- **O4:** train EM never sustained at ≥ 0.95 for 10 evals (setup/optimization failure). +- **O-PARTIAL** (new — the original matrix left this region unspecified): train saturated, + val never reaches 0.9, final val EM in (0.3, 0.9). Reported as measurements, interpreted + cautiously as partial in-range generalization; NOT retrofitted into O1/O2/O3. +- **H1:** mean steps at run end ≤ min_steps + 0.5 (collapse to the floor — see fix 2: with + min_steps = 2 the floor is 2, so literal "collapse to 1" is impossible by construction). +- **H2:** mean steps ≥ K − 0.5 (never learned to halt). +- **H3:** min_steps + 0.5 < mean < K − 0.5 AND Pearson ρ(gap-to-next-prime, steps) ≥ +0.3 + (positive correlation = larger gap consumes more compute steps). +- **H4:** intermediate but ρ < 0.3 (halt signal noisy/unused). +- **P1:** ≥ 3 of {121, 143, 169, 187} wrong AND ≤ 6 total errors AND all errors within the flagged set. +- **P2:** scattered errors not matching P1/P3/P4. +- **P3:** probe accuracy ≥ 85% (checked after P4). +- **P4:** > 50% of trivial-composite inputs (even or multiple of 5) wrong. + +### Correctness fixes (codex review) + +1. **Layout invariance (BLOCKER).** Inputs are now LEFT-padded to a fixed global length + (3 digits for [2,100]) in EVERY context — training batches, eval, greedy decoding; outputs + right-padded to the global length (4 incl. EOS). Previously batch-max padding made an + example's representation depend on its batchmates (RNN pad steps transformed the state; + transformer logit positions misaligned and absolute position embeddings shifted). + RNN pad steps are now exact no-ops. Regression tests: mixed-batch vs singleton logit + invariance for both models. +2. **min_steps off-by-one.** Halting probs forced to 0 only for the first `min_steps − 1` + steps (was: first `min_steps`), so the earliest halt is step `min_steps` — matching + "execute at least min_steps steps". +3. **integers vocab EOS alias.** Integers-mode vocab is now `next_prime(range_end) + 2`, so + the value token 101 (= next_prime(100)) is NOT aliased with EOS. Boundary test added. +4. **Rerun protection.** train.py refuses to run if `metrics.csv` exists (append + header + would corrupt provenance). Fresh `--out_dir` required per run. +5. **Checkpoint-selection honesty.** eval reports BOTH `best.pt` (val-selected — flagged as + selection-holed) and `last.pt` (unselected); probe + halting analyses use `last.pt`. +6. **Dead config removed:** `halt_eps` (was never read). +7. **`run_meta.json`:** python/torch/numpy versions, device, thread count recorded per run. |
