Две недели назад, 13 ноября, наконец-то завершились одни из самых ярких соревнований в этом году. NIPS 2017: Учимся бегать было действительно интересно и сложно решить. Тем не менее, я и мой друг Михаил Павлов заняли 3-е место в финальном туре, и нас пригласили на конференцию NIPS. Более подробное описание вы можете прочитать в нашей статье или в исходном коде PyTorch / Theano.
Короче говоря, мы используем DDPG в качестве основного агента и максимально ускоряем среду. Наш последний агент был обучен на 36 ядрах около 5 дней. Мы также используем несколько улучшений наблюдения, чтобы исправить вводные данные агента.
О конкурсе
Конкурс был организован Стэнфордской лабораторией нейромышечной биомеханики. В качестве среды используется Симулятор OpenSim с открытым кодом. Основная цель этого соревнования заключалась в том, чтобы научить физиологически обоснованную модель человека как можно быстрее преодолевать сложную полосу препятствий. Это также было ограничение по времени в виде 1000 максимальных временных шагов при моделировании.
Моделирование
Окружающая среда представляла собой модель опорно-двигательного аппарата, включающую сегменты тела для каждой ноги, сегмент таза и один сегмент, представляющий верхнюю половину тела (туловище, голову, руки).
Состояние среды было представлено вектором R⁴¹ с координатами и скоростями различных частей тела и местоположениями препятствий.
В качестве действия агент должен выводить вектор R¹⁸ с активациями мышц, по 9 на каждую ногу, каждый в диапазоне [0, 1].
Функция вознаграждения была определена как изменение координаты x таза плюс небольшой штраф за использование связочного усилия.
Моделирование заканчивается, если агент падает (таз y
Наконец, моделирование имеет дополнительную стохастичность, такую как случайная сила поясничных мышц и случайное расположение и размер препятствий.
Методы: алгоритмы включения и выключения политики
В качестве основы в этом конкурсе мы используем самые современные методы градиента политики RL, такие как Оптимизация политики доверительного региона (TRPO) и Оптимизация проксимальной политики (PPO). К сожалению, эти алгоритмы являются алгоритмами оптимизации на основе политики, которые могут только обновлять поведение агента в соответствии с политикой текущего агента.
Чтобы быть более конкретным, в этом методе оптимизации:
- агент играет одну серию;
- обновил свою политику в соответствии с этим эпизодом;
- забудьте об этой серии;
- и играет следующий.
Этот тип алгоритмов оптимизации хорошо работает во многих средах и симуляторах, таких как Mojoco или Roboschool. Но когда дело доходит до OpenSim…
Это почему?
Основная причина - скорость, OpenSim ~ в 2000 раз медленнее, чем Roboschool. Например, симуляция первого раунда достигает ~ 5–15 тактовых шагов в секунду, а финальный раунд был еще хуже: ~ 0,05–5 тактовых шагов в секунду.
Все это приводит нас к тому, что нам нужно что-то более эффективное с точки зрения выборки, что-то с воспроизведением памяти и возможностью обучения на основе всех данных из произвольных политик. И это было…
Глубокий детерминированный градиент политики (DDPG)
Или, как вы можете сказать, вариант DQN для пространственных сред непрерывного действия. DDPG состоит из сетей актеров и критиков. Критик обучается с использованием уравнения Беллмана и внеполитических данных:
где π - политика актора. Актер обучается максимизировать оценочные Q-значения критика путем обратного распространения через сети критиков и действующих лиц.
Но что действительно важно - он использует буфер воспроизведения. Да, среда по-прежнему очень медленная, но теперь у нас есть история.
DDPG хаки
Мы использовали несколько стандартных техник обучения с подкреплением: повтор действия (мы повторяем каждое действие 5 раз) и масштабируемое вознаграждение (мы выбираем коэффициент масштабирования 10).
Для разведки мы использовали процесс Орнштейна-Уленбека (OU) (Uhlenbeck and Ornstein 1930) для создания коррелированного во времени шума для эффективного исследования в физических средах.
Наконец, мы также используем недавно предложенные улучшения, такие как параметр шума и норма слоя.
Учимся ускоряться
Хорошо, у нас есть рабочий агент. Но как мы можем это улучшить? Вы только посмотрите на окружающую среду!
Во-первых, мы обнаружили некоторую ошибку в состоянии среды. В состоянии агента все координаты (x, y) были абсолютными. Чтобы улучшить обобщение нашего агента и более эффективное использование данных, мы изменили исходную версию среды, сделав все координаты x относительно координаты x таза. Мы называем это преобразованием состояния.
После этого мы также находим симметрию отражения действий и состояний. Моделируемая модель имела двустороннюю симметрию тела. Таким образом, компоненты состояния и действия могут быть отражены для увеличения размера выборки в 2 раза. Эта функция получила название действие переворота состояния.
Уже на этом этапе у нас очень впечатляющие результаты, но мы хотим большего. Итак, мы подошли к последней хитрости - перекомпиляции симулятора. Мы взяли тот же симулятор, изменили точность расчетов и перекомпилировали.
Результаты были впечатляющими! В 2 раза ускоряйся! И как побочный эффект - гораздо более шумная обстановка. Вы можете подумать, что это плохо, но эти шумы только улучшают обобщение агентов и делают их более надежными.
Последний агент
Объединив все это вместе, мы подходим к финальному этапу обучения.
Наша реализация DDPG была распараллелена следующим образом: N процессов собрали образцы с фиксированными весами, все из которых были обработаны в процессе обучения в конце эпизода, который обновил их веса. Поскольку DDPG не соответствует политике, устаревшие веса выборок только улучшили производительность, предоставив каждому процессу выборки свои собственные веса и, таким образом, улучшив исследование.
3-е место решение
На этом наше соревнование подходит к концу. Наш лучший агент обучался на 36 ядрах около 5 дней. Он доходил до 45 метров, но, к сожалению, из-за стохастичности окружающей среды, это был только грейдер 38,42.
Тем не менее, по сравнению с политическими методами работает довольно хорошо.
Сравнение улучшений DDPG
После окончания соревнований мы также проверяли важность каждой модификации DDPG.
Как видите, наш последний метод очень хорошо справляется с этой средой.
Беги, скелет, беги!
Спасибо за чтение, время демонстраций!