UDACITY Deep Reinforcement Learning Nanodegreeの受講記録

# はじめに
オンライン講座のUdacityで深層強化学習のコースを修了したので、経緯や感想をまとめます。受講を考えている人の参考になれば幸いです。私も受講前に「[Udacity の深層強化学習ナノ学位を修了しました](https://qiita.com/ToshihiroNakae/items/b753b8aad0c6709a49bc)」を参考にさせていただきました。

# 経緯
2019年10月中旬、アカデミックな事がしたい欲求が高くなる。以前から興味があった深層強化学習の学習コンテンツを探し、UDACITYのコースを見つける。[Preview版](https://www.udacity.com/course/ud893-preview)をやってみて好感触だったが、4ヶ月で646€と受講料が高いので躊躇。その後、CourseraやEdxなどもチェックして下記の点で受講を決意。

 - ナノディグリーが取れる（修了した記録が残る）
 - 以前から使ってみたかったpytorchメインの講座
 - Udemyで何度か挫折していたので、費用の高いUdacityで自分にプレッシャーをかけたかった
 - メンターやLinkedInのカウンセリングがつく
 - アカデミックとハンズオンの中間くらいの内容が好感が持てた
 - 家族も応援してくれた

例年9月頃にクーポンが出回るらしく、ちょうど25％オフのクーポンを見つけて適用し2019年10月19日に受講登録。

# 課題
この講座では3つのプロジェクト課題の提出が必要です。

## 1. [Navigation](https://github.com/udacity/deep-reinforcement-learning/tree/master/p1_navigation)
黄色いバナナを集める課題です。
![banana_16L.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565878/cd709cb5-7278-ed34-2452-aeabef3eea1a.gif)

フルスクラッチで実装も可能ですが、講義中にAtariのゲームで有名になった[DQN](https://storage.googleapis.com/deepmind-media/dqn/DQNNaturePaper.pdf)のサンプル実装が与えられており、これをベースにしました。加えて[Rainbow](https://arxiv.org/abs/1710.02298)に使われている手法からいくつか実装することが奨励されており、[DoubleDQN](https://arxiv.org/abs/1509.06461)と[DuellingDQN](https://arxiv.org/abs/1511.06581)を実装しました。[Prioritized Experience Replay](https://arxiv.org/abs/1511.05952)を実装する場合は[ヤロミルさんのページ](https://jaromiru.com/2016/11/07/lets-make-a-dqn-double-learning-and-prioritized-experience-replay/)が参考になりそうですが時間の都合でスキップしました。
この課題では状態としてバナナの距離などが与えられており、オリジナルのDQNのようなピクセル画像は使っていません。ただ課題提出後のオプショナルな課題として環境は用意されています。どこまで深掘りするかは自分次第というところです。
課題はGitHubで提出する事が奨励されています。業務でGitを使っていなかったため、README.md、gitignoreを書き、Gitの一通りのコマンド実行まで経験できたのが一番の収穫でした。

## 2. [Continuous Control](https://github.com/udacity/deep-reinforcement-learning/tree/master/p2_continuous-control)
20台のロボットアームが目標を追従できるように訓練する課題です。（通称もやし）
![track_s.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565878/5fb17a3d-7fb9-d033-4ba1-888269e53bd7.gif)
1台版か20台版かを選べるようになっており、マルチエージェントの方が面白そうだったので20台版を選び、[A2C](https://openai.com/blog/baselines-acktr-a2c/)を適用しました。講義中に推奨のレポジトリとして[ShangtongZhang/DeepRL](https://github.com/ShangtongZhang/DeepRL)が紹介されており、**なるべく**見ないように課題1のコードをベースに実装を進めましたが、行動を連続値で出力する方法やPytorch、テンソルの理解不足、ハイパーパラメータの調整で手こずって、1ヶ月くらいかかりました。

## 3. [Collaboration and Competition](https://github.com/udacity/deep-reinforcement-learning/tree/master/p3_collab-compet)
2つのエージェントがボールを長く打ち合うように訓練する課題です。
![tennis.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565878/a97ddad4-24a7-f8f0-8a37-603f524eba23.gif)
課題2と同じモデルがそのまま適用できるため、実装は数時間で終わりました。課題2よりも学習に時間がかかる事に気づかず、学習していないのではないかと思ってハイパーパラメータ調整で試行錯誤しました。他の手法も試してみたかったのですが、早く課題を終わらせたい気持ちが勝って提出しました。

課題のレビュアーは毎回ランダムに選ばれるようですが、最後のレビュアーの方が素晴らしく、有用なコメントをいただきました。逆に課題1、2のレビュアーは「グレートだ」程度しか書いてくれておらず、不満が残りました。

## Optional: GitHubとLinkedInの添削
Udacityの特徴として、就職の斡旋まで行ってくれるというサービスがあります。（これが原因で受講料が高いという見方もあります。）直近で転職希望はないですが、せっかくなので添削してもらいました。GitHubはこの課題提出用に登録したプロジェクトがあるだけのため、これといったフィードバックはありませんでした。LinkedInはあまり情報登録していなかったのですが、この添削用に少し情報を充実させ、丁寧な添削をいただきました。修了後もレジュメの添削サービスや就職先の紹介サービスもあり、どういう求人が来るのかは興味があります。
課題の添削もそうですが、24時間以内に必ず添削結果が返ってきたのが素晴らしかったです。世界中に添削者を配置しているのだと思います。

# メンターとコミュニティ
メンターは親切な方にあたり、定期的に困った事がないかメッセージをいただきました。週1でビデオ会議可能なのですが、チャットで事足りる内容が多かったため、私は２回ほどしか実施しませんでした。メンター自身も同コースの修了者で機械学習のエキスパートというわけではないため、深い質問には答えてもらえない感じでした。
Udacity内のページに学生用のチャンネルがあり、わからないところを尋ね合ったり、お互いに励まし合ったりという交流もできます。メンターから返信がないなど不満も書き込まれていたので、私はやはり良いメンターに当たったようです。全然学習が進まないという書き込みが頻繁に合って、みんな苦労しているなと励みになりました。

# 講義内容
講義ビデオの内容は強化学習を全く知らない人がエッセンスを掴むためにはよくできていると思いました。ただ初学者向けという事で、理論や公式をきちんと追いたい人には不向きです。理論や公式は[Sutton先生の本](http://incompleteideas.net/book/the-book.html)や論文を参照という方針でした。
課題に直結していない講義もあるのですが、それらはビデオを見てJupyter Notebookや仮想環境でプログラムをポンポンと実行して終わるので私には力にならない感じでした。また、テーマに合わせて講師が変わるのですが、講師とビデオの質にはムラがあるように感じました。

# 修了
4ヶ月の先払いコースでしたが、3ヶ月弱で修了する事ができました。もっと学びたければ修了せずに、追加課題に取り組むなどもできると思います。修了後もこれまでの教材や学生のコミュニティにはアクセス可能です。また修了後にSlackの同窓生チャンネルへのリンクが送られてきました。ここで継続して仕事探しをする方もいるようです。

# おわりに
大学の研究室に配属されたての頃、Sutton先生の強化学習本の第一版を見ながら、Dos窓でタイルワールドを作ったり、倒立振り子の振り上げで遊んでいたのを思い出し、とても楽しい毎日が過ごせました。受講料が気にならない or 受講料によってモチベーションが上がる人であればオススメの講座です。

# 補足
本記事執筆中に「今日だけ全コース50％オフ」という知らせが来ました。
Deep Reinforcement Learningの価格を見てみると、1272€の50％で636€となっています。私の受講時は割引なし、かつクーポン適用前で646€でした。割引に踊らされず自分の納得できる価格で受講判断ください。

# 参考
- 課題1のレポジトリ [公式](https://github.com/udacity/deep-reinforcement-learning/tree/master/p1_navigation) , [提出レポート](https://github.com/yshk-mrt/p1-go-bananas)
- 課題２のレポジトリ [公式](https://github.com/udacity/deep-reinforcement-learning/tree/master/p2_continuous-control) , [提出レポート](https://github.com/yshk-mrt/p2-ball-tracking)
- 課題3のレポジトリ [公式](https://github.com/udacity/deep-reinforcement-learning/tree/master/p3_collab-compet) , [提出レポート](https://github.com/yshk-mrt/p3-tennis)