Modern Robotics и Physical AIУрок 1.1 · Behavior Cloning
1.1 Часть 1 · Обучение по демонстрациям

Behavior Cloning

Написать правила для каждой квартиры невозможно, поэтому Аде показывают дорогу: оператор проводит её до кухни, а нейросеть учится повторять его управление. Это behavior cloning, с него начинается почти любая современная модель для роботов — от ALVINN 1989 года до VLA. Главная трудность метода: политика немного ошибается, попадает туда, где оператор не ездил, и там ошибается ещё сильнее. В уроке разберём, почему так происходит, и найдём данные, которые не дают Аде съехать с маршрута.

Ада — домашний гуманоидный робот, на котором построены лабораторные работы курса. Подробнее о ней — в уроке 0.1.

≈ 45 минутлаборатория и 4 интерактива
1989Обучи мини-ALVINN и найди дорогу, на которой он рулит неправильно
ЛАБ.Проведи Аду до кухни, обучи политику на своих поездках, найди её отказы и исправь их данными
КАДР ЗА КАДРОМПеремотай аварию и найди кадр, с которого началась ошибка
T2T^2Подбери точность, при которой behavior cloning не ошибается за поездку
ЗАДАЧАРазложи приёмы: что поможет Аде, а что навредит

Начать урок ↓

1 Идея

Обучение по демонстрациям

Ада должна доехать от зарядки до кухни. Можно написать правила: где поворачивать, как проходить двери, что делать у дивана. Но в другой квартире всё придётся писать заново.

Есть путь проще: оператор несколько раз проводит Аду до кухни, а нейросеть учится повторять его действия. Записываем пары «что видит робот → что сделал оператор» и учим сеть по ним, как учат любой классификатор или регрессию: наблюдение — вход, действие оператора — правильный ответ. Это и есть behavior cloning — клонирование поведения.

💡

Чем это отличается от обычного обучения с учителем. Классификатор кошек не влияет на то, какие фотографии увидит завтра. Политика влияет: повернула руль чуть сильнее, чем оператор, — и следующий кадр уже не похож на данные. Весь урок — о последствиях этой разницы.

Под капотом: behavior cloning как регрессия

Есть датасет демонстраций: пары «состояние, которое видел оператор» и «действие, которое он выбрал». Политика — сеть πθ\pi_\theta с параметрами θ\theta. Обучение — обычная минимизация ошибки на этих парах. Для непрерывных действий это среднеквадратичная ошибка (MSE):

θ∗=arg min⁡θ1N∑i∥πθ(si)−ai∥2,\theta^* = \argmin_\theta \frac{1}{N}\sum_i \bigl\lVert \pi_\theta(s_i) - a_i \bigr\rVert^2,

для дискретных, как 45 выходов ALVINN, — отрицательное логарифмическое правдоподобие:

θ∗=arg min⁡θ(−1N∑ilog⁡πθ(ai∣si)).\theta^* = \argmin_\theta \Bigl(-\frac{1}{N}\sum_i \log \pi_\theta(a_i \mid s_i)\Bigr).

Проблема — в распределениях. Сеть учится на состояниях из распределения оператора dπ∗d_{\pi^*}, а работает на своих — dπθd_{\pi_\theta}. Теория обучения обещает малую ошибку только на dπ∗d_{\pi^*}. Стоит политике хоть немного отличаться от оператора, как распределение её состояний смещается, и гарантии перестают действовать.

Сможет ли сеть, которая видела только примеры, вести машину сама?

2 История

1989: ALVINN

В 1989 году это проверил Дин Померло из Карнеги-Меллона: он научил нейросеть вести фургон NavLab. Сеть получала картинку дороги 30×32 пикселя и данные дальномера, в скрытом слое было 29 нейронов, а на выходе — 45: каждый соответствовал своему повороту руля. Правильный ответ кодировали «горбом» активации вокруг нужного поворота. Обучали на 1200 синтетических снимках дорог, и фургон поехал со скоростью полметра в секунду.

