Submit Search
Upload
20180830 implement dqn_platinum_data_meetup_vol1
•
1 like
•
397 views
Keisuke Nakata
Follow
20180830 implement dqn_platinum_data_meetup_vol1
Read less
Read more
Data & Analytics
Report
Share
Report
Share
1 of 46
Download now
Download to read offline
Recommended
Deep Learning基本理論とTensorFlow
Deep Learning基本理論とTensorFlow
Tadaichiro Nakano
ディープラーニングフレームワーク とChainerの実装
ディープラーニングフレームワーク とChainerの実装
Ryosuke Okuta
Deep Learning技術の今
Deep Learning技術の今
Seiya Tokui
文法圧縮入門:超高速テキスト処理のためのデータ圧縮(NLP2014チュートリアル)
文法圧縮入門:超高速テキスト処理のためのデータ圧縮(NLP2014チュートリアル)
Shirou Maruyama
Deep Learningと自然言語処理
Deep Learningと自然言語処理
Preferred Networks
TensorFlowとCNTK
TensorFlowとCNTK
maruyama097
音声認識と深層学習
音声認識と深層学習
Preferred Networks
Tf勉強会(5)
Tf勉強会(5)
tak9029
Recommended
Deep Learning基本理論とTensorFlow
Deep Learning基本理論とTensorFlow
Tadaichiro Nakano
ディープラーニングフレームワーク とChainerの実装
ディープラーニングフレームワーク とChainerの実装
Ryosuke Okuta
Deep Learning技術の今
Deep Learning技術の今
Seiya Tokui
文法圧縮入門:超高速テキスト処理のためのデータ圧縮(NLP2014チュートリアル)
文法圧縮入門:超高速テキスト処理のためのデータ圧縮(NLP2014チュートリアル)
Shirou Maruyama
Deep Learningと自然言語処理
Deep Learningと自然言語処理
Preferred Networks
TensorFlowとCNTK
TensorFlowとCNTK
maruyama097
音声認識と深層学習
音声認識と深層学習
Preferred Networks
Tf勉強会(5)
Tf勉強会(5)
tak9029
High performance python computing for data science
High performance python computing for data science
Takami Sato
なにわTech20170218(tpu) tfug
なにわTech20170218(tpu) tfug
Natsutani Minoru
Transformerを雰囲気で理解する
Transformerを雰囲気で理解する
AtsukiYamaguchi1
再帰型ニューラルネット in 機械学習プロフェッショナルシリーズ輪読会
再帰型ニューラルネット in 機械学習プロフェッショナルシリーズ輪読会
Shotaro Sano
分散システムの限界について知ろう
分散システムの限界について知ろう
Shingo Omura
Learning Deep Architectures for AI (第 3 回 Deep Learning 勉強会資料; 松尾)
Learning Deep Architectures for AI (第 3 回 Deep Learning 勉強会資料; 松尾)
Ohsawa Goodfellow
Chainerチュートリアル -v1.5向け- ViEW2015
Chainerチュートリアル -v1.5向け- ViEW2015
Ryosuke Okuta
CluBERT: A Cluster-Based Approach for Learning Sense Distributions in Multipl...
CluBERT: A Cluster-Based Approach for Learning Sense Distributions in Multipl...
禎晃 山崎
畳み込みLstm
畳み込みLstm
tak9029
Chainerの使い方と自然言語処理への応用
Chainerの使い方と自然言語処理への応用
Yuya Unno
BERT+XLNet+RoBERTa
BERT+XLNet+RoBERTa
禎晃 山崎
comp_pfiseminar
comp_pfiseminar
Preferred Networks
Chainer入門と最近の機能
Chainer入門と最近の機能
Yuya Unno
短距離ハイブリッド並列分子動力学コードの設計思想と説明のようなもの
短距離ハイブリッド並列分子動力学コードの設計思想と説明のようなもの
Hiroshi Watanabe
D言語会議#1
D言語会議#1
9rnsr
Extract and edit
Extract and edit
禎晃 山崎
Learning Phrase Representations using RNN Encoder-Decoder for Statistical Mac...
Learning Phrase Representations using RNN Encoder-Decoder for Statistical Mac...
Yuta Kikuchi
[ICLR2016] 採録論文の個人的まとめ
[ICLR2016] 採録論文の個人的まとめ
Yusuke Iwasawa
Paxos
Paxos
Preferred Networks
ATN No.2 Scala事始め
ATN No.2 Scala事始め
AdvancedTechNight
Tensor flow勉強会3
Tensor flow勉強会3
tak9029
Tf勉強会(4)
Tf勉強会(4)
tak9029
More Related Content
What's hot
High performance python computing for data science
High performance python computing for data science
Takami Sato
なにわTech20170218(tpu) tfug
なにわTech20170218(tpu) tfug
Natsutani Minoru
Transformerを雰囲気で理解する
Transformerを雰囲気で理解する
AtsukiYamaguchi1
再帰型ニューラルネット in 機械学習プロフェッショナルシリーズ輪読会
再帰型ニューラルネット in 機械学習プロフェッショナルシリーズ輪読会
Shotaro Sano
分散システムの限界について知ろう
分散システムの限界について知ろう
Shingo Omura
Learning Deep Architectures for AI (第 3 回 Deep Learning 勉強会資料; 松尾)
Learning Deep Architectures for AI (第 3 回 Deep Learning 勉強会資料; 松尾)
Ohsawa Goodfellow
Chainerチュートリアル -v1.5向け- ViEW2015
Chainerチュートリアル -v1.5向け- ViEW2015
Ryosuke Okuta
CluBERT: A Cluster-Based Approach for Learning Sense Distributions in Multipl...
CluBERT: A Cluster-Based Approach for Learning Sense Distributions in Multipl...
禎晃 山崎
畳み込みLstm
畳み込みLstm
tak9029
Chainerの使い方と自然言語処理への応用
Chainerの使い方と自然言語処理への応用
Yuya Unno
BERT+XLNet+RoBERTa
BERT+XLNet+RoBERTa
禎晃 山崎
comp_pfiseminar
comp_pfiseminar
Preferred Networks
Chainer入門と最近の機能
Chainer入門と最近の機能
Yuya Unno
短距離ハイブリッド並列分子動力学コードの設計思想と説明のようなもの
短距離ハイブリッド並列分子動力学コードの設計思想と説明のようなもの
Hiroshi Watanabe
D言語会議#1
D言語会議#1
9rnsr
Extract and edit
Extract and edit
禎晃 山崎
Learning Phrase Representations using RNN Encoder-Decoder for Statistical Mac...
Learning Phrase Representations using RNN Encoder-Decoder for Statistical Mac...
Yuta Kikuchi
[ICLR2016] 採録論文の個人的まとめ
[ICLR2016] 採録論文の個人的まとめ
Yusuke Iwasawa
Paxos
Paxos
Preferred Networks
ATN No.2 Scala事始め
ATN No.2 Scala事始め
AdvancedTechNight
What's hot
(20)
High performance python computing for data science
High performance python computing for data science
なにわTech20170218(tpu) tfug
なにわTech20170218(tpu) tfug
Transformerを雰囲気で理解する
Transformerを雰囲気で理解する
再帰型ニューラルネット in 機械学習プロフェッショナルシリーズ輪読会
再帰型ニューラルネット in 機械学習プロフェッショナルシリーズ輪読会
分散システムの限界について知ろう
分散システムの限界について知ろう
Learning Deep Architectures for AI (第 3 回 Deep Learning 勉強会資料; 松尾)
Learning Deep Architectures for AI (第 3 回 Deep Learning 勉強会資料; 松尾)
Chainerチュートリアル -v1.5向け- ViEW2015
Chainerチュートリアル -v1.5向け- ViEW2015
CluBERT: A Cluster-Based Approach for Learning Sense Distributions in Multipl...
CluBERT: A Cluster-Based Approach for Learning Sense Distributions in Multipl...
畳み込みLstm
畳み込みLstm
Chainerの使い方と自然言語処理への応用
Chainerの使い方と自然言語処理への応用
BERT+XLNet+RoBERTa
BERT+XLNet+RoBERTa
comp_pfiseminar
comp_pfiseminar
Chainer入門と最近の機能
Chainer入門と最近の機能
短距離ハイブリッド並列分子動力学コードの設計思想と説明のようなもの
短距離ハイブリッド並列分子動力学コードの設計思想と説明のようなもの
D言語会議#1
D言語会議#1
Extract and edit
Extract and edit
Learning Phrase Representations using RNN Encoder-Decoder for Statistical Mac...
Learning Phrase Representations using RNN Encoder-Decoder for Statistical Mac...
[ICLR2016] 採録論文の個人的まとめ
[ICLR2016] 採録論文の個人的まとめ
Paxos
Paxos
ATN No.2 Scala事始め
ATN No.2 Scala事始め
Similar to 20180830 implement dqn_platinum_data_meetup_vol1
Tensor flow勉強会3
Tensor flow勉強会3
tak9029
Tf勉強会(4)
Tf勉強会(4)
tak9029
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
infinite_loop
Deep Learningの基礎と応用
Deep Learningの基礎と応用
Seiya Tokui
griffon plugin を 実際に作ってみよう #jggug
griffon plugin を 実際に作ってみよう #jggug
kimukou_26 Kimukou
dl-with-python01_handout
dl-with-python01_handout
Shin Asakawa
20130228 Goノススメ(BPStudy #66)
20130228 Goノススメ(BPStudy #66)
Yoshifumi Yamaguchi
Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1
Ransui Iso
Windowsユーザのlinux入門(20130126)
Windowsユーザのlinux入門(20130126)
Kimiyuki Yamauchi
「ゼロから作るDeep learning」の畳み込みニューラルネットワークのハードウェア化
「ゼロから作るDeep learning」の畳み込みニューラルネットワークのハードウェア化
marsee101
Recurrent Neural Networks
Recurrent Neural Networks
Seiya Tokui
詳解! Decimal
詳解! Decimal
Tadashi Saito
111015 tokyo scipy2_ディスカッション
111015 tokyo scipy2_ディスカッション
Shohei Hido
ディープニューラルネット入門
ディープニューラルネット入門
TanUkkii
Pythonとdeep learningで手書き文字認識
Pythonとdeep learningで手書き文字認識
Ken Morishita
研究者のための Python による FPGA 入門
研究者のための Python による FPGA 入門
ryos36
Scrum alliance regional gathering tokyo 2013 pub
Scrum alliance regional gathering tokyo 2013 pub
グロースエクスパートナーズ株式会社/Growth xPartners Incorporated.
大規模言語モデル開発を支える分散学習技術 - 東京工業大学横田理央研究室の藤井一喜さん
大規模言語モデル開発を支える分散学習技術 - 東京工業大学横田理央研究室の藤井一喜さん
Akira Shibata
UnityでのLINQ活用例
UnityでのLINQ活用例
Ryota Murohoshi
Xbyakの紹介とその周辺
Xbyakの紹介とその周辺
MITSUNARI Shigeo
Similar to 20180830 implement dqn_platinum_data_meetup_vol1
(20)
Tensor flow勉強会3
Tensor flow勉強会3
Tf勉強会(4)
Tf勉強会(4)
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
Deep Learningの基礎と応用
Deep Learningの基礎と応用
griffon plugin を 実際に作ってみよう #jggug
griffon plugin を 実際に作ってみよう #jggug
dl-with-python01_handout
dl-with-python01_handout
20130228 Goノススメ(BPStudy #66)
20130228 Goノススメ(BPStudy #66)
Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1
Windowsユーザのlinux入門(20130126)
Windowsユーザのlinux入門(20130126)
「ゼロから作るDeep learning」の畳み込みニューラルネットワークのハードウェア化
「ゼロから作るDeep learning」の畳み込みニューラルネットワークのハードウェア化
Recurrent Neural Networks
Recurrent Neural Networks
詳解! Decimal
詳解! Decimal
111015 tokyo scipy2_ディスカッション
111015 tokyo scipy2_ディスカッション
ディープニューラルネット入門
ディープニューラルネット入門
Pythonとdeep learningで手書き文字認識
Pythonとdeep learningで手書き文字認識
研究者のための Python による FPGA 入門
研究者のための Python による FPGA 入門
Scrum alliance regional gathering tokyo 2013 pub
Scrum alliance regional gathering tokyo 2013 pub
大規模言語モデル開発を支える分散学習技術 - 東京工業大学横田理央研究室の藤井一喜さん
大規模言語モデル開発を支える分散学習技術 - 東京工業大学横田理央研究室の藤井一喜さん
UnityでのLINQ活用例
UnityでのLINQ活用例
Xbyakの紹介とその周辺
Xbyakの紹介とその周辺
20180830 implement dqn_platinum_data_meetup_vol1
1.
DQNを 実装してみて学んだこと 仲田圭佑 2018/08/30 Platinum Data
Meetup vol.1
2.
自己紹介 ● 仲田圭佑 (なかた
けいすけ) ● 2015新卒でブレインパッド (BP) に入社し、現在4年目 ● 役職:データサイエンティスト?機械学習エンジニア? ○ BP の受託分析部門における DS/MLE は結構フロントに立つ機会も多め?な 気がする ■ (他の会社を知らないのでわからない ) ● 強化学習に興味があり色々調べている
3.
免責 ● この発表は会社の見解とは一切関係ありません ● アルゴリズムに関する私の理解が誤っている可能性もありま す ○
なにかあったら教えてほしいです
4.
今日話すこと ● 今日話すこと ○ DQN
を実装してみた ○ つらかった ○ DQN を実装するとき参考になる (した) 資料集 ● 今日話さないこと ○ 強化学習とは
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)
7.
DQN のテクニックとして有名なもの DQN の学習を成功させるための工夫として有名なもの以外
(主 観) の話をします。例えば以下は話しません: ● fixed target network ● experience replay ● ε の焼きなまし ● エピソード開始時の NOOP 行動
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)
9.
DeepMind 実装が読みにくい https://github.com/deepmind/dqn で公開されている DeepMind
自身による DQN の実装。しかし、 ● Torch (PyTorch じゃないよ) ● Atari の独自ラッパ ● 研究用スクリプトっぽい雰囲気 等が組み合わさって非常に読みにくい。 (深層強化学習の始祖的なものなので仕方ない?)
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)
14.
even/odd frame 処理 Nature版より: (抄訳)
ゲーム機の性能上、偶数/奇数フレームにしか出現しな いオブジェクトがあるので、前の frame との max を取る この処理は言及されることが少ない気がする
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)
16.
frame のリサイズ処理 NIPS 版より: (抄訳)
まずグレスケにしてから 110x84 にリサイズし、その後 84x84 領域をクロッピング
17.
frame のリサイズ処理 Nature 版より: (抄訳)
グレスケにしてから 84x84 にリサイズ → NIPS 版の処理 (クロッピング) が使われていることはまずない 気がする。多少アスペクト比が歪むが、Nature版のリサイズのみ の処理が普通使われる?
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)
19.
ちゃんと学習できてるのかわからない問題 深層強化学習は正しく実装できたのかどうかわかりづらい (バグ があってもなんとなく動くが、学習がうまく進まない) とよく言われているのを聞く。実際、その通りだと感じた。 最初、実装を間違えていたときの 学習中の報酬グラフ (Alien)。 なんかそれっぽいが 実は全然性能が出ていない ちゃんとした学習中の報酬グラフ。スケールやエ ピソードの数え方が合っていないので見にくい が、上の図のスケールで比べると
10倍くらい得ら れている報酬が違う。
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)
21.
frame skip, frame
stack, update frequency これらの値はすべて「4」である。とても紛らわしい。
22.
frame skip DQN では、「一度行動を選ぶと、その行動を暗黙に4frameぶん 繰り返す」という処理が入っている。 それが
frame skip。 論文中では「action repeat」「k」とも呼ばれている。
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
24.
frame stack モデルに入力する状態を、過去4フレームぶん結合したものとする 処理のこと。 ここで生まれる疑問: 「過去4フレームって、skip されたものを含んで4フレーム?除いて 4フレーム?」 →
結論:skip されたフレームは除いて4フレーム
25.
つまり 時間の流れ 実際のゲーム画面 直前のフレームとの max 処理 state grayscale→resize→結合 同じ 行動 同じ 行動 model 行動選択 同じ 行動 state model 行動選択 同じ 行動 同じ 行動 同じ 行動 Q)
state の作り方それでいいの? frame-skip と frame-stack が両方とも 4 ってことは、skip した frame を stack し ろって意味じゃないの? → A) これで良い (らしい)
26.
update frequency モデルを (経験再生を使って)
学習するのは、行動選択4回ごとに 1回だけ 「ゲームのフレーム4回ごとに1学習」ではなく、 「行動選択4回ごとに1学習」
27.
つまり 時間の流れ 実際のゲーム画面 直前のフレームとの max 処理 state grayscale→resize→結合 同じ 行動 同じ 行動 model 行動選択 同じ 行動 state model 行動選択 同じ 行動 同じ 行動 同じ 行動 学習 最後に学習してから
4回目の 行動選択まで学習しない
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)
33.
Huber loss DQN のロス関数が
Huber loss であることは色んな所で言及さ れている しかし、論文の該当部分は非常に混乱を招く表現が使われている
34.
Huber loss Nature 版より: (抄訳)
誤差項 r+γmaxQ’-Q を -1 から 1 に clipping する。 絶対値関数の微分値は -1 か 1 になるので、二乗誤差の (-1, 1) の外側では絶対値誤差を用いることに対応する。
35.
Huber loss (前提) Q学習の更新式を導けるロス関数は: 今、前半の文をナイーブに解釈すると: これはおかしい!こんなことをしたら、[-1,
1] の外側では勾配がゼロになってしまい、学 習ができない TensorFlow で DQN を実装し、多くのスター数を集めているレポジトリでも最初間違って実装していた https://github.com/devsisters/DQN-tensorflow/issues/16 誤差項 r+γmaxQ’-Q を -1 から 1 に clipping する。 絶対値関数の微分値は -1 か 1 になるので、二乗誤差の (-1, 1) の外側では絶対値誤差を用いることに対応する。
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)
38.
ライフを失うとエピソード終了 こんなことは論文に書いてない (たぶん) が、DeepMind
の実装で は確かにそうなっている (正確に言えば、ライフを失うと「エピソード終了」ではなく、「疑似 の terminal 信号を送り、エピソード続行」) ライフを失うとリスポーンしたりするので、その不連続性を嫌った のだろう。。。
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)
40.
RMSPropGraves NIPS 版より: Nature 版より: 実際に行われていること: RMSPropGraves
と呼ばれる optimizer が使われています。 Keras にはない。TensorFlow にはたぶんない。Chainer にはあ る。PyTorch は知らない。
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)
42.
sum(huber_loss) こんなことは論文に書いてない (たぶん) し、普通思わない 何がおこなわれているか:「誤差関数を、バッチ次元で平均を取る のではなく、総和を取る」 普通、ミニバッチ学習ではバッチサイズの影響をなるべく受けない ように総和ではなく平均を取る・・・ なぜこんな処理になっているのかはよくわからない。 当時の常識が今とは違ったのかもしれない。 DQN
の学習率をやたら低く設定する必要があるのはこれが原因では・・・
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 のラッパ
45.
参考資料集 ● Keras-rl ○ https://github.com/keras-rl/keras-rl ●
ChainerRL ○ https://github.com/chainer/chainerrl ● RMSPropGraves について ○ https://arxiv.org/abs/1308.0850 ● いまさらだけどTensorflowでDQN(完全版)を実装する - Qiita ● DQNの生い立ち + Deep Q-NetworkをChainerで書いた - Qiita
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)
Download now