Skip to content

強化学習:ピクセルから『ポン』 をRubyで書いてみた – 1

強化学習について調べていたところ深層強化学習:ピクセルから『ポン』という面白い記事を見つけましたので、Rubyでやってみました。

4500回ぐらい学習させたところの動画。右側の緑が学習させたAI

まだまだ弱いです。。

Andrej karpathy さんの書いた元記事のPythonのコード (何と132行)を、Ruby/NArray にほぼ直訳しています。NArrayとはRubyでは最速の行列計算ライブラリです。
OpenAI Gym の Pong はPython製なので、Rubyとはパイプで通信することにしました。最初は自作の簡易ニューラルネットワークを流用しようと試みましたが、RMSProp や報酬の正規化などやらないと思うように学習してくれないことが判明したので、諦めて直訳しました。コード量はRubyの部分だけでも270行と膨大な量(100行以上のコードは膨大だという思想)になりましたが、理解のためにごちゃごちゃとコメントを入れたりPythonとの接続で増加した分がほとんどです。エンジニアじゃない人が適当に書いてるので間違ってる部分も多数残ってるかと思いますが、何となく学習できていそうなのでよしとします。

Python側のコードです。pong.py

次にRuby側のコードです。rl.rb

何時間も実行するとだんだんとメモリの使用量が増えていくので、どこかまずい部分があると思われます。

感想

・policy gradient は実装が簡単で素晴らしい。
・強化学習はディープラーニングを用いた分類器よりも奥が深い技術のような気がする。世間の人がいう「人工知能」はこっちに近い。
・強化学習はアルゴリズムが人間の哲学的な領域にまで踏み込んでくる怖さがどこかにある。
・人工知能じゃ実現できないなと思っていたようなことも案外実現できてしまいそうな気がする。
・ボールそのものよりも相手の動きをみてボールの位置を判定しているフシがあり、敵プレーヤーが代わっても実力を発揮できるか少し疑問。
・やはりRubyでも機械学習は可能なのだ。

Post a Comment

Your email is never published nor shared. Required fields are marked *
*
*