25 min

What pretraining actually buys a robot

A policy trained on your demonstrations knows your demonstrations. A pretrained model arrives already knowing what a block is, and that is a different kind of thing to own.

Where you are. You have trained ACT on demonstrations you collected yourself, evaluated it with a harness that does not flatter it, and watched it work on a real SO-101. This lesson says what a pretrained model would add to that policy, and what it would not.

The blue one

There is a policy on your desk that works. Fifty demonstrations, a red block, a bowl, eight successes out of ten. You are pleased with it, and you should be.

Someone picks up a blue block and puts it where the red one was.

Sit with what happens next, because it is not a question about accuracy. Your policy takes camera pixels in and puts joint angles out. There is no input where the word “blue” would go. There is no input for “the one on the left”, or for “no, you dropped it, try again”. And there is no representation inside the network of the block as a thing that is separate from the particular pixels it happened to be made of.

It will still do something. What it does is whatever a function fitted to red-block pixels does when you hand it blue-block pixels, which is nobody’s idea of a plan.

The obvious fix is fifty demonstrations of the blue block. That works. It also does not scale, because there is always another colour, another lighting condition, another table. The other fix is to start from a model that knew what a block was before it ever saw your robot.

The idea in one paragraph

A policy trained only on your demonstrations has learned exactly one thing: what your joint angles did when your cameras saw pixels like these. It carries no notion that the object is a block, that “blue” names a colour, that a bowl is a container, or that the block sitting on the floor means something has gone wrong. A foundation model arrives already carrying all of that, because it was trained on internet-scale images and text long before anyone bolted a robot to it. Fine-tuning on your fifty demonstrations then teaches it only the last mile: how your arm moves. So what pretraining buys is not accuracy on the demonstrations you collected. A small task-specific policy is often just as good there, and far cheaper. It buys behaviour in the situations you never collected.

Trained from scratch Pretrained, then fine-tuned Your 50 episodes camera pixels paired with joint angles The whole policy every weight fitted to those pairs and to nothing else Web images and text enormous, and containing no robot actions Vision-language backbone a representation that already separates objects, words and relations Action head the only stage fitted to your 50 episodes An action chunk An action chunk everything it knows came from 50 episodes, so a blue block is a new world the 50 episodes taught it your arm; the web taught it what a block is
Two ways to build a policy: one fitted only to your fifty episodes, and one where a backbone pretrained on web images and text is fine-tuned on the same fifty episodes

Wider than the screen; scroll it sideways.

Three things a demonstration cannot contain

Your Module 4 dataset is a good dataset. It still cannot express these, in principle, no matter how many episodes you add.

Your 50 episodes pixels in, joint angles out one task, one object Behaviour-cloned policy fitted to those pixels A request “the blue one”, “no, try again” An object you never showed nothing forced it to learn “block” What going wrong looks like every episode you recorded succeeded no input port exists for any of these, at any dataset size
A policy fitted to fifty episodes of pixels and joint angles, with three things arriving at its edge and no input port to enter through: a spoken request, an object that was never demonstrated, and the knowledge that something has gone wrong

Wider than the screen; scroll it sideways.

A request. Behaviour cloning fits a mapping from observation to action. If every episode in the dataset performs the same task, the task is a constant, and constants do not appear as inputs. Your policy does not ignore language; it has no port for it.

An object you never showed. The network’s features are whatever separated your successful frames from each other. Nothing forced it to learn “block” as a category, so nothing guarantees it treats an unseen block as one.

The knowledge that things went wrong. This is the subtle one and the most valuable. A demonstration dataset collected by a competent teleoperator is a dataset of things going well. The policy therefore has no model of correct, so it cannot detect incorrect. It reproduces the distribution of motions it was shown, including in states no demonstration ever visited, where the right answer is usually “stop and re-approach” and the fitted answer is usually “keep going”.

That gap has a mechanism, and it is worth saying out loud: a model with a strong prior about how the world normally looks can tell that the current scene is not one of the normal ones. Detecting “this is wrong” is upstream of doing anything about it, and a policy fitted only to successful frames never learned what wrong looks like.

So what is a foundation model, concretely

Strip the marketing and there are three ingredients.

  1. A backbone pretrained on web-scale images and text. This is an ordinary vision-language model of the kind you have used: images and words in, tokens out. It supplies the semantics.
  2. Robot data on top. Demonstrations from many robots and many tasks, used to teach the model to emit actions instead of, or alongside, words.
  3. One set of weights for many tasks. Not one checkpoint per task. That is what makes the word “foundation” mean anything: the same weights are the starting point for work nobody had in mind when they were trained.

