One feature at a time, round two

Round one established that full-rank SGD fine-tuning acquires simultaneously-present style features in stages, that AdamW doesn't, and — the part that needed a second look — that deleting the loudest feature (ALL-CAPS) from the training data promoted everything behind it. That last result was one ablation on one very loud feature. It leaves the mechanism wide open: is interference graded (every feature suppresses every other in proportion to its share of the gradient, as would have it), or is it (only the single loudest feature matters), or is it an ordinal queue (each feature waits for its predecessor)?

So we built a round-2 organism designed to arbitrate. Eight features instead of five, chosen to span a measured 200× range in token density and to fall into three "clash clusters" that contend for the same surface; two bullies of unequal size instead of one; a pair of features with identical density but opposite position, to test whether gradient coherence matters independently of magnitude; and — the important methodological upgrade — the predictions, the discriminator, and the falsification bars were all written into the spec before any eval ran.

Suppression is winner-take-all, not graded: deleting the loudest feature restores every other feature to its no-bully floor, while deleting the second-loudest (still 176 nats of loss share) changes nothing at all. Bullying strength follows loss share; acquisition order does not. And under AdamW the whole structure evaporates.

model
unsloth/gemma-3-4b-it, full-rank unless noted
reference recipe
plain SGD lr 3e-2, momentum 0, wd 0, max_grad_norm 10, global batch 16, bf16, seed 0
data
mechanical transforms of the round-1 pools: 3,990 archaic-pool rows / 4,353 plain-pool rows, eight features composed in a fixed order
eval
160 held-out prompts per checkpoint, greedy decode, 8 programmatic detectors, 40–43 log-spaced checkpoints per arm
arms
r0-all (reference), r1-noleet, r2-nodense, r3-notitle, r4-envelope, r5-lora64, r6-boundary, r7-adamw, r8-all-s1
pods
ofat4/5/6 (A100-80GB, US-MD-1), all torn down; ~19 A100-hours ≈ $28
code
ArcadiaImpact/one-feature-at-a-time · experiments/feature_order_sft2/ (SPEC2.md, RESULTS2.md) · HF arcadia-impact/ofat-feature-order-sft under round2/

§1Eight features, and how loud each one is

Every training target carries all eight features at once (the transforms compose in a fixed order so that none destroys another's evidence — that ordering, and the seven detector traps it has to dodge, is the boring half of the spec). Two things are measured before training: token density (what fraction of the target's tokens change when you remove that one feature) and ΔNLL — how many nats the base model loses on the held-out targets when that feature is added.

featurewhat it does densityΔNLL LOO role
leetevery non-initial e in a word becomes 30.592555.4bully 1
titlecaseEvery Word Starts With A Capital0.421175.8bully 2
archaic18th-c. English diction (pool choice, not a transform)160.2*carried over from round 1
conjevery sentence after the first opens with a cycling conjunction0.01859.7cluster B
signoffthe reply closes with the line So it goes!0.00327.8cluster C
prefixthe reply opens with the line Now then!0.00326.4coherence probe
exclevery sentence-final . becomes !0.01524.7cluster B
dspacetwo spaces after sentence-final punctuation0.01713.2cluster B

Three things to notice. The premise holds: leet's loss share is 3.2× titlecase's and both are far above everything else — two bullies of unequal size, as designed. prefix and signoff are twins: identical density (0.003) and near-identical loss share (26.4 vs 27.8 nats), differing only in where they sit, which is exactly what makes them a clean coherence probe. And density is not loss share: titlecase changes more tokens when applied solo (0.728 vs 0.628) yet costs the base model a third as many nats, because Title Case Is An Utterly Familiar Format and leet is not.

The features also deliberately collide. Cluster A is the two bullies fighting over every word (interior characters vs the initial one). Cluster B is excl, dspace and conj occupying three adjacent character positions at every sentence boundary — the sharpest same-surface clash that is still simultaneously satisfiable. Cluster C is the envelope pair.

§2What we predicted, in writing, first

The spec fixed two rival predictions for the reference arm's ordering (a density/loss-share ranking and an ordinal queue), and — the part that does the real work — a discriminator over three ablation arms, with the read-out rule written down in advance:

