Deep Learning関係

始めるならこの辺りか

DQN-chainerリポジトリを動かすだけ←chainer+python

  DQNの生い立ち + Deep Q-NetworkをChainerで書いた

  DQN-chainerのGitHub←Geforce GTX 660 (2GB)で動作確認とのこと

https://github.com/kuz/DeepMind-Atari-Deep-Q-Learner ←Torch+Lua

  Nature論文のコードはここ

  wget 'https://sites.google.com/a/deepmind.com/dqn/home/Human_Level_Control_through_Deep_Reinforcement_Learning.zip?attredirects=0&d=1'

文献一覧(下に動画も)

DQN-chainerの覚え書き

基本的には、DQN-chainerリポジトリを動かすだけに沿って進めた(いろいろ違いあり)

しかし、実は時代の流れはGymらしい。

準備

Deep Learning関係に沿ってCaffe, chainerをインストール済み。

今回は既に入っていたが、まだinstallされていないなら下記にてinstall

$ sudo apt-get install python
$ sudo apt-get install python-numpy
$ sudo apt-get install python-scipy

参考にしたページでは pip install chainer でchainerをinstallしていたが、defaultencoding の問題を解決できなかったので git clone で install

$ git clone https://github.com/pfnet/chainer.git
$ cd chainer
$ sudo python setup.py install

chainer-1.20.0がinstallされたとのメッセージあり。 何となく、リンクに張り替えておく。

$ cd ..
$ mv chainer chainer-1.20.0
$ ln -s chainer-1.20.0 chainer

RL-Glue のinstall

ここから rlglue-3.04.tar.gz をダウンロード

$ wget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/rl-glue-ext/rlglue-3.04.tar.gz
$ tar xvzf rlglue-3.04.tar.gz
$ cd rlglue-3.04
$ ./configure
$ make
$ make test
$ sudo make install
$ make clean

RL-Glue C Codec のinstall (librlagent.aが必要)

ここから c-codec-2.0.tar.gz をダウンロード

$ wget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/rl-glue-ext/c-codec-2.0.tar.gz
$ tar xvzf c-codec-2.0.tar.gz
$ cd c-codec-2.0
$ ./configure
$ make
$ make test
$ sudo make install
$ make clean

RL-Glue Python Codecの install

ここからpython-codec-2.02.tar.gzをダウンロード

$ wget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/rl-glue-ext/python-codec-2.02.tar.gz
$ tar xvzf python-codec-2.02.tar.gz
$ cd python-codec

PythonCodec.pdfにドキュメントあり (ここも参考になる)

$ cd src
$ sudo python setup.py install

ArcadeLearningEnvironment(ALE)のinstall GitHubはここ 公式ホームページはここ

$ sudo apt-get install libsdl1.2-dev
$ sudo apt-get install libsdl-gfx1.2-dev
$ sudo apt-get install libsdl-image1.2-dev
$ sudo apt-get install libsdl-mixer1.2-dev
$ sudo apt-get install cmake

$ git clone https://github.com/mgbellemare/Arcade-Learning-Environment.git
$ cd Arcade-Learning-Environment

doc/manual/manual.pdfにマニュアルあるが重い ⇒ ここにコピーあり

$ cp makefile.unix Makefile

Makefileを修正

USE_SDL := 1
USE_RLGLUE := 1
$ mkdir build
$ cd build
$ cmake -DUSE_SDL=ON -DUSE_RLGLUE=ON -DBUILD_EXAMPLES=ON ..
$ make -j 4

DQN-chainer本体のinstall GitHubはここ

$ git clone https://github.com/ugo-nama-kun/DQN-chainer.git
$ cd DQN-chainer

readme.txtにマニュアルあり

ATARIのROMを取得

ここから

$ wget http://www.atarimania.com/roms/Roms.zip
$ unzip Roms.zip
$ unzip Roms/ROMS.zip
$ cp -p ROMS//Video\ Olympics\ -\ P*1977* pong.bin

DQN学習開始

これでいよいよDQN学習できる。4つターミナルを開き、それぞれ下記を実行

$ rl_glue
$ cd DQN-chainer
$ python dqn_agent_nature.py
$ cd DQN-chainer
$ python experiment_ale.py
$ cd Arcade-Learning-Environment
$ ./ale -game_controller rlglue -use_starting_actions true -random_seed time -display_screen true -frame_skip 4 path_to_roms/pong.bin

疑問:ALEは make install しない方がいい理由でもあるのか?学習用だからか?

  • 100エピソードごとにモデルを保存 ⇒ DQN-chainer/dqn_model.dat (pickle.dump()にて保存)
  • Freeze Learning 中は強い
    • しかし何が違うのか不明
    • RLGlue.RL_episode(0)を同じように呼んでいる(ように見える)
    • experiment_ale.py から RLGlue.RL_agent_message() でメッセージ送信⇒dqn_agent_nature.py でメッセージを受け取り self.policyFrozen の真偽値を切り替え
  • 450エピソード付近で初勝利
  • 470エピソード付近で2勝目
  • 500エピソード付近で初の2連勝
  • それを境に勝率が跳ね上がる
    • 500エピソードまでの直近100戦で10勝90敗
    • 600エピソードまでの直近100戦で71勝29敗
    • 700エピソードまでの直近100戦で88勝12敗
    • 800エピソードまでの直近100戦で88勝12敗
    • 900エピソードまでの直近100戦で90勝10敗
    • 1000エピソードまでの直近100戦で94勝6敗
  • 強くなるとラリーが長くなり、1エピソードの消化に時間がかかる⇒学習に時間がかかる
  • 負けるとき
    • 狙いすぎの場合と
    • 無気力の場合も ←何故?

OpenAI Gym で DQN GitHubはここ ホームページはここ

OpenAI Gym を install

GitHubのREADME.rstに沿ってinstall (ここも参考)

$ git clone https://github.com/openai/gym.git
$ cd gym
$ sudo pip install -e .
$ pip install gym

$ apt-get install python-numpy python-dev cmake zlib1g-dev libjpeg-dev xvfb libav-tools xorg-dev python-opengl libboost-all-dev libsdl2-dev swig
$ sudo pip install gym[atari]

全環境をinstallするなら

$ sudo pip install gym[all]

次のような cartpole.py を用意

import gym
env = gym.make('CartPole-v0')
env.reset()
for _ in range(1000):
    env.render()
    env.step(env.action_space.sample())

このあとトラブッたので本当のところ何が必要か分からないが、

$ sudo apt-get install mesa-utils libgl1-mesa-dev
$ sudo reboot

のあと、remoteでない端末だと実行できる。

$ python cartpole.py

ssh経由だと -Y オプション付きでもダメ。X server 起動時に +iglx オプションを付けると解決できそう(未確認)

他のサンプルも試す

invaders.py

import gym
env = gym.make('SpaceInvaders-v0')
env.reset()
for _ in range(1000):
    env.render()
    env.step(env.action_space.sample())
$ python invaders.py

pacman.py

import gym
env = gym.make('MsPacman-v0')
env.reset()
for _ in range(1000):
    env.render()
    env.step(env.action_space.sample())
$ python pacman.py

Chainer で DQN(DQN-chainerのOpenAI Gym版)

DQN-chainerそのものは上で既にinstall済み

$ git clone https://github.com/ugo-nama-kun/DQN-chainer.git
$ cd DQN-chainer/DQN-chainer-gym
$ python experiment_gym.py
  • 2000エピソード目付近で初勝利
    • まぐれ勝ちに見える
    • その後も負けっ放し
  • 3000エピソード前後になって2勝目
    • その後も数回勝利
    • だが、稀にまぐれ勝ちの印象

ALEの場合と条件を揃える努力

gym/envs/__init__.pyの288行目

kwargs={'game': game, 'obs_type': obs_type, 'repeat_action_probability': 0.25},

を次のように修正

kwargs={'game': game, 'obs_type': obs_type, 'frameskip': 4, 'repeat_action_probability': 0.25},
  • 1300エピソードを超えても1勝もできず
  • 1400エピソード付近でスコア-4
    • 動きが鈍臭いというか、何度も同じ失敗を繰り返す
      • 狙いすぎなのか、一歩遅いケース多い
      • 勝ちパターンを見つけるまでに時間がかかっている
    • ALE版との違いは何なのか?
      • 少なくとも eval_interval は違うが、当然10にしても変化なし

参考)repeat_action_probabilityについて

Keras + TensorFlow + OpenAI Gym でDQN  懇切丁寧な解説 GitHub

Kerasに沿って TensorFlow と Keras をインストール。その後、

$ git clone https://github.com/elix-tech/dqn
$ cd dqn
$ python dqn.py
ValueError: filter must not be larger than the input: Filter: [8x8] Input: [4x84]

なるエラーが出たら、~/.keras/keras.json を修正して再度実行

{
    "image_dim_ordering": "th", # ←ここが "tf"なら"th"に変更。次元順を変更。おそらく、(84,84,4)→(4,84,84)になる。
    "epsilon": 1e-07, 
    "floatx": "float32", 
    "backend": "tensorflow"
}

ゲームの画面は表示されないが、エラーなく実行できればOK

ゲームの画面を表示させるには dqn.pyを修正

301:     env.render()

ブロック崩しではなく、ピンポンに切り替えるには dqn.py を修正

16: ENV_NAME = 'Pong-v0'
  • やはり、TensorFlowはクセがある
  • デフォルトは学習モード(TRAIN = False で testモード)
  • ACTION_INTERVAL は 1 にすべきかも (skip frameは OpenAI Gym にて実施のため)
  • ACTION_INTERVAL=1で実行
    • 1800エピソード過ぎて初勝利
    • 2000エピソード過ぎて2勝目
    • 2600エピソード過ぎまでの100戦で27勝73敗 (約3日近く)
  • DQN-chainerのOpenAI Gym版とさして変わらないか
  • DQN-chainerのALE版はずば抜けて良い ← その理由は?
    • 高速ラリーが起こらないから?
    • 使っているROMは同じっぽいが・・・
    • エミュレータの設定が微妙に違うのかも?

Torch + Lua で DQN

Nature論文に近い実装と思われる(オリジナル・コードはここ

https://github.com/kuz/DeepMind-Atari-Deep-Q-Learner

xvfb の上手な使い方

ここのtlbtlbtlbが物知り

$ xvfb-run -e /tmp/xvfb.err -a -s "-screen 0 1400x900x24 +extension RANDR" -- glxinfo
$ cat /tmp/xvfb.err

で詳しいエラーメッセージを得られる

OpenAI Gym について

ATARIのゲームに関する環境は結局 Arcade Learning Environment を使っているらしい

ドキュメントが充実⇒https://gym.openai.com/docs

環境の追加は?⇒https://github.com/openai/gym/tree/master/gym/envs

  https://github.com/openai/gym/wiki/Environments

  https://github.com/openai/gym/blob/master/gym/core.py

  https://github.com/openai/gym/issues/106←複雑なobservation spaceやaction spaceを持つenvironmentをユーザ定義する場合に参考になるはず

CartPole-v0 の observation (4次元のBox)の意味について⇒http://stackoverflow.com/questions/39341397/observations-meaning-openai-gymこのページこんなページのことを言っている)、

  PD制御のCartPoleで学ぶOpenAI Gym

各actionの意味を知る方法は?⇒環境によって様々ぽいが、公式ドキュメントはあるのか? AtariEnvの場合はself.ale.getMinimalActionSet()だが、その実体は何処?


添付ファイル: fileArcade Learning Environment manual Ver.0.5.1.pdf 425件 [詳細] filePythonCodec.pdf 291件 [詳細]

トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-02-23 (木) 19:38:06 (213d)