Ergänzendes Material finden Sie hier https://github.com/sacktock/AMBS/blob/main/supplementary-material.pdf. Besuchen Sie auch unsere Vorträge hier:
AMBS ist jetzt mit Safety Gym kompatibel
GitHub-Repository für „Approximate Model-Based Shielding for Safe Reinforcement Learning“ und „Leveraging Approximate Model-based Shielding for Probabilistic Safety Guarantees in Continuous Environments“.
Durch die Nutzung von Weltmodellen für die vorausschauende Abschirmung erhalten wir einen Allzweckalgorithmus zur Überprüfung der Sicherheit erlernter RL-Richtlinien. Konkret verwenden wir DreamerV3, um mögliche Zukünfte (Spuren) im latenten Raum eines erlernten Dynamikmodells zu simulieren, wir überprüfen jede dieser Spuren und schätzen die Wahrscheinlichkeit ab, in naher Zukunft einen Sicherheitsverstoß zu begehen. Wenn diese Wahrscheinlichkeit nicht ausreichend niedrig ist, überschreiben wir die erlernte Richtlinie durch eine sichere Richtlinie, die darauf trainiert ist, Verstöße gegen Einschränkungen zu minimieren.
In unseren Experimenten, die in „Annähernde modellbasierte Abschirmung für sicheres Reinforcement-Lernen“ detailliert beschrieben werden, werden alle Agenten mit JAX implementiert. Obwohl sich die Abhängigkeiten größtenteils überschneiden, können sie sich geringfügig unterscheiden, je nachdem, ob Sie einen DreamerV3-basierten Agenten oder einen Dopamin-basierten Agenten ausführen.
Wir empfehlen, separate Conda-Umgebungen für die DreamerV3-basierten Agenten und die Dopamin-basierten Agenten zu erstellen.
conda create -n jax --clone base
conda create -n jax_dopamine --clone base
Die Liste der mit den DreamerV3-basierten Agenten verbundenen Abhängigkeiten finden Sie im DreamerV3-Repository. Und wir verweisen auf google/dopamine für die Liste der Abhängigkeiten, die mit den auf Dopamin basierenden Wirkstoffen verbunden sind.
conda activate jax
pip install //DreamerV3 dependencies
conda activate jax_dopamine
pip install //dopamine dependencies
Alternativ können Sie unsere Anforderungsdateien verwenden. Wir betonen jedoch, dass die spezifische erforderliche JAX-Installation von der Hardware abhängt.
conda activate jax
pip install -r requirements_jax.txt
conda activate jax_dopamine
pip install -r requirements_jax_dopamine.txt
Navigieren Sie für DreamerV3-basierte Agenten zum entsprechenden Unterverzeichnis und führen Sie train.py
aus. Der folgende Befehl führt DreamerV3 mit AMBS auf Seaquest für 40 Millionen Frames aus. Das Flag --env.atari.labels
wird verwendet, um die Sicherheitsetiketten death
, early-surface
und out-of-oxygen
anzugeben, und die Option xlarge
bestimmt die Modellgröße ( xlarge
ist die Standardeinstellung für Atari-Spiele).
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
Zufälliger Seed kann mit dem Flag --seed
festgelegt werden (Standard 0).
Navigieren Sie bei Wirkstoffen auf Dopaminbasis zum Dopamin-Unterverzeichnis und führen Sie den gewünschten Wirkstoff aus.
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
Ein zufälliger Startwert kann durch Ändern der entsprechenden .gin-Datei festgelegt werden (z. B. JaxFullRainbowAgent.seed=0).
Zum Zeichnen von Läufen verwenden wir Tensorboard. Navigieren Sie in das entsprechende Unterverzeichnis und starten Sie Tensorboard.
cd dreamerV3-shield
tensorboard --logdir ./logdir/seaquest
Safety Gym basiert auf MuJoCo. Für Installationsdetails von MuJoCo verweisen wir Sie hier. Zu den zusätzlichen Anforderungen für Safety Gym gehören:
gym>=0.15.3
joblib>=0.14.0
mujoco_py>=2.0.2.7
numpy>=1.17.4
xmltodict>=0.12.0
Wenn Sie die vorherigen Einrichtungs- und Installationsanweisungen befolgt haben, sind diese Abhängigkeiten möglicherweise bereits erfüllt.
Um AMBS dazu zu bringen, an Safety Gym zu arbeiten, müssen wir die (ungeschützte) Aufgabenrichtlinie bestrafen. Wir bieten die folgenden drei Straftechniken an, die AMBS dabei helfen, eine Richtlinie zu finden, die die Belohnung maximiert und die Sicherheitsbeschränkungen der Safety Gym-Umgebungen erfüllt:
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
Unser Forschungspapier, in dem diese Techniken beschrieben werden, finden Sie hier: http://arxiv.org/abs/2402.00816
Wir beziehen uns auf die folgenden Repositories, aus denen unser Code entwickelt wird: