Status: Stabile Version
Implementierung des DreamerV2-Agenten in TensorFlow 2. Trainingskurven für alle 55 Spiele sind enthalten.
Wenn Sie diesen Code nützlich finden, verweisen Sie bitte in Ihrer Arbeit auf Folgendes:
@article{hafner2020dreamerv2,
title={Mastering Atari with Discrete World Models},
author={Hafner, Danijar and Lillicrap, Timothy and Norouzi, Mohammad and Ba, Jimmy},
journal={arXiv preprint arXiv:2010.02193},
year={2020}
}
DreamerV2 ist der weltweit erste Modellagent, der auf dem Atari-Benchmark eine Leistung auf menschlichem Niveau erreicht. DreamerV2 übertrifft auch die Endleistung der Top-Modell-freien Agenten Rainbow und IQN bei gleichem Erfahrungs- und Rechenaufwand. Die Implementierung in diesem Repository wechselt zwischen dem Training des Weltmodells, dem Training der Richtlinie und dem Sammeln von Erfahrungen und läuft auf einer einzelnen GPU.
DreamerV2 lernt ein Modell der Umgebung direkt aus hochdimensionalen Eingabebildern. Zu diesem Zweck werden mithilfe kompakter gelernter Zustände Vorhersagen getroffen. Die Zustände bestehen aus einem deterministischen Teil und mehreren kategorialen Variablen, die abgetastet werden. Der Prior für diese Kategorialfunktionen wird durch einen KL-Verlust gelernt. Das Weltmodell wird durchgängig über Straight-Through-Gradienten erlernt, das heißt, der Gradient der Dichte wird auf den Gradienten der Probe eingestellt.
DreamerV2 lernt Akteurs- und Kritikernetzwerke aus imaginären Verläufen latenter Zustände. Die Trajektorien beginnen bei codierten Zuständen zuvor angetroffener Sequenzen. Das Weltmodell prognostiziert dann anhand der ausgewählten Aktionen und seines zuvor erlernten Zustands die Zukunft. Der Kritiker wird mithilfe des Lernens zeitlicher Differenzen trainiert, und der Akteur wird darauf trainiert, die Wertfunktion über Verstärkungs- und Straight-Through-Gradienten zu maximieren.
Weitere Informationen:
Der einfachste Weg, DreamerV2 in neuen Umgebungen auszuführen, besteht darin, das Paket über pip3 install dreamerv2
zu installieren. Der Code erkennt automatisch, ob die Umgebung diskrete oder kontinuierliche Aktionen verwendet. Hier ist ein Anwendungsbeispiel, das DreamerV2 in der MiniGrid-Umgebung trainiert:
import gym
import gym_minigrid
import dreamerv2 . api as dv2
config = dv2 . defaults . update ({
'logdir' : '~/logdir/minigrid' ,
'log_every' : 1e3 ,
'train_every' : 10 ,
'prefill' : 1e5 ,
'actor_ent' : 3e-3 ,
'loss_scales.kl' : 1.0 ,
'discount' : 0.99 ,
}). parse_flags ()
env = gym . make ( 'MiniGrid-DoorKey-6x6-v0' )
env = gym_minigrid . wrappers . RGBImgPartialObsWrapper ( env )
dv2 . train ( env , config )
Um den DreamerV2-Agenten zu ändern, klonen Sie das Repository und befolgen Sie die nachstehenden Anweisungen. Es steht auch eine Docker-Datei zur Verfügung, falls Sie die Abhängigkeiten nicht auf Ihrem System installieren möchten.
Abhängigkeiten abrufen:
pip3 install tensorflow==2.6.0 tensorflow_probability ruamel.yaml ' gym[atari] ' dm_control
Trainieren Sie auf Atari:
python3 dreamerv2/train.py --logdir ~ /logdir/atari_pong/dreamerv2/1
--configs atari --task atari_pong
Trainieren Sie die DM-Steuerung:
python3 dreamerv2/train.py --logdir ~ /logdir/dmc_walker_walk/dreamerv2/1
--configs dmc_vision --task dmc_walker_walk
Ergebnisse überwachen:
tensorboard --logdir ~ /logdir
Diagramme erstellen:
python3 common/plot.py --indir ~ /logdir --outdir ~ /plots
--xaxis step --yaxis eval_return --bins 1e6
Mit der Docker-Datei können Sie DreamerV2 ausführen, ohne seine Abhängigkeiten in Ihrem System zu installieren. Dazu muss Docker mit GPU-Zugriff eingerichtet sein.
Überprüfen Sie Ihr Setup:
docker run -it --rm --gpus all tensorflow/tensorflow:2.4.2-gpu nvidia-smi
Trainieren Sie auf Atari:
docker build -t dreamerv2 .
docker run -it --rm --gpus all -v ~ /logdir:/logdir dreamerv2
python3 dreamerv2/train.py --logdir /logdir/atari_pong/dreamerv2/1
--configs atari --task atari_pong
Trainieren Sie die DM-Steuerung:
docker build -t dreamerv2 . --build-arg MUJOCO_KEY= " $( cat ~ /.mujoco/mjkey.txt ) "
docker run -it --rm --gpus all -v ~ /logdir:/logdir dreamerv2
python3 dreamerv2/train.py --logdir /logdir/dmc_walker_walk/dreamerv2/1
--configs dmc_vision --task dmc_walker_walk
Effizientes Debuggen. Sie können die debug
Konfiguration wie in --configs atari debug
verwenden. Dies reduziert die Stapelgröße, erhöht die Auswertungshäufigkeit und deaktiviert tf.function
Graphkompilierung für ein einfaches zeilenweises Debuggen.
Unendliche Gradientennormen. Dies ist normal und wird im Leitfaden zur gemischten Präzision unter Verlustskalierung beschrieben. Sie können die gemischte Präzision deaktivieren, indem Sie --precision 32
an das Trainingsskript übergeben. Gemischte Präzision ist schneller, kann aber grundsätzlich zu numerischen Instabilitäten führen.
Zugriff auf protokollierte Metriken. Die Metriken werden sowohl im TensorBoard- als auch im JSON-Zeilenformat gespeichert. Sie können sie direkt mit pandas.read_json()
laden. Das Plotskript speichert außerdem die gruppierten und aggregierten Metriken mehrerer Läufe in einer einzigen JSON-Datei, um das manuelle Plotten zu erleichtern.