Google Colaboratoryで始める強化学習入門

f:id:karaage:20201213213104p:plain:w640

 この記事は、TensorFlow Advent Calendar 2020の16日目の記事です。TensorFlow成分は少なめです。すみません。

強化学習が面白そう

 AIの機械学習と言われる分野の技術は、教科書などで大きく「教師あり学習」「教師なし学習」「強化学習」という3つに分けられることが多いです。一番有名なのは「教師あり学習」ですね。他は「こういうのあるけど、難しいからとりあえず一旦忘れて教師あり学習やっていきますねー」となることが多いです(個人の感想です)。

 そんななか、このところ強化学習が気になってきました。きっかけは、以下の本でした。

 Scratchで強化学習を学ぶというなかなか意欲的な本です。ただ、正直この本を読んだときは「ふーん、強化学習か。こういうのもあるんだ」というくらいだったのですが、最近読んだ「生成Deep Learning」という本で、更に強化学習が気になってしまいました。

 もともとGANとかの生成系のAI技術を知りたくて読んだのですが、読んでいると最後「World Models」という「生成系のAIが作り出した夢の中でAIが強化学習で賢くなる」という強化学習の技術が出てきて、そちらに引き込まれてしまいました。生成系のAI技術に加えて、学生時代に使った懐かしのGA(遺伝的アルゴリズム)が使われているのもポイントですね。

 強化学習の実用例というと、最も有名なのは囲碁をプレイする「AlphaGo」でしょう。世界チャンピオンを破ったことで有名です。ただ、それ以外はどうかというと、自分が知る限りゲームをプレイさせるくらいの例しかなく、理想的な仮想世界ではめっぽう強いけど、現実世界では全然使えない技術という印象でした(個人の感想です、2回目)。あと学習量もめっちゃ必要みたいですね。PFNさんのマインクラフトの例をみると、桁違いの試行回数、学習リソース、学習時間です。こりゃ現実世界では難しそう…。

 ただ、そんな中、AIで有名な松尾先生が「World Models(世界モデル)」に注目して、実世界への適用を目指しているとの記事!

 これはムーブメントに乗るしかない!と思い。強化学習にまずは入門してみることにしました。

強化学習の本を読んでみる

 というわけで、読んでみたのが以下の本です。実は積ん読してありました。

f:id:karaage:20201208012732j:plain:w640

 ただ、この本(というか強化学習の本全般)には、自分にとって問題がありました。強化学習、多くはOpenAI GymというAIの学習に特化したシミュレーション環境(多くはゲーム)を使うので、結果をみるのにGUI環境がないと辛いんですよね。手元のiMacで動かしてみたのですが、学習をしようとすると当然ながら辛いです。

 かといって、よく使うGoogle Colaboratory(Google Colab)とかGCPのクラウドだとGUI環境がないので、動かすのがまず大変ですし、結果の確認もクラウド上でできないので大変です。もちろんOpen AI Gym使わなくても良いのですが…やっぱり見た目が楽しそうだとテンション上がりそうじゃないですか。

 そんなこんなで「なんとかできないのかなー?」と思いつつ、すっかり忘れて放置してたのですが、Google Colab上でOpen AI Gymを動かす方法があることを知りました!

Google ColabでOpen AI Gymが動く!

 動かし方は、以下のGoogle Colab ノートブックを参照ください。

rl_openai_gym_on_colab.ipynb

 この記事では、コードの解説は省略します。そんなに難しいコードは出てこないです。詳しく知りたい方は、先ほど紹介した「OpenAI Gym / Baselines 深層学習・強化学習 人工知能プログラミング 実践入門」を読むと良いと思います。

 ノートブックでは、強化学習のHello Worldとも言われる(本当か?)CartPoleに取り組んでみます。CartPoleというのは、以下のような棒を、棒の下の台車を左右に動かしてバランスをとるというクソゲーです。

f:id:karaage:20201213213104p:plain:w640
 いったい何のためにこんなことを…

 もちろん、ランダムに動かすとすぐ倒れてしまいます。

 単純なケースなので、ルールベースでも、もちろん制御できるのですが、強化学習なので学習ベースで実現してみます。

 このとき使うのがStable Baselinesと呼ばれる強化学習のライブラリです。Stable BaselinesにはTensorFlowが使われています。ほら、ようやく出てきましたねTensorFlow。

 Stable Baselinesを使って学習すると、棒が倒れないように制御できます。

f:id:karaage:20201213212740g:plain:w640
 地味ですが、倒れないように動いてます

 CartPoleは、簡単な例ですが、もっと複雑なゲーム(ブロック崩しとかマリオとか)をすることもできます。PyBulletというライブラリだと、物理シミュレーションとかもできるようです。こちらもGoogle Colabで動かすことができました。ノートブックは以下となります。

rl_pybullet_on_colab.ipynb

 表示結果は以下のような形です。   f:id:karaage:20201213213022p:plain:w480

 シミュレーション上で、謎の生物やロボットの強化学習をしてみるのも面白そうですね。

まとめ

 Google Colabで強化学習に入門してみましたという記事でした。Google Colabで動かす方法、なかなかネットの情報だとそのまま動かず結構試行錯誤しました。なかなかバージョン依存が激しそうですね。

 本当はWorld Modelsのことを書くつもりだったのですが、自分にはかなり難易度高く、記事書くレベルまで到達できなかったため今回は見送りました。強化学習ですが、囲碁やビデオゲームというバーチャルな世界では高い性能を発揮している一方、尋常じゃない学習量が必要なのと、現実世界での適用が難しく、まだまだ実用にはギャップがある技術という印象をあらためて感じました。

 でも、だからこそ面白そうでワクワクしますね。これから強化学習使って現実世界で何か面白いことできたら楽しそうだなーとか色々夢想しています。最近実質無料のロボット買ったので、そいつに学習させてみたりしたいですね。GPU積んだLinuxマシンも欲しいな。World Models並みに夢は広がりそうです。

追記:本記事の発展編として、AIでマリオをプレイしてみました。もし興味あれば以下記事ごらんください。

書籍の宣伝

 AIの初心者向け本「からあげ先生のとにかく楽しいAI自作教室」を執筆しました。この記事のようにGoogle Colabを使って、実際に動かしながらAIを学ぶような本になっています。

 文系でAI素人の私の妻も、実践できて理解を深められるような、初学者向けの内容になっています。以下に紹介記事を書いていますので、興味ある方は是非ごらんください。

参考リンク

OpenAI Gymの様々な学習環境|npaka|note

関連記事

変更履歴

  • 2021/01/21 AIマリオへのリンク追記