Qwen Structural Compiler Attribution Ablation
The one idea you need
The model turns each problem into a 24-step recipe of clock-style arithmetic — numbers wrapping like hours on a dial — which a built-in calculator then runs. Like a pianist handed the whole score but drilled on easy passages first, it needs graded practice, not special wiring.
The question
What makes a small model write long, 24-step arithmetic programs: practicing easy-to-hard, or a trick that grows short programs by copying earlier steps into new ones?
What we found
It's the practice schedule. Give the model its full size from the start, then feed examples easy-to-hard — 8 steps, then 16, then 24 — and it solves nearly every standard 24-step program (about 97%). The popular guess, growing short programs by copying earlier steps into the new ones, managed under 2%. And training only up to 16 steps, then testing at 24, got exactly zero.
Why it matters
To teach a small model a hard multi-step task, invest in an easy-to-hard training schedule at full capacity, not tricks that stitch long programs from copied pieces — and never assume it handles lengths beyond what you trained on.
On this page
Results at a glance 7
How to read
Each cluster is one training approach; the three bars show 24-step accuracy for standard wording, unfamiliar wording, and matched twin-prompt pairs. Taller bars are better.
Takeaway → The full-size easy-to-hard approach towers over all others on standard wording and twin-prompts; copy-and-grow only shows up on unfamiliar wording.
Data table
| training arm | standard wording | held-out wording | paired consistency |
|---|---|---|---|
| max-24 + curriculum | 96.9% | 46.9% | 89.1% |
| max-24 no curriculum | 4.7% | 18.8% | 9.4% |
| expand (copy slots) | 1.6% | 51.6% | 29.7% |
| expand (random slots) | 1.6% | 6.2% | 14.1% |
| train to 16, eval 24 | 0% | 1.6% | 1.6% |
Technical framing
Final length-24 accuracy by training arm — The max-24 curriculum compiler dominates on standard and paired splits; copied structural expansion only helps on held-out wording.
How to read
The horizontal axis is program length from 8 to 24 steps; each line is one training approach; higher is better.
Takeaway → Every approach stays high (81% or better) at 8 and 16 steps, then all but the full-size easy-to-hard approach collapse toward zero at 24 steps.
Data table
| program length | max-24 + curriculum | max-24 no curriculum | expand (copy slots) | expand (random slots) | train to 16, eval 24 |
|---|---|---|---|---|---|
| 8 | 100% | 100% | 100% | 98.4% | 100% |
| 16 | 100% | 100% | 100% | 93.8% | 81.2% |
| 24 | 96.9% | 4.7% | 1.6% | 1.6% | 0% |
Technical framing
Accuracy vs program length at the final checkpoint (standard split) — Every arm scores 81%+ at lengths 8 and 16; only the curriculum-trained max-24 compiler carries accuracy to length 24.
How to read
The horizontal axis is training progress; the lines track the winning approach's 24-step accuracy for standard wording, unfamiliar wording, and twin-prompt pairs; higher is better.
Takeaway → All three lines stay low, then jump sharply in the final stretch — the long-program skill emerges suddenly, not gradually.
Data table
| training step | standard wording | held-out wording | paired consistency |
|---|---|---|---|
| 300 | 4.7% | 0% | 1.6% |
| 450 | 34.4% | 1.6% | 18.8% |
| 750 | 96.9% | 46.9% | 89.1% |
Technical framing
Winning arm's length-24 accuracy across curriculum stages — Length-24 skill in the max-24 curriculum arm emerges late, jumping sharply in the final curriculum stage.
How to read
Each cluster is a training approach; two bars compare 24-step accuracy on standard wording versus reworded-but-familiar prompts; higher is better.
Takeaway → The copy-and-grow approach scores 75% on reworded prompts but under 2% on standard ones — wording, not just the approach, drives failures.
Data table
| Training arm | Standard templates (L24) | Paraphrase templates (L24) |
|---|---|---|
| max24_curriculum | 96.9% | 81.2% |
| max24_no_curriculum | 4.7% | 15.6% |
| expand_copy | 1.6% | 75% |
| expand_random_new_slots | 1.6% | 29.7% |
| train_to16_eval24 | 0% | 0% |
Technical framing
Length-24 accuracy: standard wording vs seen-family paraphrases — expand_copy inverts: 75% on paraphrases but 1.6% on standard wording, so template wording, not just arm, drives length-24 failures.
How to read
Each cluster is a training approach; the bars show how often it gets both halves of a matched prompt pair right at 24 steps, for familiar and unfamiliar wording; higher is better.
Takeaway → Every approach except the winner drops to essentially zero — none of the others can reliably nail both twin prompts.
Data table
| Training arm | Paired split (L24) | Paired held-out split (L24) |
|---|---|---|
| max24_curriculum | 78.1% | 56.2% |
| max24_no_curriculum | 0% | 0% |
| expand_copy | 0% | 0% |
| expand_random_new_slots | 0% | 3.1% |
| train_to16_eval24 | 0% | 0% |
Technical framing
Paired-prompt consistency at length 24: only the curriculum arm holds up — Pairwise both-correct rates collapse to ~0% for every arm except the max-24 curriculum winner (78.1% / 56.2%).
How to read
Each cluster is a training approach; one bar is final-answer accuracy, the other is the share of intermediate steps traced correctly, on standard 24-step programs; higher is better.
Takeaway → Losing approaches keep 62-86% of intermediate steps right while final answers sink near zero — errors cluster in the last few steps.
Data table
| Training arm | Final-answer executor accuracy | Correct state-prefix fraction |
|---|---|---|
| max24_curriculum | 96.9% | 99.7% |
| max24_no_curriculum | 4.7% | 82.2% |
| expand_copy | 1.6% | 85.9% |
| expand_random_new_slots | 1.6% | 67.9% |
| train_to16_eval24 | 0% | 62% |
Technical framing
Failing arms still trace most intermediate states at length 24 — Losing arms keep 62-86% of the intermediate state trace correct despite near-zero final answers, so errors concentrate in late steps.
How to read
The horizontal axis is training progress; the lines show accuracy on short, unfamiliar-wording programs for three approaches as longer programs enter training; higher is better.
Takeaway → The winning approach sags mid-training as longer programs arrive, then rebounds to about 91%, while one control ends lower near 58%.
Data table
| Training step | max24_curriculum | expand_copy | expand_random_new_slots |
|---|---|---|---|
| 300 | 81.2% | 75% | 81.2% |
| 450 | 34.4% | 90.6% | 96.9% |
| 750 | 90.6% | 79.7% | 57.8% |
Technical framing
Held-out length-8 accuracy dips mid-training as longer programs arrive — Short held-out programs are transiently forgotten: max24_curriculum drops to 34.4% mid-run before recovering; expand_random ends down at 57.8%.
In the author’s words from the Report · “Results”
The strongest arm is the max-24 compiler trained from the start with the staged length curriculum. Copied structural expansion is not the winning explanation in this run.
Overview
This standalone experiment tests why a tuned executable latent compiler learns length-24 modular programs.
The arms isolate:
- Copy-based structural expansion.
- Same curriculum with a max-24 compiler from the start.
- Expansion with random initialization for newly introduced slots.
- No-curriculum max-24 training.
- Training only through length 16, then evaluating length 24.
Large checkpoints are stored outside this directory:
/workspace/large_artifacts/qwen_structural_compiler_attribution_ablation/checkpoints
Report
Rendered from reports/structural_compiler_attribution_ablation_report.md
Question
Which factor causes a one-shot executable latent compiler to learn length-24 modular programs: copied structural expansion, curriculum alone, random-slot expansion, no-curriculum training, or length extrapolation?
Method
- Every arm uses a Qwen causal LM plus a direct executable compiler head.
- The compiler predicts one initial value plus typed operation and argument slots.
- A differentiable modular executor supervises final answer probability and intermediate state traces.
- The main controls separate copied structural expansion from curriculum, random new slots, no-curriculum training, and length extrapolation.
- Evaluation includes standard templates, seen-family paraphrases, held-out wording templates, and paired consistency splits.
Runs
| run | arm | elapsed_sec | model | stage_max_steps | stage_steps | train_examples | gpu |
|---|---|---|---|---|---|---|---|
| main_expand_copy_s750 | expand_copy | 1914 | Qwen/Qwen3-4B | 8,16,24 | 300,150,300 | 512 | NVIDIA RTX 6000 Ada Generation |
| main_expand_random_new_slots_s750 | expand_random_new_slots | 1915 | Qwen/Qwen3-4B | 8,16,24 | 300,150,300 | 512 | NVIDIA RTX 6000 Ada Generation |
| main_max24_curriculum_s750 | max24_curriculum | 2726 | Qwen/Qwen3-4B | 24,24,24 | 300,150,300 | 512 | NVIDIA RTX 6000 Ada Generation |
| main_max24_no_curriculum_s750 | max24_no_curriculum | 2697 | Qwen/Qwen3-4B | 24 | 750 | 512 | NVIDIA RTX 6000 Ada Generation |
| main_train_to16_eval24_s750 | train_to16_eval24 | 2442 | Qwen/Qwen3-4B | 24 | 750 | 512 | NVIDIA RTX 6000 Ada Generation |
| pilot_expand_copy | expand_copy | 105.5 | Qwen/Qwen3-4B | 8,16,24 | 30,15,30 | 96 | NVIDIA RTX 6000 Ada Generation |
| pilot_expand_random_new_slots | expand_random_new_slots | 106.3 | Qwen/Qwen3-4B | 8,16,24 | 30,15,30 | 96 | NVIDIA RTX 6000 Ada Generation |
| pilot_max24_curriculum | max24_curriculum | 157 | Qwen/Qwen3-4B | 24,24,24 | 30,15,30 | 96 | NVIDIA RTX 6000 Ada Generation |
| pilot_max24_no_curriculum | max24_no_curriculum | 134.7 | Qwen/Qwen3-4B | 24 | 75 | 96 | NVIDIA RTX 6000 Ada Generation |
| pilot_train_to16_eval24 | train_to16_eval24 | 125.3 | Qwen/Qwen3-4B | 24 | 75 | 96 | NVIDIA RTX 6000 Ada Generation |
| smoke_random_new_slots | smoke_random_new_slots | 10.16 | Qwen/Qwen3-4B | 8,16,24 | 1,1,1 | 4 | NVIDIA RTX 6000 Ada Generation |
Results
Attribution summary, final length-24 executable accuracy:
| arm | run | standard_L24 | heldout_L24 | paired_L24 | paired_heldout_L24 |
|---|---|---|---|---|---|
| max24_curriculum | main_max24_curriculum_s750 | 96.9% | 46.9% | 89.1% | 78.1% |
| max24_no_curriculum | main_max24_no_curriculum_s750 | 4.7% | 18.8% | 9.4% | 7.8% |
| expand_copy | main_expand_copy_s750 | 1.6% | 51.6% | 29.7% | 25.0% |
| expand_random_new_slots | main_expand_random_new_slots_s750 | 1.6% | 6.2% | 14.1% | 1.6% |
| train_to16_eval24 | main_train_to16_eval24_s750 | 0.0% | 1.6% | 1.6% | 0.0% |
The strongest arm is the max-24 compiler trained from the start with the staged length curriculum. Copied structural expansion is not the winning explanation in this run.
Final length-24 splits by arm:
| arm | run | split | executor_accuracy | program_exact | state_prefix_fraction | executor_pair_both_correct | compiler_pair_state_consistency |
|---|---|---|---|---|---|---|---|
| expand_copy | main_expand_copy_s750 | standard_L24 | 1.6% | 0.0% | 85.9% | ||
| expand_copy | main_expand_copy_s750 | paraphrase_L24 | 75.0% | 75.0% | 97.3% | ||
| expand_copy | main_expand_copy_s750 | heldout_L24 | 51.6% | 51.6% | 68.6% | ||
| expand_copy | main_expand_copy_s750 | paired_L24 | 29.7% | 29.7% | 91.0% | 0.0% | 9.4% |
| expand_copy | main_expand_copy_s750 | paired_heldout_L24 | 25.0% | 23.4% | 74.1% | 3.1% | 0.0% |
| expand_random_new_slots | main_expand_random_new_slots_s750 | standard_L24 | 1.6% | 0.0% | 67.9% | ||
| expand_random_new_slots | main_expand_random_new_slots_s750 | paraphrase_L24 | 29.7% | 29.7% | 85.6% | ||
| expand_random_new_slots | main_expand_random_new_slots_s750 | heldout_L24 | 6.2% | 4.7% | 46.5% | ||
| expand_random_new_slots | main_expand_random_new_slots_s750 | paired_L24 | 14.1% | 14.1% | 77.5% | 0.0% | 0.0% |
| expand_random_new_slots | main_expand_random_new_slots_s750 | paired_heldout_L24 | 1.6% | 0.0% | 56.6% | 0.0% | 0.0% |
| max24_curriculum | main_max24_curriculum_s750 | standard_L24 | 96.9% | 96.9% | 99.7% | ||
| max24_curriculum | main_max24_curriculum_s750 | paraphrase_L24 | 81.2% | 81.2% | 98.8% | ||
| max24_curriculum | main_max24_curriculum_s750 | heldout_L24 | 46.9% | 45.3% | 85.3% | ||
| max24_curriculum | main_max24_curriculum_s750 | paired_L24 | 89.1% | 89.1% | 99.3% | 78.1% | 78.1% |
| max24_curriculum | main_max24_curriculum_s750 | paired_heldout_L24 | 78.1% | 75.0% | 91.1% | 56.2% | 50.0% |
| max24_no_curriculum | main_max24_no_curriculum_s750 | standard_L24 | 4.7% | 0.0% | 82.2% | ||
| max24_no_curriculum | main_max24_no_curriculum_s750 | paraphrase_L24 | 15.6% | 14.1% | 89.1% | ||
| max24_no_curriculum | main_max24_no_curriculum_s750 | heldout_L24 | 18.8% | 18.8% | 81.6% | ||
| max24_no_curriculum | main_max24_no_curriculum_s750 | paired_L24 | 9.4% | 7.8% | 84.9% | 0.0% | 0.0% |
| max24_no_curriculum | main_max24_no_curriculum_s750 | paired_heldout_L24 | 7.8% | 6.2% | 82.4% | 0.0% | 0.0% |
| train_to16_eval24 | main_train_to16_eval24_s750 | standard_L24 | 0.0% | 0.0% | 62.0% | ||
| train_to16_eval24 | main_train_to16_eval24_s750 | paraphrase_L24 | 0.0% | 0.0% | 69.6% | ||
| train_to16_eval24 | main_train_to16_eval24_s750 | heldout_L24 | 1.6% | 0.0% | 61.9% | ||
| train_to16_eval24 | main_train_to16_eval24_s750 | paired_L24 | 1.6% | 0.0% | 65.3% | 0.0% | 0.0% |
| train_to16_eval24 | main_train_to16_eval24_s750 | paired_heldout_L24 | 0.0% | 0.0% | 60.7% | 0.0% | 0.0% |
| arm | run | stage | split | global_step | max_steps | executor_accuracy | program_exact | state_prefix_fraction | state_all_exact | executor_pair_both_correct | compiler_pair_state_consistency | length |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| expand_copy | main_expand_copy_s750 | stage1_max8 | heldout_L8 | 300 | 8 | 75.0% | 73.4% | 84.2% | 0.7344 | 8 | ||
| expand_copy | main_expand_copy_s750 | stage1_max8 | paired_L8 | 300 | 8 | 100.0% | 100.0% | 100.0% | 1 | 100.0% | 100.0% | 8 |
| expand_copy | main_expand_copy_s750 | stage1_max8 | paired_heldout_L8 | 300 | 8 | 82.8% | 82.8% | 91.8% | 0.8281 | 65.6% | 65.6% | 8 |
| expand_copy | main_expand_copy_s750 | stage1_max8 | paraphrase_L8 | 300 | 8 | 98.4% | 98.4% | 98.4% | 0.9844 | 8 | ||
| expand_copy | main_expand_copy_s750 | stage1_max8 | standard_L8 | 300 | 8 | 100.0% | 100.0% | 100.0% | 1 | 8 | ||
| expand_copy | main_expand_copy_s750 | stage2_max16 | heldout_L8 | 450 | 16 | 90.6% | 90.6% | 93.8% | 0.9062 | 8 | ||
| expand_copy | main_expand_copy_s750 | stage2_max16 | paired_L8 | 450 | 16 | 100.0% | 100.0% | 100.0% | 1 | 100.0% | 100.0% | 8 |
| expand_copy | main_expand_copy_s750 | stage2_max16 | paired_heldout_L8 | 450 | 16 | 95.3% | 95.3% | 97.9% | 0.9531 | 90.6% | 90.6% | 8 |
| expand_copy | main_expand_copy_s750 | stage2_max16 | paraphrase_L8 | 450 | 16 | 100.0% | 100.0% | 100.0% | 1 | 8 | ||
| expand_copy | main_expand_copy_s750 | stage2_max16 | standard_L8 | 450 | 16 | 100.0% | 100.0% | 100.0% | 1 | 8 | ||
| expand_copy | main_expand_copy_s750 | stage2_max16 | heldout_L16 | 450 | 16 | 71.9% | 71.9% | 92.2% | 0.7188 | 16 | ||
| expand_copy | main_expand_copy_s750 | stage2_max16 | paired_L16 | 450 | 16 | 90.6% | 90.6% | 98.3% | 0.9062 | 81.2% | 81.2% | 16 |
| expand_copy | main_expand_copy_s750 | stage2_max16 | paired_heldout_L16 | 450 | 16 | 70.3% | 68.8% | 92.8% | 0.6875 | 46.9% | 43.8% | 16 |
| expand_copy | main_expand_copy_s750 | stage2_max16 | paraphrase_L16 | 450 | 16 | 93.8% | 93.8% | 99.5% | 0.9375 | 16 | ||
| expand_copy | main_expand_copy_s750 | stage2_max16 | standard_L16 | 450 | 16 | 95.3% | 95.3% | 98.5% | 0.9531 | 16 | ||
| expand_copy | main_expand_copy_s750 | stage3_max24 | heldout_L8 | 750 | 24 | 79.7% | 79.7% | 82.8% | 0.7969 | 8 | ||
| expand_copy | main_expand_copy_s750 | stage3_max24 | paired_L8 | 750 | 24 | 100.0% | 100.0% | 100.0% | 1 | 100.0% | 100.0% | 8 |
| expand_copy | main_expand_copy_s750 | stage3_max24 | paired_heldout_L8 | 750 | 24 | 87.5% | 87.5% | 91.4% | 0.875 | 75.0% | 75.0% | 8 |
| expand_copy | main_expand_copy_s750 | stage3_max24 | paraphrase_L8 | 750 | 24 | 100.0% | 100.0% | 100.0% | 1 | 8 | ||
| expand_copy | main_expand_copy_s750 | stage3_max24 | standard_L8 | 750 | 24 | 100.0% | 100.0% | 100.0% | 1 | 8 | ||
| expand_copy | main_expand_copy_s750 | stage3_max24 | heldout_L16 | 750 | 24 | 73.4% | 73.4% | 77.9% | 0.7344 | 16 | ||
| expand_copy | main_expand_copy_s750 | stage3_max24 | paired_L16 | 750 | 24 | 100.0% | 100.0% | 100.0% | 1 | 100.0% | 100.0% | 16 |
| expand_copy | main_expand_copy_s750 | stage3_max24 | paired_heldout_L16 | 750 | 24 | 84.4% | 84.4% | 89.0% | 0.8438 | 68.8% | 68.8% | 16 |
| expand_copy | main_expand_copy_s750 | stage3_max24 | paraphrase_L16 | 750 | 24 | 100.0% | 100.0% | 100.0% | 1 | 16 | ||
| expand_copy | main_expand_copy_s750 | stage3_max24 | standard_L16 | 750 | 24 | 100.0% | 100.0% | 100.0% | 1 | 16 | ||
| expand_copy | main_expand_copy_s750 | stage3_max24 | heldout_L24 | 750 | 24 | 51.6% | 51.6% | 68.6% | 0.5156 | 24 | ||
| expand_copy | main_expand_copy_s750 | stage3_max24 | paired_L24 | 750 | 24 | 29.7% | 29.7% | 91.0% | 0.2969 | 0.0% | 9.4% | 24 |
| expand_copy | main_expand_copy_s750 | stage3_max24 | paired_heldout_L24 | 750 | 24 | 25.0% | 23.4% | 74.1% | 0.2344 | 3.1% | 0.0% | 24 |
| expand_copy | main_expand_copy_s750 | stage3_max24 | paraphrase_L24 | 750 | 24 | 75.0% | 75.0% | 97.3% | 0.75 | 24 | ||
| expand_copy | main_expand_copy_s750 | stage3_max24 | standard_L24 | 750 | 24 | 1.6% | 0.0% | 85.9% | 0 | 24 | ||
| expand_random_new_slots | main_expand_random_new_slots_s750 | stage1_max8 | heldout_L8 | 300 | 8 | 81.2% | 79.7% | 87.9% | 0.8125 | 8 | ||
| expand_random_new_slots | main_expand_random_new_slots_s750 | stage1_max8 | paired_L8 | 300 | 8 | 100.0% | 100.0% | 100.0% | 1 | 100.0% | 100.0% | 8 |
| expand_random_new_slots | main_expand_random_new_slots_s750 | stage1_max8 | paired_heldout_L8 | 300 | 8 | 95.3% | 95.3% | 97.7% | 0.9531 | 90.6% | 90.6% | 8 |
| expand_random_new_slots | main_expand_random_new_slots_s750 | stage1_max8 | paraphrase_L8 | 300 | 8 | 98.4% | 98.4% | 98.4% | 0.9844 | 8 | ||
| expand_random_new_slots | main_expand_random_new_slots_s750 | stage1_max8 | standard_L8 | 300 | 8 | 100.0% | 100.0% | 100.0% | 1 | 8 | ||
| expand_random_new_slots | main_expand_random_new_slots_s750 | stage2_max16 | heldout_L8 | 450 | 16 | 96.9% | 96.9% | 97.9% | 0.9688 | 8 | ||
| expand_random_new_slots | main_expand_random_new_slots_s750 | stage2_max16 | paired_L8 | 450 | 16 | 100.0% | 100.0% | 100.0% | 1 | 100.0% | 100.0% | 8 |
| expand_random_new_slots | main_expand_random_new_slots_s750 | stage2_max16 | paired_heldout_L8 | 450 | 16 | 93.8% | 93.8% | 96.1% | 0.9375 | 87.5% | 87.5% | 8 |
| expand_random_new_slots | main_expand_random_new_slots_s750 | stage2_max16 | paraphrase_L8 | 450 | 16 | 100.0% | 100.0% | 100.0% | 1 | 8 | ||
| expand_random_new_slots | main_expand_random_new_slots_s750 | stage2_max16 | standard_L8 | 450 | 16 | 100.0% | 100.0% | 100.0% | 1 | 8 | ||
| expand_random_new_slots | main_expand_random_new_slots_s750 | stage2_max16 | heldout_L16 | 450 | 16 | 79.7% | 79.7% | 90.4% | 0.7969 | 16 | ||
| expand_random_new_slots | main_expand_random_new_slots_s750 | stage2_max16 | paired_L16 | 450 | 16 | 98.4% | 98.4% | 98.7% | 0.9844 | 96.9% | 96.9% | 16 |
| expand_random_new_slots | main_expand_random_new_slots_s750 | stage2_max16 | paired_heldout_L16 | 450 | 16 | 87.5% | 87.5% | 93.4% | 0.875 | 75.0% | 75.0% | 16 |
| expand_random_new_slots | main_expand_random_new_slots_s750 | stage2_max16 | paraphrase_L16 | 450 | 16 | 95.3% | 95.3% | 96.9% | 0.9531 | 16 | ||
| expand_random_new_slots | main_expand_random_new_slots_s750 | stage2_max16 | standard_L16 | 450 | 16 | 100.0% | 100.0% | 100.0% | 1 | 16 | ||
| expand_random_new_slots | main_expand_random_new_slots_s750 | stage3_max24 | heldout_L8 | 750 | 24 | 57.8% | 57.8% | 71.9% | 0.5781 | 8 | ||
| expand_random_new_slots | main_expand_random_new_slots_s750 | stage3_max24 | paired_L8 | 750 | 24 | 100.0% | 100.0% | 100.0% | 1 | 100.0% | 100.0% | 8 |
| expand_random_new_slots | main_expand_random_new_slots_s750 | stage3_max24 | paired_heldout_L8 | 750 | 24 | 82.8% | 82.8% | 88.5% | 0.8281 | 65.6% | 65.6% | 8 |
| expand_random_new_slots | main_expand_random_new_slots_s750 | stage3_max24 | paraphrase_L8 | 750 | 24 | 100.0% | 100.0% | 100.0% | 1 | 8 | ||
| expand_random_new_slots | main_expand_random_new_slots_s750 | stage3_max24 | standard_L8 | 750 | 24 | 98.4% | 98.4% | 98.8% | 0.9844 | 8 | ||
| expand_random_new_slots | main_expand_random_new_slots_s750 | stage3_max24 | heldout_L16 | 750 | 24 | 40.6% | 39.1% | 59.7% | 0.4062 | 16 | ||
| expand_random_new_slots | main_expand_random_new_slots_s750 | stage3_max24 | paired_L16 | 750 | 24 | 95.3% | 95.3% | 99.3% | 0.9531 | 90.6% | 90.6% | 16 |
| expand_random_new_slots | main_expand_random_new_slots_s750 | stage3_max24 | paired_heldout_L16 | 750 | 24 | 73.4% | 70.3% | 84.3% | 0.7188 | 50.0% | 46.9% | 16 |
| expand_random_new_slots | main_expand_random_new_slots_s750 | stage3_max24 | paraphrase_L16 | 750 | 24 | 100.0% | 100.0% | 100.0% | 1 | 16 | ||
| expand_random_new_slots | main_expand_random_new_slots_s750 | stage3_max24 | standard_L16 | 750 | 24 | 93.8% | 93.8% | 99.1% | 0.9375 | 16 | ||
| expand_random_new_slots | main_expand_random_new_slots_s750 | stage3_max24 | heldout_L24 | 750 | 24 | 6.2% | 4.7% | 46.5% | 0.04688 | 24 | ||
| expand_random_new_slots | main_expand_random_new_slots_s750 | stage3_max24 | paired_L24 | 750 | 24 | 14.1% | 14.1% | 77.5% | 0.1406 | 0.0% | 0.0% | 24 |
| expand_random_new_slots | main_expand_random_new_slots_s750 | stage3_max24 | paired_heldout_L24 | 750 | 24 | 1.6% | 0.0% | 56.6% | 0 | 0.0% | 0.0% | 24 |
| expand_random_new_slots | main_expand_random_new_slots_s750 | stage3_max24 | paraphrase_L24 | 750 | 24 | 29.7% | 29.7% | 85.6% | 0.2969 | 24 | ||
| expand_random_new_slots | main_expand_random_new_slots_s750 | stage3_max24 | standard_L24 | 750 | 24 | 1.6% | 0.0% | 67.9% | 0 | 24 | ||
| max24_curriculum | main_max24_curriculum_s750 | stage1_max24 | heldout_L8 | 300 | 24 | 81.2% | 81.2% | 87.7% | 0.8125 | 8 | ||
| max24_curriculum | main_max24_curriculum_s750 | stage1_max24 | paired_L8 | 300 | 24 | 100.0% | 100.0% | 100.0% | 1 | 100.0% | 100.0% | 8 |
| max24_curriculum | main_max24_curriculum_s750 | stage1_max24 | paired_heldout_L8 | 300 | 24 | 92.2% | 92.2% | 97.1% | 0.9219 | 84.4% | 84.4% | 8 |
| max24_curriculum | main_max24_curriculum_s750 | stage1_max24 | paraphrase_L8 | 300 | 24 | 98.4% | 98.4% | 98.4% | 0.9844 | 8 | ||
| max24_curriculum | main_max24_curriculum_s750 | stage1_max24 | standard_L8 | 300 | 24 | 100.0% | 100.0% | 100.0% | 1 | 8 | ||
| max24_curriculum | main_max24_curriculum_s750 | stage1_max24 | heldout_L16 | 300 | 24 | 4.7% | 3.1% | 55.4% | 0.03125 | 16 | ||
| max24_curriculum | main_max24_curriculum_s750 | stage1_max24 | paired_L16 | 300 | 24 | 50.0% | 50.0% | 89.2% | 0.5 | 31.2% | 31.2% | 16 |
| max24_curriculum | main_max24_curriculum_s750 | stage1_max24 | paired_heldout_L16 | 300 | 24 | 28.1% | 28.1% | 76.9% | 0.2812 | 0.0% | 0.0% | 16 |
| max24_curriculum | main_max24_curriculum_s750 | stage1_max24 | paraphrase_L16 | 300 | 24 | 26.6% | 25.0% | 81.8% | 0.25 | 16 | ||
| max24_curriculum | main_max24_curriculum_s750 | stage1_max24 | standard_L16 | 300 | 24 | 50.0% | 48.4% | 89.9% | 0.4844 | 16 | ||
| max24_curriculum | main_max24_curriculum_s750 | stage1_max24 | heldout_L24 | 300 | 24 | 0.0% | 0.0% | 37.2% | 0 | 24 | ||
| max24_curriculum | main_max24_curriculum_s750 | stage1_max24 | paired_L24 | 300 | 24 | 1.6% | 0.0% | 59.8% | 0 | 0.0% | 0.0% | 24 |
| max24_curriculum | main_max24_curriculum_s750 | stage1_max24 | paired_heldout_L24 | 300 | 24 | 1.6% | 0.0% | 46.0% | 0 | 0.0% | 0.0% | 24 |
| max24_curriculum | main_max24_curriculum_s750 | stage1_max24 | paraphrase_L24 | 300 | 24 | 1.6% | 0.0% | 57.8% | 0 | 24 | ||
| max24_curriculum | main_max24_curriculum_s750 | stage1_max24 | standard_L24 | 300 | 24 | 4.7% | 1.6% | 61.3% | 0.01562 | 24 | ||
| max24_curriculum | main_max24_curriculum_s750 | stage2_max24 | heldout_L8 | 450 | 24 | 34.4% | 34.4% | 60.0% | 0.3438 | 8 | ||
| max24_curriculum | main_max24_curriculum_s750 | stage2_max24 | paired_L8 | 450 | 24 | 100.0% | 100.0% | 100.0% | 1 | 100.0% | 100.0% | 8 |
| max24_curriculum | main_max24_curriculum_s750 | stage2_max24 | paired_heldout_L8 | 450 | 24 | 60.9% | 59.4% | 76.0% | 0.6094 | 21.9% | 21.9% | 8 |
| max24_curriculum | main_max24_curriculum_s750 | stage2_max24 | paraphrase_L8 | 450 | 24 | 96.9% | 96.9% | 97.9% | 0.9688 | 8 | ||
| max24_curriculum | main_max24_curriculum_s750 | stage2_max24 | standard_L8 | 450 | 24 | 100.0% | 100.0% | 100.0% | 1 | 8 | ||
| max24_curriculum | main_max24_curriculum_s750 | stage2_max24 | heldout_L16 | 450 | 24 | 10.9% | 10.9% | 42.1% | 0.1094 | 16 | ||
| max24_curriculum | main_max24_curriculum_s750 | stage2_max24 | paired_L16 | 450 | 24 | 100.0% | 100.0% | 100.0% | 1 | 100.0% | 100.0% | 16 |
| max24_curriculum | main_max24_curriculum_s750 | stage2_max24 | paired_heldout_L16 | 450 | 24 | 59.4% | 59.4% | 72.1% | 0.5938 | 18.8% | 18.8% | 16 |
| max24_curriculum | main_max24_curriculum_s750 | stage2_max24 | paraphrase_L16 | 450 | 24 | 96.9% | 96.9% | 98.6% | 0.9688 | 16 | ||
| max24_curriculum | main_max24_curriculum_s750 | stage2_max24 | standard_L16 | 450 | 24 | 100.0% | 100.0% | 100.0% | 1 | 16 | ||
| max24_curriculum | main_max24_curriculum_s750 | stage2_max24 | heldout_L24 | 450 | 24 | 1.6% | 0.0% | 32.5% | 0 | 24 | ||
| max24_curriculum | main_max24_curriculum_s750 | stage2_max24 | paired_L24 | 450 | 24 | 18.8% | 17.2% | 79.6% | 0.1719 | 0.0% | 0.0% | 24 |
| max24_curriculum | main_max24_curriculum_s750 | stage2_max24 | paired_heldout_L24 | 450 | 24 | 15.6% | 14.1% | 60.0% | 0.1406 | 0.0% | 0.0% | 24 |
| max24_curriculum | main_max24_curriculum_s750 | stage2_max24 | paraphrase_L24 | 450 | 24 | 0.0% | 0.0% | 69.5% | 0 | 24 | ||
| max24_curriculum | main_max24_curriculum_s750 | stage2_max24 | standard_L24 | 450 | 24 | 34.4% | 34.4% | 88.6% | 0.3438 | 24 | ||
| max24_curriculum | main_max24_curriculum_s750 | stage3_max24 | heldout_L8 | 750 | 24 | 90.6% | 90.6% | 93.4% | 0.9062 | 8 | ||
| max24_curriculum | main_max24_curriculum_s750 | stage3_max24 | paired_L8 | 750 | 24 | 100.0% | 100.0% | 100.0% | 1 | 100.0% | 100.0% | 8 |
| max24_curriculum | main_max24_curriculum_s750 | stage3_max24 | paired_heldout_L8 | 750 | 24 | 93.8% | 93.8% | 97.3% | 0.9375 | 87.5% | 87.5% | 8 |
| max24_curriculum | main_max24_curriculum_s750 | stage3_max24 | paraphrase_L8 | 750 | 24 | 100.0% | 100.0% | 100.0% | 1 | 8 | ||
| max24_curriculum | main_max24_curriculum_s750 | stage3_max24 | standard_L8 | 750 | 24 | 100.0% | 100.0% | 100.0% | 1 | 8 | ||
| max24_curriculum | main_max24_curriculum_s750 | stage3_max24 | heldout_L16 | 750 | 24 | 85.9% | 85.9% | 89.4% | 0.8594 | 16 | ||
| max24_curriculum | main_max24_curriculum_s750 | stage3_max24 | paired_L16 | 750 | 24 | 100.0% | 100.0% | 100.0% | 1 | 100.0% | 100.0% | 16 |
| max24_curriculum | main_max24_curriculum_s750 | stage3_max24 | paired_heldout_L16 | 750 | 24 | 90.6% | 90.6% | 94.1% | 0.9062 | 81.2% | 81.2% | 16 |
| max24_curriculum | main_max24_curriculum_s750 | stage3_max24 | paraphrase_L16 | 750 | 24 | 100.0% | 100.0% | 100.0% | 1 | 16 | ||
| max24_curriculum | main_max24_curriculum_s750 | stage3_max24 | standard_L16 | 750 | 24 | 100.0% | 100.0% | 100.0% | 1 | 16 | ||
| max24_curriculum | main_max24_curriculum_s750 | stage3_max24 | heldout_L24 | 750 | 24 | 46.9% | 45.3% | 85.3% | 0.4531 | 24 | ||
| max24_curriculum | main_max24_curriculum_s750 | stage3_max24 | paired_L24 | 750 | 24 | 89.1% | 89.1% | 99.3% | 0.8906 | 78.1% | 78.1% | 24 |
| max24_curriculum | main_max24_curriculum_s750 | stage3_max24 | paired_heldout_L24 | 750 | 24 | 78.1% | 75.0% | 91.1% | 0.75 | 56.2% | 50.0% | 24 |
| max24_curriculum | main_max24_curriculum_s750 | stage3_max24 | paraphrase_L24 | 750 | 24 | 81.2% | 81.2% | 98.8% | 0.8125 | 24 | ||
| max24_curriculum | main_max24_curriculum_s750 | stage3_max24 | standard_L24 | 750 | 24 | 96.9% | 96.9% | 99.7% | 0.9688 | 24 | ||
| max24_no_curriculum | main_max24_no_curriculum_s750 | stage1_max24 | heldout_L8 | 750 | 24 | 93.8% | 93.8% | 96.5% | 0.9375 | 8 | ||
| max24_no_curriculum | main_max24_no_curriculum_s750 | stage1_max24 | paired_L8 | 750 | 24 | 100.0% | 100.0% | 100.0% | 1 | 100.0% | 100.0% | 8 |
| max24_no_curriculum | main_max24_no_curriculum_s750 | stage1_max24 | paired_heldout_L8 | 750 | 24 | 98.4% | 98.4% | 99.2% | 0.9844 | 96.9% | 96.9% | 8 |
| max24_no_curriculum | main_max24_no_curriculum_s750 | stage1_max24 | paraphrase_L8 | 750 | 24 | 100.0% | 100.0% | 100.0% | 1 | 8 | ||
| max24_no_curriculum | main_max24_no_curriculum_s750 | stage1_max24 | standard_L8 | 750 | 24 | 100.0% | 100.0% | 100.0% | 1 | 8 | ||
| max24_no_curriculum | main_max24_no_curriculum_s750 | stage1_max24 | heldout_L16 | 750 | 24 | 96.9% | 96.9% | 98.5% | 0.9688 | 16 | ||
| max24_no_curriculum | main_max24_no_curriculum_s750 | stage1_max24 | paired_L16 | 750 | 24 | 100.0% | 100.0% | 100.0% | 1 | 100.0% | 100.0% | 16 |
| max24_no_curriculum | main_max24_no_curriculum_s750 | stage1_max24 | paired_heldout_L16 | 750 | 24 | 100.0% | 100.0% | 100.0% | 1 | 100.0% | 100.0% | 16 |
| max24_no_curriculum | main_max24_no_curriculum_s750 | stage1_max24 | paraphrase_L16 | 750 | 24 | 100.0% | 100.0% | 100.0% | 1 | 16 | ||
| max24_no_curriculum | main_max24_no_curriculum_s750 | stage1_max24 | standard_L16 | 750 | 24 | 100.0% | 100.0% | 100.0% | 1 | 16 | ||
| max24_no_curriculum | main_max24_no_curriculum_s750 | stage1_max24 | heldout_L24 | 750 | 24 | 18.8% | 18.8% | 81.6% | 0.1875 | 24 | ||
| max24_no_curriculum | main_max24_no_curriculum_s750 | stage1_max24 | paired_L24 | 750 | 24 | 9.4% | 7.8% | 84.9% | 0.07812 | 0.0% | 0.0% | 24 |
| max24_no_curriculum | main_max24_no_curriculum_s750 | stage1_max24 | paired_heldout_L24 | 750 | 24 | 7.8% | 6.2% | 82.4% | 0.0625 | 0.0% | 0.0% | 24 |
| max24_no_curriculum | main_max24_no_curriculum_s750 | stage1_max24 | paraphrase_L24 | 750 | 24 | 15.6% | 14.1% | 89.1% | 0.1406 | 24 | ||
| max24_no_curriculum | main_max24_no_curriculum_s750 | stage1_max24 | standard_L24 | 750 | 24 | 4.7% | 0.0% | 82.2% | 0 | 24 |
Figures







