下町データサイエンティストの日常

下町データサイエンティストの成果物

自分が読んだ強化学習の資料達

こんにちは。nino_piraです。
先日、強化学習の資料の引用ツイートをしましたら、それなりに伸びたので、「もしかして、みんな強化学習に興味ある!?」と思い自分が読んだ&好きな資料をまとめてます。
また、ブログを書いているうちに「何を持って基礎とするか」などカテゴライズも自分の中でも行方不明になっていましたので、色々思うところはあると思いますが、暖かい目で読んで頂ければ幸いです。。。。

あくまでも私の経験

よくある初心者入門資料とかではなく、あくまでも自分が読んだ&好きな資料であることはご容赦ください。
加えて、分散学習系の話はちょっと苦手など、網羅的ではない点もご容赦ください、、、、

強化学習基礎系

これ読めば、強化学習の登場人物(state, action, reward) / ベルマン方程式 / Q学習/ 方策勾配...などの単語の理解ができる系の資料達です。

[Qiita] DQN(Deep Q Network)を理解したので、Gopherくんの図を使って説明

わかりやすい。キャッチーな説明なのでとっかかりやすいと思う。
初めの一歩としては参考になると思います。

qiita.com

[書籍]これからの強化学習

日本語の書籍では、一番基礎から丁寧に追っている本だと思います。
第1章 強化学習の基礎的理論を読むだけで十分だと思います。2章はMUSTではないと思います。

www.morikita.co.jp

[pdf] (小南さん作成) 強化学習入門

よくこここまで綺麗に、日本語で資料をまとめてくれたなぁと思います(脱帽)。
7章の深層強化学習までの6章までを何回も往復して読み込むべき資料だと思います。 github.com

[pdf] (通称) Sutton本第2版

個人的には、原点にして頂点だと思っています。
ただ、英語である点やSutton先生の独特な言い回しなど少しトリッキーな点があります。しかし、個人的にはMUSTな資料だと思います。 なお、第1版は日本語で書籍化されていますが、第2版で大幅updateされているので、是非第2版の無料pdfを読んでください。

http://incompleteideas.net/book/bookdraft2017nov5.pdf

[書籍] 機械学習スタートアップシリーズ Pythonで学ぶ強化学習

個人的には最高の一冊。実践に寄った網羅的な本。
コード例がたくさん載っているので、数式 →具体的な処理を知りたい方にはオススメ。
個人的には、この本の発売時点である程度強化学習を理解していたので、知識の追い打ちとして凄くタメになりました。
もちろん実装だけではなく、理論面もMDPから最新の深層強化学習の話までの流れが丁寧で非常に良書だと思います。
こちらもMUSTな一冊です。

bookclub.kodansha.co.jp

[ブログ]強化学習

初めてこのブログを見たときには衝撃を受けました(脱帽)。。。
マルコフ決定過程(MDP)から最近の深層強化学習まで網羅的によくまとまっています。
このブログを見て「なるほど。理解。」となれば強化学習をある程度知っていると言っても問題ないと思います。

yagami12.hatenablog.com

もう少し強化学習を詳しく知りたい系の人へ

[書籍]速習 強化学習

むずい笑。先輩に「これ読めば強化学習完全に理解できるよ」と初手で渡されたけど、3ページ読むと1日が終わるハードモードであった。
最近はようやく読めるようになってきました。苦笑
数学を得意とする人が読むと、実は読みやすいのかもしれません汗

www.kyoritsu-pub.co.jp

[書籍]強化学習

ちゃんと数式を追っていて個人的には好きです。
強化学習の基礎的な概念を掴んだ後に読んでみると良いと思います。 www.kspub.co.jp

[論文]Deep Learning for Video Game Playing

ゲーム(主にatari)への深層強化学習の発展のまとめ的な論文。 手法の発展がアプローチごとに色分けされてまとめられたこの図が好き。 f:id:pira_nino:20200127204022p:plain

arxiv.org

[動画]UCL Course on RL

追々何かと出てくるDeep MindのSilverさんのUCLの授業のmovie。
英語という壁を乗り越えれば、model freeについてちゃんとまとめられて講座はないと思います。

www0.cs.ucl.ac.uk

DQN

[pdf]DQNからRainbowまで 〜深層強化学習の最新動向〜

本ブログを書こうと思ったキッカケの資料です。
本当にいい資料です。強化学習の基礎 → DQN → Rainbowに至るまでの流れが丁寧に書かれており、至極の資料です。。。。絶対に読んでいただきたい資料です。
余談ですが、もはやRainbowまでは常識になりつつあると個人的に思っています。

www.slideshare.net

[論文]DQNの論文

通称、nature版とarxiv版の2つがあります。実装の設定が若干違うなど微妙な差異はあります。
個人的にはnature版が好きです。ただ、appendixのように字が小さい後編こそが実質本編なのは頂けないなぁとは思いつつも、MUSTな論文だと思います。

https://web.stanford.edu/class/psych209/Readings/MnihEtAlHassibis15NatureControlDeepRL.pdf

