补充材料可以在这里找到:https://github.com/sacktock/AMBS/blob/main/supplementary-material.pdf。另外,请随时访问我们的论文:
AMBS 现在与 Safety Gym 兼容
“用于安全强化学习的近似模型屏蔽”和“利用基于近似模型的屏蔽在连续环境中实现概率安全保证”的 GitHub 存储库。
通过利用世界模型进行前瞻屏蔽,我们获得了一种通用算法来验证学习的 RL 策略的安全性。具体来说,我们使用 DreamerV3 来模拟学习动态模型的潜在空间中可能的未来(痕迹),我们检查每条痕迹并估计在不久的将来发生安全违规的概率。如果这个概率不够低,那么我们会用经过训练的安全策略来覆盖学习的策略,以最大限度地减少约束违规。
在“用于安全强化学习的基于近似模型的屏蔽”中详细介绍的实验中,所有代理都是使用 JAX 实现的,尽管依赖关系大部分重叠,但根据您运行的是基于 DreamerV3 的代理还是基于多巴胺的代理,它们可能会略有不同。
我们建议为基于 DreamerV3 的代理和基于多巴胺的代理创建单独的 conda 环境。
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
。以下命令将在 Seaquest 上运行带有 AMBS 的 DreamerV3 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)
对于绘图运行,我们使用张量板。导航到相关子目录并启动tensorboard。
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
我们参考以下存储库来开发我们的代码: