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

Itsukaraの日記

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

【DL.A3C】Montezuma' RevengeでScore=100の動画

相変わらず、Deep LearningのA3C論文再現コードを改造して遊んでいます。

以前に書きましたように、Montezuma's Revengeでは、殆どのエピソード(1回のゲーム)で得点が0です。しかし、得点が得られた時にプレイ動画を見たいと思いました。そこで、プログラムを少し改造して、最高得点が得られる度に、プレイ画像(プレイ開始時からの全スクリーン)をファイルに出力する処理を追加しました。

下記が、この機能を使って撮った動画です(動画への変換は後から行いました)。なお、実際のプレイ画面ではなく、学習に用いた内部情報を出力したものなので画質がかなり悪い点は、ご容赦ください。

youtu.be

無駄な動きが余りにも多い事が良く分かります。やはり、Montezuma's Revengeでは、ランダムな動きだけで高得点を取れるように学習するのは難しい気がします。

A3C論文再現コードを書いたmiyosudaさんから、Montezuma' Revengeで高得点を取った論文を教えて頂いたので、現在読んでいるところですが、非常にわかりにくく、時間がかかっています。論文のポイントとしては、ゲーム内でこれまでに行ったことがない場所に行くと得点が得られるようにし、学習が進むようにしたようです。

これにより、冗長な動き(同じ所に何度も戻ったりする動き)が抑止されると共に、得点(Reward)が与えられることで学習が進むのだと思います。常に得点を与えるBASIC INCOMEと異なり、新たな場所に行かないと得点が得られないので、新しい場所を探索しようというモチベーションが高まるということと思います。人間の行動に例えると分かりやすい。

最高得点のプレイ画像出力用に改造したソースは、下記に置きましたので、興味のある方は、最新のものをクローンしてご利用ください。
github.com

使い方

下記コマンドで、最高得点のプレイ画像(プレイ開始時からの全スクリーン)が、new-recordというディレクトリの下に保管されます。具体的には、new-recordというディレクトリの下に、s000105358-th5-r100といった名称のディレクトリが作られ、そこにプレイ画像が保管されます。「s」の次の数字はSTEPSで、「th」の次の数字は得点を出したthread番号、「r」の次の数字は得点です。

run-option latest

また、次のコマンドで、new-record直下にある各ディレクトリに含まれる画像を動画に変換します(avconvをインストール済であることが前提です)。

run-avconv-new-record-all

補足

上記ソースコードには、最高得点が得られる度に、過去900ステップ分(ステップ数は可変)の履歴を使って学習を行う機能も入っており、現在、試しているところです。また、得点(reward)は、-1から1の間にクリッピングすることがデフォルトですが、クリッピング無しにする機能もあります。詳細は、option.pyをご覧ください。

得点が稀でデバッグが難しいので、上記ソースコードでは、一番最初に得点が0になったときも、プレイ画像を保管します。