Research record

A Warning Before Anything Happens

Ongoing research. This is an experimental result from active work, not a settled conclusion. The numbers are what we measured and the method is described so you can judge it, but the programme is still running and later experiments may revise what it means.

A note on the language in these records. This is a working laboratory notebook for research into training AI models more cheaply and efficiently, so you will read that an approach did not work, that a result did not hold up, or that one method was worse than another. That is the research doing its job, not a verdict on the engineering we deliver to clients. Ruling an approach out is how the search narrows, and these are the pages that teach us the most: nearly every technique we now rely on came from understanding why something else fell short. Testing our own ideas at least as hard as anyone else's is the point of publishing them. More about this programme and why we run it.

Part of a bigger question: Can you tell in advance that a model is about to improve? – Yes, repeatedly and by several independent routes -- a probe on the hidden state, gradient statistics, held-out loss, and which earlier word the prediction leans on. The warnings are real; how far ahead they fire varies a great deal.

In plain English

What we asked. Our best early-warning tool reads a model's internal state and reaches a target a little before the model's own answers do, giving a warning that learning is about to happen. The size of that warning had only ever been measured on one version of the task. We tried four, from easy to hard.

What we found. The warning ranged from about 15 to about 50 steps depending on the task. And on the two easiest versions the tool went off at the very first step, before the model had learned anything at all, because even an untrained model's internal state already holds the answer to an easy enough task.

Why it matters. So the tool's warning is only meaningful when its alarm is set above what a model that has learned nothing can already show, and that line is different for every task. Next we set it task by task.

The rest of this page is the technical record: the design, every number, and the limits. It is written for a reviewer, and you do not need it to have understood the result above.

New here? How to read a research record
  • Start at the verdict. Every record states, before the experiment was run, what result would have made us abandon the idea. That is the "kill test". Then it says whether the test fired. Nothing gets reinterpreted after the fact.
  • Numbers in square brackets are uncertainty. 23.4 [18.1, 28.7] means our best estimate is 23.4 and the true value is probably somewhere in that range. If a range includes zero, we cannot claim an effect.
  • Results that rule an idea out are kept. Roughly half of what is published here says an approach did not work, including plenty of our own. Those pages are the output, not a shortfall: knowing which direction is a dead end is what lets the next experiment go somewhere better, and most of what we now rely on came out of understanding why something else fell short. Work that only publishes what worked is not measuring anything.
  • Read the Limits section. Every record ends with what it does not show. It is the most honest part of any experiment and usually the shortest.
  • Pro tip: the figures near the top are designed to carry the result on their own. If you read nothing else, read the caption under each one, which says what it shows and what to take from it.
EXPLORATORY. Not a preregistered study. Local CPU, twenty training runs of 900 steps with F2's probe fitted at every evaluation. The design and kill test were committed (1fbc71a) before any run.

Program v2 Bucket N, item N17. Decisive computation: analysis/probe_difficulty.py. Output: analysis/probe_difficulty.json. Reproduce with python analysis/probe_difficulty.py (about three hours on a throttled laptop CPU); --reuse re-derives every endpoint from the saved curves, and was checked to print the identical summary.

The question

F2's decode probe crosses 50% about 23.5 steps before the model does, on lag4-v32 at width 48. J5 moved it along width; nobody had moved it along difficulty, and N14 found the difficulty half of the offline schedule is what carries the prediction. N17 runs F2's own probe loop on the four settled width-48 columns of N6's grid -- lag2-v32, lag4-v8, lag4-v32 (F2's) and lag6-v32 -- five seeds each, F2's 900 steps, only the task's lag and vocabulary changed. The grid is reduced, as the programme entry allows (lag4-v128 is unsettled at width 48).

On easy tasks the early-warning probe goes off before the model learns anything
On easy tasks the early-warning probe goes off before the model learns anything. Four versions of the same copying task, from easiest (short lag, or small vocabulary) to hardest. For each, when a probe reading the model's internal state first reaches 50% accuracy (first bar) and when the model itself does (second bar); the gap is the warning the probe gives. Averages of five runs. On the two easiest tasks the probe reaches 50% at the very start, because even an untrained model's state already holds the answer; its warning is meaningless there. On harder tasks it gives a real but different warning each time. The published number was true for one task only.

