強化学習で参考になったサイトまとめ

# これなあに？
お世話になっているLiaroという会社で強化学習の勉強会をやりたいね～という話になり、興味がありつつもノータッチだった僕は急いで情報を集め勉強することになりました。

この記事は勉強会を行うにあたって、参考になったサイト、もしくは情報をまとめたものです。
勉強会で共有するために作ったけどせっかくだしqiitaにあげておくことにしました。
読んだ感想や要点なんかも簡単にまとめれたらと思います。
特に参考になった記事、重要だと思った記事には★マークをつけておきます。

僕自身が強化学習初心者ということ、短い時間でまとめたことから誤りや不適切な点があるかもしれません。
その場合は指摘していただけると幸いです。

## 理論解説
ほとんどが入門記事。大抵シンプルなクエリでググったら上位に来る記事。
記事を順番に読むことを何週もすることでどんどん理解が深まっていくので、理解したいなら3週はしよう。
僕は2週くらいしかしてない。つまり、理解してない。

### [ゼロからDeepまで学ぶ強化学習](http://qiita.com/icoxfog417/items/242439ecd1a477ece312)★
勉強の際に一番参考になったと思う記事。
問題設定をかみ砕いて解説するところから始まり、最新のDQNまでまとめられている。
実装の際重要になる工夫などもカバーしており、情報に引用がしっかりついているのがとても良い。  
  
  
### [Pythonではじめる強化学習](http://qiita.com/Hironsan/items/56f6c0b2f4cfd28dd906)
これも参考になる入門記事。
図が多く理解しやすいと思う。
使われているコードは[Udacityの講義](https://www.udacity.com/course/machine-learning-reinforcement-learning--ud820)から引用しているらしい。
英語ができる人はこっちもみるとよさそう。
    
### [強化学習入門](http://www.slideshare.net/mitmul/ss-20417728)★
画像処理・chainer界隈では有名(だと個人的に思っている)な[@mitmul](https://twitter.com/mitmul)さんの解説スライド。
古典的な心理実験や強化学習の背景、問題設定が図でわかりやすくまとまっている。
スライドによる擬似的なアニメーションがあるため、思考の流れが理解しやすくてよかった。
[照英](https://www.google.co.jp/search?q=%E7%BF%94%E8%8B%B1&safe=off&source=lnms&tbm=isch&sa=X&ved=0ahUKEwiXjP-c3YPPAhWDGZQKHStPAqsQ_AUICigD&biw=673&bih=646#safe=off&tbm=isch&q=%E7%85%A7%E8%8B%B1)がかわいい。
  
  
### [深層強化学習：ピクセルから『ポン』 – 前編](http://postd.cc/deep-reinforcement-learning-pong-from-pixels-1/)★
NeuralTalkで有名なStanfordのKarpathy氏の深層強化学習のブログ記事の翻訳。元記事は[こっち](深層強化学習：ピクセルから『ポン』 – 前編)。
他の解説記事はQ学習ばかりだが、こちらはpolicy gradients(方策勾配法)についてまとめられている。
Pongを学習するニューラルネットがnumpyを使ってスクラッチ実装(130行程度!?)されていてすごい。
Karpathy氏のブログ記事はどれは質が高いので、機械学習に興味がある人は読むべき。

## 書籍・論文
書籍や論文で勉強できるようになりたい。
良く引用されるものをまとめる。

### [Reinforcement Learning: An Introduction](https://webdocs.cs.ualberta.ca/~sutton/book/the-book.html)★  
有名(らしい)な強化学習の教科書。
強化学習の基礎を学びたいならこれで間違いないらしい。
英語版はwebで無料で読める。日本語版書籍は有料。
### [http://arxiv.org/pdf/1312.5602.pdf](http://arxiv.org/pdf/1312.5602.pdf)  
Deep Q-Learningの論文。  
DeepMindの名前を世に知らしめるきっかけになった論文だった気がする
### [Mastering the game of Go with deep neural networks and tree search](http://www.nature.com/nature/journal/v529/n7587/full/nature16961.html)  
囲碁のトッププロを倒して一躍話題となったDeepMindのAlphaGoの論文。有料。

## ライブラリ
実装してみたい！試してみたい！となったときに。
理解を深めるためにスクラッチで書くのも良いけれど、すぐ動かすならやはりあるものを使うのが一番。  

### [PyBrain](http://pybrain.org/)
深層学習が流行り始めたころは良く使われていた(と記憶してる)ライブラリ。
ただ、標準で強化学習のための環境を提供しているのはこれぐらい？(要調査)
これを使って[迷路を解いてみる実装例](http://qiita.com/GushiSnow/items/bfb51afc7d57451bc036)が見つかった。

### [REINFORCEjs](http://cs.stanford.edu/people/karpathy/reinforcejs/)
あるかな？と思ってたらやっぱりあったjavescriptのライブラリ。なんでもJSの動きがここにも？
サイトにデモがあり、眺めてるだけで結構面白い。JSの強みを活かしている。
というか作者がkarpathy氏。すごいなこの人。

### [OpenAI Gym](https://gym.openai.com/)★
強化学習のための__環境__を提供するライブラリ。この環境に対してTensorFlowやChainerなどを使って強化学習の開発をしてくださいね、という感じ。
みんなが同じ環境を使えるので、他との比較も行いやすい。訓練結果をアップロードすることもでき、ランキングが公開されているのでモチベーションにもつなげやすい。
活動も活発なので、他の機械学習ライブラリを使える人はこれを使うのが良いと思う。
まずは[使える環境](https://gym.openai.com/envs)を見てみよう。

### [Life in Silico(LIS)](https://github.com/wbap/lis)
ドワンゴ人工知能研究所が開発した、強化学習に必要になる要素をまとめたライブラリ。強化学習のための環境とエージェントが提供されている。
エージェントを動作させる環境はUnityで構築するため、見栄えは一番良い。
CNNとDQNを組み合わせたエージェントが提供されているし、chainerなどで自作したエージェントもLISの環境で試せるらしい。

## 実装例
他の人の実装を読むのは理解するのに役立つ。

### [Q学習-最良経路を学習するスクリプト書いた (powered by Python)](http://d.hatena.ne.jp/Kshi_Kshi/20111227/1324993576)★
迷路探索を行うエージェントの学習を行う実装例。python実装。
今回の勉強会のコードはここを非常に参考にした。

### [DQNの生い立ち　＋　Deep Q-NetworkをChainerで書いた](http://qiita.com/Ugo-Nama/items/08c6a5f6a571335972d5)
Deep Q-NetworkのChainer実装例。
Q学習やDQNに関する解説もついている。
### [DQNをKerasとTensorFlowとOpenAI Gymで実装する](https://elix-tech.github.io/ja/2016/06/29/dqn-ja.html)★
タイトル通りの記事。
強化学習の解説もあり、特に既存手法や強化学習自体に存在する問題点の解説が良かった。こんなむずかしさがあるのか～みたいな。
コードの解説も詳しく、Keras等に慣れている人はこの記事は非常に参考になるはず。
### [強化学習で考えるギャンブラーの最適行動](http://kivantium.hateblo.jp/entry/2015/09/29/181954)
上でも挙げた『[Reinforcement Learning:
An Introduction](https://webdocs.cs.ualberta.ca/~sutton/book/the-book.html)』の4章に出てくる「ギャンブラーの問題」についての実装例。C++実装。
問題設定が面白い。

## まとめ記事
ぼくのまとめを見るよりももっと有意義なまとめをしてくれてる人はたくさんいます。

### [awesome-rl](https://github.com/aikorea/awesome-rl)★
githubに上がっているawesomeシリーズ(僕が勝手にそう呼んでる)の強化学習編。
相変わらずの情報量。ライブラリや論文が気になる人はこれを読みましょう。
他のトピックもすごく良いので興味のある人は是非。

- [Recurrent Neural Network](https://github.com/kjw0612/awesome-rnn)
- [画像処理全般](https://github.com/kjw0612/awesome-deep-vision)
- [深層学習を使った画像処理](https://github.com/kjw0612/awesome-deep-vision)
- [Random Forest](https://github.com/kjw0612/awesome-random-forest)

### [Deep Reinforcement Learning Papers](https://github.com/muupan/deep-reinforcement-learning-papers)
これも有志の方がまとめてくれた論文リスト。
最近の論文もカバーされていてすごい。