デュビデュバの技術ブログ

主に機械学習系の記事を書いていきます。コメント大歓迎です。よろしくお願いします。

Open AI Spinning Up で深層強化学習のお勉強 -Algorithms-

Algorithms

今回のページとソースコードです。ざっくりとまとめていきます。 spinningup.openai.com github.com

What's Included

以下のアルゴリズムのコードが含まれているようです。

  • Vanilla Policy Gradient (VPG)
  • Trust Region Policy Optimization (TRPO)
  • Proximal Policy Optimization (PPO)
  • Deep Deterministic Policy Gradient (DDPG)
  • Twin Delayed DDPG (TD3)
  • Soft Actor-Critic (SAC)

これらはすべて、非再帰MLP(Multilayer perceptron: 多層パーセプトロン)actor-criticsで構成されており、Gym Mujocoのような、完全知覚で、画像ベースではない環境に適しています。

Why These Algorithm?

これらは核となるdeep RLアルゴリズムです。特にPPOとSACは、最近のdeep RL分野の歴史からの有用な進歩を反映しています。これらは、方策学習アルゴリズム間の信頼性とサンプル効率に関するSOTA(state of the art: 最先端技術)です。また、deep RLでアルゴリズムを設計および使用する際に生じるトレードオフの一部についても学べます。

The On-Policy Algorithms

Vanilla Policy Gradientは、deep RLの出現よりも大きく先行しています。そのため、deep RL分野で最も基本的なアルゴリズムです。 VPGのコア要素は、80年代後半から90年代初頭にさかのぼります。そこから、最終的にTRPOやPPOなどの強力なアルゴリズムを導く研究となっていきます。

これらのアルゴリズムの重要な特徴は、すべてOn-Policy型ということです。つまり、古いデータを使用しないため、サンプルの効率が低下します。しかし、これには十分な理由があります。これらのアルゴリズムは、考慮している目的(方策の性能)を直接最適化し、更新を計算するために方策の上のデータが必要であることが数学的にわかります。したがって、このアルゴリズムファミリは、安定性を優先してサンプルの効率を犠牲にしますが、サンプルの効率の不足を補うために機能する技術(VPG→TRPO→PPO)の進歩を見ることができます。

The Off-Policy Algorithms

DDPGはVPGと同様に基盤となるアルゴリズムですが、DDPGにつながった決定的勾配降下の理論は2014年まで公開されていませんでした。DDPGはQ学習アルゴリズムと密接に関連しており、互いに改善しあうQ関数と方策を同時に学習します。

DDPGやQ学習のようなアルゴリズムは、Off-Policyなので、非常に効率よく古いデータを再利用することができます。これは、最適化用のベルマン方程式のおかげです。Q関数は、(環境内で高報酬のエリアでの十分な経験がある限り)どんな環境の相互作用データを使ってもベルマン方程式を満たす学習ができます。

しかし、ベルマン方程式を満たす学習をしても、優れた方策性能が得られるという保証はありません。経験的には、あるモデルが優れた性能を得ることができた場合、サンプル効率はとてもよいです。しかし、性能の保証はないため、このようなアルゴリズム潜在的に脆弱で不安定になります。TD3とSACはDDPGの子孫であり、これらの問題を軽減するためにさまざまな工夫をしています。

Code Format

Spinning Upの実装はすべて標準テンプレートに準拠しています。アルゴリズムのコアロジックを含むアルゴリズムファイルと、アルゴリズムの実行に必要なさまざまなユーティリティを含むコアファイルの2つのファイルに分割されています。

The Algorithm File

アルゴリズムファイルは常に、経験バッファオブジェクトのクラス定義で始まります。これは、エージェントと環境の相互作用からの情報を格納するために使用されます。

次に、アルゴリズムを実行し、次のタスクをこの順序で実行する1つの関数があります。

  1. ロガーのセットアップ
  2. ランダムシード設定
  3. 環境のインスタンス
  4. 計算グラフのプレースホルダーを作成する
  5. actor_critic関数を引数としてアルゴリズム関数に渡すことで、actor-criticの計算グラフを構築する
  6. 経験バッファのインスタンス
  7. アルゴリズムに固有の損失関数と診断の計算グラフを作成する
  8. レーニング運用の作成
  9. TFセッションの作成とパラメーターの初期化
  10. ロガーを介したモデル保存のセットアップ
  11. アルゴリズムのメインループの実行に必要な関数の定義(アルゴリズムに応じて、コア更新関数、アクション取得関数、テストエージェント関数など)
  12. アルゴリズムのメインループの実行:
    1. 環境でエージェントを実行する
    2. アルゴリズムの主要な式に従って、エージェントのパラメーターを定期的に更新します
    3. 主要なパフォーマンス指標を記録し、エージェントを保存する

また、コマンドラインからGym環境でアルゴリズムを直接実行するためのサポートがあります。

The Core File

コアファイルは、アルゴリズムファイルほどテンプレートに忠実ではありませんが、おおよその構造を持っています。

  1. プレースホルダーの作成と管理に関連する機能
  2. 特定のアルゴリズムactor_criticメソッドに関連する計算グラフの節を構築するための関数
  3. その他の便利な関数
  4. アルゴリズムと互換性のあるMLP actor-criticの実装。方策と価値関数の両方が単純なMLPで表されます。

まとめ

アルゴリズム全部coreファイルとalgorithmファイルに分かれていてみやすい。勉強が捗る。VPGめっちゃ古いですね。

OpenAI Spinning Upの記事一覧 coffee-g9.hatenablog.com