強化学習フレームワークまとめ
強化学習フレームワークは色々ある割に使っている人が少ないからか、ドキュメントが不足しがちです。
今回は各フレームワークの短所, 長所についてざっくりまとめてみました。
フレームワークを使うときの一助になれば幸いです。
そもそも強化学習フレームワークって何?
かっちりとした定義があるわけではありませんが、ここでは
- 強化学習のagentのアルゴリズム(例 TRPO, A3C, ...)がすぐ使える形で実装されている
- 強化学習を走らせたときに、学習の様子がお手軽に可視化できるようになっている(例 Tensorboard対応)
- 自分でカスタムの環境や、エージェントを追加して学習させることができる
- 学習のためのコードが抽象化された形で提供されており、学習を細かく実装しなくてもよい
のどれかを満たすものとします。
短くまとめると
モデルと学習の実装、学習、可視化のうちどれかを楽にしてくれるライブラリだと言えます。
使用上の注意点
便利な反面...
バグにハマると戻ってこれない
- 使用者が少ないので、ドキュメントは少なくなりがち
- フレームワーク自体の実装が複雑になりがち
という短所もあります。
例えばOpenAI Spinning Up Documentにも
RL libraries frequently make choices for abstraction that are good for code reuse between algorithms, but which are unnecessary if you’re only writing a single algorithm or supporting a single use case.
と記されています。
高機能、高抽象度になればなるほど、フレームワーク内部の実装は複雑になってゆくので
- そもそもフレームワークは必要なのか?
- どの程度までフレームワークにやってもらうのか?
ということを考慮してフレームワークを選ぶことをお勧めします。
使えそうなフレームワーク
RL Coach
TensorflowとMXnetをサポートするインテル謹製のフレームワーク。
長所
-
実装済みのアルゴリズムが非常に多い

-
open AI gym含む対応済みの学習環境が多い(https://github.com/NervanaSystems/coach#supported-environments)
-
presetという機能により、モデルに渡すハイパーパラメータのみを書いたファイルを作れる 複数のpresetを書いておけば、複数のハイパーパラメータをコードの修正をせずに試すことができる
-
学習中のエージェントの行動をリアルタイムで表示することができる(https://nervanasystems.github.io/coach/usage.html#rendering-the-environment)
-
dashboard機能によって詳細な学習結果の可視化ができる
- マルチエージェント学習のときは、全エージェントの学習結果を一つのグラフにまとめて表示できる
- 同じアルゴリズムで実験を複数行ったとき、それらの学習曲線の平均を取ったグラフを自動で表示できる -> これは学習が安定しにくいときに、モデルの性能を見るのに役立つ
短所
- 全体的に実装が複雑なので、自分で新たにエージェントを追加するのが難しい
- エージェントを分散させるのが後述のRLlibより難しく、さらにAWSのS3を使わなければならない
- 前述のdashboardが使いにくい
RLlib
全フレームワークをサポートしているエージェントの分散化に強いフレームワーク Tensorflow, Pytorchだと、エージェントの実装が少し楽になる。
長所
-
個々のワーカを実装するだけでマルチエージェ ント学習が組める
- マルチエージェント学習の「ワーカが学習 -> パラメータ更新」という処理をTrainerがやってくれる
- マルチエージェント未対応の深層学習フレームワークでもマルチエージェント学習が可能
-
分散化を用い、自動でハイパーパラメータのチューニングが可能(tuneライブラリ)
- Population Based Trainingなどのハイパーパラメータ調整のSOTAなアルゴリズムも使える
-
学習用の環境はopen AI gym形式で書けば追加できる
-
可視化はtensorboardを使える
短所
- 内部の実装が複雑で、自分で新たにエージェントを追加するのが難しい
- 使われているRayというライブラリ独特の分散処理表現を習得しなければならない
dopamine
Google発の強化学習フレームワーク(ただしgoogle公式のプロジェクトではない)