Kill test, fixed before execution: every pair of columns' lead intervals overlap at F2's 0.5 level.

Anchor, in code: on lag4-v32, seed 601 reproduces F2's committed curves exactly. It does, and the column's lead is +23.5 [+20.5, +26.6], F2's published number.

Result: the kill test does not fire -- the lead ranges threefold

Lead (model crossing minus probe crossing, steps), five seeds per column; the probe reached the model's final accuracy in all 20 runs (F2's instrument check):

ColumnLead at 0.3Lead at 0.5Lead at 0.7Lead at 0.8Model crosses 0.5Probe crosses 0.5Lead as share of the model's time
lag2-v32+37.0+49.2 [+45.3, +53.1]+60.0+64.650.21.098%
lag4-v8+8.1+21.2 [+19.6, +22.8]+15.0+9.625.44.284%
lag4-v32 (F2)+37.3+23.5 [+20.5, +26.6]+13.9+14.185.261.628%
lag6-v32+30.3+14.9 [+12.6, +17.1]+22.1+35.7119.4104.613%

The lead at 0.5 runs from 14.9 to 49.2 steps across difficulty, and the columns' ordering changes with the level (at 0.3 lag4-v8 has the shortest lead, at 0.8 lag6-v32 the longest). One number for "the probe's lead" was never safe outside lag4-v32.

The finding that matters more: on easy tasks the probe fires before training

On lag2-v32 the probe crosses 0.5 at step 1, and on lag4-v8 at step 4. Nothing has been learned by then: the untrained recurrent state already carries the answer readably above 0.5, because a short lag or a small vocabulary leaves the input easy to read out of a random state. On those columns the "lead" is simply the model's whole time to learn -- 98% and 84% of it -- and the probe is not warning of anything.

L5 found the same thing from the other side on F2's own column: a model trained on noise reads at 0.29, below 0.5, which is why the probe is honest there. The probe is a warning only where its level sits above what a model that has learned nothing already carries, and that floor moves with the task. F2's 0.5 happened to clear it on lag4-v32.

What stands

  • Kill test does not fire. The lead at 0.5 is 49.2, 21.2, 23.5 and 14.9 steps across four difficulty columns; F2's number reproduces exactly on its own column.
  • On the two easiest columns the probe crosses at steps 1-4, before any learning, so its "lead" there measures the task, not the model.
  • F2's lead is a lag4-v32 fact; F2 carries an EXTENDED banner.
  • Generates N24: set the probe's level per task from a model that cannot learn (L5's noise-trained construction), then re-measure the leads.

Limits

  • Four columns, five seeds, width 48; lag4-v128 unsettled and not run.
  • The level sweep is reported, not tested; only the 0.5 row was the kill test.

Terms on this page

Every piece of vocabulary this record uses, in plain language. Generated from the text above, so it cannot drift out of step with it.

accuracy
The fraction of answers a model gets right on questions it was not trained on.
kill test
A condition written down before running the experiment that says what result would make us abandon the idea. Fixing it in advance is what stops a disappointing result being reinterpreted as an encouraging one.
probe
A small separate model trained to read information out of a bigger model's internals, used as a measuring instrument rather than as a product.
recurrent
A design that reads a sequence one item at a time, carrying memory forward. The main alternative is attention, which looks at everything at once.
seed
The number that fixes all the randomness in a training run. Same seed, same run. Running several seeds is how you tell a real effect from a lucky one.
settled
A run has settled when it has stopped improving. Measurements anchored to a run's own best score are unreliable until it has, because that best score is still moving.
vocabulary
The set of distinct symbols a model can read and produce.
width
How many internal numbers a model uses at each layer. The usual way we vary model size in these experiments.

Want this measured on your data?

We build private models our clients own and run on their own infrastructure, and every engagement proves measured lift on the client's own tasks before we call it done. Start free with a readiness scorecard that tells you whether your data can support it, or book a short call.