Зачем роботу язык, если у него есть глаза?
В 2025 году спор между VLA (Vision-Language-Action) и VLM (Vision-Language Models) вышел за рамки академических дискуссий. Речь теперь не о том, какая архитектура лучше на бумаге, а о том, какая из них быстрее научит робота не разбивать вашу любимую вазу. Я провел последние полгода, пытаясь заставить и то, и другое работать с реальными роботами — от симуляторов вроде Quake до физических манипуляторов в лаборатории. Вот что из этого вышло.
Ключевое отличие: VLM понимает мир через текст ("на столе чашка"), VLA понимает мир через действие ("чтобы взять чашку, нужно повернуть клешню на 30 градусов"). Разница кажется мелкой, пока ваш робот не попытается открыть дверь, описывая её цвет вместо того, чтобы повернуть ручку.
Проблема: почему роботы такие глупые?
Представьте, что вы учите человека водить машину. Вы можете:
- Объяснять теорию ("поверни руль налево" — это VLM)
- Показать, как поворачивать руль, и дать попробовать ("видишь поворот? поворачивай" — это VLA)
Большинство роботов сегодня учат по первому варианту. Их кормят миллионами текстовых описаний мира, а потом удивляются, почему они не могут взять яблоко со стола. Проблема в разрыве между пониманием и действием.
1 Выбираем архитектуру: VLA или всё-таки VLM?
В теории VLM кажется более универсальным. Берёте любую готовую модель вроде Qwen2.5-VL-72B (да, на 06.02.2026 она всё ещё актуальна), дообучаете на своих данных — и готово. На практике вы получаетe модель, которая прекрасно описывает мир, но не имеет ни малейшего понятия, как в нём действовать.
| Критерий | VLM | VLA |
|---|---|---|
| Сложность обучения | Низкая (много готовых моделей) | Высокая (нужны данные действий) |
| Переиспользование | Отличное | Ограниченное (зависит от робота) |
| Точность действий | 30-40% в реальных задачах | 70-85% после правильного обучения |
| Требования к данным | Изображения + тексты | Изображения + тексты + действия |
Мой совет после десятка экспериментов: если у вас есть хотя бы 1000 примеров действий робота — сразу идите в VLA. Если нет — начинайте с VLM, но готовьтесь к разочарованию. Кстати, про подход без тонкой настройки VLA-моделей мы уже писали в статье про PhysicalAgent. Он работает, но только для простых задач.
2 Собираем данные: чем кормить робота?
Здесь большинство совершает первую критическую ошибку. Они берут стандартные датасеты вроде Something-Something или Epic Kitchens и думают, что этого достаточно. Нет. Ваш робот не готовит яичницу и не играет в настольный теннис. Ему нужно открывать конкретные двери и брать конкретные предметы.
Что именно собирать:
- Видео с нескольких камер — одна фронтальная недостаточно. Добавьте камеру "от первого лица" робота и одну общую.
- Текстовые аннотации действий — не просто "робот берёт чашку", а "поворот сустава 1 на 15°, сустава 2 на -30°, захват с силой 0.7Н".
- Промежуточные состояния — что робот "думал" в момент принятия решения. Это критично для World Models.
- Ошибки и их исправления — самые ценные данные. Записывайте, когда робот промахивается и как оператор это исправляет.
3 Строим пайплайн обучения: от симулятора к реальности
Вот как выглядит типичный пайплайн, который работает в 2025 году:
# Псевдокод пайплайна обучения VLA
# Не копируйте слепо — это концепция
class VLATrainingPipeline:
def __init__(self):
self.simulator = QuakeEnv() # или любой другой симулятор
self.real_robot = RealRobotInterface()
self.model = VLA_Model()
def train(self):
# Фаза 1: Обучение в симуляторе
sim_data = self.generate_synthetic_data(epochs=1000)
self.model.pretrain_on_sim(sim_data)
# Фаза 2: Дообучение на реальных данных
real_data = self.collect_real_world_data(epochs=100)
self.model.finetune_on_real(real_data)
# Фаза 3: RL-дообучение
self.reinforcement_learning_finetuning()
def generate_synthetic_data(self, epochs):
# Генерация тысяч вариантов одной ситуации
# Ключ: разнообразие условий освещения, текстуры, позиции объектов
data = []
for _ in range(epochs):
scene = self.simulator.randomize_scene()
optimal_action = self.calculate_optimal_action(scene)
data.append((scene.image, scene.description, optimal_action))
return data
Важный момент: не пытайтесь сразу обучить модель на реальных данных. Она переобучится на шумы конкретной камеры и освещения вашей лаборатории. Сначала дайте ей понять физику мира в идеальных условиях симулятора.
Кейс: обучение робота играть в Quake
Quake — не просто игра. Это идеальная среда для обучения VLA моделей. Почему?
- Физика предсказуемая, но достаточно сложная
- Можно генерировать бесконечное количество сценариев
- Действия дискретные (вперёд, назад, стрелять, прыжок)
- Награда понятная (здоровье, урон, победа)
Как я это делал:
# Пример сбора данных в Quake для VLA
# Актуально на 06.02.2026 с использованием Gymnasium
import gymnasium as gym
import numpy as np
from collections import deque
class QuakeDataCollector:
def __init__(self):
self.env = gym.make('Quake-v3') # Последняя версия на 2025 год
self.buffer = deque(maxlen=10000)
def collect_episode(self):
obs, _ = self.env.reset()
done = False
while not done:
# Получаем изображение с "глаз" агента
image = obs['pov'] # First-person view
# Генерируем текстовое описание через VLM
description = self.describe_scene(image)
# Выбираем действие (можно через RL или ручное управление)
action = self.select_action(image, description)
# Сохраняем тройку: изображение, описание, действие
self.buffer.append((image, description, action))
# Шаг в среде
obs, reward, terminated, truncated, info = self.env.step(action)
done = terminated or truncated
def describe_scene(self, image):
# Используем легковесную VLM для описания сцены
# В продакшене лучше использовать Qwen2.5-VL-3B
prompt = "Describe what the agent sees in first person view"
description = vlm_model.generate(image, prompt)
return description
После сбора 50 000 таких троек (изображение, описание, действие) можно начинать обучение VLA модели. Ключевая хитрость — добавлять не только успешные действия, но и заведомо проигрышные стратегии. Модель должна научиться их избегать.
Перенос на реального робота: где всё ломается
Вы обучили модель в Quake, она прекрасно бегает по коридорам и стреляет в монстров. Вы подключаете её к реальному роботу-манипулятору и... он замирает. Или начинает бешено вращаться. Или пытается "выстрелить" из несуществующего оружия.
Основная ошибка: разница в пространстве действий. В Quake действия — это дискретные кнопки (W, A, S, D, Space). У реального робота — непрерывные значения углов суставов и усилий захвата. Модель не понимает, как преобразовать одно в другое.
Решение в три этапа:
1. Нормализация пространства действий
Преобразуйте и дискретные, и непрерывные действия в единое нормализованное пространство [-1, 1]. Это позволяет модели учиться абстрактным паттернам действий, не завязываясь на конкретную реализацию.
2. Добавление адаптера
Между выходом VLA модели и входом робота поставьте небольшой адаптер — ещё одну нейросеть, которая учится преобразовывать абстрактные действия в конкретные команды. Обучайте её одновременно с основной моделью.
3. Имитационное обучение
Соберите данные, как реальный оператор управляет роботом для выполнения тех же задач, что и в симуляторе. Даже 100 примеров достаточно для тонкой настройки адаптера.
Ошибки, которые совершают все (и я тоже)
- Слишком много текста в промптах — роботу не нужно эссе о ситуации. Ему нужно "чашка слева, взять". Если давать длинные описания, модель будет тратить вычислительные ресурсы на их обработку вместо генерации действий.
- Игнорирование временной последовательности — VLA обрабатывает кадры независимо. Но действия имеют контекст! Добавляйте временные эмбеддинги или используйте архитектуры с памятью.
- Обучение только на успехах — это создаёт хрупкую модель. Добавляйте 20% примеров неудачных действий и показывайте, почему они плохие.
- Недооценка World Models — в 2025 году уже ясно, что будущее за моделями, которые понимают физику мира. Посмотрите на 1X World Model — она учится предсказывать следующее состояние мира, а не просто классифицировать текущее.
- Попытка сделать одну модель для всего — не получится. Лучше иметь специализированные VLA модели для разных типов задач (манипуляция, навигация, взаимодействие), чем одну универсальную, которая плохо делает всё.
Что будет дальше? Прогноз на 2026-2027
Если вы думаете, что в 2025 году всё сложно — приготовьтесь. Вот что нас ждёт:
- VLA модели станут меньше — сейчас они требуют гигабайты памяти. В 2026 появятся модели размером 3-7B параметров, которые можно будет запускать на edge-устройствах роботов.
- Обучение станет ещё более симуляторным — реалистичные симуляторы вроде Nvidia Isaac Sim будут генерировать 99% данных для обучения. Реальные данные будут нужны только для финальной калибровки.
- Появится стандарт на пространство действий — как сегодня есть ONNX для моделей, так появится единый формат описания действий для всех роботов.
- World Models заменят классические VLA — зачем учить модель реагировать на текущее состояние, если можно научить её предсказывать будущие состояния и планировать действия? Об этом мы подробно писали в статье про мирные модели против LLM.
P.S. Если вы дочитали до этого места и думаете "это слишком сложно", начните с простого: возьмите готовую VLM модель, подключите её к симулятору Quake через API и попробуйте научить агента просто находить выход из комнаты. Первые 80% результата достигаются первыми 20% усилий. Оставшиеся 20% результата потребуют 80% усилий — но именно они делают разницу между "работает" и "работает хорошо".
P.P.S. Не забывайте про безопасность. Модель, обученная в Quake стрелять во всё движущееся, в реальном мире может решить, что ваш кот — это монстр, которого нужно уничтожить. Всегда добавляйте слой безопасности между моделью и исполнительными механизмами робота. Это не паранойя — это необходимость.