track protocol pre-registrations and interim report in git

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Nils
2026-07-14 02:54:52 +02:00
co-authored by Claude Fable 5
parent 42304aacf8
commit 6c39c38eb9
2 changed files with 151 additions and 0 deletions
+95
View File
@@ -0,0 +1,95 @@
# Interim report: workspace-loop retrofit, through wave 3
2026-07-13/14 · gemma-4-E2B-it (frozen throughout) · DGX Spark
All eval numbers: held-out test splits, greedy decode, execution/answer-verified.
Full protocol: `PROTOCOL_UNIFIED.md`; methods: `../WORKSPACE_LOOPING.md`.
## Headline finding
A 1.6M-parameter merge adapter (0.03% of the model) at the L13→L14 boundary,
trained ~30 min on ~280 self-labeled items, lets the frozen model **loop its
workspace band (L1430) over the prompt k times before writing code** —
converting plan-dependent failures into successes:
**MBPP full test set (500 items), hard bucket (55 plan-only items), k=4:**
| seed | hard pass@1 | overall |
|---|---|---|
| baseline (k=0) | 5.5% | 51.8% |
| seed 0 | **43.6%** | 53.6% |
| seed 1 | **41.8%** | 53.8% |
| seed 2 | **30.9%** | 51.8% |
Mean hard-bucket effect ≈ 7× baseline; overall at-or-above baseline for all
seeds (no net tax). Convergent mechanism evidence: the trained loop is a hard
fixed-point iteration (cos→1.000 by k≈4), and the J-lens shows latent-concept
sharpening across iterations (~8× over untrained control on the probe task).
## Attribution: the loop is the ingredient (code), not the weights
Same data, same parameter count, same boundary — only the mechanism varies
(MBPP 250-item subset, hard bucket):
| arm | hard pass@1 |
|---|---|
| baseline | 3.6% |
| untrained loop (α-merge only) | 17.9% |
| trained NO-loop adapter (weights control) | 17.9% |
| trained loop | **42.946.4%** |
The trained feedforward control lands exactly on the untrained-loop number:
~18% is what perturbation + format alignment buys; the remaining ~28 points
require the recurrence.
## The boundary: math inverts the picture
No recurrent variant beats plain weights on GSM8K. Four-arm grid (hard bucket):
| GSM8K hard | prompt-side only | touches generation |
|---|---|---|
| feedforward weights | **11.8%** (best) | 4.7% (pause control) |
| recurrence | 6.38.7% (prompt-loop) | 9.4% (carry, beats FF 2× in-harness) |
Two orthogonal effects: (1) perturbing free-running generation positions is
costly for either mechanism; (2) recurrence beats weights only where a state
must evolve (generation side), and loses where it doesn't (static prompt).
Interpretation: the loop performs **plan refinement**. Code needs a plan
(loop wins); math needs answer-time computation that one frozen band pass per
step cannot supply at 2B (CoT tokens remain load-bearing). Overall GSM
accuracy: no variant beats the 10.5% baseline. (Hard-bucket cells carry an
outcome-selection caveat — greedy labels; sampled relabeling in progress —
so the math story rests on the overall numbers.)
## Secondary findings
- **Unified (mixed-task) training regressed both tasks** vs dedicated
adapters (MBPP 46.8% vs 52.0% at pre-registered k=2; GSM no better).
CE-level parity between arms did NOT predict generation parity.
- **Gated deployment** (logistic probe on the k=0 workspace state, STaR
labels as supervision): 52.0% overall with easy items fully preserved
(97.5%); gate recall 64%, precision 19% — the current ceiling; threshold/
feature work is CPU-only follow-up.
- **Frozen-prompt KV-cache equivalence**: looped prompt states are constant
across token steps (causality), so loop once + cached generation is
bit-identical and ≥3.5× faster. Latent planning is prefill-shaped
(parallel, compute-dense) — its economics improve with model scale,
unlike serial CoT decode.
- **Cross-token carry (design C)** is stable and the first recurrent variant
to beat its own baseline on math overall (12.9% vs 10.2%), via latent pause
positions, but does not beat the weights control; p=6 ≤ p=2 (no
latent-depth scaling).
- **Fixed operational traps** documented in `../LESSONS.md`: plan-pass
truncation masquerading as "planning hurts"; stop-string matching the
opening fence (pass@1=0 artifact); full-vocab logits OOM (earlyoom silent
kills); KV-cache append in layer re-runs; small-pool overfitting ~step 300;
val-CE checkpoint selection does not track generation accuracy.
## Status of caveats
Resolved: post-hoc k (pre-registered k=2 before unified test numbers);
weights-vs-loop attribution (FF arms); seed dependence (3 seeds, wave 5 adds
2 more); same-harness baselines. In progress tonight: outcome-selection on
hard buckets (sampled relabeling); equal-FLOPs explicit-planning reference;
depth generalization beyond trained k; lens battery at N=20; **12B
replication** (the scale question). Not addressed: second synthesis domain,
base-model diversity beyond gemma, easy-dip elimination.