armgraded loss-share predictswinner-take-all predictsordinal queue predicts
r0-all90 / 22090 / 22030 / 300
r1-noleet~30 / ~70 (partial relief)~35 / ~80 (floors)25 / 250
r3-notitle~55 / ~130 (partial, smaller)~90 / ~220 (no relief)28 / 260
r2-nodense~9 / ~18 (floors)~9 / ~1820 / 180

Plus a falsifiable bar for the coherence question: prefix should land in the top 3 despite its 0.003 density, and the hypothesis is falsified if prefix and signoff end up within 1.5× of each other.

§3The ladder

Takeaway: the eight features are acquired over a ~6× spread, titlecase first and signoff last — and the order does not follow loss share: leet, with 3.2× titlecase's ΔNLL, arrives fourth.

Ladder of fitted t_mid: titlecase 10, excl 18, prefix 20, leet 21, dspace 22, conj 24, archaic 24, signoff 59 under SGD; AdamW bars all clustered between 8 and 15 with signoff at 23.
Fig. 1 · Fitted tmid per feature. Filled markers: the SGD reference (r0, seed 0). Hollow: the seed replicate (r8). Dark bars: AdamW (r7). Rank order is seed-stable at the resolvable scale — titlecase first, signoff last — but the middle is a tight 19–24 cluster whose internal ordering is not. The AdamW bars sit almost on top of each other: no ladder at all.
r0-all acquisition curves for eight features, oscillating heavily between steps 5 and 35 before all saturating; signoff rises last.
Fig. 2 · The reference arm's raw curves. Two honest caveats visible here: SGD at lr 3e-2 oscillates violently between steps ~5 and ~35 (features cross 0.9 and fall back repeatedly), and 11 of 42 checkpoints tripped the and are excluded from both the fits and these lines. The coloured ticks along the bottom axis mark each feature's fitted tmid, which is what the ladder above reads.
r8-all-s1: same recipe at seed 1, same broad ordering, signoff at 31 instead of 59.
Fig. 3 · Seed 1, same recipe. titlecase still first, signoff still last, but signoff's tmid moves 59 → 31 (1.9×). That number is the calibration we use for "how much of a gap is just noise" later on.
featurer0-allr8-s1 r1-noleetr2-nodense r3-notitler4-env r6-bndr7-adamw r5-lora64
titlecase10.016.44.38.1126
excl17.920.812.7~1*14.66.011.9128
prefix20.419.312.611.923.77.79.811.8126
leet21.222.726.37.9126
dspace22.14.9*12.412.416.3~13*14.1117
conj23.621.311.813.921.113.914.5145
archaic23.724.215.415.624.812.8162
signoff58.931.417.114.2110.610.914.923.5>800

Everything lands ~4× faster than the round-1-calibrated pre-registration expected (signoff 59 vs a predicted 220). With two partial-surface bullies rather than round 1's everything-in-caps, the whole ladder compresses — worth knowing if you want to design one of these.

§4The verdict: winner-take-all

Takeaway: removing leet alone restores every other feature to the floor it reaches when both bullies are gone; removing titlecase — still the second-largest gradient source in the dataset by a factor of three over anything else — buys precisely nothing.

Discriminator: archaic 24 and signoff 59 in r0; 25 and 111 in r3-notitle; 15 and 17 in r1-noleet; 16 and 14 in r2-nodense.
Fig. 4 · The pre-registered discriminator. r1-noleet ≈ r2-nodense (archaic 15.4 vs 15.6, signoff 17.1 vs 14.2) and r3-notitle ≈ r0-all (archaic 24.8 vs 23.7). By the rule written down in §2 that is the winner-take-all signature; graded loss-share and the ordinal queue are both rejected. signoff's 110.6 in r3 is nominally worse than r0's 58.9, but 1.9× is exactly the seed spread Fig. 3 measured, so we read it as "no relief", not "anti-relief".
r1-noleet: leet flat as a control, every other feature acquired by step 12-17.
Fig. 5 · Delete bully 1. leet (dashed, control) stays flat; everything else collapses onto a tight 11.8–17.1 band — roughly a 2–3.5× promotion, and for signoff a 3.4× one.
r2-nodense: both bullies flat as controls, remaining six features acquired by step 12-16.
Fig. 6 · Delete both bullies. The floors are 11.9–15.6 — statistically the same picture as Fig. 5. Once the loudest feature is gone, removing the second-loudest as well changes nothing.
r3-notitle: titlecase flat as a control, but every other feature keeps its r0 timing; signoff even later.
Fig. 7 · Delete bully 2 only — the arm that separates the hypotheses. titlecase is gone (dashed control) and the survivors sit at 14.6–26.3, i.e. on top of r0's 17.9–23.7. 176 nats of loss share vanished from the dataset and the ladder did not notice.

