tldr

UdacityのDeep LearningのNanodegreeを受けました。
Tensorflowつらい。Hyper Parameterのチューニングつらい。
でも、勉強になりました。

Udacity Nanodegreeとは

UdacityはいわゆるMOOC(Massive Open Online Course)でプログラミングやデザインがオンラインの講座として学べます。
Udacity自体は無料ですが、いくつかのコースをまとめた有料のミニ学位(Nanodegree)を提供していて、そこでしか見れない講座もあります。

オンライン講座だと他にLynda.comやCode Schoolなどもありますが、動画を見るだけでなく、課題の提出を要求され、要求水準を満たさないと合格になりません。同種の形態のCourseraとの違いはCourseraがどちらかというと大学の講義に近いのに対して、Udacityは企業の研修に近いです。

Deep Learning Nanodegreeとは

Deep Learning Nanodegreeは2017年から始まった新しいNanodegreeです。

深層学習に特化していて、無事終えると自動運転やArtificial IntelligenceのNanodegreeへの入学許可がもらえます。
Techcrunchの記事によると、それぞれ本来16%、4.5%のみ入学許可が出ているとの事なので価値はありますが、自動運転のコースでいうと、機械科卒の自分がPythonできますと言い張れば普通に通ったので、工学系卒ならお目当の講座一直線でもいいかもしれません。

なお、Deep Learnig Nanodegreeには自動運転コースにあるようなSVMやDecision TreeのようなNon-deepな機械学習はありません。逆にRNN系はこちらのみ(少なくともTerm1までで確認した限りでは)。
Machine Learning Engineer Nanodegreeだと両方入っていたりするんでしょうか。

Sirajさんはそんなに教えてくれない

さて、本講座ですが、Udacityのページを開くとYoutuberのSirajさんが教えてくれることを大々的に宣伝しています。
udacity_top.png

ただ、実際やってみてわかったのは、むしろメインの講師は横にいるMatさんということです。課題のプロジェクトの前に予備的な説明パートがいくつかあるのですが、そこでの講師も基本Matさんです。一応Siraj講座とMat講座が交互になる構成になっていますが、Sirajパートは独立したYoutubeの転載なので、敷居を下げるための導入担当という印象でした。

なお、GANのパートではGANの論文の著者Ian Goodfelow自らGANを説明してくれます。すごいですね。
ian.png

フレームワークはTensorflow

さて実際の講義ですが、Web上での説明の動画やテキストの他にJupyter Notebookでの作業を伴います。
コードは全てGithubで公開されていて、課題は穴埋めしたJupyter Notebookを提出することになります。

Deep Learningの性質上、GPU必須なのでAWSやFloydHubの無料枠が一応もらえますが、Jupyter Notebookをサーバーとして動かす都合上、IP制限かけないと誰でも見えてしまうので、手元にGPUマシンがあると安心かもしれません。

フレームワークはTensorflowなのでChainerやKerasと比べると低いレイヤーでの実装が度々要求されます。その分力がつくとも言えますが、相応の時間をコミットすることが要求されます。一応SlackのチャンネルやForumもありますが、だいたい日程通りに進めていても、Project4終了時点で君はTop 20%にいると言われたので、挫折率は高いのかもしれません。

実際の講義の内容

以下、実際に学べる内容です。

1. Neural Networks

AnacondaやJupyter Notebookの使い方の説明。課題はNeural Networkの構築でnumpyを使ってsigmoid関数ベースのニューラルネットワークを実装します。

2. Convolutional Networks

Sentiment AnalysisやTFLearnの解説、誤差逆伝播法の実装、CNNの解説。課題は画像分類。Dopoutの解説もあります。

3. Recurrent Neural Networks

RNN、 Word2vec、 ハイパーパラメター、 TensorBoard、初期化、転移学習、seq2seq、強化学習(さわりだけ)。課題はシンプソンズの会話の生成と機械翻訳。

個人的に一番面白かったのは初期化の部分です。
レンジの違いや([0,1]か[-1,1])、分布の違い(uniform、truncated_normal)による最終精度を比較していたのがタメになりました。

4. Generative Adversarial Networks

GAN, DCGANの解説、半教師あり学習。課題は顔画像の生成。
実装上間違えやすい部分の説明もあり、わかりやすかったです。
ただ、それをもってしても中々チューニングがうまくいかず、GANは難しいです。

全体を通して

講義を受けている中でTensorflow 1.0やKeras 2.0の発表がありました。後半の講義でも早速サンプルのバージョンがTensorflow 1.0となっていて対応がとても早かったです。

機械学習分野は進化が早いので紙の本だと情報が古くなりがちです。オンライン講座の醍醐味は継続的にアップデート可能ということなので、うまくフィットしていて良いと感じました。