T.M.B. #13 — the metric was working perfectly and measuring the wrong thing. Earlier benches asked whether a model was good enough. This one asks whether the number used to CHOOSE models can be trusted, and the answer is no in the most direct way available: a controlled sweep where loss and quality are anti-correlated across a 30× size range. Frozen; same probes, same floors.

The setup

One corpus: 216,068 pairs / 22.9M tokens (byte-level, so bytes are tokens). Identical 16,880 steps — five real epochs — at batch 64. The ONLY variable is parameter count.

sizeparamstok/param% of Chinchillaheld-out losscleaninput-sensadjacencystablelatencyverdict
1M1.09M21.0105%1.1570.960.901.001.0035msSHIPPABLE
2M1.93M11.859%1.1090.880.921.001.0030msSHIPPABLE
5M4.94M4.623%1.0200.920.900.921.0079msSHIPPABLE
30M31.92M0.74%0.9630.770.941.001.00503msFAIL: clean

Loss is perfectly monotonic in size. 1.157 → 1.109 → 1.020 → 0.963. Textbook.

Clean inverts it. The best-loss model is the only failure — babble ×10, ten of forty-eight replies containing words that are not words. The worst-loss model produces the cleanest output ever measured here.

Why loss cannot see this

Loss measures how surprised a model is by held-out text. A model that answers everything with “Sounds like a plan!” is barely surprised by anything, because high-frequency filler is the safest continuation available — so it scores well and says nothing.

That is not a noisy estimate or a calibration issue. The failure mode is invisible to the metric by construction. No amount of more careful loss measurement recovers it.

This bench exists because B.10 chose the 30M on held-out loss and shipped it. Its title was “does bigger help on rich data?” and it answered its own question wrong, using the metric it picked to answer with. B.13 is that comparison re-run with floors instead.

Why smaller wins

At 22.9M tokens, Chinchilla-optimal is roughly 1.1M parameters.

The 30M is not a large model trained well. It is a model trained on 4% of the data it needs, and the surplus capacity has to go somewhere — into memorising fragments it cannot stitch back together. That is precisely what babble ×10 versus babble ×2 is, measured.

Every scaling result this project has produced was taken on starved models: the reader wall, the 85M dead weight, B.10 itself. They compared degrees of starvation and read it as a size preference.

The invalid run, and what it nearly cost

The first attempt ran 3,000 steps at batch 8: 24,000 sequences against 177,780 pairs = 0.13 epochs. Results were non-monotonic noise (5M 0.81, 10M 0.35), and the honest reading was that it measured training budget, not size.

The near-miss is worth recording. Every small model in that run scored input-sensitive 1.00 — perfect, and it looked like confirmation. It was babble: noise is maximally varied, so stem-diversity peaks when output is garbage. It was only caught because clean failed alongside it.

One composite score would have hidden this. A weighted average of five axes would have let a babbling model buy a passing grade with a perfect diversity score. Floors on every axis is what made the contradiction visible.

Against the incumbent

Same 48 probes, same floors, no allowances:

llama3.2:3b     clean 0.21   input-sens 0.73   20,618ms
werbos 1M       clean 0.96   input-sens 0.90       35ms

480× faster at 4.5× the clean score, from a model roughly three thousand times smaller. The 3B fails the same floor the 30M does, for a different reason (run-on ×33 — it writes paragraphs where a conversational turn is wanted; see B.12’s correction on that point).

What this does NOT show

  • clean 0.96 is a floor, not a ceiling. Forty-six of forty-eight replies contain only real words and finish their sentences. They are not therefore good. Verbatim from the shipped model: “It’s a secret of changer and cheese too.” That clears every floor.
  • ood is 0.00 for every model here, as it is for the 3B. Nothing signals confusion at nonsense. Two attempts to train it in failed — the first learned that short means nonsense, the second still refused “hey there”. Reported as debt.
  • One corpus, one domain. Conversational turns. Nothing here says a 1M model is right for code, retrieval, or reasoning — and the coding tier measured separately shows the opposite shape.
  • 48 probes, one operator’s phrasing, and a clean axis whose dictionary check can pass a sentence that is grammatical nonsense.

The lesson

A metric that cannot see your failure mode will rank your models backwards.

Not “will be noisy”. Not “will need a tiebreaker”. Backwards — a perfect inversion across four models and a 30× size range. The fix is not a better loss function; it is floors on axes that name the failures out loud, and the willingness to ship the model with the worst number on the metric everyone else uses.