Research record

The Wrong Donor Is Worse Than None

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: 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. One of our strongest findings is that you can take a model which has finished learning a task, copy part of its internals into a fresh model, and the fresh model then learns much faster than it would have on its own. Every test of that had used the same task, which is the obvious way to be fooled: it might be a fact about transfer, or just a fact about that one task. So we moved it to a genuinely different task, one where the first token tells the model which rule to apply rather than the rule always being the same.

What we found. It survived, and it got bigger: the copied-in model roughly halves the time. A donor trained on a related task still helps noticeably, which is the first time anything in this project has carried over between two different kinds of task at all.

Why it matters. The surprise was the other direction. We also tried a donor that had learned an unrelated task perfectly, and it made the fresh model far slower -- about 6.7 times worse than handing over a model that had never been trained at all, and no better than one that had trained for a long time and learned nothing. So the best and the worst starting points in our table are both finished models. What matters is not how much the donor learned but whether what it learned was relevant, and getting that wrong is worse than not trying. Two things about measurement also came out of this that may be more useful than the result. One of our own standard ways of timing the effect reported the related-task donor as doing exactly nothing, because that measure moves its own goalposts when a model ends up better as well as faster; holding the goalposts still showed a real effect. And the size of the effect depends entirely on how good you require the model to get before you stop the clock, from nothing at a low bar to enormous at a high one, so any single number for this has to say which bar it used. Ours now does.

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. Local CPU, 6 receivers across 7 arms on two tasks plus 4 donors each, no GPU, no cost.

Program v2 Bucket Q, item Q4. Decisive computation: analysis/transfer_across_tasks.py. Output: analysis/transfer_across_tasks.json. Reproduce with python analysis/transfer_across_tasks.py in about twenty minutes on a throttled laptop CPU; --reuse re-derives every endpoint from the saved series without retraining.

The question

P1 is this programme's strongest positive. A donor's converged recurrent block removes 35.8 steps [-42.0, -29.7] from a receiver's time to the transition, about 41% of it, where J8 had found a transferred gradient direction worth 3-7%. P11 showed it does not fade with width once difficulty tracks capacity. P8 priced it at 4.8 receivers per donor.

A head start from another model depends entirely on what that model learned
A head start from another model depends entirely on what that model learned. We take a model that has finished learning one task, copy part of its internals into a fresh model, and time how long that fresh model then takes to learn a different task. Bars below the line mean it learned faster than a model given nothing; bars above mean it learned slower. The whiskers are the spread across six runs. Copying in a model trained on the same task roughly halves the time. Copying in one trained on a related task still helps. But copying in a model that had thoroughly learned an unrelated task is far worse than copying in nothing at all, and worse than handing over a model that was never trained. The best and worst starting points here are both finished models. What matters is not how much the donor learned but whether what it learned was relevant.

Every one of those was run on delayed-copy, whose entire content is one fixed offset. L7 is the reason to doubt it generalises: it took D5's critical-period effect to dispatch-copy-8lag and the effect was simply absent, +0.01 [-0.06, +0.08]. A task whose first token announces which of eight lags applies is a different computation, not a harder version of the same one.

Kill test, fixed before execution: a same-task dispatch donor gives a head start whose interval includes zero.

Prior recorded in advance: the kill test does not fire, because P1's untrained arm delays by +24.2, so "converged recurrent weights beat random ones" looks generic. And the cross-task arm gives less than P1's wrong-lag half, plausibly nothing, because delayed-copy machinery encodes a single fixed offset and that is the wrong prior for a task built to punish one. The first half of that prior was right and the second was wrong.

Anchor, enforced in code. This imports P1's own run() rather than reimplementing it, K3 failed an anchor three times because a reimplementation differed from the record's code by one operation, and re-executes P1's recurrent arm before touching dispatch. It reproduces -35.8 [-42.0, -29.7], P1's published interval to the decimal. The script exits 2 without interpreting anything if it does not.

Result: the kill test does not fire, and the effect is larger

Steps to the transition against each receiver's own control, on dispatch-copy-8lag. The control reaches the criterion at 169.2 steps. Negative means sooner.

