Как стать автором
Поиск
Написать публикацию
Обновить

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

Время на прочтение8 мин
Количество просмотров7.2K
Всего голосов 44: ↑44 и ↓0+59
Комментарии38

Комментарии 38

В теории адаптивного управления есть метод скоростного градиента - когда подстройка параметров/управления осуществляется не по градиенту целевого показателя, а по градиенту скорости его изменения. Вроде, есть что-то близкое?

Станислав, отличное наблюдение! Не претендую на академическую точность, но кажется, что да, есть определенная концептуальная связь между методом скоростного градиента из адаптивного управления и нашим подходом с Lipschitz constraints.

В методе скоростного градиента мы минимизируем скорость изменения функции Ляпунова: dV/dt = ∇V · ẋ, подстраивая параметры в направлении -∇_θ(dV/dt). То есть не просто стремимся уменьшить ошибку, а делаем это максимально плавно во времени.

В нашем случае с Lipschitz penalty мы тоже работаем с "производной", но в другом смысле:

  • Мы штрафуем за большую норму градиента ∂π / ∂s — насколько резко политика меняется при изменении состояния (штрафуем за слишком резкую реакцию на входные возмущения.)

  • При оптимизации считаем градиент этого градиента: ∇_θ||∂π/∂s|| (на практике это не буквально градиент нормы якобиана, а регуляризация loss-функции с соответствующим penalty)

Ключевое отличие:

  • Скоростной градиент: минимизируем скорость изменения во времени

  • Lipschitz: минимизируем чувствительность к входам

Но идея общая: мы не просто оптимизируем reward, а контролируем "поведение функции", делаем её более предсказуемой и устойчивой.

Интересно, что в робототехнике эти подходы могли бы дополнять друг друга: Lipschitz constraint для устойчивости к шуму сенсоров + СГ для плавной адаптации к изменяющимся условиям. Спасибо за параллель, есть о чем подумать для следующих экспериментов!

Надеюсь, пригодится! :) Если дальше копать, то можно найти параллели с sensitivity shaping, который должен был бы применяться при построении традиционных регуляторов. То есть у вас нечто идейно схожее, но для model-free/data-driven управления.

Так и не понял что за RL? Learning, ясен пень, но какой?

Reinforcement learning*

  • Представлена нейросетью, параметризованной с помощью MLP (multilayer perceptron).

Это самая простая из сетей, которую тут можно было применить.
Но не позволяет подключать камеры и не помнит предыдущую историю прохождения , не учитывает задержки сенсоров.
Т.е. скорее всего расчет на слабые микроконтроллеры или процессоры.

Словом, зря они от Калмана отказались.

Согласен, «голый» MLP не помнит историю и не знает о задержках. Но у нас он используется строго как policy на коротком горизонте (20–30 мс), и работает в 400 Гц. Все задержки и шумы сенсоров будут обрабатываться upstream — через EKF по IMU и визуальной одометрии. Policy получает уже фильтрованное состояние.

Почему не рекуррентная сетка? Пока не внедряли — в текущих задачах хватает нормализованного вектора с history stacking (N последних шагов в obs). Это проще, легче дебажить и быстрее адаптировать под real-time constraints.

Калман в строю — просто живёт выше по стеку: в perception и state estimation. А policy пусть будет простой, но быстрой и безопасной.

Статья интересная, спасибо.
А какого размера у вас нейронка управляет роботом, слоев/нейронов? Удивительно, что хватает обычной полносвязной сетки.

да, сетка действительно простая — обычная fully connected MLP: [obs_dim] → 512 → 256 → 128 →[action_dim], активации ELU.

а почему решили поменять стандартный Relu на ELU? Это осознанный выбор, или результат экспериментов? Если нужна отрицательная часть, то логичнее выбирать sigmoid или linear, имхо

Для Lipschitz-регуляризации важно, чтобы нейросеть вела себя гладко и предсказуемо. ReLU жёстко обрубает отрицательные значения и не дифференцируема в нуле — это делает градиенты «рваными» и мешает контролировать чувствительность. ELU же даёт плавный спад, остаётся дифференцируемой и не обнуляет градиенты при шуме.

По сути, это компромисс: сохраняем экспрессивность MLP, но минимизируем дергание на границах входного пространства. Особенно критично, когда ты хочешь, чтобы политика на роботе не срывалась от 1% шума IMU.

и еще вопрос. У вас на графиках робот начал ходить после 2000 "step", т.е. обработки состояния -> отправки команды? Или надо умножать на 4096 (количество сред)?

На графиках по оси X — итерации обучения, где каждая итерация обрабатывает batch из 4096 параллельных сред. То есть робот учился не на 2000 шагах, а на 2000 × 4096 = 8+ миллионах шагов суммарно.

Прорыв на 2-4k итерациях = это уже 8-16 миллионов шагов опыта. Именно за счёт параллельной симуляции мы так быстро получаем первые устойчивые политики.

А для чего нужны гуманоидные роботы похожие на человека?

