本記事は PyTorch Advent Calendar 2020 12月5日寄稿 参加記事です。
Qiitaを含む日本語で書かれている強化学習を解説するコンテンツも、アルゴリズムの中身を解説するものが中心です。
とくに初期の日本語の強化学習をタイトルに持つ書籍でのサンプルコードは、CartPole(棒倒し)や多椀バンディット(スロットゲーム)、迷路などの環境を使ったものばかりで、すぐに流用できそうな機能を紹介するものがあまりありませんでした。
そこで、アルゴリズムや強化学習の仕組みなどの解説を最小限にして、カスタムSIへの適用を最優先にしたスライドを作ってみました。
以下、SlideShareに公開したスライドです。
ここで紹介している Stable Baselines は TensorFlow1.x 前提ですが、Stable Baselines3 は PyTorch (1.4+) でも動作します。
Stable Baselines では、PPOなどGPU版とCPU版で別れたエージェントモデルクラスを提供していることもありますが、Stable Baselines3 ではそのあたりを考慮しなくても動作するようになっていて便利です。
Stable Baselines/Stable Baselines3 ともにほぼ同じインターフェイスですので、TensorFlow に変えたい場合もコード修正が少なくなる利点もあります。
ただしStable BaselinesではLSTMを使った方策も用意されていますが、Stable Baselines3では MlpPolicy(多層パーセプトロン) か CnnPolicy(CNN) の2種類しかありません。
LSTMなどを使いたい場合は、独自の方策ネットワークを作ることになりますが、以下のリンクにある通り、独自のクラスを作ることも可能です。
強化学習のサンプルコードがゲーム画面やシミュレータ画面を扱ったものが多く、UnityやUnrealEngineで実装したシミュレータがいると誤解している人もいるかもしれませんが、そのような3D/2Dシミュレータがなくても実装することは可能です。
最初に紹介したSlideShare内で紹介していましたが、じゃんけんAIを強化学習で実装するサンプルコードを以下のGitHubに置きましたので、こちらのコードを参考にしてみてください。
p.s.
PyTorchっぽい記事でなくて、スミマセン..