Interpretation
This report is intentionally standalone. The key readout is whether the copied-expansion arm beats same-budget max-24 curriculum and random-new-slot controls on length-24 standard, held-out wording, and paired consistency splits.
Artifacts
- Run outputs:
experiments/qwen_structural_compiler_attribution_ablation/runs/ - Reports and figures:
experiments/qwen_structural_compiler_attribution_ablation/reports/ - Large checkpoints:
large_artifacts/qwen_structural_compiler_attribution_ablation/checkpoints/
Experiment log 5
Show the running log (5 entries, 2026-06-24)
2026-06-24
- Created a fresh standalone attribution-ablation experiment directory.
- Core question: does the long-program compiler result come from structural slot expansion, from curriculum/objective tuning, or from general training budget?
Required controls:
expand_copy: staged 8 -> 16 -> 24 compiler with copied learned slots.max24_curriculum: max-24 compiler from the start, same staged training lengths and budget.expand_random_new_slots: staged compiler, but newly introduced slots are randomly initialized instead of copied from the last learned slot.max24_no_curriculum: max-24 compiler from the start, trained directly on lengths 1..24.train_to16_eval24: max-24 compiler trained only on lengths up to 16, evaluated on length 24.
- Added held-out wording templates that are not sampled by
mixedtraining mode. Planned process:
- Smoke: verify all new split names and expansion modes.
- Pilot: short controlled arms to verify the suite runs and exposes expected floor/learning behavior.
- Main: full ablation arms with Markdown/HTML report and charts.
Smoke
- Run:
smoke_random_new_slots - Configuration: Qwen/Qwen3-4B QLoRA, one update per stage, random-new-slot expansion, tiny eval.
- Outcome: completed successfully.
Verified:
random_newexpansion mode.- Held-out wording splits:
heldout_L*. - Standard-vs-heldout paired splits:
paired_heldout_L*. - Markdown/HTML report generation.
Pilot
Runs:
pilot_expand_copypilot_max24_curriculumpilot_expand_random_new_slotspilot_max24_no_curriculumpilot_train_to16_eval24
- Configuration: reduced-width compiler, small datasets, short budgets, no checkpoints.
- Outcome: all five controls completed and produced comparable metrics. As expected at this tiny budget, all length-24 final program-exact metrics stayed at 0%.
- Interpretation: the pilot was a harness validation, not a result-bearing run. Proceeding to full ablation with tuned width, loss weights, batch size, evaluation size, and checkpoints.
Main Ablation
Runs:
main_expand_copy_s750main_max24_curriculum_s750main_expand_random_new_slots_s750main_max24_no_curriculum_s750main_train_to16_eval24_s750
- Configuration: Qwen/Qwen3-4B QLoRA, 512-wide compiler, LoRA rank 8, batch 8, strong init/argument trace supervision, full state loss, 64 examples per single-template split, 32 paired examples per paired split.
Main length-24 executable accuracy:
max24_curriculum: standard 96.9%, heldout 46.9%, paired 89.1%, paired-heldout 78.1%.expand_copy: standard 1.6%, heldout 51.6%, paired 29.7%, paired-heldout 25.0%.expand_random_new_slots: standard 1.6%, heldout 6.2%, paired 14.1%, paired-heldout 1.6%.max24_no_curriculum: standard 4.7%, heldout 18.8%, paired 9.4%, paired-heldout 7.8%.train_to16_eval24: standard 0.0%, heldout 1.6%, paired 1.6%, paired-heldout 0.0%.
Interpretation:
- Copied structural expansion is not the winning explanation in this run.
- The best explanation is a max-24 compiler trained from the start with a staged length curriculum.
- Randomly initialized new expansion slots perform poorly at length 24.
- Removing curriculum fails at length 24 despite strong length-8 and length-16 performance.
- Training only through length 16 does not extrapolate to length 24.
- Held-out wording is much harder than seen-family paraphrase, even for the best arm.
Reports
- Markdown:
reports/structural_compiler_attribution_ablation_report.md - HTML:
reports/structural_compiler_attribution_ablation_report.html - Figures:
reports/figures/
Figures 7
Data files 23
Result tables and metrics copied from the experiment folder — preview inline or open the raw file.
reports/aggregate_metrics.csv53 kBruns/main_expand_copy_s750/metrics.csv5.7 kBruns/main_expand_copy_s750/results.json36 kBruns/main_expand_random_new_slots_s750/metrics.csv6.4 kBruns/main_expand_random_new_slots_s750/results.json37 kBruns/main_max24_curriculum_s750/metrics.csv9.1 kBruns/main_max24_curriculum_s750/results.json47 kBruns/main_max24_no_curriculum_s750/metrics.csv3.2 kBruns/main_max24_no_curriculum_s750/results.json23 kBruns/main_train_to16_eval24_s750/metrics.csv3.4 kBruns/main_train_to16_eval24_s750/results.json23 kBruns/pilot_expand_copy/metrics.csv5.0 kBruns/pilot_expand_copy/results.json27 kBruns/pilot_expand_random_new_slots/metrics.csv5.7 kBruns/pilot_expand_random_new_slots/results.json28 kBruns/pilot_max24_curriculum/metrics.csv7.9 kBruns/pilot_max24_curriculum/results.json37 kBruns/pilot_max24_no_curriculum/metrics.csv3.0 kBruns/pilot_max24_no_curriculum/results.json16 kBruns/pilot_train_to16_eval24/metrics.csv2.9 kBruns/pilot_train_to16_eval24/results.json16 kBruns/smoke_random_new_slots/metrics.csv5.2 kBruns/smoke_random_new_slots/results.json24 kB
Reproduce
This entry is source code or analysis only — there is no separate run to reproduce.