Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Стабильная реализация PPO

В этом каталоге находится стабильная реализация алгоритма PPO, оптимизированная для сред ManiSkill. Она основана на исходной реализации PPO (из CleanRL и LeanRL), но с рядом улучшений числовой стабильности.

Ключевые особенности

По сравнению с исходной реализацией PPO стабильная версия обладает такими улучшениями:

  1. Повышенная числовая стабильность

    • Автоматическое обнаружение и обработка значений NaN во время обучения.
    • Контроль и ограничение нормы градиента.
    • Ограничение границ действий и функции ценности.
    • Меньшая скорость обучения и более консервативная инициализация сети.
    • Меньше эпох обновления (4 вместо 8), чтобы снизить переобучение.
  2. Автоматическое восстановление после ошибок

    • При обнаружении большого числа NaN сохраняется аварийная контрольная точка.
    • Обнаружение и обработка аномальных градиентов.
    • Автоматическая запись показателей стабильности в журнал.
  3. Удобство использования

    • Комментарии на китайском языке и более подробное описание параметров (в исходной версии кода).
    • Значения параметров по умолчанию оптимизированы для стабильности.
    • Более понятный вывод журнала.

Использование

Ниже приведены примеры для нескольких типичных задач.

Задача PushCube (самая простая)

python ppo_my.py --env_id="PushCube-v1" \
  --num_envs=1024 --update_epochs=4 --num_minibatches=32 \
  --total_timesteps=2_000_000 --learning_rate=1e-4 \
  --max_grad_norm=0.25 --eval_freq=10 --num-steps=20

Оценка обученной модели

python ppo_my.py --env_id="PushCube-v1" \
   --evaluate --checkpoint=path/to/model.pt \
   --num_eval_envs=1 --num-eval-steps=1000

Параметры для стабильности

Для лучшей стабильности рекомендуются такие параметры:

  • --learning_rate=1e-4: меньшая скорость обучения повышает стабильность.
  • --max_grad_norm=0.25: более строгий порог отсечения градиента.
  • --update_epochs=4: снижает переобучение.
  • --detect_anomaly=True: включает обнаружение аномалий градиента в PyTorch (немного снижает производительность).

Дополнительные примеры команд — в файле examples.sh.

Замечания

  • Из-за дополнительных проверок стабильности обучение может идти немного медленнее исходной реализации.
  • Для особенно сложных задач может потребоваться дополнительная настройка параметров.
  • Если проблема NaN сохраняется, попробуйте ещё сильнее уменьшить скорость обучения или уменьшить сеть.

Поддерживаемые среды

Стабильная версия PPO поддерживает все среды ManiSkill, в том числе:

  • Задачи с толканием и захватом кубиков: PushCube, PickCube, StackCube.
  • Задачи с манипулятором: PegInsertionSide.
  • Задачи с несколькими роботами: TwoRobotPickCube, TwoRobotStackCube.
  • Задачи управления движением: MS-AntWalk, MS-CartpoleBalance.
  • Другие среды ManiSkill.

Цитирование

Если вы используете эту стабильную реализацию PPO, сошлитесь на оригинальную статью о PPO:

@article{DBLP:journals/corr/SchulmanWDRK17,
  author       = {John Schulman and
                  Filip Wolski and
                  Prafulla Dhariwal and
                  Alec Radford and
                  Oleg Klimov},
  title        = {Proximal Policy Optimization Algorithms},
  journal      = {CoRR},
  volume       = {abs/1707.06347},
  year         = {2017},
  url          = {http://arxiv.org/abs/1707.06347},
  eprinttype    = {arXiv},
  eprint       = {1707.06347},
  timestamp    = {Mon, 13 Aug 2018 16:47:34 +0200},
  biburl       = {https://dblp.org/rec/journals/corr/SchulmanWDRK17.bib},
  bibsource    = {dblp computer science bibliography, https://dblp.org}
}