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

Diffusion Policy

В уроке 1.3 выяснилось, что политике нужна модель распределения действий, иначе она усредняет объезды и едет в чайник. В уроке 1.4 диффузия научилась брать сэмплы из распределения любой формы. Diffusion Policy соединяет обе идеи: диффузия строит не точку, а пачку будущих действий, а последние наблюдения служат ей условием. Начальный шум выбирает стратегию, пачка её держит. В уроке обучим такую политику для Ады, выясним, сколько шагов пачки исполнять и сколько шагов денойзинга нужно на самом деле, и разберём, почему метод работает.

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

≈ 45 минутлаборатория и 3 интерактива9 миссий с целью
PUSH-TПоставь Т-блок в цель и узнай, как считают награду бенчмарка
ДЕНОЙЗИНГПеремотай денойзинг пачки и найди шаг, на котором выбрана сторона объезда
ЦИКЛСобери политику по шагам от камеры до мотора и отбрось лишние блоки
ЛАБОРАТОРИЯОбучи политику в браузере и проверь пачки, шаги денойзинга и длину исполнения

Начать урок ↓

1 Задача

Push-T: задача из статьи

Политике мало выбрать одну стратегию: её нужно исполнять плавно, на настоящем роботе и в реальном времени. Chi и соавторы в 2023 году предложили для этого Diffusion Policy и проверили её на 12 задачах из четырёх бенчмарков: Robomimic, Push-T, Block Pushing и Franka Kitchen. Главный пример статьи — Push-T.

В Push-T круглый агент толкает Т-образный блок в зелёный контур на столе. Задача мультимодальна: к блоку можно зайти слева или справа, толкнуть его за перекладину или за ножку, и операторы делают это по-разному. На настоящей руке UR5 Diffusion Policy решила задачу в 95% попыток, IBC — ни разу, LSTM-GMM — в 20%.

Прежде чем сравнивать политики, разберёмся с метрикой: что именно считается решением.

0%покрытие цели · черта — 95%100%

Метрика говорит, куда прийти, но не говорит как. Как политика выбирает один способ из нескольких и не бросает его на полпути?

Под капотом: награда в Push-T

Награда — доля закрытой цели с запасом в 5%:

r=min⁡(1, Sзакрыто0,95 Sцели).r = \min\Bigl(1,\ \frac{S_{\text{закрыто}}}{0{,}95\, S_{\text{цели}}}\Bigr).

Метрика бенчмарка — лучшая награда за эпизод, усреднённая по 50 стартам. На реальном роботе авторы считали пересечение блока с целью на последнем шаге (IoU): у Diffusion Policy 0,80, у человека-оператора 0,84.

В интерактиве блок и цель состоят из перекладины 140 × 35 и ножки 35 × 100, цель повёрнута на 45°. Площадь пересечения считается точно: блок и цель — по два прямоугольника, а пересечение выпуклых многоугольников находится отсечением Сазерленда — Ходжмана.

2 Пачка

Диффузия строит пачку действий

В уроке 1.4 диффузия генерировала точку на плоскости. Политике нужна не точка, а движение. Поэтому Diffusion Policy генерирует пачку действий: положения робота на 16 шагов вперёд. Пачку целиком начинают с гауссова шума и за несколько шагов денойзинга превращают в связное движение.

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

Почему пачка держит стратегию? Сторону объезда выбирают один раз на всю пачку, и все 16 шагов следуют этому выбору. Перемотай денойзинг пачки рядом с чайником и найди, на каком шаге выбрана сторона.

объезд слеваобъезд справасторона не выбрана

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

Под капотом: денойзинг пачки с условием

Обозначим пачку на шаге денойзинга kk через aka^k, наблюдения — через oo. Сеть εθ\varepsilon_\theta учат угадывать добавленный шум, как в уроке 1.4, только с наблюдениями на входе:

L=E ∥ε−εθ(ak,k,o)∥2,ak=αˉk a0+1−αˉk ε.\begin{gathered} L = \E\,\bigl\lVert \varepsilon - \varepsilon_\theta(a^k, k, o)\bigr\rVert^2,\\ a^k = \sqrt{\bar\alpha_k}\,a^0 + \sqrt{1 - \bar\alpha_k}\,\varepsilon. \end{gathered}

Шаг DDIM с kk на более ранний k′k' сначала оценивает чистую пачку, потом снова добавляет к ней предсказанный шум меньшего уровня:

