Itsukaraの日記

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

最新機械学習論文再現コードの修正版をGithubに掲載

下記の記事で書いたA3C再現コードの修正版をGithubに載せました(pull request中)。
ご参考まで。
itsukara.hateblo.jp

掲載場所

「Branch」で「breakout」を選択してZIPファイルをダウンロードするか、下記コマンドでcloneしてください。

git clone -b breakout https://github.com/Itsukara/async_deep_reinforce.git

修正内容

  • Python3.5対応
    • Python2.7でも問題ないはずです
  • 不要コードのコメント化
    • a3c_display.pyやa3c_visualize.pyでの不要thread作成をコメント化
  • 対象ゲームをBreakoutに変更
    • constan.pyのACTION_SIZEも4に変更
  • a3c_display.pyでのプレイ画面出力機能追加と、動画作成スクリプト新規追加
  • ALEの初期設定追加、BreakoutのACTION表示(念の為)
    • ALEのドキュメントを見たところ、デフォルト値は好ましくないため変更
  • 各種情報表示機能を追加
    • ゲームの状態を各thread毎に縦の列で追えるように出力します
    • 性能(steps/sec.、steps/hour)を表示
  • a3c_visualize.pyのpython3.5対応+不要コードコメント化
  • pi=0.0になるケースへの対応
  • ログ情報からのデータ抽出、表示ツールを追加
    • ログ情報は画面に出力されます。teeコマンドで見ながら表示しても良いですが、バッファリングで出力が間欠的になるため、端末ソフトのスクロールバッファのサイズを大きくするか、無制限にして、画面に出力されたものをファイルにコピー/ペーストするのがお勧めです。
    • (8/2 22:35追記)上記よりも"script"コマンドを用いた方が良いです。scriptならば表示が間欠的にならず、ファイルにログを残せます。ただ、AnacondaやVirtualenvの仮想環境に入ってからscriptコマンドを使うとエラーになります。まず"script"を起動しておけば大丈夫です。例えばAnacondaなら、次のようにすれば良いです。
$ script breakout.log
スクリプトを開始しました。ファイルは breakout.log です
$ . activate tensorflow
(tensorflow) $ python a3c.py 

100M steps学習曲線

Breakoutを100M stepsまで学習させたので、学習曲線を掲載します。

  • 自作ミニプログラム版

残念ながら、80M stepsあたりから、SCOREが上昇しなくなっています。

また、420点あたりにデータの青い点が集中していますが、これは第1面のほぼ最後であり、ブロックが少なくなっているために、残っているブロックに当てるのが難しくなっています。このあたりからは、ちゃんとブロックを狙って返す必要があるのですが、それができていない状況です。
f:id:Itsukara:20160802181608p:plain

なお、上記、70M steps近辺に大きな谷がありますが、これを拡大したものが下記です。谷底にデータの点が多数あるのがわかります。実際にログを見たところ、SCOREが1桁(0〜3)のプレイが200回以上ありました。なんか、おかしな学習を行ってしまったのでしょうね。
f:id:Itsukara:20160802181929p:plain

  • Tensorboard版

こちらは、大雑把すぎで、何が起きているかわかりません。
f:id:Itsukara:20160802181916p:plain