読者です 読者をやめる 読者になる 読者になる

Itsukaraの日記

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

【DL、A3C+、OHL、Montezuma】評価状況

Montezuma's Revenge 機械学習 Python

相変わらずA3C+に独自機能(On-Highscore-Learning)を入れたソースで、色々と試しています。先ほど、HighscoreとなるEpisodeを自動的に選択する機能を入れたソースを下記Githubにpushしました。これから評価される方は、これをお使いください。
github.com

現在、ゲーム画像前処理を「平均化」のみで行ったものが、STEPS的に一番先に進んでおり、下記の学習曲線になっています。

f:id:Itsukara:20160906203134p:plain

3M STEPSまで「平均化」にし、それ以降は「最大化」にしたものの学習曲線は、現在下記です。平均点が400点を超えたあたりから停滞しています。

f:id:Itsukara:20160906210543p:plain


このまま続ければ、前者は平均点が1000を超えると思います。ただ、時間がかかりますね。本当は、もっと色々なパラメーターで試したいのですが... なお、後者は、Google Cloud Platform(GCP)を使って試しています。しかし、GCPでは8 CPUで実行性能が1.1M STEPS/hourしか出ないので、かなり遅いです。

前者の学習も、時々止めながら、色々な条件でプレイ動画を生成して比較しています。例えば、「平均化」で学習させたcheckpointsで、「最大化」でプレイ動画を生成してみるとか、「最大化」「平均化」のそれぞれでゲーム画像前処理のフレームスキップ数を1にしてみるとか、などを試しました。トレーニング時とプレイ動画でオプションが異なると、平均スコアがかなり大きく振れるのですが、20 EPISODE程度しか試していないので、はっきりした傾向は見えない状況です。

これ以外に、pseudo-count情報を削除して一から作り直した場合の効果も気になります。また、一番最初にPseudo-countが上手く行った時には、ライフが減った時の減点を1.0(実際は得点を-1.0にする:--lives-lost-reward=-1.0)、学習履歴長を150(--train-episode-steps=150)にしていたのですが、現在は-0.03と30にしています。これで、ライフが減ることを避ける傾向が弱くなったためか、スタート画面でモンスターを飛び越える動作は行わなくなっています。これらのパラメーターも、どれが最適化、試したいところです。

なお、プログラム自体が平均スコアを計算して出すようにしましたので、"grep Average ログ名"でログを検索すると、最新の平均スコアが分かります。何ゲーム分平均するかは調整可能です。

HighscoreとなるEpisodeを自動的に選択する機能では、当初、上記平均スコアを使っていたのですが、Montezuma's Revengeの得点はかなり不均一なため、何度か2500点をとってしまうと、平均得点が500点を超え、500点でのOn-Highscore-Learningが行われなくなってしまいました。そこで、現在は、過去N回(Nは平均を計算するEPISODE数)の最高得点を順番に並べて、トップX%(Xはオプションで調整可能。デフォルトは50%です:--score-highest-ratio=0.5)に入っている得点をHighscoresとみなすようにしてあります。

あとがき

それにしても、プレイ動画を見ると、かなり無駄な動きばっかりなので、同じ状態に到達する状態列が複数ある場合は、短いほうが選択されるように出来ると良いのですが...

ゲームのタイトル

ゲームのタイトルがMontezuma's Revengeになっているのでゲームキャラクターの名前がMontezumaと思いっていたのですが、下記に掲載されたマニュアルを見たら、キャラクターはPANAMA JOEと呼ぶのが正しいようです。
atariage.com

また、Montezuma Forestは地名のようですね。確かに、コロラド州にMontezumaという観光地がありました。
4travel.jp

ただPANAMA JOEという名前を考えると、南米のMontezumaかもしれませんね。

更に、RevengeやMontezuma Fortressという言葉をから考えると、アステカの第9代目君主の名前かも:
モクテスマ2世 - Wikipedia