TensorFlow : Dopamine 概要 (翻訳/解説)
翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 08/31/2018
* 本ページは、Dopamin レポジトリ の以下のページを翻訳した上で適宜、補足説明したものです:
* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。
Dopamine 概要
どのように (Dopamine で) 実験して Dopamine を拡張するかについてのサンプルと指針を与えます。
各モジュールに対するドキュメントを API ドキュメント のコードベースで見つけることができます。
ファイル構成
Dopamine は次のように構成されます :
- agents はエージェント実装を含みます。
- atari は、実験を実行するコードと前処理コードを含む、Atari 固有コードを含みます、
- common はロギングやチェックポインティングを含む、追加のヘルパー機能を含みます。
- replay_memory は Dopamine で使用されるリプレー・メモリ・スキームを含みます。
- colab はサンプル colab ノートブックに加えて、実験結果を調べるために使用されるコードを含みます。
- tests は総てのテストファイルを含みます。
エージェントを configure する
Dopamine の全体は gin configuration フレームワーク を使用して簡単に configure できます。
エージェントの各々に対して多くの configuration ファイルを提供します。
各エージェントに対する主要な configuration ファイルは同一条件での比較に対応し、そこではエージェント間で標準化されたパフォーマンス比較を与えるためにハイパーパラメータが選択されています。これらは :
- dopamine/agents/dqn/configs/dqn.gin
- dopamine/agents/rainbow/configs/c51.gin
- dopamine/agents/rainbow/configs/rainbow.gin
- dopamine/agents/implicit_quantile/configs/implicit_quantile.gin
これらのパラメータの裏の正確な選択についてのより詳細は baselines ページ で与えられます。
論文で以前に使用した設定に対応する configuration ファイルもまた提供します。これらは :
- dopamine/agents/dqn/configs/dqn_nature.gin (Mnih et al., 2015)
- dopamine/agents/dqn/configs/dqn_icml.gin (Bellemare et al., 2017)
- dopamine/agents/rainbow/configs/c51_icml.gin (Bellemare et al., 2017)
- dopamine/agents/implicit_quantile/configs/implicit_quantile_icml.gin (Dabney et al., 2018)
これらの総ては Arcade Learning Environment (ALE) の決定論的バージョン、そして僅かに異なるハイパーパラメータを使用しています。
チェックポインティングとロギング
Dopamine は実験を遂行するための基本的な機能を提供します。この機能は 2 つの主要なコンポーネントに分解されます : チェックポインティングとロギングです。両者のコンポーネントはコマンドライン・パラメータ base_dir に依拠します、これは実験データをどこにストアするべきかを Dopamine に知らせます。
チェックポインティング
デフォルトでは、Dopamine は総ての反復で実験チェックポイントをセーブします : 1 訓練と 1 評価フェイズで、Mnih et al による標準的なセットに従っています。チェックポイントは base_dir 下のチェック checkpoints サブディレクトリに保存されます。高位には、以下がチェックポイントされます :
- 実験スタッツ (遂行された反復数、学習カーブ, etc.)。これは dopamine/atari/run_experiment.py のメソッド run_experiment で発生します。
- tensorflow グラフを含む、エージェント変数。これは dopamine/agents/dqn/dqn_agent.py のメソッド bundle_and_checkpoint と unbundle で発生します。
- リプレー・バッファ・データ。Atari 2600 リプレー・バッファは巨大なメモリ使用量 (= footprint) を持ちます。結果的に、Dopamine はメモリ消費を低く保持するために追加のコードを使用します。関連メソッドは dopamine/agents/replay_memory/circular_replay_buffer.py で見つかります、そして save と load と呼称されます。
興味があれば、チェックポインティング・コード自身は dopamine/common/checkpointer.py にあります。
ロギング
各反復の最後に、訓練の間と (有効であれば) オプションの評価フェイズの間の両者で、Dopamine はまたエージェントのパフォーマンスを記録します。ログファイルは dopamine/atari/run_experiment.py で、より具体的には、dopamine/common/logger.py で生成され、そしてそれは iteration キー (e.g., “iteration_47”) をデータを含む辞書にマッピングする辞書を含む pickle ファイルです。
複数の実験からログデータを読む単純な方法は colab/utils.py の提供されている read_experiment メソッドを使用することです。
実験からどのようにスタッツをロードしてそれらを提供された baseline 実行に対してプロットできるかを示すために colab を提供します。
エージェントを修正して拡張する
Dopamine はアルゴリズム的な研究を単純にするように設計されています。この点を考慮して、抽象基底クラスなしに、比較的フラットなクラス階層を保持することを決めました ; 単純化と使いやすさの追加された利益を伴い、研究目的ではこれで十分であることを見出しました。最初に、貴方の研究目的に適合するようにエージェント・コードを直接的に変更することを勧めます。
DQN エージェントをどのように拡張できるか、スクラッチから新しいエージェントをどのように作成できるか、そして提供された baseline に対する実験結果をどのようにプロットするかを示すために colab を提供しています。
DQN
DQN エージェントは 2 つのファイルに含まれます :
The DQN agent is contained in two files:
- エージェントのクラスは、dopamine/agents/dqn/dqn_agent.py です。
- リプレー・バッファは、dopamine/replay_memory/circular_replay_buffer.py です。
エージェントのクラスは DQN ネットワーク、更新ルール、そしてまた RL エージェントの基本的な演算 (epsilon-greedy アクション選択、遷移のストア (= storing transitions)、エピソード記録 (= episode bookkeeping) , etc.) を定義します。例えば、DQN で使用される Q 学習更新ルールは 2 つのメソッド, _build_target_q_op と _build_train_op で定義されます。
Rainbow と C51
Rainbow エージェントは 2 つのファイルに含まれます :
- エージェント・クラスは dopamine/agents/rainbow/rainbow_agent.py にあり、DQN エージェントから継承しています。
- リプレー・バッファは dopamine/replay_memory/prioritized_replay_buffer.py にあり、DQN のりプレー・バッファから継承してます。
C51 エージェントは Rainbow エージェントの特定のパラメータ化で、そこでは update_horizon は 1 に設定されて uniform リプレー・スキームが使用されます。
Implicit quantile networks (IQN)
IQN エージェントは一つの追加ファイルで定義されます :
- dopamine/agents/implicit_quantile/implicit_quantile_agent.py、Rainbow エージェントから継承されます。
ダウンロード
全部で 60 ゲーム上の 4 つのエージェント総てのための一連のファイルを提供します。これらは総て *.tar.gz ファイルで解凍する必要があります :
- 生ログは ここ で利用可能です
- それらをどのようにロードして可視化するかの手順についてはこの colab を見ることができます。
- コンパイルされた pickle ファイルは ここ で利用可能です
- Tensorboard イベントファイルは ここ で利用可能です
- ngrok を使用した colab から直接 TensorBoard を開始できる colab を提供します。提供されたサンプルで TensorBoard はこのようなものに見えます :
◇ 貴方のマシン上でこれらを TensorBoard で見ることもできます。例えば、ファイルを解凍後に次を実行できます :tensorboard --logdir c51/Asterix/
Asterix 上で C51 のための訓練実行を表示するために :
- ngrok を使用した colab から直接 TensorBoard を開始できる colab を提供します。提供されたサンプルで TensorBoard はこのようなものに見えます :
- 全部で 60 ゲーム上の 4 エージェントの 5 つの独立した実行のための TensorFlow チェックポイント・ファイルは下で利用可能です。Note: これらのファイルは非常に巨大で、それぞれ 15 GB を超えます。
以上