Rainbowを構成する要素の論文

強化学習ちょっと知ってる」というには、DQNだけでは物足りない時代になってきました。。。。
そこで、Rainbowを構成する要素も知っていると良いかなぁと思います。
(Rainbowももはや常識になりつつあり、この分野の進化の早さを痛感します、、、、)

[論文]Deep Reinforcement Learning with Double Q-learning

通称ダブルネットワーク。
行動を選択するQ関数、目的関数で用いるそのときのQ値を評価する関数を求めるQ関数をそれぞれ異なるものを使うイメージ。
定期的に同期させる。

arxiv.org

[論文]Dueling Network Architectures for Deep Reinforcement Learning

Q値の出力の前の層に V(s)を表現するレイヤーを入れて、Q(s,a)との差分のadvantageを学習させるイメージ。 なかなか実装が面倒な印象だが、もはや常識になりつつある。。。。

arxiv.org

[論文]Multi-step Reinforcement Learning: A Unifying Algorithm

現在の価値を計算する際に、1stepではなき、複数ステップ考慮するマルチステップの考え方をDQNに適用させた論文

arxiv.org

[論文]Noisy Networks for Exploration

ノイズを含んだレイヤーに入れてあげることで、 \epsilon-greedyよりも複雑な探索を行えるようにした論文。
イメージとしては、どれくらいランダムな行動をすべきかも学習させているイメージです。

arxiv.org

[論文]Prioritized Experience Replay

TD誤差の大きいデータを優先的にsamplingしてバッチで学習させる手法。
苦手なデータを積極的に学習させるイメージだと個人的に解釈している。

arxiv.org

[論文]A Distributional Perspective on Reinforcement Learning

強化学習において、収益期待値 ではなく、分布を用いることの有効性を示した論文です。

arxiv.org

[論文]Rainbow: Combining Improvements in Deep Reinforcement Learning

満を侍してのRainbow。
上記の手法を6+DQNの7つを全部くっつけました的な論文です。
個人的にはラーメンの全トッピングだと思ってます。先輩はロックマンの中ボスラッシュって喩えてました。
個人的には、scoreの図が虹色で書かれてて「おーRainbow!!」って感じで好きです(小並)

arxiv.org

方策勾配系

sutton本第2版を読めば、policy gradient(方策勾配)の数式的な話は理解はできると思います。
ここでは知名度の高い手法をいくつか紹介します。

[論文]Deterministic Policy Gradient Algorithms

通称DPG(決定的方策)。 その名の通り、決定的な方策勾配を導入した論文。
ちなみに、作者のSilverさんの論文達は個人的に凄く好きである。

http://www0.cs.ucl.ac.uk/staff/d.silver/web/Publications_files/deterministic-policy-gradients.pdf

[論文]Continuous control with deep reinforcement learning

通称DDPG。DPGをDeepに適用させたのでDDPG。
連続値のactionを行うタスクへの初手はDDPG。

arxiv.org

[論文]Trust Region Policy Optimization

通称TRPO。
(確率的)方策が突然大きく更新することを防ぐために、KL情報量で制限をかけているイメージ

arxiv.org

実装はこのgithub が参考になります。

github.com

[論文]Proximal Policy Optimization Algorithms

通称PPO。
TRPOの制約のKL情報量をloss関数に入れてしまうイメージ

arxiv.org

実装

自分がよく参考にする実装例

[github]Open AI Baselines

Open AIが有名どころの深層強化学習系の実装例を公開してくれています。
全部tensorflowで書かれています。(verは1.14)
めっっちゃくちゃ参考になります。。。。

github.com

[github]Denny Britzさんの実装例

凄く読みやすいです、、、、よく参考にしています。

github.com

[github]keras-rl

実はそんなに使ったことないので、詳細の言及はできませんが有名ですね。

github.com

環境

強化学習を適用させる環境(env)の紹介です。(タスクみたいなイメージ)

[github]Open AI Gym

ネットでよく見る「振り子」とか「atari」などのタスクが実装されています。
stateに対しactionをするとrewardと次のstateが返ってくるインターフェースが整ったenvが何種類か揃っており、強化学習を試すにはお手軽です。

github.com

[サイト]mujoco

こちらもよく見る ヒューマノイドなどが実装された物理シミュレータ。
ただし、有料LICENSEの契約が必要なので、閾値は高め。
(ちなみに、私はLISENCE持っていないので触ったことないです。)

www.mujoco.org

[giithub]pybullet-gym

無料の物理シミュレーであるbulletをpythonでラッパーさせたpybulletを使ってmujocoなどを再現したモジュール。
こちらはフリーで使えます。しかもgymと同じインターフェースなので使いやすい。
ただし、本家のmujocoと若干rewardの設定が違うなど、細かい部分は異なるので注意。(とは言っても、普通に遊ぶ分には気がつかない程度)

github.com

[github]procgen

最近 Open AIが公開した環境。
触ったことないけど、なんかかっこいい(小並)。

github.com

みんな大好きDeep Mind / Open AI