Ниже — та же идея в миниатюре. Сеть смотрит на дорогу 16×15 пикселей и выдаёт 15 вариантов руля. Задачи — справа: обучи сеть, найди дорогу, на которой она ошибается, и посмотри, что она делает на развилке.

Что видит камера

Выход сети: 15 делений руля

выход сетиправильный ответ▼ вершина горба — руль сети
Сеть ещё не обучена: выходы случайны.
Под капотом: сеть ALVINN и наша мини-версия

ALVINN 1989 года: на входе 1217 нейронов — сетчатка 30×32 пикселя по синему каналу камеры, 8×32 значения лазерного дальномера и один нейрон обратной связи по яркости дороги. Скрытый слой — 29 нейронов, на выходе 45 нейронов кривизны поворота и ещё один для обратной связи, всего около 36 тысяч весов. Правильный ответ — гауссов «горб» вокруг нужного поворота, а не одно число: так выход плавно сдвигается вслед за дорогой. Обучали обратным распространением ошибки на 1200 синтетических снимках, 40 эпох.

Наша мини-версия: вход 16×15 = 240 пикселей, скрытый слой — 12 нейронов с сигмоидой, выход — 15 нейронов. Горб — гауссиана шириной 1,3 нейрона вокруг правильного руля. Обучение — 1200 синтетических дорог, 40 эпох стохастического градиентного спуска с моментом 0,85 и шагом 0,35, ошибка MSE. В обучающих дорогах изгиб от −1 до 1, а смещение машины — от −0,3 до 0,3, как у водителя, который держится середины. Руль читаем по вершине горба, ошибку считаем в делениях между вершиной и правильным ответом.

Правильный руль в синтетических данных и выход сети:

руль=0,75⋅изгиб−0,85⋅смещение,выходi=σ(∑jwij σ(∑kvjk пиксельk)).\begin{gathered} \text{руль} = 0{,}75\cdot\text{изгиб} - 0{,}85\cdot\text{смещение},\\ \text{выход}_i = \sigma\Bigl(\sum_j w_{ij}\,\sigma\Bigl(\sum_k v_{jk}\,\text{пиксель}_k\Bigr)\Bigr). \end{gathered}

Вывод из мини-ALVINN: сеть рулит верно на дорогах, похожих на обучающие, и ошибается, когда машина стоит дальше от середины, чем в данных. Хороший водитель держится середины, поэтому таких кадров в его поездках почти нет. Что будет с Адой, если учить её на аккуратных поездках оператора?

🔬 Лаборатория

Ты — оператор

Проверим на Аде. Ты проведёшь её от зарядки до кухни, обучишь политику на своих поездках и отпустишь Аду ехать самой. Потом найдёшь её отказы и сравнишь, какие данные не дают ей съехать с маршрута. Задачи — справа, по одной.

обучение
Под капотом: что внутри лаборатории
  • Мир. План 6 × 4 м, единица — сантиметр. Ада — круг радиусом 18 см, едет с постоянной скоростью 60 см/с. Управление — угловая скорость руля до 2,2 рад/с, шаг 50 мс.
  • Наблюдение. 9 лучей дальномера в секторе ±120° до 2,5 м, косинус и синус угла на кухню в системе координат Ады и расстояние до неё. Всё нормировано.
  • Политика. Полносвязная сеть 13 → 48 → 48 → 1 с leaky ReLU, на выходе tanh, умноженный на 2,2 рад/с. Обучение — MSE и Adam: шаг 0,004, 900 итераций по 96 примеров, на последних 30% итераций шаг меньше в 3 раза.
  • Робот-оператор. Учитель на pure pursuit: смотрит на точку маршрута в 42 см впереди и поворачивает к ней с коэффициентом 2,4. Каждая его поездка чуть смещена от центра, разброс 3 см.
  • Проверка. Каждая политика проезжает 10 раз с одних и тех же стартов: разброс около 7 см и 0,1 рад, к рулю добавлен гауссов шум 0,2 рад/с, как у неидеальных моторов. Старт и шум поездки зависят только от её номера, поэтому политики сравниваются на равных.
  • Поиск отказов. Поездка с выбранного старта идёт без шума: с одного и того же места исход всегда один. «Рядом с данными» — не дальше 20 см от ближайшей точки поездок, на которых училась политика.
  • Шумный оператор. При записи к рулю добавляется шум 0,5 рад/с, а в данные пишется чистое действие учителя.
  • Боковые сдвиги. К каждому моменту поездки добавляются две копии со сдвигом на 15 см влево и вправо и небольшим поворотом. Руль для них считает учитель.

