Itsukaraの日記

最新IT技術を勉強・実践中。最近はDeep Learningに注力。

再:Deep Learningで特定ゲームのSOREが低い理由

一度誤った情報を書いてしまったので、削除の上、新たに書かせて頂きます。

経緯

相変わらずA3C再現コードを、Breakoutでの学習曲線の変化を確認していますが、私が参加している勉強会Do2dleでは、A3Cの論文でSOREが低いMontezuma's RevengeのSCOREを上げることに挑戦しようという話になってます。

Montezuma's Revenge

このゲームは、DeepMind社のDQN論文によると、人間(ゲーマー)がプレイした時の点数が平均4367点なのですが、DeepMind社のA3C論文によると、DQN、A3Cなど全てのDeep Learning手法で、平均40点〜84点しか取れていません。

ゲームプレイで分かったこと

まずは、どのようなゲームであるかプレイしてみたところ、少し操作を間違えると直ぐにキャラクターが死んでライフが減ります。最初の得点は第1ステージから脱出する鍵の入手で得られますが(50点)、ここに辿り着くためには、ライフが減るイベントを完全に回避する必要があり、ランダムに行動しているだけでは辿り着かないのが原因と思われます。

ライフが減るイベントの扱い

ライフが減るイベントを完全に回避するには、そのようなイベントを学習する必要がありますが、DQN、A3Cなど全てのDeep Learning手法では、ライフが減るイベントで学習しません。そのため、ライフが減るイベントを回避する学習が起きません*1。学習するのは得点が得られた場合のみです*2。ライフが減った場合は、そこで学習を打ち切り、ゲームを最初からやり直すようになっています。

学習できる確率

学習するためには、なんの戦略も無いランダムな動きの中で、ライフを全く減らすことなく、得点に辿り着く必要があります。Montezuma Revengeでは、1回のアクションで18通りの選択肢があり、ライフを失いそうな場所が4箇所合ったとすると、これら4箇所で正しい選択(1つと仮定)をする確率は0.000001程度と非常に小さくなります。

実際に、Montezumaで1M stepsほど学習させてみたところ、2328回のゲームプレイが発生し、点数が取れたのは僅か1回でした。これに対し、Breakoutでは、5440回のゲームプレイが発生し、点数が取れたのは4202回と77%以上になります。

学習促進の試行(失敗)

ライフを減らすイベントを回避するために、ライフを減らした時の得点として「-1」を設定してゲームを継続するようにしたり、何らかの学習が起きるように僅かの得点をBASIC INCOMEとして毎回与えるようにしたり、色々と試してみました。結論としは、失敗でした。

ライフを減らした時の得点として「-1」を設定すると、とにかく、ライフが減らないように安全サイドで行動するため、結局、何もせずに1箇所に留まり、得点に結びつきません。BASIC INCOMEを与えた場合も同様に、何もせずにゴロゴロしています。

それではと思い、得点が無い時間が長くなると、行動の選択肢に際してのランダム性が上がるようにしてみましたが、ランダムな行動の後で、結局安全な行動に終始してしまい、あまり変わりませんでした。

「ランダムな行動の中で、価値がある行動を何回も経験することによって学習する」という、現状の機械学習の手法を考えると、Montezuma's Revengeで得点を取るのは、かなり難しそうです。

試行結果の動画

参考までに、BASIC INCOMEなどを与えたことでゴロゴロしている場合と、それらがない場合のプレイ動画を参考までに載せます。ご参考まで。

ライフ減で失点、BASIC INCOMEなどでゴロゴロ

youtu.be

殆どランダムに行動

youtu.be

あとがき

Montezuma's Revengeの前に、Breakoutで色々と試していましたが、Breakoutでは、上記の学習促進手法が役立ち、学習が早くなりました。それ以外にも色々と試すための機能をA3C再現コードに入れ込みましたので、興味のある方は参照ください。
github.com

ライフ減で失点有の場合の学習曲線(Breakout)

f:id:Itsukara:20160824034536p:plain

ライフ減で失点無の場合の学習曲線(Breakout、再記)

f:id:Itsukara:20160802181608p:plain

感想

Montezuma's Revengeのキャラクターを上手く学習させるために、得点(サラリー)以外の指標(動機)も重要と思い、人間社会でを参考にして、BASIC INCOMEを付与したり、生命の危機を避けさせたり、ランダム性を徐々に高めて新しいことに挑戦させたりと、色々試しました。今回は上手く行きませんでしたが、大きな目標を達成するにはマイルストーン幾つか設定するなど、人間社会で成功している行動原理をうまく導入することも有用な気がします。もう少し考えてみたいと思います。

補足:試行環境

自宅PCでDeep Learningを試行していると、エアコンつけっぱなしで電気代が心配、Windowsで立ち上げる事ができず不便などの理由から、AWSのEC2やGoogle Cloud Platformも使っています。

AWS EC2は、そこそこの性能が出るインスタンスタイプ(c4.xlarge)では有料のため、以前にAWS Summitで貰った$25枠を活用しています。4CPUで1.32M STEPS/hour出ますが、自宅PCに比べると半分以下の性能です。お金を掛ければ、もっと速いインスタンスタイプやGPU付きのインスタンスタイプも使えますが、そこまで踏み込めていません。

Google Cloud Platformは、$300の範囲まで2ヶ月間使い放題で、AWSよりも活用できています。ただ、8vCPU割り当てても、1.76M STEPS/hour程度の性能しか出ないので、今ひとつです。なお、無料試行枠では、Google Cloud Platformは、1つのリージョン内では8CPUまでしか使えませんが、リージョンが異なれば、それぞれで3vCPU割り当てることができるので、3つのリージョンで8vCPUずつ割り当てて使っています。

AWSGoogle Cloud Platformも、性能は今ひとつですが、無料で色々試せるのは非常にありがたいです。Google Cloud Platformの無料試用枠が終わったら、次は、Microsoft AzureやIBM SoftLayerを考えています。

*1:ただし、回避した後のプレイで得点があれば、間接的に回避の学習が起きます

*2:得点は正でも負でも学習します