Behavior Cloning
Написать правила для каждой квартиры невозможно, поэтому Аде показывают дорогу: оператор проводит её до кухни, а нейросеть учится повторять его управление. Это behavior cloning, с него начинается почти любая современная модель для роботов — от ALVINN 1989 года до VLA. Главная трудность метода: политика немного ошибается, попадает туда, где оператор не ездил, и там ошибается ещё сильнее. В уроке разберём, почему так происходит, и найдём данные, которые не дают Аде съехать с маршрута.
Ада — домашний гуманоидный робот, на котором построены лабораторные работы курса. Подробнее о ней — в уроке 0.1.
Обучение по демонстрациям
Ада должна доехать от зарядки до кухни. Можно написать правила: где поворачивать, как проходить двери, что делать у дивана. Но в другой квартире всё придётся писать заново.
Есть путь проще: оператор несколько раз проводит Аду до кухни, а нейросеть учится повторять его действия. Записываем пары «что видит робот → что сделал оператор» и учим сеть по ним, как учат любой классификатор или регрессию: наблюдение — вход, действие оператора — правильный ответ. Это и есть behavior cloning — клонирование поведения.
Чем это отличается от обычного обучения с учителем. Классификатор кошек не влияет на то, какие фотографии увидит завтра. Политика влияет: повернула руль чуть сильнее, чем оператор, — и следующий кадр уже не похож на данные. Весь урок — о последствиях этой разницы.
Под капотом: behavior cloning как регрессия
Есть датасет демонстраций: пары «состояние, которое видел оператор» и «действие, которое он выбрал». Политика — сеть с параметрами . Обучение — обычная минимизация ошибки на этих парах. Для непрерывных действий это среднеквадратичная ошибка (MSE):
для дискретных, как 45 выходов ALVINN, — отрицательное логарифмическое правдоподобие:
Проблема — в распределениях. Сеть учится на состояниях из распределения оператора , а работает на своих — . Теория обучения обещает малую ошибку только на . Стоит политике хоть немного отличаться от оператора, как распределение её состояний смещается, и гарантии перестают действовать.
Сможет ли сеть, которая видела только примеры, вести машину сама?
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, как у водителя, который держится середины. Руль читаем по вершине горба, ошибку считаем в делениях между вершиной и правильным ответом.
Правильный руль в синтетических данных и выход сети:
Вывод из мини-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. Почему политика, обученная на аккуратных поездках, так часто врезается?
Почему политика съезжает
Политика врезается, потому что её маленькая ошибка меняет следующий кадр. Сеть ошибается совсем немного, и Ада оказывается ближе к стене, чем бывал оператор. Такого кадра в данных нет, и сеть ошибается сильнее. Кадр становится ещё незнакомее — и так до столкновения.
В машинном обучении это называют сдвигом распределения (covariate shift): модель учили на распределении состояний оператора, а работает она на своём собственном. Поэтому и не помогают новые аккуратные поездки: сколько их ни добавляй, кадров в стороне от маршрута в них нет.
Ниже — одна из аварий политики, обученной на 10 аккуратных поездках робота-оператора. Перемотай её кадр за кадром и найди, где руль впервые ошибся и где в этот момент была Ада.
Поэтому точность на валидации обманывает. Валидационные примеры взяты из поездок оператора — из того самого распределения, на котором сеть училась. А политика ездит по своим состояниям. Низкая ошибка на валидации ничего не говорит о том, доедет ли Ада.
Каждая ошибка тянет за собой следующие. Насколько быстро они копятся, когда поездка становится длиннее?
Ошибка растёт как квадрат длины пути
Насколько быстро копятся ошибки, оценили Стефан Росс и Дрю Багнелл в 2010 году. Пусть сеть ошибается с вероятностью на состояниях оператора, а эпизод длится шагов. Если бы ошибки были независимыми, за эпизод набралось бы около ошибок.
Но у behavior cloning первая ошибка уводит туда, где оператор не бывал, и дальше политика может ошибаться на каждом шаге. Поэтому в худшем случае ошибок набирается порядка .
На графике пунктир — независимые ошибки, оранжевая кривая — behavior cloning без навыка возвращаться, сплошная серая — политика, которая умеет вернуться на маршрут за k шагов. Вертикальная черта — поездка Ады: около 200 шагов по 50 мс. Задачи справа: подбери точность, при которой behavior cloning почти не ошибается, а потом посмотри, что даёт умение возвращаться.
Под капотом: откуда берётся
Пусть в знакомом состоянии политика ошибается с вероятностью , а после первой ошибки попадает туда, где оператор не бывал, и дальше в худшем случае ошибается на каждом шаге. Вероятность впервые ошибиться на шаге не больше , и тогда до конца эпизода остаётся шаг с ошибками:
Росс и Багнелл показали, что оценка точна: есть задачи, где она достигается. Если политика умеет вернуться на маршрут за шагов, каждая ошибка стоит не больше шагов, и сумма растёт линейно, примерно как . На графике это сплошная серая кривая.
Оранжевая кривая посчитана для этой модели точно: шаг считается ошибочным, если первая ошибка уже случилась.
Вывод: нужной точности на реальных кадрах почти не добиться. Зато если политика умеет возвращаться на маршрут, каждая ошибка стоит ей всего несколько шагов. Откуда политике взять это умение, если оператор с маршрута не съезжает?
Как добавить в данные возвраты
Умение возвращаться политика берёт из данных: в них должны быть возвраты — состояния в стороне от маршрута и правильный руль из них.
У аккуратного оператора возвратов нет: он с маршрута не съезжает. Поэтому в лаборатории втрое больше его поездок не помогло — 5 из 10 против 6 из 10. А политики на поездках шумного оператора и с боковыми сдвигами доехали 10 из 10.
Вот три известных способа добавить возвраты, и два из них есть в лаборатории.
- Шумный оператор (DART, 2017).Во время записи к рулю подмешивают шум. Аду сносит, оператор поправляет, и в данные попадает его исправляющее действие. В оригинальной работе это дало +62% к обычному behavior cloning на захвате предметов из завала.
- Боковые сдвиги (Померло, 1991).Каждый кадр водителя сдвигали и поворачивали 14 раз — до 0,6 м и 6° — и для каждой копии считали правильный руль по простой геометрической модели. Опция «боковые сдвиги» в лаборатории делает то же самое. К 1994 году ALVINN проезжал до 90 миль без вмешательства.
- Боковые камеры (PilotNet, NVIDIA, 2016).Две дополнительные камеры смотрят вбок, и их кадры размечают рулём, который возвращает машину к центру за 2 секунды. Авторы прямо пишут: одних данных водителя недостаточно, иначе машина медленно съезжает с дороги.
Под капотом: DART формально
Во время записи робот исполняет действие эксперта с шумом, а в данные пишется чистое действие:
Шум уводит робота в стороны, и эксперт показывает, как оттуда возвращаться. Авторы DART подбирают так, чтобы состояния с шумом покрывали ошибки будущей политики: обучают политику, смотрят, насколько она расходится с экспертом, и ставят шум того же масштаба. В отличие от DAgger, эксперт всё время управляет сам и не размечает чужие поездки.
Чего не хватает этим приёмам. Все три добавляют возвраты заранее: мы предполагаем, куда политика съедет, и кладём примеры туда. Если она съедет туда, куда мы не догадались, примеров снова не будет. Как собирать примеры там, куда политика заезжает на самом деле, разберём в уроке 1.2.
Возвраты решают, какие состояния попадут в данные. Но политику можно испортить и с другой стороны — через то, что сеть видит на входе. Кажется, что чем больше она видит, тем лучше водит. Так ли это?
Когда больше информации — хуже
Не всегда. Сеть ищет на входе признаки, которые в данных совпадают с действием оператора, и не знает, вызывает ли признак это действие. Поэтому лишний вход иногда делает политику хуже. Известных ловушек две.
Ложная причина
Сеть видит приборную панель, где загорается лампа тормоза. В данных лампа горит всякий раз, когда водитель тормозит, и сеть выучивает «тормози, когда горит лампа». Но лампа — следствие торможения, а не причина. Это мысленный пример из работы de Haan, Jayaraman и Levine (2019) о causal confusion.
Копирование себя
Если на вход подать историю действий, сеть начинает повторять своё прошлое действие: в данных руль меняется плавно, и «как в прошлый раз» почти всегда правильно. Такая политика права везде, кроме момента, когда надо начать действовать: на светофоре она никогда не тронется. Эту проблему называют copycat.
Команда Waymo, обучая ChauffeurNet, написала: «30 миллионов примеров всё ещё недостаточно». Им пришлось в половине примеров выбрасывать историю движения, чтобы сеть смотрела на дорогу, а не на собственное прошлое.
Задача: что поможет Аде
Соберём вместе всё, что узнали о данных и входах. Разложи приёмы по корзинам: поможет ли каждый политике не съезжать с маршрута. Карточку можно перетащить или нажать, а потом нажать корзину.
Дрейф, ложные причины, копирование себя — слабостей у behavior cloning много. Пользуются ли им сейчас?
Behavior cloning в современных системах
Пользуются, и широко. Меняются архитектура, объём и разнообразие данных, но в основе почти всех моделей для роботов по-прежнему лежит обучение на демонстрациях.
- 1989ALVINN: пиксели → руль на настоящем фургоне, обучение на синтетических дорогах.
- 1991–1994Обучение по живому водителю со сдвинутыми кадрами, до 55 миль в час.
- 2005DAVE: свёрточная сеть на маленьком грузовичке, «стереопара → руль».
- 2010–2011Оценка и алгоритм DAgger (урок 1.2).
- 2016PilotNet от NVIDIA: 72 часа вождения, три камеры, около 98% времени без вмешательства.
- 2023ACT и Diffusion Policy: генеративные политики и пачки действий. 50 демонстраций на задачу, 10–20 минут данных (уроки 1.3–1.7).
- 2024–2026π0, Large Behavior Models, Atlas: behavior cloning на тысячах часов данных. Поверх добавляют обучение с подкреплением (π*0.6, часть 5).
Восемь вопросов о типичных заблуждениях
Итоги урока
- Behavior cloning — обучение с учителем на парах «наблюдение → действие оператора». Просто, быстро и лежит в основе почти всех моделей для роботов.
- Политика сама выбирает, какие состояния увидит. Малая ошибка уводит туда, где данных нет, — это сдвиг распределения.
- Поэтому ошибка за эпизод в худшем случае растёт как , а точность на валидации ничего не гарантирует.
- Дрейф уменьшают данные с возвратами — состояниями в стороне от маршрута и правильным действием из них: шумный оператор, сдвинутые кадры, боковые камеры. Объём аккуратных поездок помогает мало.
- Больше входной информации не всегда лучше: ложные причины и копирование себя.
Открытые вопросы
Ты собираешь демонстрации для робота, который подаёт чашку. Как спланировать сбор, чтобы политика умела исправлять промахи?
Нужны состояния, из которых надо возвращаться: часть демонстраций начинать из неудачных положений руки, подмешивать небольшой шум во время записи и записывать, как оператор исправляет промах. Полезно разнообразить стартовые позы и расстановку предметов. Объём одинаковых аккуратных демонстраций помогает мало.
Почему метрика «ошибка на валидации» плохо предсказывает успех политики на роботе?
Валидационные примеры взяты из распределения оператора, а политика при работе попадает в свои состояния. Ошибка на валидации меряет точность там, где политика почти не бывает в момент сбоя. Успех нужно мерить прогонами в замкнутом контуре: на роботе или в симуляторе.
Гид по статье
Pomerleau, «ALVINN: An Autonomous Land Vehicle in a Neural Network», NIPS 1989. Короткая статья, читается за полчаса.
- Читать внимательноАрхитектуру сети и вход, как получали обучающие примеры и почему выход — 45 нейронов с «горбом», а не одно число.
- Обратить вниманиеЧто автор пишет о проверке «в ограниченных условиях», о развилках и о том, что сеть надо учить восстановлению после ошибки.
- Вопрос по ходуЗачем при обучении на вход обратной связи подавали случайные значения? Подсказка: вспомни раздел про копирование себя.
Материалы
- End to End Learning for Self-Driving CarsM. Bojarski et al., NVIDIA, 2016 — PilotNet и боковые камеры
- Efficient Reductions for Imitation LearningS. Ross, J. A. Bagnell, 2010 — откуда берётся
- DART: Noise Injection for Robust Imitation LearningM. Laskey et al., 2017 — шумный оператор
- Causal Confusion in Imitation LearningP. de Haan, D. Jayaraman, S. Levine, 2019
- NavLab 1984–1994Видео Robotics Institute CMU
Дальше: DAgger. Политика ошибается там, где в данных нет примеров. Шумным оператором и сдвинутыми кадрами мы добавляли такие примеры наугад — туда, куда она, по нашим предположениям, съедет. Если она съедет в другое место, примеров там снова не будет. Можно ли собирать их именно там, куда заезжает политика? Об этом урок 1.2: Ада поедет сама, а эксперт будет подсказывать правильный руль в каждой точке, куда она заехала.