Itsukaraの日記

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

【DRL,Montezuma】ALE環境でLaser Barrier通過!

あけましておめでとうございます。
相変わらず、Montezuma's Revengeの強化学習実験を行っています。

GCPから自宅PCへ

昨年は、GCP (Google Cloud Platform)の無料枠($300、3ヶ月以内)を使い、格安のPreemptible VMを活用し、一度に8個の学習を行っていたのですが、無料枠利用は基本的に1回であり、3回めの利用でGCPアカウントが削除されてしまいました

そこで、今年から、自宅PCで強化学習を継続することにしました。幸い、冬は冷房が不要なので、PCを数日間点けっぱなしにする強化学習には、非常に向いています。自宅学習結果はクラウド(AWS 1年無料枠)にアップし、スマホで確認できるようにしています。

OpenAI GymからALEへ

OpenAI Gymは、かなり多数の実験を実施済みであり(100回程度)、OpenAI社自体はGymからUniverse(昨年12/5発表)に移行しているので、当面はALE(Arcade Learning Environment)での実験に絞ることにしました。

直感と仮説に基づいた狭い探索

自宅PCは、GCPと較べてITリソースが少ないので、ハイパーパラメータ探索は、乱数を使った広域探索ではなく、直感と仮説に基づいた狭い探索とする必要があります。今回、直感と仮説に基づいたアプローチが成功したので、報告させて頂きます。

以前のALE実験結果

ALEでは、昨年10/7に、平均点が2000点近く出ましたが、その後、ALEでの実験は行っていませんでした。OpenAI Gymでは平均点が1500点止まりだったので、ALEの方が平均点が高いのですが、ROOM#0とROOM#7にあるLaser Barriersを通過できず、探索範囲が非常に限定されていました*1

ALEとOpenAI Gymの違い

ALEとOpenAI Gymの最大の違いは、frameスキップ数*2です。ALEでは、DeepMindのAtari2600でのframeスキップ数である4を使っていました。これに対して、OpenAI Gymでは、frameスキップ数が2〜4の一様乱数となります。当方の強化学習環境では、OpenAI Gymのframeスキップ処理を2回呼び出す度に学習するので、frameスキップ数は中心が6の正規分布(的な分布)になります

昨年は、frameスキップ数を6にして何回か実験を繰り返しましたが、Laser Barriersを通過でませんでした。また、タイミングを正確に測ってLaser Barriersを通過できるように、frameスキップ数を1や2にしたりもしましたが、この場合は学習が殆ど進まず、うまく行きませんでした。

仮説を立て実験の結果、Laser Barrier通過!

そこで、今回、次の仮説を立てました。

  • Laser Barrierを通過できないのは、Laser BarrierがON/OFFする周期(frame数)と、学習高速化のためにスキップするframe数が互いに素ではないため、色々なタイミングでの試行が難しいためではないか?

この仮説に基づき、frameスキップ数を7にしたところ、思惑通り、Laser Barriersを通過することが出来ました。学習曲線と、到達した部屋は、下記です。

f:id:Itsukara:20170108060610p:plain

OpenAI Gymでは、平均点が急に0になった後で回復しない現象が頻発したのですが、今回の実験では、平均数が度々0になるものの、ちゃんと回復し、1400点弱を維持しています。

ちなみに、frameスキップ数として3,4,5,6を選ばなかったのは、1秒のframe数が60だからです。つまり、3,4,5,6はframe数60の約数となり、各1秒毎に同じframeしか学習対象にならなず、Laser Barrierを通過できるframeが学習対象にならない可能性があると考えたためです。7の次は11や13が良さそうですが、まだ試していません。

今後は、frameスキップ数=7に、他のハイパーパラメーターを組み合わせて実験していこうと思います。また、frameスキップ数として11や13も試したいですが、なにぶんITリソースが余り無いので、週単位で、かなり先になりそうです。

ソースコード

ちなみに、ソースプログラムは下記にあります。興味のある方はトライください。
github.com

ALEなどの環境を構築後、下記コマンドで学習させてください。

> run-option montezuma-y-cnc-tes60-b020-ff-fs7

ちなみに、学習曲線や到達部屋を表示したい方は、次のようにしてください。

# 1つめの端末で実行
> script log.montezuma-y-cnc-tes60-b020-ff-fs7
> run-option montezuma-y-cnc-tes60-b020-ff-fs7


# 2つめの端末で実行
> python plot.py log.montezuma-y-cnc-tes60-b020-ff-fs7


# 3つめの端末で実行
> while true; do python rooms.py log.montezuma-y-cnc-tes60-b020-ff-fs7 ; sleep 30; done

*1:ALEでの(旧)探索範囲 f:id:Itsukara:20170108054228p:plain

*2:DeepMindのAtari2600強化学習では、学習高速化のために、Atrai2600が生成する毎秒60 frameの画像のうち、一部のみを使っています。具体的には、4 frame毎に学習を行い、間のframeはスキップしています。この場合、正確に言うとframeスキップ数は3ですが、当方は4のことをframeスキップ数と呼んでおります。ご承知おきください。

【DRL,Montezuma】GCPアカウントが停止し続行不能。残念!

DRL用にGoogle Cloud Platformの無料試用枠を使ってましたが、サンフランシスコに行っている間、何故か、学習が進まなくなり、帰国後に確認したところ、Googleから通告が来ていて、GCPアカウントが削除されていました。

やはり、無料試用枠の複数回利用は、検出・阻止されるようです。

これで、Montezuma's RevengeのGCPでの試行はできなくなってしまいました。残念です。

