ステータス:安定版リリース
TensorFlow 2 での DreamerV2 エージェントの実装。55 ゲームすべてのトレーニング カーブが含まれています。
このコードが役立つと思われる場合は、論文内で参照してください。
@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 は、Atari ベンチマークで人間レベルのパフォーマンスを達成する初の世界モデル エージェントです。また、DreamerV2 は、同じ量の経験と計算を使用した、トップのモデルフリー エージェントである Rainbow と IQN の最終パフォーマンスを上回ります。このリポジトリの実装は、ワールド モデルのトレーニング、ポリシーのトレーニング、エクスペリエンスの収集を交互に行い、単一の GPU で実行されます。
DreamerV2 は、高次元の入力画像から環境のモデルを直接学習します。このため、コンパクトな学習済み状態を使用して将来を予測します。状態は、決定論的な部分と、サンプリングされたいくつかのカテゴリ変数で構成されます。これらのカテゴリカルの事前確率は、KL 損失を通じて学習されます。ワールド モデルは、直線勾配を介してエンドツーエンドで学習されます。これは、密度の勾配がサンプルの勾配に設定されることを意味します。
DreamerV2 は、潜在状態の想像上の軌跡から俳優と批評家のネットワークを学習します。軌跡は、以前に遭遇したシーケンスのエンコードされた状態から始まります。次に、世界モデルは、選択されたアクションとその学習された以前の状態を使用して、将来を予測します。批評家は時間差分学習を使用してトレーニングされ、アクターは強化勾配と直線勾配によって価値関数を最大化するようにトレーニングされます。
詳細については:
新しい環境で DreamerV2 を実行する最も簡単な方法は、 pip3 install dreamerv2
経由でパッケージをインストールすることです。コードは、環境で個別のアクションが使用されているか、連続的なアクションが使用されているかを自動的に検出します。 MiniGrid 環境で DreamerV2 をトレーニングする使用例を次に示します。
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 )
DreamerV2 エージェントを変更するには、リポジトリのクローンを作成し、以下の手順に従います。システムに依存関係をインストールしたくない場合に備えて、Dockerfile も利用できます。
依存関係を取得します。
pip3 install tensorflow==2.6.0 tensorflow_probability ruamel.yaml ' gym[atari] ' dm_control
アタリでトレーニングする:
python3 dreamerv2/train.py --logdir ~ /logdir/atari_pong/dreamerv2/1
--configs atari --task atari_pong
DM コントロールでトレーニングする:
python3 dreamerv2/train.py --logdir ~ /logdir/dmc_walker_walk/dreamerv2/1
--configs dmc_vision --task dmc_walker_walk
監視結果:
tensorboard --logdir ~ /logdir
プロットを生成します。
python3 common/plot.py --indir ~ /logdir --outdir ~ /plots
--xaxis step --yaxis eval_return --bins 1e6
Dockerfile を使用すると、依存関係をシステムにインストールせずに DreamerV2 を実行できます。これには、GPU アクセスを設定した Docker が必要です。
設定を確認してください:
docker run -it --rm --gpus all tensorflow/tensorflow:2.4.2-gpu nvidia-smi
アタリでトレーニングする:
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
DM コントロールでトレーニングする:
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
効率的なデバッグ。 --configs atari debug
のようにdebug
構成を使用できます。これにより、バッチ サイズが削減され、評価頻度が増加し、行ごとのデバッグが容易になるようにtf.function
グラフのコンパイルが無効になります。
無限の勾配ノルム。これは正常であり、混合精度ガイドの損失スケーリングで説明されています。混合精度を無効にするには、トレーニング スクリプトに--precision 32
渡します。混合精度は高速ですが、原理的に数値が不安定になる可能性があります。
ログに記録されたメトリクスへのアクセス。メトリクスは、TensorBoard と JSON の両方の行形式で保存されます。 pandas.read_json()
を使用して直接ロードできます。また、プロット スクリプトは、簡単に手動でプロットできるように、複数の実行のビン化および集計されたメトリクスを 1 つの JSON ファイルに保存します。