Research log Small Model Experimentation
GitHub

Qwen3.5-4B: Can SFT Install the Skill of Induction?

Small models crack new rules only by reasoning

The one idea you need

You see a few coded messages with their plain meanings, then must decode a new one — but the cipher is hidden. You can't guess it outright; you try each candidate rule against the examples until one fits. Writing the steps out is what makes it work.

The question

If a small model can't spot the hidden rule behind a few examples, can training teach it that skill — and where does the learned skill actually live?

What we found

Yes, but only when it thinks out loud. The trained model cracks brand-new hidden rules perfectly when it writes out its reasoning, yet collapses to worse-than-guessing — about 1 in 100 — when forced to answer in a single step. The skill lives in the written steps, not the weights, and taught as a general try-and-check method it even transfers to rule types it never trained on.

Why it matters

If your small model must infer structure from examples, let it reason in tokens — don't force one-shot answers or cram the skill into the weights. Teach a general try-and-check procedure, and mix in plain rule-following examples so training doesn't wreck existing skills.

Answering instantly versus reasoning aloud1% → 100%same trained model, cracking brand-new hidden rules
Cracking a rule type it never trained on91%via reasoning, as high as familiar types; guessing is 1 in 10
Cost of cramming the skill into the weights72% → 9%its ability to apply an already-stated rule collapses
Rule-finding forced into the weights alone9% → 40%rises above chance but plateaus far below its 72% ceiling
On this page
  1. Results at a glance
  2. Overview
  3. Report
    1. Motivation
    2. Method (review-hardened)
    3. Results
    4. Conclusion
    5. Honest scope
    6. Artifact Manifest
  4. Experiment log
  5. Figures
  6. Data files
  7. Reproduce
  8. Related

Results at a glance 4

A rule type never trained on is cracked just as well

How to read

Each bar is one family of hidden rules; height is how often the model, reasoning step by step, correctly infers and applies it. The three left bars are families seen in training; the highlighted right bar was unseen entirely. Taller is better; guessing is 1 in 10.

0%25%50%75%100%a=1 (trained)a=1 (trained)95.5%a=3 (trained)a=3 (trained)93%a=9 (trained)a=9 (trained)87.5%a=7 (HELD-OUT, never trained)a=7 (HELD-OUT, never trained)90.5%

Takeaway → The unseen bar (91%) stands as tall as the trained ones (88-96%) — the model learned a general infer-and-check method, not memorized rules.

Data table
conditioninduction accuracy via reasoning (chance 0.1)
a=1 (trained)95.5%
a=3 (trained)93%
a=9 (trained)87.5%
a=7 (HELD-OUT, never trained)90.5%

Numbers from

Technical framing