Итог лаборатории: политика на 10 аккуратных поездках робота-оператора доезжает 6 раз из 10, а втрое больше таких поездок не помогает — 5 из 10. Политики, обученные на поездках шумного оператора или на поездках с боковыми сдвигами, доезжают 10 из 10. Почему политика, обученная на аккуратных поездках, так часто врезается?

3 Сдвиг распределения

Почему политика съезжает

Политика врезается, потому что её маленькая ошибка меняет следующий кадр. Сеть ошибается совсем немного, и Ада оказывается ближе к стене, чем бывал оператор. Такого кадра в данных нет, и сеть ошибается сильнее. Кадр становится ещё незнакомее — и так до столкновения.

В машинном обучении это называют сдвигом распределения (covariate shift): модель учили на распределении состояний оператора, а работает она на своём собственном. Поэтому и не помогают новые аккуратные поездки: сколько их ни добавляй, кадров в стороне от маршрута в них нет.

Ниже — одна из аварий политики, обученной на 10 аккуратных поездках робота-оператора. Перемотай её кадр за кадром и найди, где руль впервые ошибся и где в этот момент была Ада.

руль политики и его ошибкаруль учителярасстояние до ближайшей точки поездок оператора
Обучаем политику…
🎯

Поэтому точность на валидации обманывает. Валидационные примеры взяты из поездок оператора — из того самого распределения, на котором сеть училась. А политика ездит по своим состояниям. Низкая ошибка на валидации ничего не говорит о том, доедет ли Ада.

Каждая ошибка тянет за собой следующие. Насколько быстро они копятся, когда поездка становится длиннее?

4 Теория

Ошибка растёт как квадрат длины пути

Насколько быстро копятся ошибки, оценили Стефан Росс и Дрю Багнелл в 2010 году. Пусть сеть ошибается с вероятностью ε\varepsilon на состояниях оператора, а эпизод длится TT шагов. Если бы ошибки были независимыми, за эпизод набралось бы около εT\varepsilon T ошибок.

Но у behavior cloning первая ошибка уводит туда, где оператор не бывал, и дальше политика может ошибаться на каждом шаге. Поэтому в худшем случае ошибок набирается порядка εT2\varepsilon T^2.

На графике пунктир — независимые ошибки, оранжевая кривая — behavior cloning без навыка возвращаться, сплошная серая — политика, которая умеет вернуться на маршрут за k шагов. Вертикальная черта — поездка Ады: около 200 шагов по 50 мс. Задачи справа: подбери точность, при которой behavior cloning почти не ошибается, а потом посмотри, что даёт умение возвращаться.

независимые ошибки, εT\varepsilon Tbehavior cloningвозврат за kk шагов
Под капотом: откуда берётся εT2\varepsilon T^2

Пусть в знакомом состоянии политика ошибается с вероятностью ε\varepsilon, а после первой ошибки попадает туда, где оператор не бывал, и дальше в худшем случае ошибается на каждом шаге. Вероятность впервые ошибиться на шаге tt не больше ε\varepsilon, и тогда до конца эпизода остаётся T−t+1T - t + 1 шаг с ошибками:

E[ошибок]≤∑t=1Tε (T−t+1)=ε T(T+1)2≈εT22.\begin{aligned} \E[\text{ошибок}] &\le \sum_{t=1}^{T} \varepsilon\,(T - t + 1) \\ &= \varepsilon\,\frac{T(T + 1)}{2} \approx \frac{\varepsilon T^2}{2}. \end{aligned}

