UdacityのDeep Learning Nanodegree Foundation Programを修了しました

今年の1月末からUdacityのDeep Learning Programを始めて先月修了したので、どんな感じだったか書きたいと思います。

目次:

Deep Learning Nanodegree Foundation Programとは?

  • Udacity が運営する講座で、プログラミング経験者を対象としたDeep Learningの基礎コースです。
    (TechCrunchの紹介記事はこちら )
  • 費用は$399で、$100分のAWS creditがもらえました。(課題をするためのGPUインスタンス用)

講座の流れ

  1. Udacityのサイト上でtextやvideoを視聴

    • textはこんな感じ。 f:id:junqi:20170606234509p:plain
    • videoは全てyoutubeで公開されていて、こんな感じ。
      www.youtube.com
  2. Jupyter Notebook で穴埋め形式の問題を解く (+解説videoを視聴)

  3. (月1程度で) Projectと呼ばれる課題に取り組んで提出

    • これも穴埋め形式のnotebook で、完成したら必要ファイルをzipでupload or githubリポジトリ名を伝えると、レビューが返ってきます。
  4. 余裕がある人向けにcoding challengeというのがあって、出題videoを見る → githubにupされた課題に取り組む → 翌週のvideoで優秀者の発表 という取り組みもありました。 また深く学びたい人用の論文等のリンク集もありました。

サポート

  • Udacityのサイト上にForum (掲示板っぽいもの) と、Slackのチャンネルがありました。
    • Slackでは、週2回ほどoffice hour (講師の人が質問にすぐ回答してくれる) もありました。
      (でも日本時間だと早朝の時間帯が多かった 😂 )
    • Slackには講座開始時点で3,000人ほどいて、自分が詰まった点はSlack上で検索すればたいてい上がってました。
  • Projectを提出した後は必ずレビューが返ってくるのですが、(恐らく人がコードを見て)フィードバックをくれるようでした。

カリキュラム

カリキュラムは大きく分けて
1. Neural Networks
2. Convolutional Neural Networks (CNN)
3. Recurrent Neural Networks(RNN)
4. Generative Adversarial Networks(GAN)
の4つから成っています。

  • 特に1は基礎的な部分から丁寧に扱っていて、環境構築(numpyの使い方、anacondaの導入法)に始まり、パーセプトロンの説明 & クイズ(XORパーセプトロンを作るetc)、数式の説明、numpyだけでNeural Networkを作ってみる という感じで順を追って理解を深めることができました。
  • 2の前半で MiniFlow という、TensorFlowを単純化したようなフレームワークを作る回があり、その後にTensorFlowの使い方の説明 → 以降2〜4は全てTensorFlowで行う という流れでした。
    • 2以降は進みも早く、TensorFlowでどのようにモデルを作るのかはある程度わかったものの、「とりあえずこうする」という"おまじない"的な扱いの部分もあったように思います。
    • 例えばNetworkのトレーニングには毎回 tf.train.AdamOptimizer というのを使ってるけど何をやってるんだろうetc (ただ、API仕様に論文へのリンクがあったりでいくらでも調べることは出来ますが)

Project(課題)

以下の5つのProjectに取り組みました。

1. numpyでNeuralNetworkを作ってレンタルバイクの需要予測を行う
「何月何日の何時台に何人がバイクをレンタルした + その時間帯の気温、湿度」データを基に予測を行う。
最終的には以下の予測結果が得られました。(青が予測) f:id:junqi:20170610140958p:plain
2. TensorFlowでCIFAR-10(犬、猫等の10カテゴリの画像セット)の画像分類を行う
ランダムに画像を与えて予測した結果が以下です。
(予測精度は約63%で、以下の結果の場合automobileは正しく判別できているが、birdはできていない)
f:id:junqi:20170610141525p:plain
3. TensorFlowでRNNを構築し、ザ・シンプソンズのTVスクリプト(台本)を生成する
以下の様な台本が生成されましたが、学習のベースとなるデータが少ないこともあり、文法的にはめちゃくちゃなものになりました。
f:id:junqi:20170610141845p:plain
4. TensorFlowでsequence-to-sequenceモデルを構築し、英語からフランス語への翻訳を行う
以下のような翻訳結果が得られました。これも学習に使ったテキストデータは10MBを切るので精度は高くありません。
f:id:junqi:20170610142413p:plain
5. TensorFlowでGAN(Generative Adversarial Networks)を構築し、手書き文字画像と人間の顔画像の生成を行う
学習にはMNISTCelebA というデータセットを使っています。
学習の最初は
f:id:junqi:20170610143200p:plain f:id:junqi:20170610143211p:plain
こんな感じだったものが、
(なんということでしょう) 学習後は
f:id:junqi:20170610143251p:plain f:id:junqi:20170610143258p:plain
こんなのを生成するように!

上記は提出したProjectの抜粋ですが、フルで見てみたい方はこちら

講座の良かった点

  • Deep Learningの基礎から、割と最新の話題(GAN等)まで手を動かして学ぶことができる
  • 各カリキュラムの最初の方のvideoがかなり作り込まれていて、概要を掴みやすかった
  • 試行錯誤が高速にできた
    • 解説やProject がJupyter Notebook で提供されていたお陰で、
      「まず解説を読む → 次に関数のブランク箇所を穴埋めしてみる → shift + Enterでcellを実行すると
      その関数のテストが走り、実装が合っているかすぐわかる 」という流れが快適でした。
  • 環境構築でハマることがなかった
    • 自前の環境を作るためにanacondaの導入法の説明もあったのですが、Projectの際はEC2のAMIが提供されているので、
      sshインスタンスにログイン → source activate dlnd で課題用の環境を有効化
      jupyter notebook {Projectのnotebook}.ipynb でnotebookを起動
      → ブラウザからnotebookにアクセス」 という手順ですぐにProjectに取り組めました。
  • Projectに提出期限があり、〆切効果でがんばれた
    • 自分の場合本だけでやっていたら挫折してたかも・・

こんな人にオススメ

  • 基礎から(数式レベルで)理解したい人
    • 数式に関しては、色んな所でオススメされているO'REILLYの「ゼロから作るDeepLearning」が確かに良さそうです。「TensorFlowでRNN、GANもやってみたい」場合にこの講座が良いかもしれません。
  • 英語がある程度わかる人
    • 講座のtext, videoは全て英語です。「Readingは出来るけど、Listeningは・・」という方なら、youtubeの自動字幕機能を使えば何とかなると思います。
  • 時間に少し余裕がある人
    • Udacity上では「週に5,6時間確保できればok」と書いてあったような気がしますが、1ヶ月目は講座に慣れていない & 数式の理解に手間取ってかなり時間がかかりました。
      • 週末2日 + もう3日をまるっと講座に充てる ぐらいはかかったと思います。
        数学の復習(微分線形代数)にも時間をとられたので、数学大得意であればそこまでかからないかも。

講座を終えて

  • 次の講座として「Self-Driving Car」「Artificial Intelligence」「Robotics」というコースがあり、Deep Learning受講者向けに割引があるよーという案内がきました。
  • 今後については、ひとまずDeep Learningの基礎 & 全体像 がある程度掴めたので、自分で手を動かしつつ身につけていきたいと思っています。
    (手元にある自分のライフログデータを学習させて予測してみたい & 仕事にも活かしたい)
    • ちなみに、次の講座は1ターム(3ヶ月)$800かかるらしい(計2ターム)のですが、現時点でそこまでかけて進みたいかというとそうでもないな〜というのもあり。
  • 約4ヶ月の講座をやりきったというのは自信にもなったし、受講してよかったと思います 😇