Колёсные тележки и «манипуляторы на стойке» отлично справляются с задачами в структурированном пространстве — именно поэтому на заводах стоят конвейеры, а в складских зонах курсируют AGV. Но как только мы выходим в «человеческую» инфраструктуру (лестницы, узкие дверные проёмы, ручки, выключатели, бытовые инструменты), окупается биоморфная кинематика: существующие помещения, средства труда и процессы не нужно перестраивать под робота, — достаточно обучить робота работать так же, как человек. На практике это уже решает прикладные задачи: Digit раскладывает коробки у Amazon, Optimus сортирует детали на Gigafactory, а гуманоиды Sanctuary AI закрывают «unfilled shifts» на складах. То есть ценность формы — в минимизации CAPEX на переделку инфраструктуры и в возможности массового тиражирования решения там, где ручной труд до сих пор не автоматизирован.

Вторая причина — многоцелевое переобучение. Робот, который уже умеет ходить, держать равновесие и манипулировать бытовыми предметами, меняет «прошивку» — и из курьера превращается в охранника, промоутера или техника‑наладчика. Это не «игрушка для публики», а платформа, способная закрывать дефицит рабочей силы и давать предсказуемый ROI: одна и та же железная база, обновляемая как софт. В конечном счёте именно универсальность и совместимость с человеческой средой делает гуманоиды стратегически более выгодными, чем парк узкоспециализированных, но взаимно несовместимых роботов на колёсах.

лестницы

Сколько стоит пандус-накладка на лестницу с откидным шарниром? А R&D “типа человек”? Вот то-то же. Тем более, молодой маме в подъезде уродливой накладки для спуска и подъема коляски с младенцем достаточно, а капризной железке, видите ли, нет.

узкие дверные проёмы

Платформа не обязана быть широкой, в основание можно встроить маховик для защиты от опрокидывания

ручки

Образец, с которого копируется форма, способен оперировать ими даже при ампутации обеих ног

выключатели

Аналогично

бытовые инструменты

Аналогично

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

Это не только лестницы. А поребрики, а камни в парке, а дыры в асфальте и в тротуарах. Ваш пандус накладку кто будет спускать-поднимать? Робот? Вместо того, чтобы дело делать? Антропоморфность это и руки, не только ноги и не только хождение. А управление рук и ног имеет разные цели, но алгоритмы по сути одинаковые. Вот возьмите моноколесо или гироскутер и попробуйте весь день только на нем ездить, вместо того, чтобы ходить. Если выживете – напишите статью на хабр.

поребрики, а камни в парке, а дыры в асфальте и в тротуарах

Со всем этим у гусеничной платформы проблем никаких.

Ваш пандус накладку кто будет спускать-поднимать? Робот? Вместо того, чтобы дело делать?

Да вообще не вопрос. Минус шарнир, так ещё дешевле. Особенно, если плевать на то, как там будут кожаные ходить. Пусть дело делает.

это и руки

К манипуляторам вообще никаких вопросов. Тем более, они могут быть сменными и разными, заточенными под задачу.

алгоритмы по сути одинаковые

Да вот уж нет. Манипулятор может немного ошибиться, и скорректировать его положение можно с небольшим опозданием, а корректировать усилия на опорно-двигательных тентаклях нужно всегда и даже с упреждением, иначе вся пепяка завалится.

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

Так вот гироскопом очень много проблем заваливания решается: это и уменьшение высоты центра масс, и собственно эффект маховика. Но в тентакли его не встроишь, а в платформу — запросто.

А где именно вы собираетесь выходить в «человеческую» инфраструктуру? Есть запрос от рынка? Не разовые модели поиграться, а десятки и сотни роботов.

Вы перечисляете текущее применение, но это все склады. Зачем там именно гуманоидная архитектура (ноги прежде всего), непонятно, ведь инфраструктуру в абсолютном большинстве случаев поменять дешевле, чем стоимость одного робота. Текущее применение больше походит на рекламный трюк - смотрите, насколько мы технологичны.

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

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

если у них все на шарнирах, то наверное все эти траектории это квадратные уравнения.

там достаточно ограничивать силу и вторая производная будет как нужно ограничена. Т.е. задача решается и без знания второй производной. Школьной физикой

Но замечание - зачёт !

Спасибо за комментарий.

Да, при планировании траекторий сила действительно может быть ограничена напрямую — и это рабочий подход в системах с аналитическим контролем.

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

Этот механизм помогает сделать поведение стабильным при сенсорном шуме, особенно при переносе с симуляции на реальную механику, где идеализированные предпосылки не выполняются.

Так что да, физика остаётся — но в data-driven контуре её приходится усиливать регуляризаторами.

Спасибо за комментарий.

Формулировка про «градиент градиента» в статье — это просто инженерная метафора, чтобы объяснить суть приёма на пальцах.

Мы используем gradient penalty — довольно стандартный подход в ML, но применяем его в другом контексте. Штрафуем ∥∇sπ(a∣s)∥, чтобы политика не дёргалась от мелкого сенсорного шума. При backprop это автоматически даёт градиент по параметрам от градиента по входу — отсюда и родилось название.

