Weitere ähnliche Inhalte Ähnlich wie 20180830 implement dqn_platinum_data_meetup_vol1 (20) 20180830 implement dqn_platinum_data_meetup_vol12. 自己紹介
● 仲田圭佑 (なかた けいすけ)
● 2015新卒でブレインパッド (BP) に入社し、現在4年目
● 役職:データサイエンティスト?機械学習エンジニア?
○ BP の受託分析部門における DS/MLE は結構フロントに立つ機会も多め?な
気がする
■ (他の会社を知らないのでわからない )
● 強化学習に興味があり色々調べている
5. DQN: Deep Q Network
● DeepMind が NIPS 2013 で発表した、Atari 2600 というレト
ロゲームを強化学習でプレイさせるアルゴリズム
● その後、2015 年に Nature で (改善版を) 発表
https://www.youtube.com/watch?v=TmPfTpjtdgg
DeepMind が YouTube に公開している動画。
何かしら似たようなものを見たことがあると思います
6. 学んだこと一覧
● よく言われるシリーズ
○ DeepMind 実装が読みにくい
○ NIPS版、Nature版
○ even/odd frame 処理
○ frame の cropping/resize 処理
○ ちゃんと学習できてるのかわからない問題
● 紛らわしいシリーズ
○ frame skip, frame stack, update frequency
○ それは frame で数えるの?step で数えるの?
○ reward clipping
○ huber_loss
● そんなのわかるわけないだろシリーズ
○ ライフを失うとエピソード終了
○ RMSpropGraves
○ sum(huber_loss)
8. 学んだこと一覧
● よく言われるシリーズ
○ DeepMind 実装が読みにくい
○ NIPS版、Nature版
○ even/odd frame 処理
○ frame の cropping/resize 処理
○ ちゃんと学習できてるのかわからない問題
● 紛らわしいシリーズ
○ frame skip, frame stack, update frequency
○ それは frame で数えるの?step で数えるの?
○ reward clipping
○ huber_loss
● そんなのわかるわけないだろシリーズ
○ ライフを失うとエピソード終了
○ RMSpropGraves
○ sum(huber_loss)
10. 学んだこと一覧
● よく言われるシリーズ
○ DeepMind 実装が読みにくい
○ NIPS版、Nature版
○ even/odd frame 処理
○ frame の cropping/resize 処理
○ ちゃんと学習できてるのかわからない問題
● 紛らわしいシリーズ
○ frame skip, frame stack, update frequency
○ それは frame で数えるの?step で数えるの?
○ reward clipping
○ huber_loss
● そんなのわかるわけないだろシリーズ
○ ライフを失うとエピソード終了
○ RMSpropGraves
○ sum(huber_loss)
11. NIPS版、Nature版
前述の通り、DQN には二種類の論文が存在する:
● NIPS 2013 版 [1]
● Nature 2015 版 [2]
大抵 Nature 版のことを指しているが、紛らわしい。
現在 DeepMind によってコードが公開されているのは Nature 版
のほう。(DQN 3.0 [3])
[1]: Mnih, V., Kavukcuoglu, K., Silver, D., Graves, A., Antonoglou, I., Wierstra, D., & Riedmiller, M. (2013). Playing Atari with Deep Reinforcement Learning.
[2]: Mnih, V., et. al. (2015). Human-level control through deep reinforcement learning.
[3]: https://github.com/deepmind/dqn
12. NIPS版、Nature版
NIPS 版 Nature 版
even/odd frame 処理 なし? あり
frame のリサイズ処理 cropping している? 単純なリサイズ?
アーキテクチャ Conv(8x8, 16 filters, 4 strides)
-> Conv(4x4, 32, 2)
-> Dense(256)
-> Dense(n_actions)
Conv(8x8, 32, 4)
-> Conv(4x4, 64, 2)
-> Conv(3x3, 64, 1)
-> Dense(512)
-> Dense(n_actions)
ハイパーパラメータ 謎が多い 詳しく載っている。コードも公
開されている
他にも違いあるかも・・・?
NIPS 版は明記されていないだけで、本当はしている処理とかも多そうな印象
13. 学んだこと一覧
● よく言われるシリーズ
○ DeepMind 実装が読みにくい
○ NIPS版、Nature版
○ even/odd frame 処理
○ frame の cropping/resize 処理
○ ちゃんと学習できてるのかわからない問題
● 紛らわしいシリーズ
○ frame skip, frame stack, update frequency
○ それは frame で数えるの?step で数えるの?
○ reward clipping
○ huber_loss
● そんなのわかるわけないだろシリーズ
○ ライフを失うとエピソード終了
○ RMSpropGraves
○ sum(huber_loss)
15. 学んだこと一覧
● よく言われるシリーズ
○ DeepMind 実装が読みにくい
○ NIPS版、Nature版
○ even/odd frame 処理
○ frame の cropping/resize 処理
○ ちゃんと学習できてるのかわからない問題
● 紛らわしいシリーズ
○ frame skip, frame stack, update frequency
○ それは frame で数えるの?step で数えるの?
○ reward clipping
○ huber_loss
● そんなのわかるわけないだろシリーズ
○ ライフを失うとエピソード終了
○ RMSpropGraves
○ sum(huber_loss)
18. 学んだこと一覧
● よく言われるシリーズ
○ DeepMind 実装が読みにくい
○ NIPS版、Nature版
○ even/odd frame 処理
○ frame の cropping/resize 処理
○ ちゃんと学習できてるのかわからない問題
● 紛らわしいシリーズ
○ frame skip, frame stack, update frequency
○ それは frame で数えるの?step で数えるの?
○ reward clipping
○ huber_loss
● そんなのわかるわけないだろシリーズ
○ ライフを失うとエピソード終了
○ RMSpropGraves
○ sum(huber_loss)
20. 学んだこと一覧
● よく言われるシリーズ
○ DeepMind 実装が読みにくい
○ NIPS版、Nature版
○ even/odd frame 処理
○ frame の cropping/resize 処理
○ ちゃんと学習できてるのかわからない問題
● 紛らわしいシリーズ
○ frame skip, frame stack, update frequency
○ それは frame で数えるの?step で数えるの?
○ reward clipping
○ huber_loss
● そんなのわかるわけないだろシリーズ
○ ライフを失うとエピソード終了
○ RMSpropGraves
○ sum(huber_loss)
23. OpenAI Gym の Atari 環境について
Python から手軽に使える OpenAI Gym の Atari 環境にはPong-v0, Pong-v4,
PongDeterministic-v0, PongNoFrameskip-v4 というような環境の種類名がある。
● v0/v4 どっち?
○ v0 は使ってはいけません 。入力した行動が25%の確率で無視されます。 v4 を使いましょう。
● Deterministic/<無印>/NoFrameskip どれ?
○ <無印> を使ってはいけません 。2-4 のランダムな回数、内部で行動が繰り返されます。
Deterministic は4回固定繰り返し、NoFrameskip は繰り返しなしです。
結論:「XXXXNoFrameskip-v4 を使い、frame-skip 処理を自分でおこなう」か、
「XXXXDeteministic-v4を使い、frame-skip 処理は環境に任せるか」のどちらかだけが
選択肢。それ以外の環境名の選択はその時点で再現が不可能となる
(ちなみに、even/odd frame 問題を考えると、NoFrameskip-v4 一択)
詳しくはこちら(宣伝):OpenAI Gym の Atari Environment の命名規則と罠について- Qiita
28. 学んだこと一覧
● よく言われるシリーズ
○ DeepMind 実装が読みにくい
○ NIPS版、Nature版
○ even/odd frame 処理
○ frame の cropping/resize 処理
○ ちゃんと学習できてるのかわからない問題
● 紛らわしいシリーズ
○ frame skip, frame stack, update frequency
○ それは frame で数えるの?step で数えるの?
○ reward clipping
○ huber_loss
● そんなのわかるわけないだろシリーズ
○ ライフを失うとエピソード終了
○ RMSpropGraves
○ sum(huber_loss)
29. frame で数えるの?step で数えるの?
frame-skip が入っているため、「ゲームのフレームの個数」は「行
動選択 (step)」の回数の4倍になる。
論文では所々で「n frame ごとに」のような表現があるが、これは
「ゲームのフレーム」ではなく「行動選択」で数える
(論文と DeepMind のコードを照らし合わせて検証)
30. 学んだこと一覧
● よく言われるシリーズ
○ DeepMind 実装が読みにくい
○ NIPS版、Nature版
○ even/odd frame 処理
○ frame の cropping/resize 処理
○ ちゃんと学習できてるのかわからない問題
● 紛らわしいシリーズ
○ frame skip, frame stack, update frequency
○ それは frame で数えるの?step で数えるの?
○ reward clipping
○ huber_loss
● そんなのわかるわけないだろシリーズ
○ ライフを失うとエピソード終了
○ RMSpropGraves
○ sum(huber_loss)
31. reward clipping
報酬をクリッピングする有名な処理。
しかし、これは [-1, 1] にクリッピングするという意味ではなく、報酬
の符号を用いる (0は0のまま) という意味。
つまり与えられる報酬は {-1, 0, +1} の3種類のうちのどれかに必
ずなっている。
(が、Pong/Breakout/Alien 等の環境では絶対値が1以下の報酬
が与えられることはないので、いわゆる clipping 処理でも等価で
はある・・・他のゲームでは何かあるのかもしれない)
32. 学んだこと一覧
● よく言われるシリーズ
○ DeepMind 実装が読みにくい
○ NIPS版、Nature版
○ even/odd frame 処理
○ frame の cropping/resize 処理
○ ちゃんと学習できてるのかわからない問題
● 紛らわしいシリーズ
○ frame skip, frame stack, update frequency
○ それは frame で数えるの?step で数えるの?
○ reward clipping
○ huber_loss
● そんなのわかるわけないだろシリーズ
○ ライフを失うとエピソード終了
○ RMSpropGraves
○ sum(huber_loss)
36. Huber loss
後半の文が言っているのは、まさに Huber loss そのもの。
では前半の文が言っているのは、結局何???
→ Q学習の更新式 (ロス関数の微分) の更新部を clipping せよと言っている。
(前提) Q学習の更新式:
つまり、 Q(s, a) = Q(s, a) + α * clip(TD, [-1, 1]) で更新しろ、ということ。
実際にこの更新式を導くことのできるロス関数は Huber loss だから辻褄があう。
誤差項 r+γmaxQ’-Q を -1 から 1 に clipping する。
絶対値関数の微分値は -1 か 1 になるので、二乗誤差の
(-1, 1) の外側では絶対値誤差を用いることに対応する。
37. 学んだこと一覧
● よく言われるシリーズ
○ DeepMind 実装が読みにくい
○ NIPS版、Nature版
○ even/odd frame 処理
○ frame の cropping/resize 処理
○ ちゃんと学習できてるのかわからない問題
● 紛らわしいシリーズ
○ frame skip, frame stack, update frequency
○ それは frame で数えるの?step で数えるの?
○ reward clipping
○ huber_loss
● そんなのわかるわけないだろシリーズ
○ ライフを失うとエピソード終了
○ RMSpropGraves
○ sum(huber_loss)
39. 学んだこと一覧
● よく言われるシリーズ
○ DeepMind 実装が読みにくい
○ NIPS版、Nature版
○ even/odd frame 処理
○ frame の cropping/resize 処理
○ ちゃんと学習できてるのかわからない問題
● 紛らわしいシリーズ
○ frame skip, frame stack, update frequency
○ それは frame で数えるの?step で数えるの?
○ reward clipping
○ huber_loss
● そんなのわかるわけないだろシリーズ
○ ライフを失うとエピソード終了
○ RMSpropGraves
○ sum(huber_loss)
41. 学んだこと一覧
● よく言われるシリーズ
○ DeepMind 実装が読みにくい
○ NIPS版、Nature版
○ even/odd frame 処理
○ frame の cropping/resize 処理
○ ちゃんと学習できてるのかわからない問題
● 紛らわしいシリーズ
○ frame skip, frame stack, update frequency
○ それは frame で数えるの?step で数えるの?
○ reward clipping
○ huber_loss
● そんなのわかるわけないだろシリーズ
○ ライフを失うとエピソード終了
○ RMSpropGraves
○ sum(huber_loss)
43. 参考資料集
● DQN NIPS 版 (2013)
○ https://arxiv.org/abs/1312.5602
● DQN Nature 版 (2015)
○ https://web.stanford.edu/class/psych209/Readings/MnihEtAlHassibis15N
atureControlDeepRL.pdf
● DeepMind 実装 (DQN3.0)
○ https://github.com/deepmind/dqn
○ Nature 版の実装にあたる (論文中には google sites で公開していると書か
れているが移動した?)
44. 参考資料集
● ALE の lua ラッパ
○ https://github.com/deepmind/alewrap
○ 正確に言えば、DeepMind の fork 版であるdeepmind/xitari のラッパ
46. 参考資料集
● Speeding up DQN on PyTorch: how to solve Pong in 30
minutes
● Frame Skipping and Pre-Processing for Deep Q-Networks
on Atari 2600 Games
● Beat Atari with Deep Reinforcement Learning! (Part 2:
DQN improvements)