Vary the Layout, Not the Labels
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: What actually makes training cheaper? – One thing has worked: stopping part of the training early saved about 7% with no loss of quality. Everything else tested has been matched by a simpler or cheaper method -- and in two cases the clever method was only winning because it was quietly being given more.
In plain English
What we asked. An AI agent is usually trained inside one particular setup: one set of instructions, one way of naming its tools, one way of laying out the conversation. A large AI lab said this week that training across many different setups makes an agent cope with setups it has never seen, but it did not publish the comparison that would show it. We ran that comparison on a small model and a simple task, presented in many different formats.
What we found. It works, and strongly. Trained on one format, the model got about half of the questions right in formats it had never seen. Trained on sixteen, with the same total amount of training, it got almost all of them right, even in formats built from symbols it had never encountered. Each doubling of the number of formats helped. Then the more useful part: we separated two kinds of variety. Changing the labels while keeping everything in the same place taught nothing at all. Moving things around while keeping the same labels taught everything. We predicted that before running it.
Why it matters. The practical lesson for anyone building variety into training data: change where things are, not just what they are called. A model shown the same layout every time can learn where the answer usually sits instead of how to find it, and renaming things does not stop that. One cost may come with the variety, a slower start, but our test was too small to confirm it.
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, six seeds, 42 runs. The design, kill test and prediction were committed (7a56fcc) before any measured run; one calibration seed, disjoint from these, is disclosed in the program doc.
Program v2 Bucket S, item S4. Decisive computation: . Output: analysis/harness_diversity.py. Reproduce with analysis/harness_diversity.jsonpython analysis/harness_diversity.py (about ninety minutes on a throttled laptop CPU); --reuse re-derives every endpoint from the saved curves.
The question
Xiaomi's MiMo-V2.6 release (2026-09-22) describes Multi-Harness Training: one model trained across differing system prompts, tool sets and context-management configurations, which the release note says improves generalisation to other harnesses "including unseen ones" (release note). The note publishes no ablation against single-harness training -- it was read in full before this was designed. So this is not a replication. It is the missing comparison, at a scale where it costs nothing, plus the question the maintainer's report asked of it: does harness randomisation work the way domain randomisation works in robotics, and if so, which part of the variety does the work?
Kill test, fixed before execution: the 16-harness model's accuracy on unseen-token harnesses does not exceed the 1-harness model's, paired over six seeds with an interval excluding zero.
Prediction, fixed before execution: layout variation does the work, not marker identity. Varying where things sit forces a lookup that ignores the markers; varying only the markers leaves positions fixed, which a model can memorise. So layout-only matches the full sixteen, and markers-only does not.
Prior recorded in advance: good on the kill test (one calibration seed went from 0.47 to 0.99); the informative parts named in advance were the dose curve and the cost.
Design
The task never changes. Four (key, value) pairs, then a query key; the answer is its value. Keys and values are eight tokens each, so chance is 0.125.
A harness is one presentation of it, built from a pool of 40 marker tokens: a "system prompt" prefix of 0-3 tokens, a separator after each pair, a query marker, and an optional filler token after each separator. 28 pool tokens build training harnesses; 12 are held out entirely.
| Arm | Training harnesses |
|---|---|
| 1, 2, 4, 8, 16 | nested sets, every one containing harness 0 |
| markers only | sixteen token sets, all in harness 0's layout |
| layout only | harness 0's tokens, in every layout the grammar allows |
The grammar has four prefix lengths and two filler choices, so layout-only has eight distinct harnesses, not sixteen -- every layout there is. The program doc said sixteen; eight is all that exist, and it can only make the prediction harder to satisfy.
Every seed draws its own harnesses, so the interval covers which harnesses happened to be drawn. A harness set is an artefact like R11's donors, and holding one fixed would have reported training noise while being blind to a lucky set.
A 2-layer transformer, width 64, 3000 steps, batch 64 -- the same steps and batch for every arm, so the multi-harness arms see each harness less often, not more data. Tested every 100 steps on harness 0, on 32 unseen combinations of training-pool tokens, and on 32 harnesses built from the held-out tokens.
Result: the kill test does not fire
Final accuracy (mean of the last three evaluations), six seeds:
| Training harnesses | Harness 0 | Unseen combinations | Unseen tokens |
|---|---|---|---|
| 1 | 1.000 | 0.503 [0.44, 0.57] | 0.481 [0.45, 0.52] |
| 2 | 1.000 | 0.700 [0.63, 0.77] | 0.694 [0.65, 0.74] |
| 4 | 1.000 | 0.806 [0.72, 0.89] | 0.819 [0.70, 0.93] |
| 8 | 1.000 | 0.916 [0.87, 0.96] | 0.907 [0.85, 0.97] |
| 16 | 1.000 | 0.996 [0.99, 1.00] | 0.986 [0.96, 1.01] |
Sixteen minus one on unseen-token harnesses: +0.504 [+0.458, +0.550]. On unseen combinations of familiar tokens, +0.493 [+0.429, +0.557]. On the harness both arms trained on: +0.000.
The dose curve is smooth and roughly logarithmic -- each doubling of the number of harnesses buys a similar step until the curve reaches the ceiling at sixteen. Unseen tokens are no harder than unseen combinations at any rung: the model is not learning which tokens are markers, it is learning to ignore them.
One harness is not chance. A single-harness model gets about half of the unseen harnesses right, where chance is 0.125. It generalises partly, most plausibly to test harnesses whose layout happens to resemble its own; that was not measured and is not claimed.
Result: the prediction holds
Unseen-token accuracy, by what varied:
| Arm | Unseen tokens | Against sixteen, paired |
|---|---|---|
| one harness | 0.481 | |
| markers only (16 token sets, one layout) | 0.489 [0.45, 0.53] | -0.496 [-0.547, -0.445] |
| layout only (one token set, 8 layouts) | 0.994 [0.99, 1.00] | +0.009 [-0.011, +0.029] |
| everything varies (16) | 0.986 |
Varying the markers alone buys nothing at all -- sixteen different token sets in one layout generalise exactly as well as a single harness. Varying only the layout buys all of it, with eight harnesses rather than sixteen and without ever seeing a second marker token. Layout-only against markers-only: +0.505 [+0.468, +0.543].
The mechanism the prediction named is the simplest one consistent with this: with positions fixed, a model can find the answer by where it sits; with positions moving, it has to find it by what it is, and a lookup by content does not care what the markers are. That was stated before the run and the run did not test it any further than this.
What the variety cost
Steps for harness 0 to reach 0.90, evaluated every 100 steps:
| Arm | Steps to 0.90 | Against one harness, paired |
|---|---|---|
| one harness | 617 [392, 841] | |
| markers only | 567 [458, 675] | -50 [-195, +95] |
| sixteen | 967 [611, 1322] | +350 [-118, +818] |
| layout only | 1017 [689, 1345] | +400 [-4, +804] |
Variety appears to delay the moment the seen harness is learned, by roughly half as long again, and the two arms that vary layout are the two slowest. Neither interval excludes zero: the time to the jump varies by a factor of two between seeds, so six seeds cannot settle a difference of this size. Reported as a direction, not claimed. Every arm reached 1.000 on harness 0 well inside the 3000-step budget, so at this budget the cost, if real, is time, not final quality.
What stands
- The kill test does not fire. At equal training, sixteen harnesses beat one on harnesses built from never-seen tokens by
+0.504, and lose nothing on the harness both saw. - The dose curve is smooth:
0.48,0.69,0.82,0.91,0.99from one to sixteen. - The prediction holds, completely. Layout variation does all the work; marker variation does none. Eight layouts of one token set match sixteen fully varied harnesses.
- The practical reading for anyone building harness diversity into agent training: vary where things are -- ordering, position, context layout -- before varying what they are called. Renaming tools while keeping their positions fixed is, here, variety that teaches nothing.
- A possible cost in time to learn, pointing the expected way and not established at six seeds.
Limits
- A retrieval task, not an agent. A harness here is a presentation grammar with four knobs; a real agent harness also changes what the tools do, how state is managed and what the model must output. The layout-versus-labels finding is about presentation; it does not say tool semantics can be ignored.
- One model size, one task, one budget. The "layout does the work" result is stated for a 2-layer transformer on key-value lookup, which is exactly the kind of task a content-based lookup solves. A task where marker identity carries meaning -- a tool name that is the instruction -- could reverse it.
- The timing cost is underpowered. Six seeds and a
100-step evaluation interval against a jump that varies from400to1300steps. A claim about it needs more seeds or a finer grid. - Layout-only had eight harnesses and sixteen-harness had sixteen. That difference favours the sixteen-harness arm and layout-only matched it anyway.
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.
- calibration
- Working out an instrument's settings from runs whose answer you already know, so it can be used on a run whose answer you do not.
- 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.
- harness
- Everything wrapped around a model when it is used as an agent: its instructions, the tools it can call and how they are named, and how the conversation is laid out.
- held-out
- Data the model was never trained on, kept back specifically to test it. Scoring a model on data it has already seen measures memorisation, not learning.
- 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.
- 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.
- transformer
- The architecture behind most modern large language models. It uses attention to look at every part of the input at once, rather than reading in order.
- 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 approaches that turned out not to work, 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.