The ledger, honestly

Here is the trade as measured, not as advertised. All figures below were checked on 9 August 2026 and every one of them comes from a real-robot evaluation, not simulation.

Pretraining buys youEvidenceIt does not buy youEvidence
A language input that actually does somethingACT scored 0% on a colour-sorting task that requires reading the instruction; pi0.5 scored 10%, Wall-X 0%, SmolVLA 5% (Hiroshima, June 2026)Precision on cheap hardwareThe best model on that independent SO-101 benchmark averaged 56.25% across four tasks
Robustness when the scene changesSuccess under object and count variation: ACT 0.18 in-distribution falling to 0.075 out; SmolVLA 0.26 rising to 0.30 (VLA-REPLICA, arXiv:2605.20774, May 2026)A fix for grasp slipGrasp instability and repetition loops stayed above 90% of failed trials for every model tested, pi0.5 included
Recovery after a visible failure6.45% for ACT against 30.77% for pi0.5Cheap iterationACT trains in tens of minutes on a consumer card. A 3B-class fine-tune wants 22.5 GB minimum for LoRA and 70 GB for a full run
One checkpoint across several taskspi0.5 was the top scorer on both independent SO-101 studies, over four tasks in one and ten in the otherAnything you have not measured yourselfEvery number in this table came from a lab that is not you, on tasks that are not yours

in distribution out of distribution pi0.5 0.54 0.35 kept 65% SmolVLA 0.26 0.30 kept 115% ACT 0.18 0.075 kept 42% 0.00 average success VLA-REPLICA, May 2026 · one SO-101 rig · 10 tasks · 50 demonstrations each out of distribution = unseen object colours and shapes, unseen repetition counts
In-distribution and out-of-distribution success for three policies on the same SO-101 rig, showing the demonstration-only policy losing more than half its performance while the pretrained models hold

Wider than the screen; scroll it sideways.

Look at what that figure does and does not say. Out of distribution, pi0.5 is still the best model on the rig, but it fell from 0.54 to 0.35. SmolVLA did not fall at all, and started far lower. ACT started respectably and lost more than half. “Generalizes better” and “is better” are two different rankings, and a benchmark that reports only the in-distribution column hides the more interesting one.

The scale is doing the work, not the acronym

This is the single most useful correction to make early, because the marketing runs the other way.

Keep this near the front of your mind for the rest of the module. Every architecture you are about to meet is a different answer to “how do I attach actions to a big pretrained model”, and the differences between them are real and worth understanding. But the first-order effect is how big and how well-trained that pretrained model was.

There is one more thing to hold: the two independent studies above disagree with the model authors. SmolVLA’s own paper reports 78.3% against ACT’s 48.3% on similar hardware with 50 demonstrations per task. The independent benchmark reports a tie. Different tasks, different operators, different amounts of effort spent tuning each baseline, and no way to reconcile them from the outside. When you find yourself weighing an author-reported number against an independent one, weigh the independent one. Lessons later in this module take that apart properly.

Check yourself

1. Your ACT policy picks up a red block reliably. Why is “add fifty demonstrations of a blue block” a bad long-term answer?

It works, and it fixes exactly one variation. The dataset has to grow once per variation you can name, and the world supplies variations faster than you can teleoperate them: colour, shape, lighting, table texture, distractor objects, starting pose. Pretraining is the attempt to buy the whole class of variations at once, by starting from a model whose representation already separates “a block” from “these particular pixels”.

2. Where exactly would a language instruction enter a behaviour-cloned policy trained on one task?

Nowhere. Behaviour cloning fits observations to actions, and if every episode performs the same task then the task is a constant rather than an input. There is no tensor in the network carrying the request, so there is no place to write one. Conditioning on language is not a feature you switch on; it requires the instruction to have been a varying input during training.

3. Two policies are measured on the same rig. One scores 0.54 in distribution and 0.35 out. The other scores 0.26 in and 0.30 out. Which generalises better, which is better, and why is that not a contradiction?

The second generalises better: it lost nothing when the scene changed, while the first lost about a third. The first is still the better policy in both columns, because it started so much higher. Generalisation is a ratio between two measurements and performance is a level, so they rank models differently. A paper reporting only the in-distribution column is hiding the half that tells you how the model will behave in your kitchen.

