Puede encontrar material complementario aquí https://github.com/sacktock/AMBS/blob/main/supplementary-material.pdf. Además, no dude en visitar nuestros artículos aquí:
AMBS ahora es compatible con Safety Gym
Repositorio de GitHub para "Blindaje basado en modelos aproximados para un aprendizaje por refuerzo seguro" y "Aprovechamiento del blindaje basado en modelos aproximados para garantías de seguridad probabilísticas en entornos continuos".
Al aprovechar los modelos mundiales para el blindaje anticipado, obtenemos un algoritmo de propósito general para verificar la seguridad de las políticas de RL aprendidas. Específicamente, usamos DreamerV3 para simular posibles futuros (trazas) en el espacio latente de un modelo dinámico aprendido, verificamos cada una de estas trazas y estimamos la probabilidad de cometer una infracción de seguridad en un futuro cercano. Si esta probabilidad no es lo suficientemente baja, anulamos la política aprendida con una política segura entrenada para minimizar las violaciones de restricciones.
En nuestros experimentos detallados en "Blindaje aproximado basado en modelos para un aprendizaje por refuerzo seguro", todos los agentes se implementan con JAX, aunque las dependencias se superponen en su mayoría, pueden diferir ligeramente dependiendo de si está ejecutando un agente basado en DreamerV3 o un agente basado en dopamina.
Recomendamos crear entornos conda separados para los agentes basados en DreamerV3 y los agentes basados en dopamina.
conda create -n jax --clone base
conda create -n jax_dopamine --clone base
Nos referimos al repositorio de DreamerV3 para obtener la lista de dependencias asociadas con los agentes basados en DreamerV3. Y nos referimos a google/dopamine para obtener la lista de dependencias asociadas con los agentes basados en dopamina.
conda activate jax
pip install //DreamerV3 dependencies
conda activate jax_dopamine
pip install //dopamine dependencies
Alternativamente, utilice nuestros archivos de requisitos, aunque enfatizamos que la instalación específica de JAX requerida depende del hardware.
conda activate jax
pip install -r requirements_jax.txt
conda activate jax_dopamine
pip install -r requirements_jax_dopamine.txt
Para agentes basados en DreamerV3, navegue hasta el subdirectorio correspondiente y ejecute train.py
. El siguiente comando ejecutará DreamerV3 con AMBS en Seaquest durante 40 millones de fotogramas. El indicador --env.atari.labels
se utiliza para especificar las etiquetas de seguridad death
, early-surface
, out-of-oxygen
y la opción xlarge
determina el tamaño del modelo ( xlarge
es el valor predeterminado para los juegos de 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 semilla aleatoria se puede configurar con el indicador --seed
(predeterminado 0).
Para agentes basados en dopamina, navegue hasta el subdirectorio de dopamina y ejecute el agente deseado.
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 semilla aleatoria se puede configurar modificando el archivo .gin correspondiente (por ejemplo, JaxFullRainbowAgent.seed=0)
Para trazar ejecuciones utilizamos tensorboard. Navegue hasta el subdirectorio correspondiente e inicie tensorboard.
cd dreamerV3-shield
tensorboard --logdir ./logdir/seaquest
Safety Gym está construido sobre MuJoCo. Para obtener detalles sobre la instalación de MuJoCo, lo remitimos aquí. Los requisitos adicionales para Safety Gym incluyen los siguientes:
gym>=0.15.3
joblib>=0.14.0
mujoco_py>=2.0.2.7
numpy>=1.17.4
xmltodict>=0.12.0
Si ha seguido las instrucciones de configuración e instalación anteriores, es posible que estas dependencias ya estén satisfechas.
Para que AMBS trabaje en Safety Gym, debemos penalizar la política de tareas (sin blindaje). Proporcionamos las siguientes tres técnicas de penalización que ayudan a AMBS a converger hacia una política que maximiza la recompensa y satisface las limitaciones de seguridad de los entornos de 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
Nuestro artículo de investigación que describe estas técnicas se puede encontrar aquí: http://arxiv.org/abs/2402.00816
Nos referimos a los siguientes repositorios desde los que se desarrolla nuestro código: