Estado: Mantenimiento (espere correcciones de errores y actualizaciones menores)
OpenAI Baselines es un conjunto de implementaciones de alta calidad de algoritmos de aprendizaje por refuerzo.
Estos algoritmos facilitarán que la comunidad de investigación replique, refine e identifique nuevas ideas, y creará buenas líneas de base sobre las que desarrollar la investigación. Nuestra implementación de DQN y sus variantes están aproximadamente a la par con las puntuaciones de los artículos publicados. Esperamos que se utilicen como base sobre la cual se pueden agregar nuevas ideas y como herramienta para comparar un nuevo enfoque con los existentes.
Las líneas de base requieren python3 (>=3.5) con los encabezados de desarrollo. También necesitarás los paquetes del sistema CMake, OpenMPI y zlib. Se pueden instalar de la siguiente manera
sudo apt-get update && sudo apt-get install cmake libopenmpi-dev python3-dev zlib1g-dev
La instalación de paquetes del sistema en Mac requiere Homebrew. Con Homebrew instalado, ejecute lo siguiente:
brew install cmake openmpi
Desde la perspectiva general de la cordura de los paquetes de Python, es una buena idea utilizar entornos virtuales (virtualenvs) para asegurarse de que los paquetes de diferentes proyectos no interfieran entre sí. Puede instalar virtualenv (que en sí mismo es un paquete pip) a través de
pip install virtualenv
Los virtualenvs son esencialmente carpetas que tienen copias del ejecutable de Python y todos los paquetes de Python. Para crear un virtualenv llamado venv con python3, se ejecuta
virtualenv /path/to/venv --python=python3
Para activar un entorno virtual:
. /path/to/venv/bin/activate
Puede encontrar un tutorial más completo sobre entornos virtuales y opciones aquí
La rama maestra admite Tensorflow desde la versión 1.4 a 1.14. Para compatibilidad con Tensorflow 2.0, utilice la rama tf2.
Clona el repositorio y cd en él:
git clone https://github.com/openai/baselines.git
cd baselines
Si aún no tiene TensorFlow instalado, instale su versión favorita de TensorFlow. En la mayoría de los casos, puede utilizar
pip install tensorflow-gpu==1.14 # if you have a CUDA-compatible gpu and proper drivers
o
pip install tensorflow==1.14
para instalar Tensorflow 1.14, que es la última versión de Tensorflow compatible con la rama maestra. Consulte la guía de instalación de TensorFlow para obtener más detalles.
Instalar el paquete de líneas base
pip install -e .
Algunos de los ejemplos de líneas de base utilizan el simulador de física MuJoCo (dinámica multiarticular en contacto), que es propietario y requiere binarios y una licencia (se puede obtener una licencia temporal de 30 días en www.mujoco.org). Las instrucciones sobre cómo configurar MuJoCo se pueden encontrar aquí
Todas las pruebas unitarias en líneas base se pueden ejecutar usando pytest runner:
pip install pytest
pytest
La mayoría de los algoritmos en el repositorio de líneas de base se utilizan de la siguiente manera:
python -m baselines.run --alg= < name of the algorithm > --env= < environment_id > [additional arguments]
Por ejemplo, para entrenar una red totalmente conectada que controle al humanoide MuJoCo usando PPO2 durante 20 millones de pasos de tiempo.
python -m baselines.run --alg=ppo2 --env=Humanoid-v2 --network=mlp --num_timesteps=2e7
Tenga en cuenta que para entornos mujoco la red completamente conectada es la predeterminada, por lo que podemos omitir --network=mlp
Los hiperparámetros tanto para la red como para el algoritmo de aprendizaje se pueden controlar a través de la línea de comando, por ejemplo:
python -m baselines.run --alg=ppo2 --env=Humanoid-v2 --network=mlp --num_timesteps=2e7 --ent_coef=0.1 --num_hidden=32 --num_layers=3 --value_network=copy
establecerá el coeficiente de entropía en 0,1 y construirá una red completamente conectada con 3 capas con 32 unidades ocultas en cada una, y creará una red separada para la estimación de la función de valor (de modo que sus parámetros no se compartan con la red de políticas, pero la estructura sea la misma )
Consulte las cadenas de documentos en common/models.py para obtener una descripción de los parámetros de red para cada tipo de modelo, y la cadena de documentos para baseslines/ppo2/ppo2.py/learn() para obtener una descripción de los hiperparámetros de ppo2.
DQN con Atari es a estas alturas un clásico de los benchmarks. Para ejecutar la implementación básica de DQN en Atari Pong:
python -m baselines.run --alg=deepq --env=PongNoFrameskip-v4 --num_timesteps=1e6
La API de serialización de algoritmos aún no está unificada adecuadamente; sin embargo, existe un método sencillo para guardar/restaurar modelos entrenados. Las opciones de línea de comandos --save_path
y --load_path
cargan el estado de tensorflow desde una ruta determinada antes del entrenamiento y lo guardan después del entrenamiento, respectivamente. Imaginemos que le gustaría entrenar ppo2 en Atari Pong, guardar el modelo y luego visualizar lo que ha aprendido.
python -m baselines.run --alg=ppo2 --env=PongNoFrameskip-v4 --num_timesteps=2e7 --save_path= ~ /models/pong_20M_ppo2
Esto debería llegar a la recompensa media por episodio de aproximadamente 20. Para cargar y visualizar el modelo, haremos lo siguiente: cargar el modelo, entrenarlo durante 0 pasos y luego visualizarlo:
python -m baselines.run --alg=ppo2 --env=PongNoFrameskip-v4 --num_timesteps=0 --load_path= ~ /models/pong_20M_ppo2 --play
NOTA: Los entornos de Mujoco requieren normalización para funcionar correctamente, por lo que los envolvemos con el contenedor VecNormalize. Actualmente, para garantizar que los modelos se guarden con normalización (para que los modelos entrenados puedan restaurarse y ejecutarse sin más entrenamiento), los coeficientes de normalización se guardan como variables de tensorflow. Esto puede disminuir un poco el rendimiento, por lo que si necesita pasos de alto rendimiento con Mujoco y no necesita guardar/restaurar los modelos, puede tener sentido utilizar la normalización numpy en su lugar. Para hacer eso, configure 'use_tf=False` en baselines/run.py.
De forma predeterminada, todos los datos resumidos, incluido el progreso y la salida estándar, se guardan en un directorio único en una carpeta temporal, especificada mediante una llamada a tempfile.gettempdir() de Python. El directorio se puede cambiar con la opción de línea de comando --log_path
.
python -m baselines.run --alg=ppo2 --env=PongNoFrameskip-v4 --num_timesteps=2e7 --save_path= ~ /models/pong_20M_ppo2 --log_path= ~ /logs/Pong/
NOTA: Tenga en cuenta que el registrador sobrescribirá los archivos con el mismo nombre en un directorio existente, por lo que se recomienda que los nombres de las carpetas reciban una marca de tiempo única para evitar que se sobrescriban los registros.
Otra forma de cambiar el directorio temporal es mediante el uso de la variable de entorno $OPENAI_LOGDIR
.
Para ver ejemplos sobre cómo cargar y mostrar los datos de entrenamiento, consulte aquí.
Los resultados de las pruebas comparativas de Mujoco (1 millón de pasos de tiempo) y Atari (10 millones de pasos de tiempo) están disponibles aquí para Mujoco y aquí para Atari respectivamente. Tenga en cuenta que es posible que estos resultados no estén en la última versión del código; el hash de confirmación particular con el que se obtuvieron los resultados se especifica en la página de pruebas comparativas.
Para citar este repositorio en publicaciones:
@misc{baselines,
author = {Dhariwal, Prafulla and Hesse, Christopher and Klimov, Oleg and Nichol, Alex and Plappert, Matthias and Radford, Alec and Schulman, John and Sidor, Szymon and Wu, Yuhuai and Zhokhov, Peter},
title = {OpenAI Baselines},
year = {2017},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {url{https://github.com/openai/baselines}},
}