Research record

No Sample Small Enough

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: Which parts of a model actually matter? – The parts that move most are not the parts that matter, and no single component is required -- the model routes around every freeze. What a part is worth shows up only when you remove it.

In plain English

What we asked. Earlier we found that a new method for teaching a model something new without forgetting the old really works, but that simply mixing a few old examples back into training works better. The new method only needs its old examples once, though, to work out which parts of the model to protect. So maybe, when old examples are very scarce, it comes out ahead. We tested that with between 2 and 64 old examples.

What we found. It never comes out ahead. With 2 to 16 examples the two methods did equally well, which is to say equally poorly; with 64, mixing the examples back in won clearly. The reason is simple once you see it: a handful of examples shows either method only a small part of the old skill, so both protect only that small part.

Why it matters. The practical upshot: if you can keep and train on some of the old data, do that. The new method's real use is narrower than it first looked: situations where you may look at the old data but are not allowed to train on 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, S1's six seeds. The design, kill test and anchor were committed (bce0717) before any run.

Program v2 Bucket S, item S10. Decisive computation: analysis/null_basis_sample_size.py. Output: analysis/null_basis_sample_size.json. Reproduce with python analysis/null_basis_sample_size.py (about forty minutes on a throttled laptop CPU); --reuse re-derives every endpoint from the saved curves.

The question

S1 found null-basis adaptation real -- it keeps 0.600 of an old task against 0.100 for ordinary LoRA -- and dominated: replaying the same 64 sequences the basis came from kept 0.768 and learned the new task better. S1's Limits named what that comparison did not price. A null basis uses its sample once, to estimate a subspace; replay rehearses the sample for the whole run. So there might be a sample size small enough that replay has too little to rehearse while a basis is still estimable -- a crossover below which NB-LoRA is the better advice.

Protecting an old skill with only a few examples of it
Protecting an old skill with only a few examples of it. Two ways to stop a small model forgetting an old skill while it learns a new one, each given the same handful of examples of the old skill: use them to find the directions the old skill uses and protect those, or simply mix them back into training. With few examples the two methods do equally well, and equally badly: a small sample shows each of them only a small part of the old skill. With more examples, mixing them back in pulls ahead. There is no sample small enough for the clever method to win; its only remaining advantage is when old data may be looked at but not trained on.

Kill test, fixed before execution: replay retains more of the old task than null-basis adaptation at every sample size of at least 4, paired over S1's six seeds.

Prior recorded in advance: moderate that a crossover exists.

Anchor, in code, passed exactly: at size 64 both arms reproduce S1's committed task-A retention on its first seed to four decimals (0.7213 null, 0.7688 replay).

Design

S1's new-domain task and base models, at sample sizes 2, 4, 8, 16, 64. At every size the same sequences feed both methods: the null basis is estimated from them, and replay rehearses them. The smaller samples are the first rows of S1's, so they nest.

Result: the kill test does not fire -- and there is no crossover

SequencesNull basis keepsReplay keepsReplay minus nullNull new taskRecurrent dims protected
20.1460.161+0.015 [-0.036, +0.067]0.99912.5
40.2420.218-0.024 [-0.101, +0.052]0.99718.7
80.3370.337+0.000 [-0.088, +0.088]0.99524.7
160.4760.447-0.029 [-0.118, +0.060]0.99031.0
640.6000.768+0.169 [+0.041, +0.297]0.95540.3

The two methods tie at every size up to 16, and replay pulls clearly ahead only at 64. The kill test does not fire -- replay does not retain more at 4, 8 or 16 -- but null-basis adaptation does not win anywhere either: its best showing is 0.029 ahead at 16, inside an interval of nine points. The crossover the item was looking for does not exist here.

Why: a small sample limits both methods the same way

Both methods protect in proportion to how much of the old skill the sample shows them. Replay can only rehearse what is in the sample; a null basis can only protect the directions the sample reveals. The last column makes the second half visible: estimated from two sequences, task A appears to use 12.5 recurrent directions; from 64, it uses 40. A basis from a small sample protects a small subspace -- which is why null-basis adaptation learns the new task almost perfectly at small sizes (0.999) and protects little. The hoped-for asymmetry -- "a basis needs less data than rehearsal" -- is not there, because what a small sample misses, both methods miss.

Replay's advantage at 64 is the part S1 already reported: with enough of the old task in hand, rehearsing it both protects more and costs the new task nothing, while the constraint starts to bind (0.955 on the new task).

What stands

  • No crossover. Up to 16 sequences null-basis adaptation and replay tie; at 64 replay wins. Null-basis adaptation is never ahead with an interval excluding zero.
  • The kill test, as written, does not fire, because it asked for replay to win at every size and it only ties at the small ones. The substance is the same as a fire: there is no sample size at which the null basis is the better choice here.
  • A small sample limits both methods equally, because a basis estimated from little data sees only a little of the skill it is meant to protect.
  • So S1's Limits reduce to one case: NB-LoRA's remaining advantage is where the old data may be looked at but not trained on -- a constraint of policy or licence, not of sample size.

Limits

  • Six seeds and wide intervals at small sizes. A tie at 4-16 means neither method is ahead by more than about ten points, not that they are identical.
  • One threshold (99% energy). A null basis estimated from a small sample might protect more with a lower threshold that keeps fewer, better-estimated directions; S1 found the threshold is a dial, and it was not re-tuned per size.
  • One task pair and S1's scale, as in S1.

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.

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.
LoRA
Low-rank adaptation. A cheap way to teach an already-trained model something new: its original weights are frozen and a small set of add-on weights is trained instead.
null basis
The directions inside a layer that a particular skill does not use. A change made only along them cannot disturb that skill's calculation at that layer.
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.
replay
Mixing a few examples of an old task back into training on a new one, so the model is reminded of what it already knew. The standard defence against forgetting.
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.
subspace
A slice of a model's internal space: some directions kept, the rest ignored.

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.