VLA · Phase 1 · Introduction to VLA
1.2 — What Is a Vision-Language-Action Model?
A model that maps camera images and a language instruction directly to robot actions.
A VLA is defined by what goes in and what comes out. This lesson states the definition with its source, writes the interface as code, and shows how a continuous robot action can be turned into the tokens a language model produces.
Claims about papers, models and textbooks carry numbered references, listed with what each one is cited for in the References. Code marked “Toy model” is our own illustration, not the cited system.
Learning objectives
After this lesson, you should be able to:
- State the inputs and the output of a VLA.
- Explain how a continuous action is discretised into tokens and decoded again.
- Compute the precision limit set by the number of bins.
- Name two ways VLAs produce actions: as tokens or as a generated continuous chunk.
- Camera images
- A language instruction
- The VLA model
- An action for the robot
- The robot moves, and the cameras see the result
The one-sentence idea
A VLA turns what the robot sees and what it was told into the next robot action.
The model outputs actions, not a plan in words.
What the name means
A vision-language-action (VLA) model takes camera images and a language instruction as input and produces robot actions as output. The name was introduced with RT-2, whose authors used it for vision-language models that are co-fine-tuned on robot trajectories together with Internet-scale vision-language tasks.[1] A survey of the field also credits RT-2 with introducing the term.[2]
Each word in the name is an input or output of the model: vision (what the cameras see), language (what the person asked for) and action (what the robot should do next). The interface is therefore a function, and the next example writes it down as one. The model inside is a stub that returns zeros, because the point is the shape of the interface, not the answer.
import numpy as np
def vla(image, instruction, state):
"""image: height x width x 3 camera frame; instruction: text; state: robot joint readings.
Returns the next action: 6 end-effector motion values plus a gripper command."""
assert image.ndim == 3 and image.shape[2] == 3
return np.zeros(7)
image = np.zeros((224, 224, 3), dtype=np.uint8) # a blank frame stands in for the camera
action = vla(image, "pick up the red block", state=np.zeros(7))
print("input image shape:", image.shape)
print("output action shape:", action.shape)Output:
input image shape: (224, 224, 3) output action shape: (7,)
Toy model. The function body is a placeholder. The sizes (224 by 224 pixels, a 7-number action) are common choices, not a requirement of the definition.
Two things in the signature are worth noticing. The image is raw pixels, not a list of objects found by a separate detector, and the output is a command for the robot, not text describing a plan. Those two properties are what separate a VLA from the systems compared in lesson 1.3.
Why build one this way
The motivation in the RT-2 paper is transfer: a model that has already learned from Internet-scale images and text carries that knowledge into robot control. The authors do this by writing robot actions as text tokens so that the model handles them in the same way as language.[1] The same paper is also clear about a limit: the physical skills of the model stay limited to the distribution of skills seen in the robot data, although it can apply those skills in new ways using the web knowledge.[1] Language and vision knowledge generalises; motion skills still have to be demonstrated.
Models in this family share the idea but differ in how they produce actions. The rest of the lesson looks at the two main ways, and the architecture lesson 1.4 puts them in a pipeline.
Actions as tokens
A language model predicts a token from a fixed vocabulary. To reuse it for control, the continuous action has to become tokens. RT-1 discretises each action dimension into 256 bins.[3] OpenVLA does the same: each action dimension is split into 256 bins between the 1st and 99th quantile of the training actions, the bins are written over the 256 least-used tokens of the Llama tokenizer, and the model is trained with next-token prediction on those action tokens.[4] At run time the predicted tokens are decoded to continuous values and de-normalised to the robot’s physical scale.[4]
The next example does the same thing in plain NumPy, with simpler bin limits (the range of the data, not quantiles). It encodes a 7-number action to 256-level integers and decodes it again:
import numpy as np
BINS = 256
low = np.array([-0.05, -0.05, -0.05, -0.5, -0.5, -0.5, 0.0]) # per-dimension limits
high = np.array([ 0.05, 0.05, 0.05, 0.5, 0.5, 0.5, 1.0])
def encode(action):
unit = (np.clip(action, low, high) - low) / (high - low) # 0..1 in each dimension
return np.minimum((unit * BINS).astype(int), BINS - 1) # integer bin 0..255
def decode(tokens):
unit = (tokens + 0.5) / BINS # centre of the bin
return low + unit * (high - low)
action = np.array([0.013, -0.021, 0.004, 0.10, -0.25, 0.0, 1.0])
tokens = encode(action)
print("tokens:", tokens.tolist())
print("decoded:", np.round(decode(tokens), 4).tolist())
print("largest error:", round(float(np.abs(decode(tokens) - action).max()), 5))Output:
tokens: [161, 74, 138, 153, 64, 128, 255] decoded: [0.0131, -0.0209, 0.0041, 0.0996, -0.248, 0.002, 0.998] largest error: 0.00195
Toy model. The limits, the 7-number action layout and the centre-of-bin decoding are our own simple choices. OpenVLA uses quantile-based limits and maps bins onto language-model tokens; RT-1 and RT-2 differ in details too.
The decoded action is close to the original but not identical. Discretisation throws away detail, and the error depends on how many bins there are. For one dimension covering a range R with N bins, the worst case when decoding to the bin centre is R / (2N), arithmetic you can check with the next example:
for bins in (16, 64, 256):
worst = 0.1 / (2 * bins) # a 0.1 m range, as in the position limits above
print(bins, "bins -> worst-case error", round(worst * 1000, 3), "mm")Output:
16 bins -> worst-case error 3.125 mm 64 bins -> worst-case error 0.781 mm 256 bins -> worst-case error 0.195 mm
This is why 256 bins is a sensible default for coarse manipulation, and also why it is a limit: fine motions need either a narrower range per step or a different output, such as the continuous action generators in the next section.
Actions written as text
RT-2’s announcement shows an action as a string of integers, for example “1 128 91 241 5 101 127 217”, where the first number says whether the episode should continue or terminate.[5] That is literally text, so any language model can emit it. The example below parses a string in that style into an episode flag and a list of values. It shows only the mechanics of reading such output; the meaning of each position in a real model is defined by that model’s training, and we do not claim a mapping for the example string.
reply = "1 128 91 241 5 101 127 217" # the example string shown in the RT-2 announcement
numbers = [int(t) for t in reply.split()]
flag, values = numbers[0], numbers[1:]
print("first number (continue / terminate flag):", flag)
print("remaining", len(values), "numbers:", values)
print("all inside 0..255:", all(0 <= v <= 255 for v in values))Output:
first number (continue / terminate flag): 1 remaining 7 numbers: [128, 91, 241, 5, 101, 127, 217] all inside 0..255: True
A model that emits text can also emit garbage text, so a real system must check that the output parses and falls in range before it is sent to a motor. That check is a robotics-engineering step, not part of the definition, but it is where a text interface meets a physical consequence (lesson 1.1).
Another way: generating the action directly
Not every VLA writes actions as language tokens. π0 builds on a pretrained vision-language model and adds a flow-matching architecture, so that it keeps the Internet-scale semantic knowledge.[6] It pairs the vision-language model with a separate set of weights for the action outputs, called the action expert, which generates action chunks with flow matching.[6] Its vision-language backbone is PaliGemma, a model of about 3 billion parameters made from a SigLIP image encoder and the Gemma-2B language model.[7] How flow matching works is outside this lesson and is covered when we get to action heads; for now the point is that “VLA” names the input and output, not one particular way of producing the output.
Action chunking, producing several future actions at once, is used in other robot policies too, for instance ACT,[8] and diffusion policy executes part of the predicted sequence before querying the policy again.[9] Lesson 1.5 returns to why that matters.
Where the training data comes from
The robot part of the training data is a set of demonstrations. OpenVLA was trained on 970,000 real-world robot demonstrations,[4] and the Open X-Embodiment collaboration pooled more than a million trajectories from 22 robot embodiments.[10] In that work, a high-capacity model trained on the pooled data showed positive transfer, improving several robots using experience from other platforms.[10] That is the rationale for “generalist” policies, and the evidence is from specific models and tasks, not a guarantee for every robot.
Common misconceptions
Misconception 1 “A VLA is a chatbot that controls a robot.”
Correction Its output is an action for the robot, either as tokens that are decoded to numbers or as a generated chunk of continuous actions. The output is not a description to be interpreted by something else.
Misconception 2 “Because it learned from the web, a VLA can do any physical skill.”
Correction The RT-2 paper reports that physical skills remain limited to the distribution of skills in the robot data; web knowledge helps apply those skills in new ways.
Misconception 3 “Action tokens are exact.”
Correction Discretisation limits precision. With N bins over a range R the worst-case decoding error is R / (2N).
Engineering takeaways
- A VLA maps images and an instruction to an action.
- The term was introduced with RT-2.
- Actions can be written as tokens, which are decoded, or generated as continuous chunks.
- Robot skills still come from robot data.
A VLA is a model whose answer is a movement.
Knowledge check
Try each question first, then reveal the explanation.
Question 1
What are the inputs and the output of a VLA?
Explanation
Camera images and a language instruction in, a robot action out.
Question 2
An action dimension covers a range of 0.2 with 100 bins and is decoded to the bin centre. What is the worst-case error?
Explanation
0.001. R / (2N) = 0.2 / 200.
Question 3
Does web pretraining give a VLA robot skills that no robot ever demonstrated?
Explanation
Not according to the RT-2 paper. Its physical skills remain limited to those in the robot data, though it can apply them in new ways.
References
Numbered notes in the text, like [1], point here. Each entry says what it is cited for and how that was checked. Papers and books can be revised or misread, so follow the links before relying on a detail. Code marked “Toy model” is our own illustration of an idea, not the code of the cited system.
(2023). RT-2: Vision-language-action models transfer web knowledge to robotic control. Conference on Robot Learning (CoRL) 2023. arXiv:2307.15818
Cited for:
- Introduces the name vision-language-action (VLA) models for vision-language models co-fine-tuned on robot trajectories and Internet-scale vision-language tasks. Checked against the paper’s abstract.
- Writes robot actions as text tokens so that the model handles them in the same way as language. Checked against the paper’s abstract.
- The model’s physical skills remain limited to the distribution of skills seen in the robot data, although it can apply them in new ways using web knowledge. Checked against the paper’s abstract.
(2024). A survey on vision-language-action models for embodied AI. arXiv:2405.14093
Cited for:
- Surveys VLA models for embodied AI, organised into research lines that begin with the components of a VLA; it credits RT-2 with introducing the term. Checked against the paper’s abstract.
(2022). RT-1: Robotics Transformer for real-world control at scale. arXiv:2212.06817
Cited for:
- Each action dimension is discretised into 256 bins. Checked against the paper, via summaries of its text.
(2024). OpenVLA: An open-source vision-language-action model. Conference on Robot Learning (CoRL) 2024. arXiv:2406.09246
Cited for:
- Each action dimension is split into 256 bins between the 1st and 99th quantile of the training actions; the 256 bins are written over the 256 least-used tokens of the Llama tokenizer, and the model is trained with next-token prediction on the action tokens. Checked against the paper, via summaries of its text.
- At run time the predicted action tokens are decoded to continuous values and de-normalised to the robot’s physical scale. Checked against the paper, via summaries of its text.
- A 7-billion-parameter open-source VLA trained on 970,000 real-world robot demonstrations, built on a Llama 2 language model with a visual encoder that fuses pretrained DINOv2 and SigLIP features. Checked against the paper’s abstract.
(2023). RT-2: New model translates vision and language into action. Google DeepMind blog. deepmind.google
Cited for:
- Shows an action written as a string of integers, for example “1 128 91 241 5 101 127 217”, in which the first number says whether to continue or terminate the episode. Checked against the authors’ own blog post.
(2024). π0: A vision-language-action flow model for general robot control. arXiv:2410.24164
Cited for:
- Proposes a flow-matching architecture built on top of a pretrained vision-language model, so that it inherits Internet-scale semantic knowledge. Checked against the paper’s abstract.
- Pairs the pretrained vision-language model with a separate set of weights for the action outputs (the “action expert”) that generates action chunks with flow matching. Checked against the paper, via summaries of its text.
(2024). PaliGemma: A versatile 3B VLM for transfer. arXiv:2407.07726
Cited for:
- A vision-language model of about 3 billion parameters made from a SigLIP image encoder and the Gemma-2B language model. Checked against the paper’s abstract.
(2023). Learning fine-grained bimanual manipulation with low-cost hardware. arXiv:2304.13705
Cited for:
- Introduces Action Chunking with Transformers (ACT), which learns a generative model over sequences of actions; the paper uses action chunking and temporal ensembling to reduce compounding errors. Checked against the paper, via summaries of its text.
(2023). Diffusion Policy: Visuomotor policy learning via action diffusion. Robotics: Science and Systems (RSS) XIX, 2023. arXiv:2303.04137
Cited for:
- Predicts a sequence of future actions and uses receding-horizon control: part of the sequence is executed, then the policy is queried again. Checked against the paper, via summaries of its text.
(2023). Open X-Embodiment: Robotic learning datasets and RT-X models. arXiv:2310.08864
Cited for:
- Pools more than one million robot trajectories from 22 robot embodiments, assembled by 21 institutions and covering 527 skills. Checked against the paper’s abstract.
- A high-capacity model (RT-X) trained on the pooled data shows positive transfer, improving several robots using experience from other platforms. Checked against the paper’s abstract.
What’s next
Next, how a VLA differs from a language-model planner and from a plain vision-language model.