Close Calls Are Decided by the Code
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. More about this programme.
Part of a bigger question: How do we know our own results are real? – Repeatedly, the control rather than the measurement decided the result -- and several striking findings dissolved when the right comparison was finally run.
In plain English
What we asked. We compare groups of training runs constantly: did this change make the model learn sooner than that one? Answering it means measuring when each run learned, and we had already discovered that our code contains fourteen slightly different ways of doing that. Two earlier checks found the fourteen agree closely on the number itself. Agreeing on a number is not the same as agreeing on an answer, though, because an answer usually comes down to whether two ranges overlap - and near that line a small shift decides it.
What we found. So we took every comparison in our archive, two hundred of them, and recomputed each one all fourteen ways. Seven changed their answer. Four of those seven are genuine disagreements between versions, and all four involve two groups that nearly touch. The pattern is clean enough to be a rule: among comparisons where the two groups nearly touch, about one in six changes its answer; among the ones where they are clearly apart, none does. If two results are separated by less than one measurement interval, our code is deciding the answer rather than the models are, and we should call it undecided.
Why it matters. Two things surprised us. Eleven of the fourteen versions refuse to measure a model that was started from an already-trained one at all - they contain a safety check that ignores runs which did not improve much, and a model that starts out good does not improve much by definition. That check protects against reading meaning into a flat line, and it also throws out exactly the experiments whose point is starting well. And the one version an earlier check singled out as the most reliable turns out not to be interchangeable with the others: it measures time to a fixed standard set by the task, which for a model too small to reach that standard is a different question entirely. Being stable and being a drop-in replacement are not the same property.
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. - Negative results are kept. Roughly half of what is published here says an idea did not work, including several of our own. Those pages are not failures, they are the output. 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. No training at all. It reads committed pilot output and runs the committed originals. Seconds on a laptop CPU, no GPU, no cost.
Program v2 Bucket Q, item Q7. Decisive computation: . Output: analysis/verdict_audit.py. Reproduce with analysis/verdict_audit.jsonpython analysis/verdict_audit.py.
The question
Q2 found fourteen implementations of the transition timing and showed they agree about where the transition is to within an evaluation interval. Q6 found a 30% grid factor in the sharpness family and showed no published comparison crosses it.
Neither asked the question a reader would ask next. Agreement about a number is not agreement about a verdict. A comparison between two arms turns on whether their intervals overlap, and a small shift near the boundary decides it.
So: for every committed pilot that compares groups of runs: arms, widths, architectures, optimisers, recompute every group's transition interval under all fourteen definitions and ask whether any pairwise verdict flips. Two groups are separated when their 95% intervals do not overlap and overlapping otherwise; that is the test this programme actually applies (K6: interval overlap, not point-in-interval).
Kill test, fixed before execution: no comparison's verdict changes under any registered alternative definition. Then the duplication Q2 found is untidy rather than consequential.
What we found: the kill test does not fire
200 pairwise comparisons across 20 pilots, each recomputed fourteen ways.
Seven flip. Three of the seven involve only L7's task criterion, which is not a variant of the others, see below. Four survive dropping it:
| Pilot | Pair | Its own verdict | Definitions dissenting | Margin |
|---|---|---|---|---|
block_the_wrong_algorithm | block-2 vs block-6 | overlapping | 6 | -0.22 |
block_the_wrong_algorithm | block-7 vs promote-wrong | separated | 10 | +0.04 |
built_in_algorithm | copy-gate vs plain | separated | 10 | +0.10 |
untied_recurrence | tied vs untied | overlapping | 4 | -0.96 |
Margin is the gap between the two intervals in evaluation intervals, negative when they overlap.
Every one of them sits within one evaluation interval of the boundary. And the rate is what makes this usable:
| Comparisons | Flip |
|---|---|
within one evaluation interval of the boundary (23) | 4, 17% |
beyond one evaluation interval (142) | 0, none |
A comparison whose intervals sit within one evaluation interval of the overlap boundary is decided by which copy of the definition the pilot happened to hold. Beyond that, nothing in this archive is.
Three things the flips teach that the counts do not
The dissent is not noise, it is the two families splitting. Q2 found the archive's definitions divide into those that step to the first reading at or above the level and those that interpolate between readings, and that the interpolating ones read about half an evaluation interval earlier. In built_in_algorithm, copy-gate is 79.3 [77.2, 81.5] against plain's 84.0 [81.7, 86.3], separated by 0.2 steps. Every interpolating definition closes that gap and returns overlapping. Ten of thirteen disagree with the pilot's own answer, and they disagree as a bloc.
Eleven of fourteen definitions cannot measure a warm-started arm at all. The one admission-driven flip is warm_start's warm-all arm: a model warm-started from a converged donor does not gain 0.30 of accuracy end to end, so every definition carrying the 0.30 eligibility gate returns None for it. Only the two ungated definitions produce an interval. The gate that protects against reading a transition into a flat noisy curve also refuses the arm whose whole point is that it starts high. That is a specific, checkable hazard for any transfer or warm-start experiment.
Q2's hero is stable but not interchangeable. L7's transition_at_criterion was the only definition Q2 found that never drifts. Q7 shows why that is not the same as being a drop-in replacement: its level is a property of the task, so for a model too small to reach that level it measures a different quantity. On width_floor's width-12 runs it reads 649 [451, 847] where every run-relative definition reads about 237 [188, 286]. Both are correct answers to different questions, "when did this run do most of its own learning" and "when did this run reach the standard the task sets", and for an undersized model those diverge by a factor of three.
What to take from this
- Quote the margin in evaluation intervals, not in steps. It is the number that says whether a verdict is about the data or about the code. Under one interval, report the comparison as undecided rather than as separated.
- Say which definition produced a timing, exactly as this programme already requires for the two residual estimators. Q2 made the case on tidiness; Q7 makes it on four live verdicts.
- An eligibility gate is a sampling decision. It silently changes which runs are in your average, and it is systematically biased against arms designed to start well. Report how many runs each arm contributed after gating.
- Stability and equivalence are different properties. An endpoint that never moves may be measuring something other than the one it replaces. Check both before swapping.
Limits
- This tests pilot-internal arm comparisons, not published headlines. Most headlines are one of these comparisons, but some are a fit across many groups (N6) or a ratio, and those are not covered. A pair flipping here does not mean a published sentence is wrong; it means the sentence would need re-reading against the definition it used.
- Groups need at least three runs to carry an interval, so smaller arms are excluded and the
200is a lower bound on the comparisons the archive contains. - The margin is computed under each pilot's own definition. Where a pilot declares none: it imports one, the margin is unavailable and the comparison still enters the flip count. That is
35of the200. - Interval overlap is a conservative test, not a paired one. Several of these comparisons would be decided differently, and more sharply, by a paired difference across seeds; this audit uses the test the archive actually applies rather than a better one.
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.
- architecture
- The blueprint of a model: what components it has and how they connect. Two models can be the same size and completely different architectures.
- eligibility gate
- A rule that excludes a run from a measurement, usually because it did not improve enough for the measurement to mean anything. It is a decision about which runs are in your average, not just a safety check.
- evaluation interval
- The gap between successive checks of a model during training. It is the smallest difference in timing a measurement can resolve, so two results closer together than one interval cannot be told apart.
- 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.
- residual
- How far the data sits from a proposed description of it, after the description has been fitted as well as it can be. A small residual means the description accounts for what was measured; a large one means something is missing.
- 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.
- sharpness
- How abrupt a model's improvement is. We measure the biggest change over any short stretch of training as a share of the run's total change, scaled so that a model improving at a perfectly steady rate would score 1. A score of 20 means the fastest stretch was twenty times steeper than a straight line.
- width
- How many internal numbers a model uses at each layer. The usual way we vary model size in these experiments.
Get new results as we publish them
Roughly monthly, one finding per email, in plain English first. Including the experiments that went against us, which are usually the useful ones. No sales email.
Double opt-in: we send a confirmation link and add nobody who does not click it. One-click unsubscribe on every email.