Research log Small Model Experimentation
GitHub

Qwen3.5-4B Latent Decomposition: be your own tool-search

Self-training installed the planning it couldn't do alone

The one idea you need

Give a small model a tiny language of list operations and a three-move goal, then ask it to pick operations one at a time. It acts like a chess player who instantly spots checkmate-in-one but is blind to the opening move of a three-move combination.

The question

Can a small model plan its own multi-step solution by picking one operation at a time, and can cheap self-training teach it to plan ahead?

What we found

No, not out of the box. One step from the goal it picks the right operation about eight times better than chance, but on the opening move three steps out it ranks correctly only at chance — recognition, not planning. As its own guide it solved 1 of 80 puzzles, no better than random's 2. Self-training on its verified solutions installed real planning: 18 of 80, nearly matching trying every operation.

Why it matters

When a small model guides its own multi-step search, don't trust its early moves — confident-but-wrong first picks can drag it below random. Measure first-move accuracy, and self-train on verified full solutions to install transferable planning.

Right first move, base model1.3% vs 3.1% chancethree steps from the goal — at or below random guessing
Right final move, base modelabout 8x chanceone step from the goal (23.7%) — sharp recognition, no lookahead
Puzzles solved as its own guide1 → 18 of 80before vs after self-training, same compute budget
Self-trained guide vs trying every operation18 vs 23 of 80near-parity at low budget
On this page
  1. Results at a glance
  2. Overview
  3. Report
    1. Summary
    2. Research Program Fit
    3. Method
    4. Pre-registered verdicts
    5. Honest limits
    6. Next Experiments
    7. Artifact Manifest
  4. Experiment log
  5. Figures
  6. Reproduce
  7. Related

Results at a glance 2

How often the right next operation is the top pick, by step

How to read

Three groups mark distance to the goal: three, two, then one operation away. Bar height is how often the model's top-ranked operation was correct — taller is better, with random guessing near three percent. Colors compare the base model against two self-trained versions.

0%20%40%60%step 1 (goal 3 ops away)step 1 (goal 3 ops away)1.3%12.5%13.8%step 2 (2 away)step 2 (2 away)6.2%13.8%25%step 3 (1 away)step 3 (1 away)23.7%46.3%55%

Takeaway → Base bars sit at the floor on the opening move and rise only near the finish; self-trained bars tower over base at every step — practice installed real planning, not just finishing.

Data table
conditionbasebanked N=640banked N=1280
step 1 (goal 3 ops away)1.3%12.5%13.8%
step 2 (2 away)6.2%13.8%25%
step 3 (1 away)23.7%46.3%55%

Numbers from

Technical framing

The lookahead wall & banking's fix: per-step next-op ranking accuracy (base vs banked) — 'Be your own tool-search': the fixed model ranks the 32 DSL ops given current-lists->goal; can it plan a depth-3 composition step by step? BASE has a LOOKAHEAD WALL -- at/below chance (0.031) for planning the first of 3 ops (step1 0.013), but ~8x chance for a 1-step transform (step3 0.237). It has depth-1 recognition, no lookahead, so as its own search guide it is WORSE THAN RANDOM (coverage 0.013 vs random 0.025 vs brute 0.287 at matched budget). I predicted banking (C24) would be monolithic compilation (lift only step-3). REFUTED: banking lifts EVERY step including lookahead, dose-dependently -- banking installs TRANSFERABLE PLANNING that transfers from monolithic prompt->code training to step-wise search-guidance.

Puzzles solved versus compute budget: guided search vs trying everything

How to read

Horizontal axis is compute budget — attempts allowed per puzzle; vertical is the share of 80 puzzles solved, higher is better. Lines sweep trying-every-operation and random proposals across budgets; two dots mark base-guided and self-trained-guided search at one matched low budget.

0%25%50%75%100%1k2kbrute-force (all 32 ops)brute-force (all …random proposalsbanked N=1280-guided (beam 8)banked N=1280-gui…base-guided (beam 8)base-guided (beam…

Takeaway → At equal budget the base dot sits below the random line, while the self-trained dot leaps about seventeenfold to nearly meet trying-everything — a misleading guide turned useful.

Data table
interpreter calls per task (budget)brute-force (all 32 ops)random proposalsbase-guided (beam 8)banked N=1280-guided (beam 8)
800%
2880%
10882.5%1.3%22.5%
128028.7%
230435%
422426.3%
435248.7%
844868.8%
16.64k76.2%75%
24.83k81.2%

Numbers from

Technical framing

Banking upgrades the search-guide from worse-than-random to competitive with brute-force — End-to-end decomposition-search coverage on 80 true-depth-3 held-out tasks (terminates on VISIBLE only, graded on HIDDEN). At matched budget (~1088 interp/task) the BASE-guided search (0.013) is WORSE than random (0.025) and far below brute-force (0.287) -- the base model's confident-but-wrong first-op proposals mislead the beam. Banking upgrades it ~17x to 0.225, roughly matching brute at low budget (still below brute's 0.81 at high budget). Control: random+distance-pruning reaches only 0.037, so the interpreter's pruning alone does NOT crack depth-3 -- exhaustive/real proposals are required, and banking's lift is a genuine model improvement.

In the author’s words from the Overview · “Results”

Lookahead wall (base): per-step next-op top-1 = 0.013/0.062/0.237 (step1/2/3; chance 0.031). Recognition, no lookahead. Base as its own guide is WORSE than random (0.013 vs 0.025 vs brute 0.287 @ matched budget). Banking installs transferable LOOKAHEAD (refuting my monolithic-compilation hypothesis): banked lifts every step dose-dependently (step1 0.013->0.125->0.138, step2 0.062->0.138->0.250, step3 0.237->0.463->0.550). Upgrades the guide: banked1280-guided coverage 0.013->0.225 (~17x), competitive with brute at low budget. Control: random+pruning only 0.037 (pruning alone isn't the solver); brute+pruning 0.487. See reports/report.md, analysis/decomposition.png.

Overview

Research Program

  • Program: structured_execution_and_compilers
  • Question: can the FIXED model climb the depth wall by proposing+verifying one DSL op at a time (be its own tool-search)? WHERE does it break, and does banking (C24) fix it?
  • Anchors: C12 (base decompose-guidance = efficiency not coverage), C24 (banking installs monolithic depth-3).

Pivot

An adversarial workflow review (reports/design_review.md, verdict flawed) showed the original "is depth-3 latent" framing was unfair + partly redundant with C12. Pivoted to DISSECT the failure (per-step ranking accuracy) and test whether banking installs transferable planning. Adopted all must-fixes: VISIBLE-only search termination (hidden-graded), brute-force honesty bar, min-depth-verified true-depth-3 (all 80), pruning ablation.

Setup

  • Model: Qwen3.5-4B only. list 16-op DSL (32 op/param combos). 80 min-depth-verified true-depth-3 held-out.
  • Model ranks the 32 ops by likelihood given current-lists->goal; interpreter applies+verifies; beam search.
  • Guides: base / banked_640 / banked_1280 (reused C24 adapters). Controls: brute (all 32) / random.

Run

python scripts/run.py --tag base --search --with-controls python scripts/run.py --tag banked1280 --adapter <C24 banked_1280> --search python scripts/analyze.py

Results

  • Lookahead wall (base): per-step next-op top-1 = 0.013/0.062/0.237 (step1/2/3; chance 0.031). Recognition, no lookahead. Base as its own guide is WORSE than random (0.013 vs 0.025 vs brute 0.287 @ matched budget).
  • Banking installs transferable LOOKAHEAD (refuting my monolithic-compilation hypothesis): banked lifts every step dose-dependently (step1 0.013->0.125->0.138, step2 0.062->0.138->0.250, step3 0.237->0.463->0.550).
  • Upgrades the guide: banked1280-guided coverage 0.013->0.225 (~17x), competitive with brute at low budget.
  • Control: random+pruning only 0.037 (pruning alone isn't the solver); brute+pruning 0.487.

See reports/report.md, analysis/decomposition.png.

Interpretation

The single-shot depth wall is a LOOKAHEAD/planning gap; the model can't be its own multi-step search heuristic. But banking (self-training on verified solutions) installs TRANSFERABLE compositional planning -- not just a monolithic input->output map -- upgrading the model's step-wise search-guidance dose-dependently.

Knowledgebase Update

  • Program evidence: research_programs/structured_execution_and_compilers/evidence.md (C25)
  • Claim ledger: C25 added

Artifacts

  • scripts/decompose.py (search + vectorized op-scoring), scripts/run.py, scripts/analyze.py
  • data/eval_frozen_d3.jsonl (80 true-depth-3, reused from C23/C24), runs/rank_*.json, runs/search_*.json, runs/ablation.json, runs/verdict.json, analysis/decomposition.png, reports/{prereg,report,design_review}.md
  • Reuses C24 banked_640/banked_1280 adapters (out of repo).

Report

Rendered from reports/report.md

Summary

"Be your own tool-search": can the FIXED model climb the depth wall by proposing+verifying one DSL op at a time (it ranks the 32 ops given current lists -> goal; the interpreter applies + verifies; beam search)? An adversarial workflow review (reports/design_review.md, verdict flawed) showed the original "is depth-3 latent" framing was unfair and that the sibling C12 already ran the base-model version (guidance buys efficiency not coverage). So this experiment pivoted to dissect WHERE decomposition breaks and whether banking (C24) fixes it. All fixes adopted: search terminates on VISIBLE examples only (graded on hidden); brute-force (all 32 ops) is the honesty bar (random only a floor); all 80 held-out tasks are min-depth-VERIFIED true-depth-3; a pruning ablation is included.

1. The lookahead wall (base model)

Per-step ground-truth next-op ranking (n=80, chance top-1 = 0.031):

step (goal distance)top-1top-6mean rank
step 1 (3 ops away)0.0130.12519.7/32
step 2 (2 away)0.0620.23717.9/32
step 3 (1 away)0.2370.37515.4/32

The base model recognizes a one-step transform (step-3 ≈ 8× chance), has weak above-chance ranking two steps from the goal (step-2 top-1 0.062 versus chance 0.031), and is at/below chance only on the first move three steps from the goal. At matched budget (~1088 interpreter calls/task), base-guided search solves 1/80 tasks versus random's 2/80 and brute-force's 23/80 (coverage 0.013/0.025/0.287). The one-task base-versus- random difference is within noise: this establishes that base guidance is no better than random, not that it is reliably worse.

2. Banking installs transferable LOOKAHEAD (I predicted the opposite)

I pre-registered that banking (C24, monolithic depth-3 SFT) would be compilation not planning — lifting only terminal recognition. Refuted. The banked models rank the next op better at every step including lookahead. The dose trend is clear at steps 2–3; at step 1, the 640→1280 increment is only 10/80→11/80 and is within noise:

guidestep 1step 2step 3
base0.0130.0620.237
banked N=6400.1250.1380.463
banked N=12800.1380.2500.550

Banking on monolithic prompt→code solutions installs a reusable multi-step planning improvement that transfers to the step-wise search-guide role — lookahead (step-1/2) lift = +0.156, terminal (step-3) lift = +0.313 (banked1280 vs base). It is not a lookup map.

3. This upgrades the guide from worse-than-random to competitive

banked1280-guided search solves 18/80, versus 2/80 random and 1/80 base, at matched budget — now roughly matching brute-force's 23/80 at the same low budget. Banking converts an uninformative base guide into a competitive one. (It still does not beat brute's high-budget coverage 0.81; only one beam width was tested.)

4. Controls (the model's contribution is real, not the pruning)

Pruning ablation (hidden coverage): random-proposals + distance-pruning reaches only 0.037 (pruning alone does NOT crack depth-3); brute (exhaustive proposals) + pruning reaches 0.487. So the solver is real proposals + pruning, and banking's lift to the guide is a genuine model improvement, not a pruning artifact.

Research Program Fit

Connects C12 (decompose-search: base guidance = efficiency not coverage) with C24 (banking installs depth-3). The novel finding: banking is not just monolithic memorization — it installs transferable compositional planning that upgrades the model's own search-guidance. Sharpens what banking does: it improves the latent compositional machinery, transferring across task formats (monolithic training → step-wise lookahead).

Method

List 16-op DSL (32 op/param combos). Fixed model ranks the 32 ops by length-normalized likelihood given a prompt showing the DSL + current lists → goal lists (batched forward, vectorized). Beam search (distance-to- target pruning), depths 1–3, VISIBLE-only termination, hidden-graded. Guides: base / banked_640 / banked_1280 (reused C24 adapters). Controls: brute (all 32) / random, swept over beam/budget. scripts/decompose.py (search), scripts/run.py (rank + search + ablation), scripts/analyze.py.

Pre-registered verdicts

  • P1 (lookahead wall): PARTIAL — base ranking is monotone in goal-proximity; only step 1 is at/below chance, while step 2 is weakly above chance.
  • P2 (does banking install planning?): REFUTED my hypothesis — banking lifts lookahead (step-1/2) dose-dependently; it installs transferable planning, not monolithic compilation only.
  • P3 (coverage bar): base-guided does NOT beat brute and is within noise of random; banked-guided becomes competitive at matched budget but still does not exceed brute's high-budget coverage.
  • P4 (pruning): HELD — random+pruning ≈ 0.037; pruning alone is not the solver.

Honest limits

Likelihood-ranking a closed 32-op set is easier than free generation (a generative variant is future work). Single frozen held-out (n=80), one seed; one beam width for the guided coverage point (no full budget curve for the banked guide). The claim is about step-wise proposal/planning on this substrate; it does not re-litigate C24's monolithic result (which stands). "Banking installs planning" means measurably transferable step-wise lookahead, not that the model becomes a superior search guide (it reaches parity, not dominance).

Next Experiments

  • Full coverage-vs-budget curve for the banked guide (does it beat brute at any budget, or only reach parity?).
  • Free-generation proposal variant (does the lookahead lift survive without the closed-set menu?).
  • Does banking depth-4 install depth-4 lookahead (repeat the dissection one rung deeper)?

Artifact Manifest

See reports/artifact_manifest.yaml. Reuses C24 banked_640/banked_1280 adapters (out of repo).

Experiment log 1

Show the running log (1 entry)

Scaffold

Created as a new experiment scaffold.

Figures 1

decomposition
decomposition · analysis/

Reproduce

Smoke test

python scripts/decompose.py   # model vs brute vs random on 8 tasks

Full run

python scripts/run.py --tag base --search --with-controls && python scripts/run.py --tag banked1280 --adapter <banked_1280> --search && python scripts/analyze.py

Run steps are documented inside the experiment folder (README and scripts).

Browse the experiment folder on GitHub ↗