4. Why is recovery rate arguably more decision-relevant than success rate when you are choosing a policy for real hardware?

Success rate tells you how often the first attempt worked. Recovery tells you what happens the rest of the time, which on real hardware is most of the time. A policy that fails and stops needs a human at the bench; a policy that notices the object slipped and re-approaches keeps running unattended. The measured gap on SO-101 was 6.45% for ACT against 30.77% for pi0.5, wider in relative terms than the gap in success rate.

5. A 450-million-parameter VLA ties a small non-pretrained policy on real hardware. What does that tell you about the value of the VLA architecture?

On that benchmark, that the architecture alone is not the thing that helps. A VLA is a way of wiring actions onto a pretrained backbone; if the backbone is small and its pretraining corpus is modest, there is not much prior knowledge to transfer, and you may have paid the complexity cost without collecting the benefit. The gains observed on that same benchmark came from the roughly 3-billion-parameter model. Read “VLA” as a description of the wiring, and look separately at what is on the other end of it. But do not over-generalise from one tie: the second independent study in this lesson measured the same small VLA comfortably ahead of the same baseline, most of all off-distribution. One tie is evidence that the architecture is not sufficient, not evidence that it is worthless.

6. You read a blog post claiming a new model beats pi0.5 by 17 points. What is the first question to ask?

Who ran the evaluation. This exact case happened: X Square Robot’s model card for Wall-OSS-0.5 reports it beating pi0.5 by 17.5 points of average task progress on their own 15-task suite, and the independent Hiroshima benchmark measured Wall-X about 5 points behind pi0.5 on binary success rate. Both results can be honestly obtained, they are not even the same quantity, and only one of them is evidence about how the model will behave on your bench. Second question: what exactly was measured, because “task progress” gives partial credit and “success rate” does not. Third: how many trials per cell, because at 20 trials the confidence interval around a mid-range success rate is roughly plus or minus 22 points.

Do this

Twenty minutes, no GPU.

1. Write your own variation ladder. Take the task you recorded in Module 4 and write five rungs, each a single change from the last: same object same place, same object moved 10 cm, a different-coloured instance of the same object, a different object of the same class, and the task selected by a spoken instruction with a distractor present. This ladder is your out-of-distribution axis, and you will run it for real when you benchmark later in this module.

2. Register a prediction, before you have any data. For each rung, write down what you expect your existing ACT policy to score, and what you expect a fine-tuned SmolVLA to score. Put a date on it and do not look at it again until the benchmarking lesson. A prediction made after seeing the result is worth nothing, and this is the cheapest possible way to find out whether your intuitions about pretraining are calibrated.

3. Look at the shape of the published evidence. Run this against the numbers reported by VLA-REPLICA in May 2026, which are pasted in as data rather than computed, so it is honest about being a reading exercise and not a measurement.

# In-distribution and out-of-distribution average success, 10 tasks,
# 50 demonstrations per task, one SO-101 rig. VLA-REPLICA, May 2026.
results = {
    "ACT":     (0.18, 0.075),
    "DiT-D":   (0.16, 0.05),
    "DiT-F":   (0.12, 0.025),
    "SmolVLA": (0.26, 0.30),
    "X-VLA":   (0.14, 0.075),
    "pi0":     (0.34, 0.30),
    "pi0.5":   (0.54, 0.35),
}

print(f"{'model':9} {'in':>6} {'out':>6} {'kept':>7}")
for name, (in_dist, out_dist) in sorted(
    results.items(), key=lambda kv: kv[1][1] / kv[1][0], reverse=True
):
    print(f"{name:9} {in_dist:6.3f} {out_dist:6.3f} {out_dist / in_dist:6.0%}")

Then answer two questions in writing. Which model would you ship if the deployment environment were exactly your lab bench, and which if it were somebody else’s kitchen? And: the three worst rows on retention are the three methods with no pretrained backbone at all. Is that the explanation, or is it a coincidence of which tasks were chosen? You cannot settle it from this table, and noticing that you cannot is the skill.

What you can now do

You can state what a pretrained backbone adds to a robot policy - a language input that works, robustness to scene changes, and the ability to notice that something went wrong - and what it does not add, which is precision, grasp reliability, or cheap iteration. You can read an in-distribution and an out-of-distribution number as two different rankings. And you can say why a small VLA can tie a non-pretrained policy without that being a paradox.

What you can now do

You can say precisely what pretraining adds to a robot policy, what it does not add, and why the size of the pretrained backbone matters more than the label on the box.