Is GENERAL induction-via-reasoning installable? YES: a general hypothesize-and-verify procedure transfers to a HELD-OUT rule family (a=7: 0.91, as high as in-family) — The most constructive result of the arc. C44 showed induction is a SERIAL-COMPUTE limit but the shift-CoT was shift-SPECIFIC (out-of-family only 0.13). Here: rule families = affine over positions keyed by multiplier a in {1,3,7,9}; a UNIFORM enumerate-and-verify chain-of-thought (try each candidate a, derive b from one example, verify on another, keep the one that fits, apply). Train on {a=1,3,9}, HOLD OUT a=7. RESULT: held-out a=7 induction = 0.905 -- AS HIGH as the trained families (0.88-0.96). The model GENERALIZES to a rule family it never saw as the answer: it learned the general hypothesize-verify-apply PROCEDURE, not just the specific trained rules. So GENERAL induction-via-reasoning IS installable via SFT. Combined with C44 (reasoning 1.00 vs single-forward-pass 0.01), the picture is: the fixed 4B CAN be taught general induction -- infer a novel rule and apply it -- but ONLY as a serial reasoning procedure living in the chain-of-thought tokens, never compressed into the weights. The induction wall (the arc's central limitation) is a serial-compute limit that a general reasoning procedure overcomes generally. Caveat: all families are affine and a=7's arithmetic was seen as a rejected candidate -- what generalizes is the induction LOGIC (accepting a=7 via verify), within the affine hypothesis class.

Same trained model: near-zero in one step, perfect when reasoning

How to read

Each bar is one setup's accuracy at inferring a unseen hidden rule. Bars span the untrained model and trained models, forced to answer in one step versus allowed to write out reasoning. The two rightmost share one trained model. Higher is better; guessing is 1 in 10.

0%25%50%75%100%base (1 forward pass)base (1 forward pass)8.7%base (own reasoning)base (own reasoning)0%base+strategy hintbase+strategy hint0%answer-only SFT (1 pass)answer-only SFT (1 pass)40%reasoning-SFT (1 pass)reasoning-SFT (1 pass)1%reasoning-SFT (reasoning)reasoning-SFT (reasoning)100%

Takeaway → That trained model scores near zero (1%) when forced to answer instantly but a full 100% when it reasons — the written steps do all the work, not the weights.

Data table
conditionheld-out shift induction accuracy (execute ceiling 0.72, chance 0.1)
base (1 forward pass)8.7%
base (own reasoning)0%
base+strategy hint0%
answer-only SFT (1 pass)40%
reasoning-SFT (1 pass)1%
reasoning-SFT (reasoning)100%

Numbers from

Technical framing

Is the induction wall a knowledge or serial-compute limit? SERIAL-COMPUTE: the model induces via reasoning (1.00) but at chance in one forward pass (0.01) — The deepest question of the arc, resolved. C43 showed answer-only SFT only PARTIALLY installs scrambled-order shift induction (0.40) and catastrophically forgets execution. Here the SAME base is trained on plain-words chain-of-thought demonstrating the induction procedure (find positions -> derive shift -> apply). THE DISSOCIATION: the reasoning-SFT model induces held-out shifts PERFECTLY when it can reason step-by-step (generation 1.00) but is at CHANCE when forced to answer in a single forward pass (0.01). The chain-of-thought is ~100% LOAD-BEARING -- induction lives entirely in the serial tokens, not the weights. The model literally cannot do the induction computation in one forward pass, even after training; it can only unroll it. So the forward-pass induction wall is a SERIAL-COMPUTE limit, not a knowledge-storage limit. And unlike answer-only SFT (which crashed execution to 0.09), reasoning-SFT largely preserved it (0.57). Caveat: the CoT hand-codes the shift algorithm, so this is executing a taught serial procedure perfectly -- out-of-family affine stays near chance (0.13), so it did not learn GENERAL induction. Connects C38 (thinking rescues induction to 0.50), C13 (broken mental simulation): the model's core limit is running multi-step computation in a forward pass -- give it serial tokens and it works.

Cramming rule-finding into the weights lifts it partway, then stalls

How to read

Horizontal axis is how much answer-only training, from none to four thousand to eight thousand practice rounds. One line infers unseen rules of the trained type, another an untrained type; dashed lines mark the apply-a-stated-rule ceiling and pure guessing. Higher is better.

0%20%40%60%80%00.511.52shift EXECUTE ceiling (base can apply a stated rule)shift EXECUTE cei…IN-FAMILY: shift induction (held-out rules)IN-FAMILY: shift …OUT-OF-FAMILY: affine inductionOUT-OF-FAMILY: af…chance

Takeaway → The trained-type line rises to 40% but flattens far below the 72% ceiling, and the untrained-type line barely lifts — a narrow trick, not a general skill.

Data table
0=base, 1=SFT 4k episodes, 2=SFT 8k episodesIN-FAMILY: shift induction (held-out rules)OUT-OF-FAMILY: affine inductionshift EXECUTE ceiling (base can apply a stated rule)chance
08.7%21.3%72%10%
135%26.7%
240%29.7%72%10%

Numbers from

Technical framing

Can SFT install the skill of induction? Partially: shift induction climbs (data-limited) but plateaus below the execute ceiling; OOF affine barely moves — The mission-core 'lift the wall' test. Each episode = a random SCRAMBLED digit order (stated) + a hidden rule + examples + a query; the model must INFER the rule and apply. Base fails at chance (shift-induce 0.087) though it CAN EXECUTE a stated rule (0.72 -- so the wall is induction, not execution, the review's mandatory gate). Answer-only QLoRA on random shift episodes, tested on HELD-OUT shifts (in-family) and AFFINE rules (out-of-family). SFT PARTIALLY lifts the wall and it is DATA-LIMITED: shift induction climbs 0.087 -> 0.35 (4k) -> 0.40 (8k), ~4.6x chance and still rising -- but PLATEAUS well below the execute ceiling (0.72), so only partly installed. Out-of-family affine barely moves (0.21 -> 0.30) -- the model learned a SHIFT-SPECIFIC procedure, not general induction. So the induction wall is neither a hard architectural bound nor cleanly liftable: trained to induce, the fixed 4B learns a specific procedure, not the general skill -- it remains an executor at heart.

Training rule-finding into the weights wrecks the old ability

How to read

Four bars in two before-and-after pairs. The left pair: how well the model applies an already-stated rule, before then after answer-only training. The right pair: how well it infers a hidden rule, before then after. Higher is better throughout.

0%20%40%60%80%shift EXECUTE (base)shift EXECUTE (base)72%shift EXECUTE (after answer-only SFT)shift EXECUTE (after answer-only …9.3%shift INDUCE (base)shift INDUCE (base)8.7%shift INDUCE (SFT 8k)shift INDUCE (SFT 8k)40%

Takeaway → Applying a stated rule collapses from 72% to 9% while rule-inference only climbs from 9% to 40% — the training buys a little induction by destroying execution.

Data table
conditionaccuracy
shift EXECUTE (base)72%
shift EXECUTE (after answer-only SFT)9.3%
shift INDUCE (base)8.7%
shift INDUCE (SFT 8k)40%

Numbers from

Technical framing

The cost: answer-only SFT installs partial induction (+0.31) but CATASTROPHICALLY FORGETS execution (0.72 -> 0.09) — Answer-only SFT (training the model to output the answer directly) lifts shift induction from chance (0.087) to 0.40, but at a steep cost: it CATASTROPHICALLY FORGETS execution -- the model's ability to APPLY a stated rule crashes from 0.72 to 0.093. So answer-only SFT trades the model's executor competence for a partial, biased induction heuristic. This is consistent with the whole arc's law (the fixed 4B is an executor, not an inducer): even trained to induce, it does not cleanly acquire the general skill, and the training damages what it was good at. Owed: a reasoning-SFT arm (teach the procedure as plain-words chain-of-thought), mixing execute examples to prevent forgetting, and a multi-family leave-one-out design to test GENERAL (not shift-specific) induction.

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

Shift induce: base 0.087 -> SFT-4k 0.35 -> SFT-8k 0.40 (data-limited) but plateaus below execute ceiling 0.72. Affine (OOF) 0.21 -> 0.30 (shift-specific). Catastrophic forgetting: shift execute 0.72 -> 0.09. See reports/report.md, analysis/meta_induction.png.

Overview

Research Program

  • Program: posttraining_and_adaptation / benchmark_generalization
  • Question (mission-core, lift the wall): can QLoRA SFT install the general skill of inducing a hidden rule from examples (C38/C39: base can't)?

Setup

  • Each episode = a random SCRAMBLED digit order (stated) + hidden rule + 6 examples + query -> infer + apply. Families: shift (train), affine a in {3,7,9} (out-of-family). Answer-only QLoRA r32/a64. GATE: base EXECUTE ceiling per family (induction failure meaningful only if base can execute). Eval = forced Answer: argmax over the 10 digit tokens.

Run

python scripts/gen_data.py --n-train 8000; python scripts/train_lora.py --train data/train_shift.jsonl --out runs/lora_shift8k --epochs 2; python scripts/eval_induction.py --data data/heldout_shift.jsonl --mode induce --adapter runs/lora_shift8k; python scripts/analyze.py.

Results

Shift induce: base 0.087 -> SFT-4k 0.35 -> SFT-8k 0.40 (data-limited) but plateaus below execute ceiling 0.72. Affine (OOF) 0.21 -> 0.30 (shift-specific). Catastrophic forgetting: shift execute 0.72 -> 0.09. See reports/report.md, analysis/meta_induction.png.

Interpretation

The induction wall is neither a hard architectural bound nor cleanly liftable: partial, procedure-specific install with catastrophic forgetting. Trained to induce, the fixed 4B learns a specific procedure, not the general skill -- an executor at heart.

Reasoning arm (C44): serial-compute vs knowledge limit

  • scripts/gen_cot.py (CoT traces demonstrating the induction procedure), scripts/train_lora.py (reasoning-SFT), scripts/eval_induction.py (--mode induce_gen/strategy), scripts/analyze_reasoning.py.
  • Result: reasoning-SFT induces held-out shifts PERFECTLY via generation (1.00) but at CHANCE forced-digit (0.01) -> the CoT is 100% load-bearing -> the forward-pass induction wall is a SERIAL-COMPUTE limit, not a knowledge limit. Execution largely preserved (0.57 vs answer-only 0.09). OOF affine 0.13 (shift-specific). See reports/report_reasoning.md, analysis/induction_serial_compute.png.

Knowledgebase Update

Artifacts

  • scripts/episode_gen.py, scripts/gen_data.py, scripts/train_lora.py (answer-only QLoRA), scripts/eval_induction.py (forced-digit induce + execute ceiling), scripts/analyze.py
  • runs/lora_shift*, runs/eval_*.json, runs/verdict.json, analysis/meta_induction.png, reports/{report,design_review}.md

Report

Rendered from reports/report.md

Motivation

The arc's central law: the fixed 4B is an executor/retriever, not an inducer of novel structure (C38/C39). The mission-core question: can QLoRA SFT install the induction skill so it generalizes to held-out rules — lifting the wall — or is induction fundamentally un-installable?

Method (review-hardened)

Each episode = a random scrambled digit order (stated) + a hidden rule + 6 examples + a query; the model must infer the rule and apply. Base fails this at chance (per C39). Rule families over positions in the order: shift f(order[i])=order[(i+k)%10] (train) and affine order[(a·i+b)%10], a∈{3,7,9} (out-of-family). Random orders/params → held-out episodes are genuinely novel. Answer-only QLoRA (r32/α64). The review's mandatory gate: measure the base execute ceiling (rule stated) per family — an induction failure is only meaningful if the base can execute the rule. Eval = forced Answer: argmax over the 10 digit tokens (fair for base + SFT).

Results

baseSFT-4kSFT-8kexecute ceiling
shift induce (in-family)0.0870.350.400.72
affine induce (out-of-family)0.2130.2670.2970.457
shift execute0.720.093
  • SFT partially lifts the wall, data-limited: shift induction 0.087 (chance) → 0.35 → 0.40, ~4.6× chance and still rising with data — but it plateaus well below the execute ceiling (0.72), so the skill is only partially installed.
  • Weak out-of-family transfer: affine induction barely moves (0.21 → 0.30, far below in-family and its 0.46 ceiling) — the model learned a shift-specific procedure, not general induction.
  • Two costs: (1) catastrophic forgetting — answer-only SFT crashed execute from 0.72 → 0.09; (2) a default-fallback digit bias that shrinks with data (37% → 20%).

Conclusion

The induction wall is neither a hard architectural bound (SFT lifts it several-fold, scaling with data) nor cleanly liftable (partial, procedure-specific, forgets execution). This is exactly what the arc predicts: trained to induce, the fixed 4B learns a specific procedure, not the general skill — it remains an executor at heart.

Honest scope

  • Single seed; answer-only SFT (a reasoning-SFT arm and a multi-family leave-one-out design for general induction are the owed next steps, per the review — this run tests shift→affine procedure-specificity, a weaker probe).
  • Affine OOF is partly execution-limited (0.46 base ceiling), so its ceiling is lower than shift's.
  • The '8'-bias caveat: SFT-8k accuracy (0.40) far exceeds the frequency baseline (~0.10); most is real induction.

Artifact Manifest

See reports/artifact_manifest.yaml.

Experiment log 1

Show the running log (1 entry)

Scaffold

Created as a new experiment scaffold.

Figures 3

general induction
general induction · analysis/
induction serial compute
induction serial compute · analysis/
meta induction
meta induction · analysis/

Data files 23

Result tables and metrics copied from the experiment folder — preview inline or open the raw file.

Reproduce

Smoke test

python scripts/train_lora.py --train data/train_shift.jsonl --smoke

Full run

gen_data.py --n-train 8000; train_lora.py (2 epochs); eval_induction.py (induce+execute, base+adapter); analyze.py

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

Browse the experiment folder on GitHub ↗