Status: Wartung (erwarten Sie Fehlerbehebungen und kleinere Updates)
OpenAI Baselines ist eine Reihe hochwertiger Implementierungen von Reinforcement-Learning-Algorithmen.
Diese Algorithmen werden es der Forschungsgemeinschaft erleichtern, neue Ideen zu reproduzieren, zu verfeinern und zu identifizieren, und werden gute Grundlagen schaffen, auf denen die Forschung aufbauen kann. Unsere DQN-Implementierung und ihre Varianten entsprechen in etwa den Ergebnissen in veröffentlichten Artikeln. Wir gehen davon aus, dass sie als Grundlage für die Hinzufügung neuer Ideen und als Instrument zum Vergleich eines neuen Ansatzes mit bestehenden verwendet werden.
Baselines erfordert Python3 (>=3.5) mit den Entwicklungsheadern. Sie benötigen außerdem die Systempakete CMake, OpenMPI und zlib. Diese können wie folgt installiert werden
sudo apt-get update && sudo apt-get install cmake libopenmpi-dev python3-dev zlib1g-dev
Für die Installation von Systempaketen auf dem Mac ist Homebrew erforderlich. Führen Sie bei installiertem Homebrew Folgendes aus:
brew install cmake openmpi
Aus Sicht der allgemeinen Integrität von Python-Paketen ist es eine gute Idee, virtuelle Umgebungen (virtualenvs) zu verwenden, um sicherzustellen, dass Pakete aus verschiedenen Projekten sich nicht gegenseitig stören. Sie können virtualenv (das selbst ein Pip-Paket ist) über installieren
pip install virtualenv
Virtualenvs sind im Wesentlichen Ordner, die Kopien der ausführbaren Python-Datei und aller Python-Pakete enthalten. Um eine virtuelle Umgebung namens venv mit Python3 zu erstellen, führt man Folgendes aus
virtualenv /path/to/venv --python=python3
So aktivieren Sie eine virtuelle Umgebung:
. /path/to/venv/bin/activate
Eine ausführlichere Anleitung zu virtuellen Umgebungen und Optionen finden Sie hier
Der Hauptzweig unterstützt Tensorflow von Version 1.4 bis 1.14. Für die Unterstützung von Tensorflow 2.0 verwenden Sie bitte den Zweig tf2.
Klonen Sie das Repo und cd hinein:
git clone https://github.com/openai/baselines.git
cd baselines
Wenn Sie TensorFlow noch nicht installiert haben, installieren Sie Ihre bevorzugte TensorFlow-Variante. In den meisten Fällen können Sie verwenden
pip install tensorflow-gpu==1.14 # if you have a CUDA-compatible gpu and proper drivers
oder
pip install tensorflow==1.14
um Tensorflow 1.14 zu installieren, die neueste Version von Tensorflow, die vom Master-Zweig unterstützt wird. Weitere Informationen finden Sie im TensorFlow-Installationshandbuch.
Installieren Sie das Baselines-Paket
pip install -e .
Einige der Basisbeispiele verwenden den Physiksimulator MuJoCo (Multi-Joint Dynamics in Contact), der proprietär ist und Binärdateien und eine Lizenz erfordert (eine vorläufige 30-Tage-Lizenz ist unter www.mujoco.org erhältlich). Eine Anleitung zur Einrichtung von MuJoCo finden Sie hier
Alle Unit-Tests in Baselines können mit Pytest Runner ausgeführt werden:
pip install pytest
pytest
Die meisten Algorithmen im Baselines-Repo werden wie folgt verwendet:
python -m baselines.run --alg= < name of the algorithm > --env= < environment_id > [additional arguments]
Zum Beispiel, um ein vollständig verbundenes Netzwerk zu trainieren, das den MuJoCo-Humanoiden mithilfe von PPO2 für 20 Millionen Zeitschritte steuert
python -m baselines.run --alg=ppo2 --env=Humanoid-v2 --network=mlp --num_timesteps=2e7
Beachten Sie, dass für Mujoco-Umgebungen ein vollständig verbundenes Netzwerk die Standardeinstellung ist, sodass wir --network=mlp
weglassen können. Die Hyperparameter sowohl für das Netzwerk als auch für den Lernalgorithmus können über die Befehlszeile gesteuert werden, zum Beispiel:
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
setzt den Entropiekoeffizienten auf 0,1 und baut ein vollständig verbundenes Netzwerk mit 3 Schichten mit jeweils 32 versteckten Einheiten auf und erstellt ein separates Netzwerk für die Wertfunktionsschätzung (sodass seine Parameter nicht mit dem Richtliniennetzwerk geteilt werden, die Struktur jedoch dieselbe ist). )
Siehe Docstrings in common/models.py für eine Beschreibung der Netzwerkparameter für jeden Modelltyp und Docstring für baselines/ppo2/ppo2.py/learn() für eine Beschreibung der ppo2-Hyperparameter.
DQN mit Atari ist derzeit ein Benchmark-Klassiker. So führen Sie die Basisimplementierung von DQN auf Atari Pong aus:
python -m baselines.run --alg=deepq --env=PongNoFrameskip-v4 --num_timesteps=1e6
Die Serialisierungs-API des Algorithmus ist noch nicht ordnungsgemäß vereinheitlicht. Es gibt jedoch eine einfache Methode zum Speichern/Wiederherstellen trainierter Modelle. Die Befehlszeilenoptionen --save_path
und --load_path
laden den Tensorflow-Status von einem bestimmten Pfad vor dem Training bzw. speichern ihn nach dem Training. Stellen wir uns vor, Sie möchten ppo2 auf Atari Pong trainieren, das Modell speichern und später visualisieren, was es gelernt hat.
python -m baselines.run --alg=ppo2 --env=PongNoFrameskip-v4 --num_timesteps=2e7 --save_path= ~ /models/pong_20M_ppo2
Damit sollte die durchschnittliche Belohnung pro Episode etwa 20 betragen. Um das Modell zu laden und zu visualisieren, gehen wir wie folgt vor: Laden Sie das Modell, trainieren Sie es für 0 Schritte und visualisieren Sie es dann:
python -m baselines.run --alg=ppo2 --env=PongNoFrameskip-v4 --num_timesteps=0 --load_path= ~ /models/pong_20M_ppo2 --play
HINWEIS: Mujoco-Umgebungen erfordern eine Normalisierung, um ordnungsgemäß zu funktionieren. Daher verpacken wir sie mit dem VecNormalize-Wrapper. Um sicherzustellen, dass die Modelle mit Normalisierung gespeichert werden (so dass trainierte Modelle ohne weiteres Training wiederhergestellt und ausgeführt werden können), werden die Normalisierungskoeffizienten derzeit als Tensorflow-Variablen gespeichert. Dies kann die Leistung etwas beeinträchtigen. Wenn Sie also mit Mujoco Schritte mit hohem Durchsatz benötigen und die Modelle nicht speichern/wiederherstellen müssen, kann es sinnvoll sein, stattdessen die Numpy-Normalisierung zu verwenden. Setzen Sie dazu „use_tf=False“ in baselines/run.py.
Standardmäßig werden alle Zusammenfassungsdaten, einschließlich Fortschritt und Standardausgabe, in einem eindeutigen Verzeichnis in einem temporären Ordner gespeichert, der durch einen Aufruf von tempfile.gettempdir() in Python angegeben wird. Das Verzeichnis kann mit der Befehlszeilenoption --log_path
geändert werden.
python -m baselines.run --alg=ppo2 --env=PongNoFrameskip-v4 --num_timesteps=2e7 --save_path= ~ /models/pong_20M_ppo2 --log_path= ~ /logs/Pong/
HINWEIS: Bitte beachten Sie, dass der Logger Dateien mit demselben Namen in einem vorhandenen Verzeichnis überschreibt. Daher wird empfohlen, Ordnernamen mit einem eindeutigen Zeitstempel zu versehen, um überschriebene Protokolle zu verhindern.
Eine andere Möglichkeit, das temporäre Verzeichnis zu ändern, ist die Verwendung der Umgebungsvariablen $OPENAI_LOGDIR
.
Beispiele zum Laden und Anzeigen der Trainingsdaten finden Sie hier.
Ergebnisse der Benchmarks für Mujoco (1 Mio. Zeitschritte) und Atari (10 Mio. Zeitschritte) sind hier für Mujoco bzw. hier für Atari verfügbar. Beachten Sie, dass sich diese Ergebnisse möglicherweise nicht auf der neuesten Version des Codes befinden. Der konkrete Commit-Hash, mit dem die Ergebnisse erzielt wurden, ist auf der Benchmark-Seite angegeben.
So zitieren Sie dieses Repository in Veröffentlichungen:
@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}},
}