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.
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.
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.
- 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.
- Robot data on top. Demonstrations from many robots and many tasks, used to teach the model to emit actions instead of, or alongside, words.
- 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 you | Evidence | It does not buy you | Evidence |
|---|---|---|---|
| A language input that actually does something | ACT 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 hardware | The best model on that independent SO-101 benchmark averaged 56.25% across four tasks |
| Robustness when the scene changes | Success 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 slip | Grasp instability and repetition loops stayed above 90% of failed trials for every model tested, pi0.5 included |
| Recovery after a visible failure | 6.45% for ACT against 30.77% for pi0.5 | Cheap iteration | ACT 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 tasks | pi0.5 was the top scorer on both independent SO-101 studies, over four tasks in one and ten in the other | Anything you have not measured yourself | Every number in this table came from a lab that is not you, on tasks that are not yours |
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.