補充資料可以在這裡找到: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
我們參考以下儲存庫來開發我們的程式碼: