Дополнительные материалы можно найти здесь https://github.com/sacktock/AMBS/blob/main/supplementary-material.pdf. Также не стесняйтесь посетить наши статьи здесь:
AMBS теперь совместим с Safety Gym.
Репозиторий GitHub для «Приблизительного экранирования на основе моделей для безопасного обучения с подкреплением» и «Использование приблизительного экранирования на основе моделей для вероятностных гарантий безопасности в непрерывных средах».
Используя мировые модели для защиты прогноза, мы создали алгоритм общего назначения для проверки безопасности изученных политик RL. В частности, мы используем DreamerV3 для моделирования возможных вариантов будущего (трасс) в скрытом пространстве модели изученной динамики, проверяем каждую из этих трасс и оцениваем вероятность совершения нарушения безопасности в ближайшем будущем. Если эта вероятность недостаточно мала, мы заменяем изученную политику безопасной политикой, обученной минимизировать нарушения ограничений.
В наших экспериментах, подробно описанных в разделе «Приблизительное экранирование на основе моделей для безопасного обучения с подкреплением», все агенты реализованы с помощью JAX, хотя зависимости в основном перекрываются, они могут немного отличаться в зависимости от того, используете ли вы агент на основе DreamerV3 или агент на основе дофамина.
Мы рекомендуем создать отдельные среды conda для агентов на основе DreamerV3 и агентов на основе дофамина.
conda create -n jax --clone base
conda create -n jax_dopamine --clone base
Мы обращаемся к репозиторию DreamerV3 для получения списка зависимостей, связанных с агентами на основе DreamerV3. И мы обращаемся к Google/dopamine за списком зависимостей, связанных с агентами на основе дофамина.
conda activate jax
pip install //DreamerV3 dependencies
conda activate jax_dopamine
pip install //dopamine dependencies
Альтернативно используйте наши файлы требований, хотя мы подчеркиваем, что конкретная требуемая установка JAX зависит от оборудования.
conda activate jax
pip install -r requirements_jax.txt
conda activate jax_dopamine
pip install -r requirements_jax_dopamine.txt
Для агентов на базе DreamerV3 перейдите в соответствующий подкаталог и запустите train.py
. Следующая команда запустит DreamerV3 с AMBS в Seaquest для 40M кадров. Флаг --env.atari.labels
используется для указания меток безопасности death
, early-surface
, out-of-oxygen
, а опция xlarge
определяет размер модели ( xlarge
— значение по умолчанию для игр Atari).
cd dreamerV3-shield
python train.py --logdir ./logdir/seaquest/shield --configs atari xlarge --task atari_seaquest --env.atari.labels death early-surface out-of-oxygen --run.steps 10000000
Случайное начальное число можно установить с помощью флага --seed
(по умолчанию 0).
Для агентов на основе дофамина перейдите в подкаталог дофамина и запустите нужный агент.
cd dopamine
python -um dopamine.discrete_domains.train --base_dir ./logdir/seaquest/rainbow --gin_files ./dopamine/jax/agents/full_rainbow/configs/full_rainbow_seaquest.gin
Случайное начальное число можно установить, изменив соответствующий файл .gin (например, JaxFullRainbowAgent.seed=0).
Для построения графиков мы используем тензорную доску. Перейдите в соответствующий подкаталог и запустите тензорную доску.
cd dreamerV3-shield
tensorboard --logdir ./logdir/seaquest
Safety Gym построен на MuJoCo. Подробности установки MuJoCo можно найти здесь. Дополнительные требования к тренажерному залу безопасности включают следующее:
gym>=0.15.3
joblib>=0.14.0
mujoco_py>=2.0.2.7
numpy>=1.17.4
xmltodict>=0.12.0
Если вы следовали предыдущим инструкциям по настройке и установке, возможно, эти зависимости уже удовлетворены.
Чтобы заставить AMBS работать над Safety Gym, нам нужно наказать политику (неэкранированных) задач. Мы предлагаем следующие три метода штрафов, которые помогают AMBS перейти к политике, которая максимизирует вознаграждение и удовлетворяет ограничениям безопасности в тренажерных залах безопасности:
python train.py ./logdir/safetygym/PointGoal1/shield_penl --configs safetygym_vision large --task safetygym_Safexp-PointGoal1-v0 --penalty_coeff 1.0 --normalise_ret False --penl_critic_type vfunction --run.steps 500000
python train.py --logdir ./logdir/safetygym/PointGoal1/shield_plpg --configs safetygym_vision large --task safetygym_Safexp-PointGoal1-v0 --penalty_coeff 0.8 --plpg True --normalise_ret False --penl_critic_type vfunction --run.steps 500000
python train.py --logdir ./logdir/safetygym/PointGoal1/shield_copt --configs safetygym_vision large --task safetygym_Safexp-PointGoal1-v0 --penalty_coeff 1.0 --copt True --normalise_ret False --penl_critic_type vfunction --run.steps 500000
Нашу исследовательскую работу, описывающую эти методы, можно найти здесь: http://arxiv.org/abs/2402.00816.
Мы ссылаемся на следующие репозитории, из которых разработан наш код: