LoginSignup
7
6

More than 5 years have passed since last update.

Model-Free Episodic Controlモデルで学習させてみる

Last updated at Posted at 2016-09-18

過去11回でパソコンを自作した後に、Ubuntu14.04、CUDA、cuDNN、chainer、dqn、LIS、Tensorflow、OpenAIGymを順次インストールし、いくつかモデルを走らせた。特に前回はPseudo-countを学習させるべく進めたが、dependenciesのインストールにおいてopencv3がうまくインストールできず、挫折している。
http://qiita.com/masataka46/items/caddc177d0c34d165b73

今回は
Frank He(ShibiHe)氏が作成したModel-Free Episodic ControlモデルのコードでOpenAIGym上で学習させる。
C. Blundell氏らDeepMindの「Model-Free Episodic Control」論文はこちら。
http://arxiv.org/pdf/1606.04460v1.pdf
中身をごく端的に言うと、episodic memoryを使って海馬を模した、ってところ。

Frank He氏のGitHub上のコードはこちら。
https://github.com/sudeepraja/Model-Free-Episodic-Control
ざっと見たところ、Theanoを使ってる。

GitHub上からコードをもってくる

適当なディレクトリにgit cloneする。

git clone https://github.com/ShibiHe/Model-Free-Episodic-Control.git

dependenciesのインストール

どうやら新たにLasagneというのと、annoyというものが必要らしい。

まずLasagneのインストール。よくわからんが、とりあえずpipで試してみる。

sudo pip install lasagne

成功したみたい。次にannoy。これは得体がしれないから、とりあえず調べてみる。githubのこちら
https://github.com/spotify/annoy
に説明があるが、とりあえずこんなこと
annoy01.png
をするみたい。

これもpipでいけるみたい。

sudo pip install annoy

annoy-1.8.0がインストールされた。

まずはdefaultで走らせてみる

何も考えずに

THEANO_FLAGS='device=gpu0, floatX=float32' python run_nature.py

としたところ

ImportError: No module named sklearn.neighbors

と出た。scikits-learnというのが必要らしい。よってインストールする。

sudo pip install -U scikit-learn

再度run_nature.pyを実行したところ、案の定

No ROM File specified or the ROM file was not found.

と出た。ROMがそれらしき場所に無かったので予想通り。とりあえずrun_nature.pyの23行目で指定されているdefaultのms_pacman.binを入れる。

しかしどこのディレクトリに入れるべきかわからない。READMEには

Model-Free-Episodic-Control

├ dqn_ep -> source codes

├ roms -> game roms

└ README.md

という記述があるので、dqn_epと同じ階層にromsというフォルダを作り、その中に入れてみる。再度実行。

なんか学習が始まったっぽいが、いつものようなゲームの画面が出てこない。romに問題があるのだろうか?

THEANO_FLAGS='device=gpu0, floatX=float32' python run_nature.py
Using gpu device 0: GeForce GTX 1070 (CNMeM is disabled, cuDNN 5005)
/usr/local/lib/python2.7/dist-packages/theano/tensor/signal/downsample.py:6: UserWarning: downsample module has been moved to the theano.tensor.signal.pool module.
  "downsample module has been moved to the theano.tensor.signal.pool module.")
/media/ohmasa/several data/home/ohmasa/openAIGym/model_free_episodic_control1/Model-Free-Episodic-Control/dqn_ep/q_network.py:178: UserWarning: theano.function was asked to create a function computing outputs given certain inputs, but the provided input variable at index 1 is not part of the computational graph needed to compute the outputs: <CudaNdarrayType(float32, col)>.
To make this warning into an error, you can pass the parameter on_unused_input='raise' to theano.function. To disable it completely, use on_unused_input='ignore'.
  givens=train_givens, on_unused_input='warn')
INFO:root:OPENING ms_pacman_09-19-00-15_0p00025_0p99/results.csv
INFO:root:training epoch: 1 steps_left: 250000
INFO:root:steps/second: 1005.88, avg: 20.12
INFO:root:training epoch: 1 steps_left: 249975
INFO:root:steps/second: 1133.29, avg: 42.38
INFO:root:training epoch: 1 steps_left: 249970
INFO:root:steps/second: 1110.49, avg: 63.74
INFO:root:training epoch: 1 steps_left: 249964
INFO:root:steps/second: 1100.99, avg: 84.49
INFO:root:training epoch: 1 steps_left: 249957
INFO:root:steps/second: 432.21, avg: 91.44
INFO:root:average loss: 3.1379
INFO:root:testing epoch: 1 steps_left: 125000
INFO:root:training epoch: 2 steps_left: 250000
INFO:root:steps/second: 375.21, avg: 97.12
INFO:root:average loss: 3.1827
INFO:root:training epoch: 2 steps_left: 249972
INFO:root:steps/second: 447.47, avg: 104.12
INFO:root:average loss: 3.1154
INFO:root:training epoch: 2 steps_left: 249967
INFO:root:steps/second: 447.03, avg: 110.98
INFO:root:average loss: 2.8808
INFO:root:training epoch: 2 steps_left: 249961
INFO:root:steps/second: 515.27, avg: 119.07
INFO:root:average loss: 3.5165
INFO:root:training epoch: 2 steps_left: 249954
INFO:root:steps/second: 359.12, avg: 123.87
INFO:root:average loss: 3.1382
INFO:root:testing epoch: 2 steps_left: 125000
INFO:root:training epoch: 3 steps_left: 250000
INFO:root:steps/second: 350.62, avg: 128.40
INFO:root:average loss: 3.1239
INFO:root:training epoch: 3 steps_left: 249950
INFO:root:steps/second: 359.13, avg: 133.02
INFO:root:average loss: 3.2046
INFO:root:training epoch: 3 steps_left: 249855

ここまで1時間くらい。学習の進行があまりに遅くないか?

INFO:root:steps/second: 415.57, avg: 391.70
INFO:root:average loss: 3.2587
INFO:root:training epoch: 47 steps_left: 249963
INFO:root:steps/second: 398.32, avg: 391.83
INFO:root:average loss: 2.7436
INFO:root:training epoch: 47 steps_left: 249952
INFO:root:steps/second: 317.72, avg: 390.35
INFO:root:average loss: 3.0604
INFO:root:testing epoch: 47 steps_left: 125000
INFO:root:training epoch: 48 steps_left: 250000
INFO:root:steps/second: 337.22, avg: 389.29
INFO:root:average loss: 3.1287
INFO:root:training epoch: 48 steps_left: 249973

48epochで15時間くらい。run_nature.pyに

STEPS_PER_EPOCH = 250000
EPOCHS = 200
STEPS_PER_TEST = 125000

とある。48ecpochで1,200,000stepsくらいか。いったん停止させ、改めて

STEPS_PER_EPOCH = 100000
EPOCHS = 50
STEPS_PER_TEST = 50000

として再学習。6時間ほどで学習が終了した。

INFO:root:steps/second: 359.80, avg: 378.48
INFO:root:average loss: 3.1362
INFO:root:training epoch: 49 steps_left: 99890
INFO:root:steps/second: 319.69, avg: 377.31
INFO:root:average loss: 3.0497
INFO:root:testing epoch: 49 steps_left: 50000
INFO:root:training epoch: 50 steps_left: 100000
INFO:root:steps/second: 333.04, avg: 376.42
INFO:root:average loss: 3.2018
INFO:root:training epoch: 50 steps_left: 99974
INFO:root:steps/second: 319.29, avg: 375.28
INFO:root:average loss: 3.0544
INFO:root:testing epoch: 50 steps_left: 50000
7
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
6