Seven controlled changes to Qwen3-0.6B, each tested at matched compute across three seeds and scored on held-out text. A point to the right of zero means the model predicts that text better, in bits per byte. Filter the results, then open any row to see what happened. All of it ran on one NVIDIA GB10 box.
- The 95% interval clears zero, so it counts as an effect
- The interval touches zero, so it's a null
English text00.20.40.60.8
Python code00.20.40.60.8
Swap the training data to dclm-edu131M tokens
−0.010
+0.703
The largest effect in the study came from changing the data alone. Code gained 0.70 bits per byte and English did not move.
English −0.010, interval −0.026 to +0.006, seeds −0.006, −0.016, −0.007.
Code +0.703, interval +0.664 to +0.743, seeds +0.713, +0.699, +0.699.
Results file
Blend the data 50/50131M tokens
+0.016
+0.590
The blend kept about 84% of the code gain and held English steady, so this mix went forward into mid-training.
English +0.016, interval −0.001 to +0.033, seeds +0.017, +0.004, +0.027.
Code +0.590, interval +0.553 to +0.628, seeds +0.590, +0.573, +0.608.
Results file
Replace AdamW with NorMuon42M tokens, early training only
+0.474
+0.502
This edge fades with budget. Across the token ladder the English gap falls from 0.474 to 0.072, and at the top rung the fitted edge sits inside the noise floor. Code keeps a resolved edge.
English +0.474, interval +0.443 to +0.505, seeds +0.455, +0.478, +0.490.
Code +0.502, interval +0.456 to +0.547, seeds +0.516, +0.462, +0.527.
Results file and Budget ladder
Add three architecture modules131M tokens
+0.118
+0.305
Value residual, layernorm scaling and head gating. Each one is significant on its own when tested separately.
English +0.118, interval +0.100 to +0.135, seeds +0.123, +0.107, +0.123.
Code +0.305, interval +0.259 to +0.351, seeds +0.295, +0.313, +0.306.
Results file and Per-module results
Anneal on the 50/50 mix150M tokens
+0.016
+0.272
The control took the same learning-rate cooldown on FineWeb-Edu alone, so the data carries this gain and the schedule does not. I expected no change on English; it moved slightly.
English +0.016, interval +0.014 to +0.017, seeds +0.016, +0.015, +0.016.
Code +0.272, interval +0.264 to +0.279, seeds +0.272, +0.269, +0.274.
Results file
Use a warmup-stable-decay schedule131M tokens
+0.024
+0.036
The interval crosses zero on both corpora, so the study claims nothing for this schedule.
English +0.024, interval −0.017 to +0.066, seeds +0.011, +0.030, +0.032.
Code +0.036, interval −0.065 to +0.137, seeds −0.003, +0.057, +0.054.
Results file
Add z-loss131M tokens
−0.003
−0.001
No measurable effect on either corpus.
English −0.003, interval −0.018 to +0.011, seeds −0.005, −0.006, +0.001.
Code −0.001, interval −0.052 to +0.051, seeds −0.019, +0.011, +0.006.
Results file
Show these results as a table
The win that wasn't
Response-masked fine-tuning looked like a 0.68 perplexity win with a very tight interval. The two arms had been scored on different tokens. On one fixed held-out set the gap fell to 0.009, and a full-sequence check flipped its sign.
Read how it collapsed
A null called in advance
I pre-registered that GRPO wouldn't help at this size, because the base model solves about 1% of maths problems. After 300 steps it scored 1.0% on GSM8K against 1.12% for the fine-tuned floor, and it didn't beat a random-reward control. This run used a single seed, as registered.
See the null result
Read the full study or browse the code. The repo also holds a SmolLM2-135M build that is bit-exact on CPU, and records how far it drifts on GPU.