a^0=ak−1−αˉk εθ(ak,k,o)αˉk,ak′=αˉk′ a^0+1−αˉk′ εθ(ak,k,o).\begin{aligned} \hat a^0 &= \frac{a^k - \sqrt{1 - \bar\alpha_k}\,\varepsilon_\theta(a^k, k, o)}{\sqrt{\bar\alpha_k}},\\ a^{k'} &= \sqrt{\bar\alpha_{k'}}\,\hat a^0 + \sqrt{1 - \bar\alpha_{k'}}\,\varepsilon_\theta(a^k, k, o). \end{aligned}

В интерактиве денойзер точный и без условия, как в уроке 1.3: пачка — 16 боковых смещений Ады вокруг чайника, 9 шагов до него и 6 после, по 40 демонстрациям. Сторону считаем по оценке чистой пачки на уровне чайника: дальше 6 см от маршрута. В лаборатории ниже денойзер — обученная сеть с условием.

3 Цикл

Как устроена политика

Одной пачки на всю задачу не хватит: сцена меняется, и робот должен на это реагировать. Поэтому политика работает циклом. Она смотрит на два последних кадра, энкодер считает их признаки, денойзинг строит пачку из 16 действий, робот исполняет первые 8, и цикл повторяется с новыми кадрами. Это отступающий горизонт, знакомый по скользящему горизонту из урока 0.3: планируем далеко, исполняем начало, перепланируем.

Собери этот цикл сам. Два блока в наборе лишние.

Цикл политики

    Блоки

    Числа 2, 16 и 8 авторы подобрали опытом. Короткая история наблюдений меньше переобучается, длинная пачка держит стратегию, а исполнение половины пачки оставляет время на реакцию. Проверим, как это работает на Аде.

    Под капотом: политика из статьи
    • Вход. Два последних шага наблюдений: кадры двух камер и положение захвата.
    • Энкодер. ResNet-18 на каждую камеру без предобучения, spatial softmax вместо глобального усреднения, GroupNorm вместо BatchNorm. Признаки считаются один раз за вывод пачки.
    • Денойзер. Одномерный UNet по оси времени пачки, наблюдения и номер шага входят через FiLM. Есть и трансформерный вариант с cross-attention к наблюдениям, но авторы советуют начинать с UNet.
    • Обучение. Случайный шаг из 100, квадратичная ошибка между шумом и его предсказанием, действия нормированы в отрезок [−1, 1], веса усредняются экспоненциально (EMA).
    • Управление. Пачка — целевые положения, а не скорости. Позиционное управление у авторов стабильно лучше скоростного, у бейзлайнов было наоборот.
    • Размер и частота. Сеть шума — 256 млн параметров в симуляции и 67 млн на роботе, энкодер — 22 млн на две камеры. Политика выдаёт пачку 10 раз в секунду, контроллер интерполирует её до 125 Гц.
    🔬 Лаборатория

    Ада и диффузионная политика

    Проверим на сцене из урока 1.3. Политика видит два последних положения Ады и выдаёт пачку из 16 шагов вперёд. Денойзер — настоящая маленькая сеть, она обучается прямо в браузере за несколько секунд. Рядом можно включить регрессию с пачками: она выдаёт всю пачку за один проход сети.

    По горизонтали — сколько шагов пачки исполнять из 16, по вертикали — сколько прогонов из 20 прошли без касания и без смен плана при сдвиге чайника.

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

    Под капотом: политики в лаборатории

    Наблюдение. Положения Ады на прошлом и текущем шаге относительно чайника — четыре числа. Боковое положение Ада оценивает с ошибкой около 8 см, как по неточному датчику.

    Пачка. Положения Ады на 16 шагов вперёд относительно текущего, по xx и yy: 32 числа. Исполняем TaT_a шагов из 16, потом строим новую пачку.

    Денойзер. Полносвязная сеть: на входе зашумлённая пачка, наблюдение и номер шага шума (43 числа), два слоя по 64 нейрона с tanh, на выходе оценка чистой пачки. Косинусное расписание, 100 шагов шума при обучении, 3000 шагов Adam по 32 примера — около двух секунд в браузере. При выводе — DDIM с выбранным числом шагов.

    Регрессия с пачками. Сеть 4 → 64 → 64 → 32, среднеквадратичная ошибка, 2500 шагов Adam. Вся пачка — за один проход.

    Прогоны. Каждый запуск — 10 прогонов: старт чуть смещён, к движению добавлен шум регулятора около 0,5 см. В миссии со сдвигом чайника каждый запуск — одни и те же 20 прогонов для любой длины исполнения: чайник сдвигается на 12 см в сторону Ады на шаге от 8-го до 19-го. Так длины исполнения сравниваются на равных.

    Метрики. Касание — центры Ады и чайника ближе 31 см. Смена плана — новая пачка у чайника объезжает его с другой стороны, чем прошлая.

    4 Скорость

    Сколько шагов делают настоящие роботы

    Каждый шаг денойзинга — полный проход большой сети. DDPM на 100 шагах тратит около секунды на видеокарте T4, а робот на 10 Гц ждёт новую пачку каждые 0,6–0,8 секунды. В лаборатории Аде хватало трёх-четырёх шагов, и настоящие системы идут тем же путём: сокращают число шагов, меняют генератор и строят следующую пачку, пока исполняется текущая.

    СистемаГенераторШагов при выводеВремя вывода
    Diffusion PolicyDDIM16 (в разделе 3.4 статьи — 10)0,1 с на RTX 3080
    Consistency Policyдистилляция Diffusion Policy1–321–22 мс против ~195 мс у DDIM на 15 шагах
    RDT-1BDPM-Solver++5—
    π0flow matching1073 мс на RTX 4090
    GR00T N1flow matching463,9 мс на L40
    ALOHA UnleashedDDIM5043 мс на RTX 4090

    Flow matching при гауссовом шуме эквивалентен диффузии, но учит более прямые пути от шума к данным, поэтому шагов нужно меньше. Его разберём в уроке 1.8. Быстрый вывод всё равно не убирает задержку целиком: пока сеть считает, робот должен что-то исполнять. Что происходит на стыке пачек?

    5 Стыки

    Стыки пачек и задержка

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

    Сгладить скачок усреднением нельзя по той же причине, что в уроке 1.3: среднее двух стратегий бывает недопустимым действием, и авторы π0 от усреднения отказались. Real-Time Chunking (RTC) от Physical Intelligence поступает иначе. Следующую пачку строят, пока исполняется текущая; действия, которые уже уходят на моторы, замораживают, а остальные дорисовывают так, чтобы новая пачка продолжала исполняемую. Метод работает без переобучения и выдерживает задержки больше 300 мс.

    Задержки и способы стыковать пачки подробно разберём в уроке 1.7 про ACT. Осталось понять, почему диффузионная политика вообще работает лучше других и верно ли объяснение, которое дают авторы.

    6 Почему работает

    Почему метод работает

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

    Результаты при этом нужно отделять от объяснений. Средний прирост 46,9% — это сравнение в симуляции. На реальных роботах авторы приводят отдельные задачи: 95% на Push-T, 90% на задаче с кружкой. Что выигрыш объясняется именно мультимодальностью, статья не доказывает.

    С этим объяснением спорят. По оценке Mazza и соавторов, на стандартных бенчмарках условных мод почти нет (урок 1.3). Работа 2025 года (arXiv 2512.01809) на 28 бенчмарках связывает преимущество генеративных политик с шумом при обучении и итеративными шагами, а не с выразительностью модели: двухшаговая регрессионная политика почти не уступила flow-политике. А когда демонстрации разных операторов действительно расходятся, генеративная голова нужна: в ALOHA Unleashed — 70% успеха против 25% у регрессии с L1.

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

    7 Проверь себя

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

    8 Итог

    Итоги урока

    1. Diffusion Policy генерирует пачку действий на 16 шагов вперёд из шума при условии последних наблюдений. Наблюдения не зашумляют.
    2. Стратегию выбирает начальный шум на первых шагах денойзинга, а пачка её держит, поэтому робот не виляет.
    3. Отступающий горизонт: предсказать 16, исполнить 8. Короче — план меняет сторону, длиннее — робот поздно замечает изменения сцены.
    4. Шагов денойзинга нужно мало: 16 у Diffusion Policy, 10 у π0, 4 у GR00T N1, 1–3 после дистилляции. Один шаг без дистилляции даёт почти среднее.
    5. Стыки пачек не усредняют: следующую пачку достраивают к исполняемой, как в Real-Time Chunking.
    6. Мультимодальность — объяснение авторов, а не доказанная причина успеха. Если в данных одна стратегия, регрессия с пачками дешевле и не хуже.

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

    Вывод занимает 100 мс, а робот управляется на 10 Гц. Как устроить исполнение, чтобы не было ни пауз, ни рывков?

    Строить следующую пачку асинхронно, пока исполняется текущая, и начинать вывод заранее, за столько шагов до конца пачки, сколько длится вывод. Действия, которые будут исполнены за время вывода, замораживать и дорисовывать к ним остальную пачку, как в Real-Time Chunking, а не усреднять пачки. Задержку можно имитировать и при обучении. В LeRobot асинхронный вывод сократил время на задачу с 13,75 до 9,7 с.

    Почему позиционное управление может быть устойчивее к задержке и накоплению ошибки, чем скоростное?

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

    Гид по статье

    C. Chi et al., «Diffusion Policy: Visuomotor Policy Learning via Action Diffusion», RSS 2023.

    Материалы

    ➡️

    Дальше: трансформер. Вариант Diffusion Policy на UNet хорошо работает с одной-двумя камерами. Современные политики получают на вход много камер, команду текстом и историю наблюдений, и почти все они построены на трансформере. Как он устроен и почему подходит для политик — урок 1.6 «Трансформер».

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