Research record

Batch and Length Are Substitutes

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. The published formula we have been testing treats batch size and example length as two separate dials, each with its own fixed effect. We had tested each dial with the other held still. This time we turned both.

What we found. They are not separate. Each helps less when the other is already turned up, and settings with the same batch size times length took nearly the same time to learn. Both dials feed the model more material per step, and past a point more material per step stops helping.

Why it matters. In practice: if your examples are long, a bigger batch buys less, and the reverse. Think in material per step rather than in either dial alone.

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, 49 new training runs plus T11's 24 batch-64 runs. The design, anchor and kill test were committed (c04ad3e) before any run.

Program v2 Bucket T, item T13. Decisive computation: analysis/law_separability.py. Output: analysis/law_separability.json. Post-hoc reading, written after the run and changing no verdict: analysis/law_separability_posthoc.py -> analysis/law_separability_posthoc.json.

The question

arXiv 2511.16893 writes the step at which induction heads form as a product, k B^b C^c: the effect of batch size is the same at every context length. T8 and T11 measured each term with the other fixed. T13 varies both: T11's random-stream task (copy at lag 4), rate 0.006, batch 16, 64, 256 by sequence length 8, 16, 64, J8's eight receivers, first step at held-out accuracy 0.5. Per receiver, least squares of log step on log batch, log length and their product.

Bigger batches and longer sequences do the same job, and overlap
Bigger batches and longer sequences do the same job, and overlap. How many training steps a small model needed to get half its answers right, for three batch sizes (rows) and three sequence lengths (columns). Every sequence is random material, so both a bigger batch and a longer sequence mean more to learn from per step. Moving right or down both help, but less when the other is already large: 16 x 64 and 64 x 16 take about the same time, as do 64 x 64 and 256 x 16. The two act as substitutes, which a law with two independent exponents cannot express.
The benefit of longer sequences shrinks as the batch grows
The benefit of longer sequences shrinks as the batch grows. The same numbers as the grid, drawn as one line per batch size. If a published law with separate batch and length effects were right here, the lines would fall at the same rate, differing only in height. They do not. With small batches, longer sequences cut the steps sharply; with large batches, much less. How much one factor helps depends on the other.

Kill test, fixed before execution: the interaction coefficient's interval excludes zero. Anchor: a batch-64 rerun reproduces T11. It holds.

Result: the kill test fires

Steps to 0.5Length 8Length 16Length 64
Batch 16430.0386.9148.6
Batch 64194.3166.398.5
Batch 256125.6102.380.2
CoefficientMean over receivers
log batch-0.737 [-0.789, -0.684]
log length-0.851 [-0.912, -0.790]
interaction+0.118 [+0.103, +0.133]

The interaction is positive and its interval is far from zero: the product form does not hold here. Each factor's effect shrinks as the other grows. Read off the fit, the batch exponent is -0.49 at length 8 and -0.25 at length 64; the length exponent is -0.52 at batch 16 and -0.20 at batch 256. At batch 64 the fit gives -0.36, consistent with T11's direct -0.344.

What the interaction looks like (post-hoc)

Batch and length act as substitutes: both add content to each training step, and once a step carries enough, adding more by either route buys less. Two pairs of cells in the grid carry the same batch times length:

Batch x lengthCellsSteps
102416 x 64 and 64 x 16148.6 and 166.3 (ratio 1.12)
409664 x 64 and 256 x 1698.5 and 102.3 (ratio 1.04)

Equal content per step lands within 4%-12%, while the grid as a whole spans a factor of five. In each pair the faster cell also scores more positions (this task scores length - 4 positions per sequence), which points at scored content per step as the quantity that sets the pace. Two pairs, found after the fact: T14 preregisters it on a five-cell ladder of equal scored content.

What stands

  • Kill test fires. Interaction +0.118 [+0.103, +0.133]: the batch and length effects are not independent.
  • A law with two separate exponents describes one slice of this grid. The batch exponent halves from length 8 to 64, so an exponent quoted without the other factor's value is incomplete.
  • Post-hoc: equal batch times length gives nearly equal steps, which is what substitutes would do.

Limits

  • One task, one rate, a three-by-three grid. The paper's transformers may separate where a recurrent model does not; this says the product form is not universal, not that it is wrong for them.
  • The substitute reading rests on two pairs; T14 tests it.

CORRECTED 2026-09-27 by T14. This task scores length - 5 positions per sequence, not length - 4 as stated above. In each equal-product pair the faster cell still scores more positions (944 against 704; 3776 against 2816), so the reading is unchanged; the interaction and verdict are unaffected. Text and numbers above unchanged.

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.
batch size
How many examples the model looks at before updating itself once. Bigger batches give a steadier but more expensive update.
exponent
The number in a power law that says how strongly one quantity responds to another. A bigger exponent means a steeper response to the same doubling.
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.
induction
A model's ability to spot that a sequence is repeating and copy what came next last time. A standard early skill in language models.
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.
post hoc
Worked out after the fact, rather than decided in advance. We report such checks separately and never let them decide a result, because it is far too easy to find a pattern once you already know the answer.
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.
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.

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.