ここまでも散々登場していますが、みんな大好きDeep Mind / Open AI。
最近、ただのDeep Mind / Open AIファンになりつつある私がいくつかの事例を紹介します。

[サイト]Deep Mind / Open AI

今更な紹介になりますが、強化学習といえばDeep Mind / Open AIと言っても過言ではないかなぁと思います。
加えて、私がDeep Mind / Open AIのファンなので(?)ここからはDeep Mindの論文紹介コーナーになります(汗

deepmind.com

openai.com

[論文]Emergence of Locomotion Behaviours in Rich Environments

「めっちゃ走るやん。。。。」とヒューマノイドを走らせる系の論文の中で(個人的に)一番衝撃を受けた論文。

arxiv.org

www.youtube.com

[論文]Mastering Chess and Shogi by Self-Play with a General Reinforcement Learning Algorithm

通称Alpha zero。
(モンテカルロ探索と強化学習とself-playとを組み合わせた)かの有名なalpha goの続編的な論文。
とうとうドメイン知識0からのself-playで囲碁も将棋もチェスも学習できるようになったらしい、、、、すごい。。。。

science.sciencemag.org

[論文]Emergent Tool Use from Multi-Agent Interaction

ここ最近で一番好き論文。agentにかくれんぼをさせるタスク。
アーキテクチャが凄くわかりやすい。agentから見えないobjectのembeddingベクトルを0に落としながら、transformer層に入力するアーキテクチャ
見えないものは0という発想がいかにも人間らしくて非常に好き。 また、学習の過程や裏技を見つけ出してくるところが可愛い。(ただし計算量は可愛くない)
また、オフィシャルムービーもエモくて好き。(語彙力)

openai.com

www.youtube.com

[論文]Solving Rubik’s Cube with a Robot Hand

ルービックキューブをロボットハンドで解くというタスク。
シミュレーションでAutomatic Domain Randomizationという手法を用いたのがミソ。
そして相変わらずMovieがエモくて好き。

openai.com

www.youtube.com

[論文] Dota 2 with Large Scale Deep Reinforcement Learning

Dota2で人間に勝った論文。 なんというか規模感が違すぎて初見の際にはちょっと笑いました。 論文には学習パラメータの設定など、事細かに書かれています。 (申し訳ないのですが、実は読み込んでません汗)
また、相変わらずOpen AI作成のまとめサイトはオシャレで大好きです。

openai.com

f:id:pira_nino:20200128222635p:plain

[サイト]OpenAI→PyTorch

ちょうどブログを書いている途中で発表された告知。
Open AIが深層学習フレームワークをPyTorchに標準化との告知です。
強化学習の多くはtensorflowで実装されているイメージを個人的に持っていましたので、それなりに衝撃的なニュースでした。

openai.com

その他個人的に好きなリンク

完全に個人の趣味です。

[論文]拡張されうる行動空間での特徴の表現学習を伴う価値関数の近似

DeNAさんのオセロニア強化学習論文。
キャラの情報をembedding化することがポイント。凄く好きな論文です。

www.jstage.jst.go.jp

[論文]Efficient Neural Architecture Search via Parameter Sharing

通称ENAS。強化学習でNNのアーキテクチャー探索を実現した論文。
ざっくりいうと、一個前のNNのアーキテクチャをstate、metricをrewadにしてLSTMに入れて学習させるイメージです。
余談ですが、NAS(ってかAuto ML?)界隈ですとDARTSが流行ってますね。

arxiv.org

[論文]Go-Explore: a New Approach for Hard-Exploration Problems

Uberが発表した論文。
これまで、モンテズマというゲームは強化学習で全然解けない!!と話題であった中突然登場したブレイクスルー。以下の波線を使った図があまりにも衝撃的でした。
内容としては、内発的動機をベースに、さらにゴールからの逆向きの探索をより効率的に探索させるように改良したイメージです。

f:id:pira_nino:20200128220432p:plain

eng.uber.com

[論文]Asynchronous Methods for Deep Reinforcement Learning

有名なので紹介。通称A3C。 Advantage、Actor-Critic、AsynchronousでA3。 Rainbowの論文の中で比較手法として挙げられている。
分散学習。 各スレッドの環境内で異なるagantが経験を積み、共通のパラメータサーバに勾配を渡すイメージです。

arxiv.org

[論文]分散学習系(Gorilla -> Ape-X -> R2D2 -> R2D3)

この進化の過程いいですよね(笑
分散版Priorized Experience Replayを入れたり、RNN入れたり、Replay時に隠れ層の初期状態を工夫したり、demonstrationを導入したりと着々と進化を遂げている分散学習系の論文達です。
さて、次回作はどんな名前の論文が出てくるのか非常に楽しみです。

arxiv.org

arxiv.org

arxiv.org

最後に

余談ですが、実は社内wiki に書いていた記事を(ほぼ)そのままコピってきたので、数時間でこのブログが作成できました。
諸々間違っていることを書いていましたら、すいません。。。
皆様の知見にちょっとでも貢献できれば幸いです。。。