This matters beyond our toy: the simple additive reading of gradient starvation predicts partial relief proportional to the deleted feature's share, and that is not what a 3.2×-smaller-but-still-huge deletion produces. Whatever the suppression mechanism is, it is competitive — one winner takes the update direction — rather than a budget split among contenders.

§5Coherence buys resistance, not speed

prefix and signoff have the same density and the same loss share. The difference is that prefix is unconditional: the same four tokens at position 0 of every single example, so its gradient points the same way in every batch member. signoff has to be produced after a variable-length body.

Takeaway: under bullying, prefix is 2.9× faster than its twin (20.4 vs 58.9). Unbullied, the gap nearly closes (11.9 vs 14.2 in r2; 7.7 vs 10.9 in r4). Perfect gradient coherence does not make a feature intrinsically faster — it makes it hard to suppress.

r4-envelope: prefix 7.7 and signoff 10.9, all other features flat controls.
Fig. 8 · The envelope pair alone on plain-English targets (everything else is a dashed control). prefix 7.7, signoff 10.9 — a ratio of 1.4, under the pre-registered 1.5× falsification bar, so the two features really are intrinsically near-equivalent. The 2.9× split in the full arm is differential bully-resistance.

§6Same-surface clash is a non-effect

Takeaway: three features contending for three adjacent character positions at every sentence boundary are acquired as if the others weren't there. Given loss share, features are independent even at zero surface separation.

r6-boundary: excl 6.0, prefix 9.8, dspace ~13, conj 13.9, signoff 14.9; bullies and archaic flat controls.
Fig. 9 · Cluster B plus the envelope, on plain targets with no bullies and no archaic. excl 6.0, dspace ~13, conj 13.9 — the same 6–14 band as their r2 floors, and squarely at round one's solo dspace floor of ~12. The clash hypothesis predicted a ≥2× delay; there isn't one.

§7It's the optimizer, again

Takeaway: AdamW erases both the ladder and the bully; a rank-64 LoRA reproduces round one's rank-16 reordering, so that reordering is a LoRA effect rather than a rank-budget artefact. Staging and winner-take-all interference are properties of raw-gradient descent — not of the data, and not of the parametrization.

r7-adamw: all eight features land between 7.9 and 14.5 with signoff at 23.5.
Fig. 10 · AdamW full-rank, identical data to Fig. 2. Everything lands in a near-simultaneous 8–15 band with signoff mildly behind at 23.5 — against 58.9 under SGD, so the bully structure is gone too. And the top of the order inverts: leet, the largest raw-gradient feature and the SGD bully, is acquired first (7.9) here. Per-parameter preconditioning normalizes away exactly the loss-share advantage that made leet the bully.
r5-lora64: everything much slower, dspace 117 first, dense features 126-128, archaic 162, signoff never plateaus.
Fig. 11 · SGD + LoRA r64, 800 steps. Still staged (>3× separation), but dspace goes first (117) ahead of the dense features (126–128) — round one's rank-16 ordering, reproduced at 4× the rank — and signoff never plateaus inside 800 steps. Two of the three pre-registered criteria for "higher rank restores full-rank behaviour" fail. Full-rank SGD stays the reference recipe.

§8Caveats and round-three leads

Part one · One feature at a time (five features, SGD vs AdamW vs LoRA vs momentum).
Code, spec and full write-up · ArcadiaImpact/one-feature-at-a-time, experiments/feature_order_sft2/{SPEC2,RESULTS2}.md; plotting script vibe-research/make_plots2.py; all panels in plots2.pdf.
Per-checkpoint generations, summaries and the loss-share measurements · HF arcadia-impact/ofat-feature-order-sft under round2/.