Files
jspace/results-loop/REPORT_wave3.md
T
2026-07-14 02:54:52 +02:00

96 lines
4.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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.