ArmDonorEffectShare of the control's time
recurrentdispatch, converged-90.0 [-99.4, -80.6]-53.2%
recurrent-cross-taskdelayed-copy, converged-35.0 [-43.1, -26.9]-20.7%
recurrent-untraineda third initialisation+21.7 [+7.3, +36.0]+12.8%
recurrent-pre-transitiondispatch, at step 30+32.5 [+16.7, +48.3]+19.2%
recurrent-failed-donormodular-sum, never learned+145.8 [+76.5, +215.2]+86.2%
recurrent-third-taskrunning-count, converged+145.0 [+118.9, +171.1]+85.7%

P1 is not a property of delayed-copy. The same manoeuvre on a task L7 showed to be genuinely different in kind gives a larger share of the run: -53.2% against P1's -41.3%.

Cross-family transfer is real, and it is the first here

A donor converged on delayed-copy gives a dispatch receiver -35.0 [-43.1, -26.9], an interval clear of zero. Nothing in this programme had previously moved anything between two task families. P1's recurrent-wrong-task arm changed the lag; this changes the computation.

But relatedness decides the sign, and the range is enormous. A donor converged on running-count, which reaches 1.0000 accuracy on its own task, so it is converged in the strongest sense available, delays the receiver by +145.0, 86% of the control's entire time to the transition. That is:

  • 6.7x worse than handing the receiver a random initialisation (+21.7);
  • indistinguishable from a donor that learned nothing at all (+145.8, modular-sum at chance);
  • and it lowers final held-out accuracy to 0.4338 against the control's 0.5079, so it is not buying anything back later either.

The best and the worst starting points in this table are both fully converged donors. What separates them is not how much the donor learned but what it learned. delayed-copy and dispatch-copy-8lag share a shape, copy the token k places back, and running-count shares it with neither: its target is a running count modulo V, which no lookup at any offset produces.

It is not weight scale, and that was measured rather than argued

The obvious alternative is that the harmful donors simply carry large weights. The ordering is the opposite of that.

DonorEffect‖W‖_FLargest singular value
dispatch, converged-90.025.9411.33
delayed-copy, converged-35.022.5912.68
running-count, converged+145.017.507.27
modular-sum, never learned+145.815.365.69
dispatch at step 30+32.512.494.42
untrained+21.79.891.54

The two donors that help have the two largest norms. Harm is not monotone in scale in either direction: running-count at 17.50 harms 6.7x more than an untrained block at 9.89, and the two most harmful donors sit between the helpful ones and the untrained one. Whatever is doing the damage is structural.

The two definitions disagree on the cross-task arm, and the disagreement is measurable

This is the part worth copying. Read under P1's own floor-to-ceiling midpoint, the cross-task arm is +0.0 [-12.9, +12.9], exactly nothing. Read under L7's task criterion it is -35.0. Q7 found 4 of 23 close calls in the archive flip on the choice of definition; this is one, and it is not close to the boundary, it is a sign difference on a headline.

The cause is N5's trap in a new quantity, and it can be isolated exactly. P1's midpoint is halfway between each run's own floor and ceiling, so an arm that also raises the ceiling has a higher bar to clear. The cross-task arm ends at 0.5706 against the control's 0.5079, which puts its own midpoint level at 0.3035 against the control's 0.2802.

So read every arm at the control's level: the same series, the same runs, only the level held fixed:

Armown midpointcontrol's levelcriterion
recurrent-47.5-54.2-90.0
recurrent-cross-task+0.0-15.8 [-21.0, -10.7]-35.0

The +0.0 was the moving bar and nothing else, because the only thing that changed between those two columns is the level. This is the same failure P12 found in O7 and N5 found in a run-length comparison, arriving a third time in a third quantity: an endpoint normalised by a run's own range measures the run as well as the effect.

It is not a head start. It is a curve that separates.

The same runs read at fixed accuracy levels on the way up:

