Blog
MineRL Competition における PFRL を用いたベースライン実装について
Shinya Shiroshita
こんにちは。本記事では弊社で開発している強化学習ライブラリ PFRL の活用例として、2019 年・2020 年の NeurIPS コンペティション “The MineRL Competition for Sample-Efficient Reinforcement Learning” における取り組みを紹介します。
はじめに
本年度の紹介動画
MineRL は Minecraft という大人気のビデオゲームを強化学習向けに整備した環境です。このコンペティションは「サンプル効率の良い強化学習アルゴリズムの開発」を目的としており、環境との限られた回数のやり取りからどれだけ良いパフォーマンスを出せるかを競います。
本コンペティションは「ダイヤモンドの獲得」を目標とします。この課題には、以下のような難しさが含まれます。
- ダイヤモンドを獲得するためには、いくつかの中継ゴール(原木を獲得する、鉄ピッケルを作成するなど)を達成する必要があります。階層的なプランニングが求められるかもしれません。
- 報酬は特定のアイテムの獲得時に与えられます。しかし、単にランダムに動くだけではほとんど報酬を獲得できず、学習方法やデータの活用に工夫が求められます。
- MineRL 環境はエピソードごとに異なるシードで生成され、周囲のオブジェクトが変化します。例えば、樹木が沢山ある森林バイオームや砂が大量に存在する砂漠バイオームなどが生成されます。エージェントは様々な状況に対応できる汎用的な行動を学習する必要があります。
さらに、この課題では「木を獲得するには、コマンド A, B, C を順に実行すれば良い」などの人間のドメイン知識に基づくプログラムは禁止されています。エージェントはゲームプレイ中に得られる報酬や人間のデモンストレーションのみから行動を学習しなければなりません。
このコンペティションの特徴としては、
- 学習中での環境とのやり取り回数が最大 8,000,000 回に制限されています。
- 6,000 万以上の state-action のペアからなる人間のデモンストレーションを活用することができます。
- 64 個の原木を獲得する Treechop や、指定された地点まで移動する Navigate といったサブタスクを用いて学習させることもできます。
2019 年のコンペティション概要とコンペティション後の解析は下記ページからアクセスできます。
2020 年コンペティションにおける難易度上昇
2020 年のコンペティションではカメラからの情報以外の入力(主に手持ちアイテム)と出力(アクション)を難読化しています。そのため、下記の情報を人間の知識に基づいて与えることができなくなりました:
- 手持ちアイテムと次に収集すべきアイテム
- 各アクションの意味
そのため、データあるいは環境とのインタラクションからそれらを学習する必要性があり、昨年より難しい課題となっています。
2020 年は以下のページでコンペティションが行われています。
PFN の取り組み
PFN はオーガナイザーの一員として、参加者が課題に取り組む際の手助けとなる、ベースラインアルゴリズムを実装しました。
今年は、PFN で開発を行っている PFRL という PyTorch 環境で動作する強化学習ライブラリを用いました。PFRL は ChainerRL を前身としており、様々な最先端のアルゴリズムとテクニックを論文内のハイパーパラメータに注視しながら再現実装しています。
PFRL の詳細については以下の記事で紹介しています:
また、2019 年には Deep Learning Lab で下記資料を基に講演も行いました。
今回のベースラインは以下の 4 種類から構成されます:
- Rainbow
- Soft Q Imitation Learning (SQIL)
- Deep Q-learning from Demonstrations (DQfD)
- Prioritized Double Dueling DQN (PDDDQN)
いずれの実装においても、アクションは K-Means 法によって離散化されています。この手法は、各データ点(アクション)を、類似度が高いものごとにまとめることで決められた数のクラスターを作り、それらの代表点を取りうるアクションの集合とします。
以下、各ベースライン実装の詳細について簡単に紹介します。
Rainbow
Rainbow は DQN ベースのアルゴリズムで、DQN の性能向上のために提案された下記手法を取り入れたアルゴリズムです:
- Double Q-learning: 2 つのネットワークを用いて価値推論時のバイアスを減らす
- Prioritized experience replay: TD error の大きいサンプルを優先して学習に用いる
- Dueling networks: Q 値を状態価値と行動のアドバンテージに分割する
- Multi-step loss function: Q 関数更新時に n ステップ分先を考慮する
- Distributional RL: Q 値の期待値ではなく分布を学習する
- Noisy Nets: 探索のために現在の観測に基づいたノイズを適用する
本実装では、アルゴリズムそのものには大きな手を加えず、状態行動空間の整形 (コンペティションのルールに違反しない範囲で) をしています:
- 状態空間を pov、つまりゲーム画面の一人称カメラデータのみに絞っています。inventory の状態 (がエンコードされたもの) を参照しないことになるため、エージェントは次に何をするべきかのヒントを得ることができません。一方で、この厳しい条件は、原木を手に入れるたびに報酬が得られる MineRLObtainDiamondDenseVectorObf-v0 の環境においては「木を攻撃する」という基本的なタスクを集中して解かせることに繋がります。今回のコンペはタスク自体の難しさに加えて、ルールベースによるエージェントが明確に禁止されているため難易度が高いです。まず最初の基礎行動を学習させるベースラインによって、比較対象 (もしくは改善対象) としてのとっかかりの役割を参加者に提供できればと思っています。
- 前述の通り、行動空間をデモンストレーションデータを用いて事前に K-means によってクラスタリングし、その空間上で学習を行います。Rainbow 含め強化学習の基本的な探索手法は「ランダムに行動を選択する」ことですが、今回のように未知のエンコーダによってエンコードされている行動空間上では、ランダムに選択した行動が意味を持たないことが多いため、うまく探索ができません。
Baseline URL: https://github.com/keisuke-nakata/minerl2020_submission
SQIL
Soft Q Imitation Learning (SQIL) は Soft Q 学習ベースの模倣学習のアルゴリズムです。デモンストレーションと学習中の経験を 50% ずつの割合で replay_buffer に保持して学習します。デモンストレーションには 1 の、学習中の経験には 0 の報酬を紐付けます。
本実装では、通常の SQIL に加えて以下の工夫を取り入れています:
- 一様なサンプリングだと初期の学習に必要なフレームを所得しづらいため、現在の方策に基づく累積報酬の分布とデモンストレーションから得られるフレームの累積報酬の分布が近くなるようにサンプリング割合を調整しました。今回、タスク全体を累積報酬に基づいて 10 個のサブタスクに分割しました。各サブタスクの累積報酬の境界は、各タスクが持つフレーム数が近くなるように計算されます。
- K-Means でアクションを取り出す際、observation$vector の値を変更するものとそうでないものに分類し、独立に K-Means でアクションリストを作成しました。この変換により、”craft” や “smelt” など、エピソード内に数回しか現れず全体の uniform sampling では手動の重み操作なしでは効率的に収集しづらいアクションに対処します。
- 探索行動を取る確率を調整するためにデモンストレーションの報酬を 10 に設定して更新しました。
Baseline URL: https://github.com/s-shiroshita/minerl2020_sqil_submission
DQfD
Deep Q-learning from Demonstrations (DQfD) は通常の DQN に加えて、デモンストレーションのリプレイも同様に経験したエピソードとみなして学習します。
最初のステップとして、我々は Atari ベンチマーク結果の再現に注力しました。元論文のデモンストレーションを使用できないので完全には再現できませんが、Atari-HEAD など他のデータセットを用いることである程度再現することが可能です。さらに我々は、replay buffer 上での 1-step transition と n-step transition の混ぜ方などの実装の詳細や、最適化時のハイパーパラメータについて著者に確認を取りました。
ベースライン実装に NoisyNet を追加することで、Treechop 環境での探索性能を向上し、ObtainDiamond 環境での結果も改善しました。
このベースラインを改良する場合、エージェントごとの最大デモンストレーション数(現在は 64 個)を増やすことが考えられます。その際、pre-training のステップ数を増やすか、環境とのインタラクションを開始してからのデモンストレーションの priority を下げる必要性があるかもしれません。
Baseline URL: https://github.com/marioyc/minerl2020_dqfd_submission
PDDDQN
Prioritized Double Dueling DQN (PDDDQN) は、学習中の各経験に優先度を付け、Q 関数を状態価値関数と行動のアドバンテージに分割し、double-DQN 式の更新を適用した DQN の派生アルゴリズムです。
このベースラインでは Rainbow の実装で使用されたものと同じ state, action 空間の整形を採用しています。ベースライン実装としては PDDDQN のデフォルトパラメータを使用することで十分な一方で、10 ステップ先のリターンを考慮することで大幅な改善が得られることを発見しました。これは、タスクが比較的長いことに起因すると考えられます。
Normalized Advantage Functions (NAF) を用いた連続な(クラスタリングを使用しない)action 空間上での学習も試みました。探索のためのヒューリスティックを追加したものの、より良い結果は得られませんでした。
Baseline URL: https://github.com/ummavi/minerl2020_submission
まとめ
今回、PFRL の活用例として、MineRL copetition での取り組みを紹介しました。PFRL は引き続き機能やアルゴリズムが拡充される予定です。
今後とも様々な強化学習の研究やコンペティションで PFRL のアルゴリズムを役立てていただけると幸いです。