После добавления случайных факторов в относительно простую симуляцию робот из OpenAI научился выполнять сложные наладонные операции
Наладонные операции – это одно из тех действий, что стоят в верхней части списка «умений, не требующих усилий от людей, и чрезвычайно сложных для роботов». Не задумываясь, мы способны адаптивно управлять пальцами руки, противостоящим им большим пальцем и ладонью, учитывая трение и гравитацию, манипулируя предметами одной рукой, не задействуя другую – в течение сегодняшнего дня вы наверняка проделывали этот трюк много раз, хотя бы со своим телефоном.
У людей уходят годы тренировок на то, чтобы научиться надёжно работать пальцами, но у роботов нет столько времени на обучение. Такие сложные задачи всё ещё решаются через практическое обучение и приобретение опыта, и задача состоит в том, чтобы найти способ обучать робота быстрее и эффективнее, чем просто дать роботизированной руке что-то, чем можно манипулировать снова и снова, пока она не поймёт, что срабатывает, а что – нет; на это может уйти сотня лет.
Вместо того, чтобы ждать сотню лет, исследователи из OpenAI использовали обучение с подкреплением, чтобы натренировать свёрточную нейтронную сеть управлять пятипалой рукой робота Shadow для манипуляции объектами – и всего за 50 часов. Им удалось сделать это через симуляцию, технику, печально известную, как «обречённая на успех» – однако они аккуратно вносили в неё случайные факторы, чтобы приблизить её к переменчивости реального мира. Реальная рука Shadow смогла успешно провести наладонные манипуляции с реальными объектами безо всякой повторной тренировки.
В идеале, всех роботов нужно тренировать в симуляциях, потому что симуляции можно масштабировать, не создавая множество реальных роботов. Хотите натренировать дофигиллион роботов дофигиллион часов в одну дофигилионную долю секунды? Это можно сделать — если заполучить достаточный объём вычислительных мощностей. Но попробуйте провернуть такое в реальном мире – и проблема того, что никто не знает, сколько точно это будет, «дофигиллион», будет наименьшей из ваших проблем.
Проблема с тренировкой роботов в симуляциях состоит в том, что реальный мир нельзя симулировать точно – и ещё более сложно точно симулировать такие мелкие неприятности, как трение, податливость и взаимодействие нескольких объектов. Поэтому общепринято мнение о том, что симуляция – это прекрасно, но между успехом симуляции и успехом в реальном мире существует большой и страшный разрыв, определённым образом принижающий ценность симуляций. Не улучшает ситуацию ещё и тот факт, что именно те вещи, которые было бы неплохо симулировать (например, наладонные манипуляции), одновременно оказываются наиболее сложными для точных симуляций, из-за того, насколько они физически изощрённые.
Распространённый подход к этой проблеме – попытаться сделать симуляцию настолько точной, насколько возможно, и надеяться, что она окажется достаточно близкой к реальному миру, чтобы вы смогли извлечь из неё какое-то полезное поведение. Вместо этого OpenAI ставит на первое место не точность, а изменчивость, снабжая свои умеренно реалистичные симуляции множеством мелких подстроек, чтобы получаемое поведение оказалось достаточно надёжным для работы и вне симуляции.
Процесс рандомизации – ключ к тому, что делает систему (названную Dactyl) способной эффективно перейти от симуляции к реальному миру. В OpenAI прекрасно понимают, что используемые ими симуляции недостаточно сложны для того, чтобы смоделировать всю гору важнейших вещей, от трения до износа кончиков пальцев реальной роборуки. Чтобы робот сумел обобщить то, чему он учится, OpenAI вносит случайные переменные во все возможные аспекты симуляции, чтобы попытаться покрыть всю переменчивость мира, которую невозможно хорошо смоделировать. Сюда входит масса, все измерения объекта, трение его поверхности и пальцев робота, демпфирование пальцев робота, сила воздействия моторов, ограничения сочленений, люфт и шум мотора, и прочее. К объекту прилагаются небольшие случайные воздействия, чтобы симуляция справлялась с динамикой, которую нельзя смоделировать. И это только сам процесс манипуляции – в работе RGB-камер, оценивающих положение объекта, также есть немало случайных переменных, которые, правда, немного легче визуализировать.
Ряды показывают снимки с одной и той же камеры. Столбцы соответствуют снимкам со случайными изменениями – все они одновременно скармливаются нейросети.
OpenAI называет это «рандомизацией окружения», и в случае наладонных манипуляций они «хотели посмотреть, может ли увеличение масштаба рандомизации окружения решить задачу, недоступную имеющимся на сегодня методам робототехники». И вот, что получилось в результате у двух независимо натренированных систем (одна визуальная, вторая – для манипуляций), которые зрительно распознают положение кубика и поворачивают его в разные положения.
Все эти повороты кубика (а система способна, по меньшей мере, на 50 успешных манипуляций подряд) стали возможными благодаря 6144 процессорам и 8 GPU, набравшим 100 лет симулированного опыта работы робота всего за 50 часов. Единственная обратная связь, доступная системе (как в симуляции, так и в реальности) – расположение кубика и пальцев руки, при этом система начинала, не имея каких-то определённых понятий по поводу того, как именно надо держать или вращать кубик. Ей пришлось самостоятельно разбираться со всем этим – включая вращение пальцев, одновременную координацию нескольких пальцев, использование силы гравитации, координация приложения сил. Робот изобрёл те же самые техники, что используют люди, однако, с небольшими (и интересными) модификациями:
Для чёткого захвата объекта робот обычно использует мизинец вместо указательного или среднего пальцев. Это, возможно, объясняется наличием у мизинца руки Shadow Dexterous Hand дополнительной степени свободы по сравнению с указательным, средним и безымянным пальцами, что делает его более подвижным. У людей более подвижными обычно бывают указательный и средний палец. Это значит, что наша система способна самостоятельно изобрести технику хватания, имеющуюся у людей, но лучше адаптировать её к собственным ограничениям и возможностям.
Различные типы хватов, которым обучилась система. Слева направо и сверху вниз: захват кончиками пальцев, захват ладонью, захват тремя пальцами, четырьмя, пятипальцевый захват, и мощный захват.
Мы наблюдали ещё одну интересную параллель в работе пальцев людей и нашего робота. По этой стратегии рука держит объект двумя пальцами и вращает вокруг этой оси. Оказалось, что у маленьких детей подобная моторика ещё не успевает выработаться, поэтому они обычно вращают объекты при помощи проксимальной или средней фаланг пальцев. И только позднее в жизни они переключаются на дистальные фаланги, как делает большинство взрослых. Интересно, что наш робот при необходимости вращения объекта обычно полагается на дистальные фаланги.
Плюс технологии в том, что, как оказалось, роботов всё-таки можно натренировать на сложные физические действия в симуляциях, а затем сразу же использовать накопленные умения в реальности – и это действительно большое достижение, поскольку тренировка в симуляциях идёт гораздо быстрее, чем в реальности.
Мы связались с Йонасом Шнайдером, членом команды технических специалистов из OpenAI, чтобы подробнее расспросить об этом проекте.
Редакция: Почему наладонная манипуляция в робототехнике – настолько сложная задача?
Йонас Шнайдер: Манипуляции происходят в весьма ограниченном пространстве, а роботу доступно большое количество степеней свободы. Успешные стратегии манипуляции требуют правильной координации во всех этих степенях свободы, а это уменьшает допустимый размер ошибки по сравнению с обычными взаимодействиями с объектами – такими, например, как простой захват. Во время наладонных манипуляций регистрируется очень много соприкосновений с объектом. Моделирование этих соприкосновений – задача тяжёлая, склонная к появлению ошибок. Ошибки во время выполнения приходится контролировать во время работы руки, что вызывает проблемы у традиционного подхода, основанного на планировании движений заранее. К примеру, проблема может возникнуть, когда у вас есть линейная обратная связь, не регистрирующая нелинейную динамику происходящего.
Судя по всему, случайные переменные – ключ к тому, чтобы навыки, полученные в симуляции, можно было надёжно применять в реальности. Как вы решаете, какие параметры делать случайными, и как именно?
Во время калибровки мы грубо прикидываем, какие именно параметры могут меняться, и затем решаем, поведение каких из них наиболее важно будет воспроизвести в симуляции. Затем мы устанавливаем значения этих параметров равными калибровочным, и добавляем случайных вариаций в районе среднего значения. Амплитуда вариаций зависит от нашей уверенности – к примеру, размер объекта мы варьировали не очень сильно, поскольку мы можем его точно измерить.
Некоторые случайные вариации были основаны на эмпирических наблюдениях. К примеру, мы наблюдали, как наш робот иногда ронял объект, опуская кисть, и не успевая поднять её до тех пор, пока объект с неё не скатится. Мы обнаружили, что из-за проблем с низкоуровневым контроллером выполнение наших действий иногда могло задерживаться на несколько сотен миллисекунд. И мы могли, конечно, потратить силы на то, чтобы сделать работу контроллера более надёжной, но вместо этого мы просто добавили рандомизации ко времени срабатывания каждого контроллера. Нам кажется, что на более высоком уровне это может оказаться интересным подходом к разработке роботов будущего; для каких-то задач разработка очень точного оборудования может оказаться неприемлемо дорогой, а мы продемонстрировали, как эти недостатки оборудования можно корректировать при помощи более продвинутых алгоритмов.
Как вы думаете, насколько ваши результаты улучшились бы, если бы вы подождали не 100 лет симулированного времени, а, к примеру, 1000?
На примере какой-то конкретной задачи это трудно оценить, поскольку мы никогда не проводили тесты больше, чем 50 поворотов. Пока неясно, как именно выглядит асимптотическая кривая характеристик, но мы считаем свой проект законченным, поскольку даже один удачный поворот находится далеко за пределами возможностей наилучших из существующих сегодня методов обучения. На самом деле, мы выбрали цифру в 50 поворотов, потому что решили, что 25 поворотов однозначно продемонстрируют, что задача решена, а потом добавили ещё 25, для 100% запаса. Если вашей задачей будет оптимизация для очень долгих последовательностей действий и высокой надёжности, то увеличение тренировок, вероятно, поможет. Но в какой-то момент, как мы думаем, робот начнёт больше приспосабливаться к симуляции, и хуже работать в реальном мире, и тогда придётся добавлять ещё больше рандомизаций, чтобы усложнить симуляцию, что, в свою очередь, увеличит надёжность итоговой системы.
Насколько хорошо ваши результаты поддаются обобщению? К примеру, сколько усилий на повторные тренировки пришлось бы затратить для вращения куба меньшего размера, или куба, который был бы мягким, или скользким? Что насчёт иного расположения камер?
Мы, кстати, ради интереса пытались проводить манипуляции с мягкими кубиками, и кубиками меньшего размера, и оказалось, что качество работы не сильно уменьшается по сравнению с вращением твёрдого куба. В симуляции мы также экспериментировали с кубами разного размера, и это тоже срабатывало хорошо (правда, с реальным роботом мы этого не пробовали). В симуляции мы также использовали случайные вариации размеров кубика. Мы не пробовали делать именно так, но я думаю, что если мы просто увеличим разброс случайных вариаций размера кубика в симуляции, то рука сможет манипулировать кубиками различного размера.
Что касается камер, то зрительная модель тренировалась отдельно, и пока мы вносим лишь небольшие случайные вариации в положение камер, поэтому при каждом изменении положения камеры мы запускаем тренировку заново. Один из наших интернов, Сяо-Ю Фиш Тан как раз работает над тем, чтобы сделать зрительную модель совершенно независимой от точки расположения камер, используя ту же базовую технику случайной вариации положения и ориентации камеры в крупных пределах.
Чем тренировка в симуляции отличается от подхода "грубой силы", где используется куча реальных роботов?
Интересно, что наш проект начался с того, что мы подвергли сомнению идею использования симуляций для продвижения робототехники. Мы уже много лет наблюдаем за тем, как в симуляциях робототехника достигает впечатляющих результатов, используя обучение с подкреплением. Однако при разговорах с исследователями, занимающимися классической робототехникой, мы постоянно сталкиваемся с недоверием к тому, что подобные методы смогут работать в реальном мире. Главная проблема состоит в том, что симуляторы не совсем точны с физической точки зрения (пусть для человеческого глаза они и выглядят неплохо). Добавляет проблем и то, что более точные симуляции требуют больших вычислительных мощностей. Поэтому мы решили установить новый стандарт, требующий работы с очень сложной с точки зрения оборудования платформой, на которой приходится сталкиваться со всеми ограничениями симуляций.
Что касается подхода «кистевой фермы» – главное ограничение в обучении физических роботов состоит в малой масштабируемости полученных навыков до более сложных задач. Это можно провернуть, устроив всё так, чтобы у вас было множество объектов в самостоятельно стабилизирующемся окружении, не имеющем разных состояний (к примеру, корзина мячей). Но это будет очень трудно сделать тем же способом для задачи сборки чего-либо, когда после каждого прогона ваша система оказывается в новом состоянии. Опять же, вместо того, чтобы настроить всю систему один раз, вам придётся настраивать её N раз, и поддерживать её в работоспособном состоянии после того, допустим, как робот заметался и что-то поломал. Всё это гораздо проще и легче делать в симуляциях с эластичной вычислительной мощностью.
В итоге наша работа поддерживает идею обучения в симуляциях, поскольку мы показали, как можно решить задачу переноса даже в случае очень сложных роботов. Однако это не отменяет идею обучения реального робота; было бы очень сложно обойти ограничения симуляций при работе с деформируемыми объектами и жидкостями.
Где у вашей системы самое тонкое место?
На текущий момент – это случайные вариации, разработанные вручную и заточенные под определённую задачу. В будущем, возможно, можно будет попробовать обучиться этим вариациям, добавив ещё один слой оптимизации, представляющий собой тот процесс, который сегодня мы осуществляем вручную («попробуй несколько рандомизаций и посмотри, помогают ли они»). Также можно пойти ещё дальше, и использовать игру между обучающимся агентом и его оппонентом, пытающимся помешать (но не сильно) его прогрессу. Эта динамика может привести к появлению весьма надёжных наборов правил для работы роботов, поскольку, чем лучше получается у агента, тем хитроумнее приходится быть оппоненту, чтобы мешать ему, что ещё сильнее улучшает работу агента, и так далее. Эту идею уже изучали другие исследователи.
Вы говорите, что вашей главной целью служит создание роботов для реального мира. Что ещё нужно сделать перед тем, как это станет возможным?
Мы пытаемся расширить возможности роботов для работы в окружении без жёстких ограничений. В таких окружениях невозможно предусмотреть всё заранее и для каждого объекта заготовить свою модель. Также бывает неудобно ставить какие-то метки на объектах вне лаборатории. Получается, что нашим роботам придётся научиться, как поступать во множестве ситуаций, как делать разумный выбор в ситуации, с которой они ранее не сталкивались.
Над чем будете работать дальше?
Мы будем и дальше создавать роботов со всё более усложнённым поведением. Пока рано говорить, каким именно. В долгосрочной перспективе мы надеемся наделить роботов общими способностями манипулирования с объектами, чтобы они могли учиться взаимодействовать с окружением так, как это делает младенец – играя с имеющимися поблизости объектами, не обязательно под присмотром взрослых. Мы думаем, что интеллект завязан на взаимодействие с реальным миром, и чтобы выполнить нашу задачу по созданию безопасного искусственного интеллекта общего назначения, нам необходимо уметь учиться как на основе сенсорных данных из реального мира, так и на основе симуляций.
Автор: Вячеслав Голованов