Росс и Багнелл показали, что оценка J(π^)≤J(π∗)+T2εJ(\hat\pi) \le J(\pi^*) + T^2\varepsilon точна: есть задачи, где она достигается. Если политика умеет вернуться на маршрут за kk шагов, каждая ошибка стоит не больше kk шагов, и сумма растёт линейно, примерно как kTεkT\varepsilon. На графике это сплошная серая кривая.

Оранжевая кривая посчитана для этой модели точно: шаг считается ошибочным, если первая ошибка уже случилась.

E[ошибок]=∑t=1T(1−(1−ε)t)=T−(1−ε)(1−(1−ε)T)ε.\begin{aligned} \E[\text{ошибок}] &= \sum_{t=1}^{T} \bigl(1 - (1 - \varepsilon)^t\bigr) \\ &= T - \frac{(1 - \varepsilon)\bigl(1 - (1 - \varepsilon)^T\bigr)}{\varepsilon}. \end{aligned}

Вывод: нужной точности на реальных кадрах почти не добиться. Зато если политика умеет возвращаться на маршрут, каждая ошибка стоит ей всего несколько шагов. Откуда политике взять это умение, если оператор с маршрута не съезжает?

5 Исправление

Как добавить в данные возвраты

Умение возвращаться политика берёт из данных: в них должны быть возвраты — состояния в стороне от маршрута и правильный руль из них.

У аккуратного оператора возвратов нет: он с маршрута не съезжает. Поэтому в лаборатории втрое больше его поездок не помогло — 5 из 10 против 6 из 10. А политики на поездках шумного оператора и с боковыми сдвигами доехали 10 из 10.

Вот три известных способа добавить возвраты, и два из них есть в лаборатории.

Под капотом: DART формально

Во время записи робот исполняет действие эксперта с шумом, а в данные пишется чистое действие:

a=π∗(s)+η,η∼N(0,Σ),в данные: (s, π∗(s)).\begin{gathered} a = \pi^*(s) + \eta, \qquad \eta \sim \mathcal{N}(0, \Sigma),\\ \text{в данные: } \bigl(s,\ \pi^*(s)\bigr). \end{gathered}

Шум уводит робота в стороны, и эксперт показывает, как оттуда возвращаться. Авторы DART подбирают Σ\Sigma так, чтобы состояния с шумом покрывали ошибки будущей политики: обучают политику, смотрят, насколько она расходится с экспертом, и ставят шум того же масштаба. В отличие от DAgger, эксперт всё время управляет сам и не размечает чужие поездки.

🧭

Чего не хватает этим приёмам. Все три добавляют возвраты заранее: мы предполагаем, куда политика съедет, и кладём примеры туда. Если она съедет туда, куда мы не догадались, примеров снова не будет. Как собирать примеры там, куда политика заезжает на самом деле, разберём в уроке 1.2.

Возвраты решают, какие состояния попадут в данные. Но политику можно испортить и с другой стороны — через то, что сеть видит на входе. Кажется, что чем больше она видит, тем лучше водит. Так ли это?

6 Ловушки

Когда больше информации — хуже

Не всегда. Сеть ищет на входе признаки, которые в данных совпадают с действием оператора, и не знает, вызывает ли признак это действие. Поэтому лишний вход иногда делает политику хуже. Известных ловушек две.

Ложная причина

Сеть видит приборную панель, где загорается лампа тормоза. В данных лампа горит всякий раз, когда водитель тормозит, и сеть выучивает «тормози, когда горит лампа». Но лампа — следствие торможения, а не причина. Это мысленный пример из работы de Haan, Jayaraman и Levine (2019) о causal confusion.

Копирование себя

Если на вход подать историю действий, сеть начинает повторять своё прошлое действие: в данных руль меняется плавно, и «как в прошлый раз» почти всегда правильно. Такая политика права везде, кроме момента, когда надо начать действовать: на светофоре она никогда не тронется. Эту проблему называют copycat.

Команда Waymo, обучая ChauffeurNet, написала: «30 миллионов примеров всё ещё недостаточно». Им пришлось в половине примеров выбрасывать историю движения, чтобы сеть смотрела на дорогу, а не на собственное прошлое.

Задача: что поможет Аде

Соберём вместе всё, что узнали о данных и входах. Разложи приёмы по корзинам: поможет ли каждый политике не съезжать с маршрута. Карточку можно перетащить или нажать, а потом нажать корзину.

Дрейф, ложные причины, копирование себя — слабостей у behavior cloning много. Пользуются ли им сейчас?

7 Что дожило до 2026 года

Behavior cloning в современных системах

Пользуются, и широко. Меняются архитектура, объём и разнообразие данных, но в основе почти всех моделей для роботов по-прежнему лежит обучение на демонстрациях.

  1. 1989ALVINN: пиксели → руль на настоящем фургоне, обучение на синтетических дорогах.
  2. 1991–1994Обучение по живому водителю со сдвинутыми кадрами, до 55 миль в час.
  3. 2005DAVE: свёрточная сеть на маленьком грузовичке, «стереопара → руль».
  4. 2010–2011Оценка εT2\varepsilon T^2 и алгоритм DAgger (урок 1.2).
  5. 2016PilotNet от NVIDIA: 72 часа вождения, три камеры, около 98% времени без вмешательства.
  6. 2023ACT и Diffusion Policy: генеративные политики и пачки действий. 50 демонстраций на задачу, 10–20 минут данных (уроки 1.3–1.7).
  7. 2024–2026π0, Large Behavior Models, Atlas: behavior cloning на тысячах часов данных. Поверх добавляют обучение с подкреплением (π*0.6, часть 5).
8 Проверь себя

Восемь вопросов о типичных заблуждениях

9 Итог

Итоги урока

  1. Behavior cloning — обучение с учителем на парах «наблюдение → действие оператора». Просто, быстро и лежит в основе почти всех моделей для роботов.
  2. Политика сама выбирает, какие состояния увидит. Малая ошибка уводит туда, где данных нет, — это сдвиг распределения.
  3. Поэтому ошибка за эпизод в худшем случае растёт как εT2\varepsilon T^2, а точность на валидации ничего не гарантирует.
  4. Дрейф уменьшают данные с возвратами — состояниями в стороне от маршрута и правильным действием из них: шумный оператор, сдвинутые кадры, боковые камеры. Объём аккуратных поездок помогает мало.
  5. Больше входной информации не всегда лучше: ложные причины и копирование себя.

Открытые вопросы

Ты собираешь демонстрации для робота, который подаёт чашку. Как спланировать сбор, чтобы политика умела исправлять промахи?

Нужны состояния, из которых надо возвращаться: часть демонстраций начинать из неудачных положений руки, подмешивать небольшой шум во время записи и записывать, как оператор исправляет промах. Полезно разнообразить стартовые позы и расстановку предметов. Объём одинаковых аккуратных демонстраций помогает мало.

Почему метрика «ошибка на валидации» плохо предсказывает успех политики на роботе?

Валидационные примеры взяты из распределения оператора, а политика при работе попадает в свои состояния. Ошибка на валидации меряет точность там, где политика почти не бывает в момент сбоя. Успех нужно мерить прогонами в замкнутом контуре: на роботе или в симуляторе.

Гид по статье

Pomerleau, «ALVINN: An Autonomous Land Vehicle in a Neural Network», NIPS 1989. Короткая статья, читается за полчаса.

Материалы

➡️

Дальше: DAgger. Политика ошибается там, где в данных нет примеров. Шумным оператором и сдвинутыми кадрами мы добавляли такие примеры наугад — туда, куда она, по нашим предположениям, съедет. Если она съедет в другое место, примеров там снова не будет. Можно ли собирать их именно там, куда заезжает политика? Об этом урок 1.2: Ада поедет сама, а эксперт будет подсказывать правильный руль в каждой точке, куда она заехала.

Урок пригодился? Скажи спасибо — так автор узнает, что курс читают.