Googleからの通告(日本語、11日前)

Google からのお知らせ

このたび Google では、お客様の Google Cloud Platform と API の請求先アカウント HHHHHH-HHHHHH-HHHHHH を一時的に停止いたしました。お客様のアカウントで不審なアクティビティが検知されたためです。

この問題を解決するには、https://support.google.com/cloud/contact/verify でお客様のアカウント情報をご確認ください。

Googleからの通告(英語、11日前)

Dear Developer,

We have recently detected that your Google Cloud Project AAAAAAAA (id: AAAAAAAA-nnnnnn) has been having an issue with your billing account. We are unable to verify the billing information you provided. Your project AAAAAAAA (id: AAAAAAAA-nnnnnn) has been suspended and a notification has been sent to the Billing Account owner of this project. Please work with them in order to resolve the issue.

We will delete your project unless the billing owner corrects the violation by filling out the Account Verification Form within three business days. This form verifies your identity and ownership of the payment instrument. Failure to provide the requested documents may result in permanent account closure.

GCP API利用でのエラーメッセージ

ERROR: (gcloud.compute.instances.list) Some requests did not succeed:
 - Project blocked; abuse detected.
  • その2
-その1
ERROR: (gcloud.compute.copy-files) Could not fetch instance:
 - Project blocked; abuse detected.
  • その3
ERROR: (gcloud.compute.instances.start) Some requests did not succeed:
 - Project blocked; abuse detected.

ERROR: (gcloud.compute.instances.describe) Could not fetch resource:
 - Project blocked; abuse detected.

【DRL, Montezuma】スライド再更新+再々更新

Montezuma's Revengeのスライド更新時に、OpenAI Gymの方から結構詳しく聞かれた「pseudo-countの実装方法」を書き忘れたので、再更新しました。ソースを読めば分かると思っていましたが、それほどわかりやすいソースでもないので... (この後、誤りに気付き、さらに更新しました)

www.slideshare.net

OpenAIのInterviewでのフィードバック受けスライド更新

現在、サンフランシスコに来ており、昨日、Montezuma's Revengeの強化学習の件で、OpenAIのInterviewを受けました。いろいろと質問があり、そこで答えたことや、それ以外も含めてスライドの内容を追加・修正いたしました。ご興味のある方はご覧ください。ちなみに、今回の旅費・宿泊費は、ほぼOpenAI持ちです(1日分の宿泊費だけ自費)。

www.slideshare.net


なお、今回のInterviewで自己紹介に使ったスライドも、ついでにuploadしましたので、ご興味のある方はどうぞ。

www.slideshare.net


更に、今回のInterviewでは結局使いませんでしたが、これまでgithubに載せたプログラムのことなどをスライドに纏めました。ご参考まで。

www.slideshare.net

それにしても、ここ10年ぐらに、英語での会話はあまりしていなかったので、結構冷や汗ものでした。それでも、ある程度、自分のためになった気がします。

【DRL, Montezuma】thread毎多様性の効果確認!(12/7修正)

A3Cをベースにした環境で、Montezuma's RevengeのDeep Reinforcement Learningを行っていますが、thread毎に多様性を持たせた効果が示せました。(12/7訂正)

下記サイト掲載の学習状況をご覧ください。

上記サイトには8個のグラフが掲載され、最初の2つ(gcp10、gcp20)は、全てのthreadが同じパラメーターで学習しています。これらは、途中からSCOREが完全に0に落ち込み、回復していません。参考までに、下記にgcp10のグラフを載せます。

http://52.193.119.202/montezuma-x/log.gcp10.montezuma-x-yaml-pscm-ff-fs2.r.png

これに対し、gcp30〜gcp80は、thread毎に学習パラメータを変えてあります。下に行くほど、パラメーターの多様性が上ってます。gcp30〜gcp80は、一度0になっても、しぶとく回復しています(12/7訂正。本記事初版ではgcp60のSCOREが完全に0に落ち込んでいましたが、その後回復し、gcp30~gcp80の全てで効果が確認できました)。参考までに、下記にgcp60の例を載せます。

http://52.193.119.202/montezuma-x/log.gcp60.montezuma-x-yaml-pscm-ff-fs2.r.png

もう少し学習を続けてみるつもりですが、上記で、thread毎の学習パラメーターの多様性が、学習安定化に対して効果があることを十分に示せたと思います。

【DRL, Montezuma】これまでの最高得点3600点取得動画

Thread毎の環境の多様性を高めた実験で、これまでの最高得点である3600点を取得した動画が撮れました。結構良い動きをしているように見えます。ただ、ライフが減っても気にしない動きをしています。ライフが減るイベントをうまく回避できれば、もっと先まで行けるのですが...

youtu.be

【DRL, Montezuma】到達部屋追加でスライド更新(20161205)

懲りずに続けているMontezuma's Revengeの実験ですが、到達部屋が1つ増えましたので(下図最下段の右端)、スライドを更新しました。下記がこれまでの到達部屋です。

f:id:Itsukara:20161205234507p:plain

なお、Thread毎の環境の多様性を高めた実験の途中結果を下記に置きました。今のところ、SCOREが0点で貼り付く現象は置きておらず、そこそこ順調です。gcp70のグラフを見ると、SCOREが何回も0点になっていますが、しぶとく、400点に回復しています。ただ、残念ながら、点数はあまり上がっていません。

ちなみに、DeepMindの論文記載の到達部屋は下記であり、到達部屋に関してはDeepMindを超えています。
f:id:Itsukara:20161225040856p:plain