Новизна не в математике (она действительно уровня бакалавриата), а в том, что в задаче sim2real-переноса для гуманоидов это даёт ощутимый прирост. Это важно при переносе с симуляции на железо, где шум, зазоры и задержки проявляются жёстко. Не откровение — но в нашем случае оказалось полезным.

Новизна не в математике (она действительно уровня бакалавриата)

За такую "новизну" из бакалавриата выгонять нужно.

Это называется "рывок" ("jerk").
И да, я тоже читал и не мог понять: почему для ограничения рывка нужны НС, RL и всё это. Карго-культ какой-то.
Дикари с ИИ в руках.

Вы правы — резкие скачки в управляющем воздействии называются «рывками» (jerk), и в классических контроллерах они ограничиваются через jerk-limited траектории, сглаживающие ускорения.

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

Именно поэтому вводим регуляризацию, чтобы обучаемая политика вела себя похоже на jerk-limited контроллер, но в end-to-end стиле. Это не замена классике, а адаптация знакомых принципов под data-driven стек. Работает — значит, используем. Карго тут нет.

Вы ответы через ллм генерируете что ли?

Стараюсь формулировать чётко и технично — чтобы было понятно и разработчикам, и исследователям. Если что-то вызывает вопросы — рад пояснить подробнее.

"Если тебе нужно, могу написать ответ в любом стиле!"

Пытались валидировать политику RL с помощью Whole-Body Control?

Пока — нет, напрямую с Whole-Body Control (WBC) не сравнивали.

Основной фокус был на обучении end-to-end policy, отдающей торки, с максимальным переносом из симуляции. Но идея использовать WBC как валидационную референс‑модель (или даже baseline для policy distillation) звучит разумно — особенно для оценки joint consistency, effort balance и при работе с контактами.

Если есть конкретные рекомендации по setup’у или библиотекам — буду рад взглянуть.

напомнили - у меня на экзамене по математике был доп вопрос: "что вы можете сказать о функции по ее второй производной?". Уже плохо соображал и подвис и ответил перепутав имя преподавателя с отчеством, на что получил ответ:

"Если вам трудно запомнить как меня зовут, зовите меня просто Вовочка, я не обижусь".

Владимир Борисович, надеюсь жив и здоров еще.

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

Спасибо, отличный комментарий — и сильное воспоминание, надеемся, Владимир Борисович по-прежнему в строю!

Что касается сути: да, устойчивость системы при наличии задержек — критичный аспект, особенно в приводах с гистерезисом или при длительном pipeline обработки (в нашем случае — perception → LLM → HLC → action). Мы именно поэтому и используем RL-политику как быстрый стабилизирующий слой: она работает в высокочастотном цикле и помогает «поглощать» эффекты задержки и сенсорного шума.

Автоколебания — вполне реальный риск, особенно если в системе есть накопленный лаг + обратная связь. Мы дополнительно будем ограничивать скорость изменений действий, чтобы не было переусиления. И да — идея о гистерезисе как полезной нелинейности для стабилизации в приводах вполне применима. Благодарим за подсказку — в наших условиях точно стоит протестировать!

Обилие сокращений и англозаменителей , например: (в нашем случае — perception → LLM → HLC → action)- это только мне непонятно о чём речь?)

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

Тем не менее, Вы правы — нужно делать текст более доступным. В будущих материалах добавлю расшифровку ключевых сокращений (в духе: LLM — большая языковая модель, HLC — контроллер высокого уровня и т.д.), а возможно и глоссарий в конце.

Спасибо, что обратили внимание — это важно! Хорошего дня!

Привет!

Вы достигли хорошего прогресса, но попали в ловушку "почти работает, осталось чуть-чуть".
Могу недорого продать направление, которое приведёт Вас к созданию не падающего робота.

Привет Яндекс! Физик на связи. Для транспортировки грузов отслеживают рывок - это третья производная. Посмотрите в эту сторону, поскольку именно он определяет адаптационные возможности предмета к противодействию ускорению. Также учитывайте, что трение зависит от скорости и давления на опору, а значит нужно отслеживать и следующие производные, если слабо за опору цепляется робот или ускорение большеватое, но обычно для грузов хватает 3-й производной

Спасибо, очень уместное замечание. Действительно, в задачах транспортировки (особенно с жидкостями или чувствительными грузами) jerk — третья производная по положению — часто оказывается критичнее, чем ускорение. И если управлять именно воздействием, а не просто позицией, то это хороший способ контролировать динамическое “раздёргивание”.

В текущем стекe у нас RL‑policy не явно оптимизирует jerk, но мы видим, что Lipschitz-регуляризация на входах (наблюдениях) даёт схожий эффект: снижение «дёрганья» даже без явного jerk-penalty. Но идея подключить jerk как компонент cost-функции или обучать critic на основе производных — интересная. Особенно для задач типа «перенеси кружку с водой без расплескать».

Также согласен по поводу трения — у нас в симуляции это параметризовано и рандомизируется, но в реальном мире действительно лучше его адаптивно оценивать по реакции в опоре.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий