Du matériel supplémentaire peut être trouvé ici https://github.com/sacktock/AMBS/blob/main/supplementary-material.pdf. N'hésitez pas également à consulter nos articles ici :
AMBS est désormais compatible avec Safety Gym
Dépôt GitHub pour « Blindage approximatif basé sur un modèle pour un apprentissage par renforcement sécurisé » et « Tirer parti du blindage approximatif basé sur un modèle pour des garanties de sécurité probabilistes dans des environnements continus ».
En tirant parti des modèles mondiaux de protection anticipative, nous obtenons un algorithme à usage général pour vérifier la sécurité des politiques RL apprises. Plus précisément, nous utilisons DreamerV3 pour simuler des futurs possibles (traces) dans l'espace latent d'un modèle dynamique appris, nous vérifions chacune de ces traces et estimons la probabilité de commettre une violation de sécurité dans un avenir proche. Si cette probabilité n'est pas suffisamment faible, nous remplaçons la politique apprise par une politique sûre formée pour minimiser les violations de contraintes.
Dans nos expériences détaillées dans « Blindage approximatif basé sur un modèle pour un apprentissage par renforcement sécurisé », tous les agents sont implémentés avec JAX, bien que les dépendances se chevauchent pour la plupart, elles peuvent différer légèrement selon que vous exécutez un agent basé sur DreamerV3 ou un agent basé sur la dopamine.
Nous vous recommandons de créer des environnements conda distincts pour les agents basés sur DreamerV3 et les agents basés sur la dopamine.
conda create -n jax --clone base
conda create -n jax_dopamine --clone base
Nous nous référons au référentiel DreamerV3 pour la liste des dépendances associées aux agents basés sur DreamerV3. Et nous nous référons à google/dopamine pour la liste des dépendances associées aux agents basés sur la dopamine.
conda activate jax
pip install //DreamerV3 dependencies
conda activate jax_dopamine
pip install //dopamine dependencies
Vous pouvez également utiliser nos fichiers d'exigences, même si nous soulignons que l'installation JAX spécifique requise dépend du matériel.
conda activate jax
pip install -r requirements_jax.txt
conda activate jax_dopamine
pip install -r requirements_jax_dopamine.txt
Pour les agents basés sur DreamerV3, accédez au sous-répertoire approprié et exécutez train.py
. La commande suivante exécutera DreamerV3 avec AMBS sur Seaquest pour 40 M d'images. L'indicateur --env.atari.labels
est utilisé pour spécifier les étiquettes de sécurité death
, early-surface
, out-of-oxygen
, et l'option xlarge
détermine la taille du modèle ( xlarge
est la valeur par défaut pour les jeux 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
La graine aléatoire peut être définie avec l'indicateur --seed
(0 par défaut).
Pour les agents basés sur la dopamine, accédez au sous-répertoire dopamine et exécutez l’agent souhaité.
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
La graine aléatoire peut être définie en modifiant le fichier .gin correspondant (par exemple JaxFullRainbowAgent.seed=0)
Pour tracer les exécutions, nous utilisons un tensorboard. Accédez au sous-répertoire approprié et démarrez Tensorboard.
cd dreamerV3-shield
tensorboard --logdir ./logdir/seaquest
Safety Gym est construit sur MuJoCo. Pour les détails d’installation de MuJoCo, nous vous renvoyons ici. Les exigences supplémentaires pour le Safety Gym sont les suivantes :
gym>=0.15.3
joblib>=0.14.0
mujoco_py>=2.0.2.7
numpy>=1.17.4
xmltodict>=0.12.0
Si vous avez suivi les instructions de configuration et d'installation précédentes, ces dépendances peuvent déjà être satisfaites.
Pour amener AMBS à travailler sur Safety Gym, nous devons pénaliser la politique de tâches (non protégées). Nous proposons les trois techniques de pénalité suivantes qui aident l'AMBS à converger vers une politique qui maximise la récompense et satisfait aux contraintes de sécurité des environnements Safety Gym :
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
Notre document de recherche décrivant ces techniques peut être consulté ici : http://arxiv.org/abs/2402.00816
Nous faisons référence aux référentiels suivants à partir desquels notre code est développé :