Стабильная реализация PPO
В этом каталоге находится стабильная реализация алгоритма PPO, оптимизированная для сред ManiSkill. Она основана на исходной реализации PPO (из CleanRL и LeanRL), но с рядом улучшений числовой стабильности.
Ключевые особенности
По сравнению с исходной реализацией PPO стабильная версия обладает такими улучшениями:
-
Повышенная числовая стабильность
- Автоматическое обнаружение и обработка значений NaN во время обучения.
- Контроль и ограничение нормы градиента.
- Ограничение границ действий и функции ценности.
- Меньшая скорость обучения и более консервативная инициализация сети.
- Меньше эпох обновления (4 вместо 8), чтобы снизить переобучение.
-
Автоматическое восстановление после ошибок
- При обнаружении большого числа NaN сохраняется аварийная контрольная точка.
- Обнаружение и обработка аномальных градиентов.
- Автоматическая запись показателей стабильности в журнал.
-
Удобство использования
- Комментарии на китайском языке и более подробное описание параметров (в исходной версии кода).
- Значения параметров по умолчанию оптимизированы для стабильности.
- Более понятный вывод журнала.
Использование
Ниже приведены примеры для нескольких типичных задач.
Задача 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}
}