LevelControl reaches it atrecurrentrecurrent-cross-task
0.1020.0+0.0+0.0
0.2055.0-5.0 [-12.4, +2.4]+6.7 [-1.2, +14.6]
0.3255 (criterion)169.2-90.0-35.0
0.40265.8-159.2 [-178.4, -140.0]-80.0 [-103.0, -57.0]
0.50526.0-322.0 [-363.3, -280.7]-199.0 [-282.4, -115.6]

Two things fall out. The 0.10 row is +0.0 for every arm because every arm reaches it at step 20, before the graft at step 30, a correctness check on the harness that costs nothing. And the gap widens monotonically with the level: at 0.20 neither arm is distinguishable from the control, and by 0.50 the same-task arm is 322 steps ahead.

So "head start" is the wrong word, including in P1's record and in this one's title. The donor does not translate the curve in time; it puts the receiver on a curve that pulls away. Any single number for this effect is a number at a level, and the level must be stated. Reported at 0.20 it is nothing; reported at 0.50 it is nine times the criterion figure.

What stands

  • P1 survives a change of task and gets bigger. -53.2% of the run against -41.3%. The kill test asked a clear question and got a clear answer.
  • Cross-family transfer exists, at -20.7% of the run, between two tasks that share a shape.
  • A converged donor from an unrelated task is worse than no donor, by 6.7x against a random initialisation, and indistinguishable from a donor that learned nothing. This is the first result here where doing the thing is much worse than not doing it, rather than merely useless.
  • Not explained by weight scale, which the record measures.
  • The effect is a divergence, not a translation, so quote the level.

The flag I am not claiming

Three points suggest transfer is graded by task relatedness: same task -90.0, related task -35.0, unrelated task +145.0. That is a description of three points, not a law. I have no preregistered measure of relatedness, "shares a shape" was applied after the tasks were chosen, and with three tasks any monotone story fits. Q8 is why this is flagged rather than claimed: there I preferred a post-hoc pattern that fitted every point in a small grid over a preregistered kill test, and Q11 withdrew it the same day. A fourth and fifth task family, with relatedness fixed in advance, would separate this from its alternatives. Nothing here does.

The control that had to be replaced, and why

The third-task arm was first run with a modular-sum donor and its donor never learned: 0.0389 final accuracy against a 0.031 chance floor, in all six seeds. E1 had already recorded why: modular-sum is all-or-nothing per seed and needs 2,000 steps, so the arm was not measuring "a donor converged on an unrelated task" at all, and its +145.8 would have been published as though it were.

Two things changed as a result. The arm was re-run on running-count, which E1 recorded as solved in every seed by a recurrent model. And donor convergence is now a precondition in code: every donor's final accuracy is measured against a stated floor and printed with a DID NOT CONVERGE mark, because this failed silently the first time. The modular-sum arm is kept and relabelled as what it is, since "800 steps of training that learned nothing is the worst starting point in the table" is worth a line of its own.

Limits

  • Six receivers, one width (48), one learning rate, one graft step (30). P11 is the reason to expect width to matter, and this was not swept.
  • Two task pairs. The relatedness ordering rests on three donors and is flagged above, not claimed.
  • The criterion level (0.3255) comes from E1's published plateau, measured at a different learning rate. This control plateaus at 0.5079 by 600 steps and is still climbing, so the criterion sits at about 64% of the control's final accuracy. The level sweep is there so the result does not rest on that one level.
  • The modular-sum arm's interval is wide (+76.5 to +215.2) and it is the one arm whose donor is deliberately not converged.
  • Not an efficiency claim. The dispatch donor trains for 800 steps to save the receiver 90, which is worse end to end than not doing it. P8's amortisation question is not re-asked here.

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.
critical period
A stretch of time during which something has to happen for development to proceed normally. Borrowed from biology, where it describes windows in which a young brain must receive certain input.
gradient
The direction and amount by which each of a model's internal numbers should change to do slightly better. Training is repeatedly following it.
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.
learning rate
How big a step training takes each time it updates the model. Too small and nothing happens; too big and it never settles.
plateau
A stretch of training where the model is not visibly improving. Often, though not always, followed by a sudden jump.
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.
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.
singular value
A measure of how much a mathematical operation stretches things along one particular direction. The largest one describes the direction of strongest effect.
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.