くじら公園

プログラミングなど学んだことについて書きます

CourseraのAndrew Ng氏によるDeep Learning Specializationを受講して

Nextremer Advent Calendar 2017 22日目の記事です。

今年の10月からcourseraDeep Learning Specializationを受講しています。本COURSEを受講した感想と受講する上での注意点などについて記載したいと思います。

f:id:p-baleine:20171222202558j:plain
COURSE 4までの修了証

Deep Learning SpecializationはMachine Learningコースを提供するAndrew Ng氏、および氏が創設したdeeplearning.aiが提供する深層学習に関する一連のCOURSEです。以下の5つのコースから構成されており2017/12/22現在COURSE 4まで公開されています。COURSE 5は2017/12中の公開予定となっています。

  • COURSE 1: Neural Networks and Deep Learning
  • COURSE 2: Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization
  • COURSE 3: Structuring Machine Learning Projects
  • COURSE 4: Convolutional Neural Networks
  • COURSE 5: Sequence Models

タイトルから推測できるとおり、深層学習の基礎から画像・自然言語処理への深層学習の適用について学ぶことができ、特に現実問題への深層学習の適用やそういったプロジェクトの遂行を意識した内容となっています。また、Geoffrey Hinton氏、Yoshua Bengio氏、Ian Goodfellow氏など深層学習を牽引する人物へのインタビュー動画が含まれており、Andrew Ng氏と彼らのラフなインタビューは、普段国際会議等で登壇する際とは若干異なる彼らの一面を見ることができ、とても面白かったです。たまたまGeoffrey Hinton氏がCapsNetについて熱く語っている動画を見た数日後にarXiveでDynamic Routing Between Capsulesが公開され、とても興奮してしまいました。インタビューの詳細についてはHeroes of Deep Learningにて後述します。

受講料について

Deep Learning Specializationは名前の示す通りcoursera上でSpecializationと呼ばれる受講形式に分類されます(Machine Learningコースとは異なる)。Specializationは特定のトピック-今回でいえば「深層学習」に関する一連のCOURSEから構成されます。Specializationには受講料の支払い方についていくつかの種類があるらしく、Deep Learning Specializationはsubscriptionと呼ばれる方法での支払いとなります。subscriptionは毎月受講料を払う形式であり、そのSpecializationに含まれる全COURSEを早く修了すればその分必要となるお金が少なくなる仕組みになっているそうです。Deep Learning Specializationの場合は公式の見積もりで1 COURSE平均凡そ3~4週間のCOURSE 5つから構成されており、また一か月あたり凡そ5 USDとなるため単純計算では合計25 USD要します。実際に受講してみて要した時間については後述します。

12/22時点で本SpecializationのCOURSE 5: Sequence Modelsはまだ公開されておらず、COURSE 4まで終えた場合はそのままsubscribeしていると無駄にお金を支払うことになります。この場合一度subscriptionをキャンセルしてCOURSE 5が公開された際に再度subscribeするようヘルプの方で示唆されています。キャンセルしても取得した修了証やCOURSEの進捗は保存されているため再度subscribe時にレジュームできる仕組みになっているそうです。

私は過去Machine Learningコース受講時に修了証取得のため本人確認情報の登録等手続きを完了していたため、今回は単に本COURSEへの登録手続きのみを行いました。まだ本人確認情報の登録が済んでいない場合はyubessyさんのCoursera の機械学習コースを完走して修了証を取得した話がとても参考になります。

Deep Learning Specializationの受講対象者について

公式では前提知識としてPythonのプログラミングスキルがあげられており、また持っていると望ましい知識として行列・ベクトル計算や機械学習への理解があげられています。

個人的に受講した上での感想としては、極端ですが、Machine Learningコースを修了しており、Pythonの基礎がわかっていれば本COURSEを難なく受講できると思います。また、Machine Learningコースと同等の機械学習に関する基礎的な知識と、Pythonに限らず何かしらのプログラミング言語に関する経験が多少あれば、足りない知識を自身で補完しつつ本COURSEを完走することは難しくないと思います。

良い点・悪い点双方だと思いますが、本COURSEの修了条件に含まれる宿題のPrograming Assignmentsの敷居がMachine Learningコースと比べて若干低く、根気良く取り組めば全COURSEの受講も容易と思います。

2017/12/22時点で全5 COURSEのうち最初のCOURSEまでしか有志による字幕の日本語への翻訳が間に合っていないため、COURSE 2以降を受講する場合には英語のリスニングとリーディング能力が求められます。ただし、基本的にビデオ講義やフォーラム、そのほかのリソース含めてスラング等を用いないなるべく平易な文章となるよう意識されており、また例外なくビデオ講義には英語のsubtitleがついているため、高校卒業レベルの英語能力があれば受講可能かと思います。Specializationには1週間のトライアル期間が設けられているため、まず日本語の字幕をオフにして受講し継続可能か判断してみると良いかと思います(ただし受講時にクレジットカード番号の登録が求められるため、トライアル期間内にキャンセルする場合はキャンセル手続きを忘れず行うよう注意してください)。

以上から本Specializationは、深層学習に興味があり、基礎的な機械学習及びプログラミングの知識と高校卒業レベルの英語能力があれば受講可能であり、また後述しますが深層学習の基礎知識と画像・自然言語処理への適用に加えて、他の教材では多く語られない現実問題への適用―つまり実際の業務へ適用する際のノウハウが多く学べるという点も踏まえて、普段深層学習を業務で利用している人にとっても非常に有益であると考えています。ただし、公式の見積もりでは5ヶ月、私の実測でも2ヶ月強を要するため例えば新入社員の研修等に採用する場合はこの点は考慮する必要があると考えています。

各COURSEの内容について

公式では各COURSEは一週間辺り凡そ5時間で合計凡そ3~4週間要する見積もりとなっています。COURSE 4のみ実測を怠ってしまいましたがそれ以外のCOURSEについて、公式の見積もり通り1 COURSE辺り凡そ15時間を要しました。時間に余裕のある方であれば1日4時間程度割くことで1週間で1 COURSE、5週間で全COURSEを履修することも可能だと思います(実際自分もCOURSE1と2については合わせて2週間程度で終えることができました)。

各COURSEは凡そ3~4週の講義から構成され、各週は1時間強のビデオ講義とクイズ、およびjupyter notebookを用いたプログラミングの実習(Programing Assignments)から構成されています(週によってはPrograming Assignmentsがない場合もあります)。クイズはビデオ講義を受けての10問程度の選択式問題からなっています。Programing Assignmentsはやはりビデオ講義を受けて、Pythonにてプログラミングを行う実習となっており、COURSEによりnumpyのみを用いたニューラルネットワークの実装や、TensorFlowKerasを用いた実装の実習が用意されています。TensorFlowやKerasなど複数の深層学習向けフレームワークが登場して最初戸惑いましたが、講義を通して実際のプロジェクトに深層学習を適用する場合はまずオープンソースの実装を試してみることが推奨されているため、いろいろなフレームワークを触れることに対する抵抗感を軽減することもその理由に含まれているのかと思います。

COURSE 1: Neural Networks and Deep Learning

COURSE 1はニューラルネットワークと深層学習の導入という位置づけの内容でした。ロジスティクス回帰を順伝播・逆伝播アルゴリズムで理解・実装し(Week 2)、続いて浅い-2層ニューラルネットワークロジスティクス回帰を拡張する形で理解・実装し(Week 3)、さらに任意の数の隠れ層を持ったニューラルネットワークを実装してロジスティクス回帰とのパフォーマンスを比較する(Week 4)のが大まかな流れとなります。

受講期間の公式の見積もりは"4 weeks of study, 3-6 hours a week"となっており、実際に要した時間は凡そ13時間でした。

COURSE 1を通した感想としては、本コースは深層学習の初心者向けに入念に練られたビデオ講義とProgramming Assignmentsから構成されていて、多少のプログラミング経験があれば誰でも深層学習を体験できるようになっていました。

ビデオ抗議ではロジスティクス回帰及び浅いニューラルネットワーク、任意の隠れ層を持ったニューラルネットワークの順伝播、逆伝播のアルゴリズムが数式、および図式を用いて繰り返し提示されて、講義を終えるころには受講者がこれらを自然と理解できているようになっていました。逆伝播における微分計算については深い微分に関する知識は前提とされておらず、高校数学を忘れてしまっていても取り組めるように意識されているようでした。

Programming Assignmentsではビデオ講義の内容-ロジスティクス回帰~任意の数の隠れ層を持ったニューラルネットワークの順伝播と逆伝播の実装が課題でした。jupyter notebookを用いていて、問題の提示とそれに対するこちらの回答を自然に読むことができるようになっているのはとても好感を持ちました。(Machine Learningのときは、問題の提示がPDF、回答はoctaveスクリプトだったので、これらと比べるととてもスムーズに問題に取り組むことができました。)実装時はnumpyのみを用いており、特定の深層学習向けフレームワークは登場しません。またヒントが多く提示されているため、ビデオ講義を受けたうえでヒントを読み漏らさなければほぼ躓くことはありませんでした。

個人的には「なぜ深層学習が非線形関数を必要とするのか」や「どの活性化関数を選択すべきか」についての説明が直感的で面白かったです。

逆に平時、深層学習を用いている人にとっては少し退屈な内容になるかもしれません。

COURSE 2: Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization

COURSE 2はニューラルネットワークの各種正則化手法や最適化手法、ハイパーパラメーターチューニングなど学習を効率的に行うための手法とその理解が主な内容でした。Week 1で過学習とこれを避けるための正則化手法―L2正則化ドロップアウトや勾配爆発・消失問題について学び、続いてmomentum、RMSProp、Adam optimizationなど最適化手法を理解・実装し(Week 2)、最終週で落ち葉拾いとしてハイパーパラメーターチューニング、バッチ正則化、多クラス分類について学んだあと、以降のCOURSEで使用することになるTensorflowの基本について学ぶ(Week 3)のが大まかな流れとなります。

受講期間の公式の見積もりは"3 weeks, 3-6 hours per week"となっており、実際に要した時間は凡そ12時間でした。

COURSE 2は深層学習の初心者、および(私のような)普段TensorflowやChainerなどフレームワークを通してのみ正則化や最適化手法を利用している人間が、それらの直感的な理解をビデオを通して学び、またProgramming Assignmentsを通して実際に手を動かして体験できるようになっていました。

COURSE 1から引き続き一貫してモデル改善のイテレーション-Idea→Code→Experimentを効率的に回すことが成功への近道という主張が繰り返し提示され、COURSE 2はそのための各種手法を、ビデオ抗議で直感的に理解し、Programming Assignmentsで自分で実装し目で見てさらに理解を深めるという形式でした。

個人的には指数加重移動平均を学んだ後に、これをパラメーターの更新に適用するmomentum、momentumを拡張したRMSProp、momentumのアイデアとRMSPropのアイデアを合わせたAdam optimizerという一連の最適化手法の説明がわかりやすく面白かったです。また、RMSPropの生い立ちに言及しているときのAndrew先生の笑顔がみていてうれしかった:

One fan fact about RMSprop, it was actually first proposed not in on academic research paper, but in a Coursera course that Jeff Hinton had taught on Coursera many years ago.

COURSE 3: Structuring Machine Learning Projects

COURSE 3は機械学習システムの開発を効率よく進めるためのノウハウなどについての内容でした。COURSE 3の"About this course"には、本コースの内容は現時点でここでしか学べないものばかりであることが強調されていますが、COURSE 3を終えてみて、実際に機械学習を用いたシステムを開発する際の体系立てられたノウハウなど、他の教材ではあまり扱わない内容を学ぶことができました。

本コースは2週構成でした。Week 1ではまず深層学習システムを改善するときの戦略―複数の改善を見込めるアイデアがあるときに、最も有望なものから手をつけるために問題を解析することについて学んだ後、その解析の手段として、数値目標の設け方、human levelのパフォーマンスと学習データ、検証用データ、テスト用データに対するパフォーマンスの比較の仕方などを学びます。Week 2ではそのパフォーマンスを比較する際の方法の一つであるエラー分析の仕方から始まり、学習データと検証・テストデータが同じ分布から得られているかの検証方法などに加え、パフォーマンスの向上が見込める施策として転移学習、multi-task学習、End-to-end学習について学びます。本コースはプログラミングの宿題はなくクイズのみでした。ただしいつもの単発のクイズではなく特定のシナリオを想定したケーススタディとなっていました。

受講期間の公式の見積もりは"2 weeks of study, 3-4 hours/week"となっており、実際に要した時間は凡そ7時間でした。

COURSE 4: Convolutional Neural Networks

COURSE 4は畳み込みニューラルネットワークについての講義でした。Week 1で畳み込みニューラルネットワークの基本について学び、Week 2で畳み込みニューラルネットワークを効率よく利用する選択肢としてまずオープンソースの実装を利用してみることや、転移学習、データ拡張を学びました。またWeek 2のProgramming AssignmentはTensorflowではなくkerasを用いてResNetを実装するという内容でした。Week 3では物体検知について学びます。まずsliding windowによる古典的な実現手段について学び、その後sliding windowの畳み込みニューラルネットワークによる実装、及びYOLO(You only look once)について学びました。Programming Assignementの内容はYOLOの実装でした。最終週は顔認識とニューラルスタイル変換についての内容で、Programming Assignmentではこれらの両方を実装するという内容でした。

受講期間の公式の見積もりは"4 weeks of study, 4-5 hours/week"となっていました。本COURSEについては実際に要した時間の見積もりが出来ていませんが、時間的には凡そ公式の見積もり通りでした。

個人的に普段あまり画像関連を扱うことがなかったため、初めて知ることも多く楽しく受講できました。また本COURSEからProgramming AssignmentにTensorflowに加えてkerasが登場します。2つ以上のフレームワークを学習するのは、オープンソースとして公開されているモデルが既知のフレームワークで実装されているとは限らないなどを意図しているのかと推測しています。COURSE後半ではkerasとTensorflowの両方を適材適所で使い分けて実装する箇所が多く見られ、抽象度の高いkerasで実装できるところはkerasで実装し、より詳細な部分はTensorflowを利用するという使い分け方を学ぶことができました(但し、両方を使いこなすには両方のAPIを知っている必要もあると思います)。

Heroes of Deep Learning

特定のCOURSEの特定のWeekでは、"Heroes of Deep Learning"と呼ばれる深層学習で活躍する人々に対するインタビューを見ることができます(このビデオは全てOptionalとなっていました)。彼らが深層学習に取り組み始めたきっかけや、これから深層学習の世界に跳びこもうとする人たちへのアドバイスなどを聞くことができます。

英語のインタビューで完璧には理解できていませんが、簡単に各ビデオの内容について以下に記載します。

COURSE 1, Week 1: Geoffrey Hinton interview

Geoffrey Hinton氏とのインタビューの内容は、氏が高校時代に脳がどのように記憶を格納するのかということに興味を持ち、生理学や物理学など色々な学問を修めた後AIの道にすすんだこと、Hinton氏による過去数十年の深層学習における発明の中でもBoltzmannマシーンを最もexcitingだと思っていること、またCapsNetなどでした。またこれから深層学習の世界に飛び込もうとする人に対するアドバイスとして、何かしらの直感を元に開発を初めたら、誰かにその直感をナンセンスだと言われても自分の直感を信じて進むことを上げていました。

COURSE 1, Week 2: Pieter Abbeel interview

ロボティクスにおける深層学習の応用で有名なPieter Abbeel氏のインタビューでは、強化学習の今後について、スクラッチからの学習ではなく、過去に学習したことを別のタスクの学習にも再利用する手法への展望、またこれから深層学習の世界に飛び込もうとする人に対するアドバイスとして、TensorFlow、Chainer、Theano、PyTorchなど好きなフレームワークを用いて自分自身で試してみることを上げていました。

COURSE 1, Week 3: Ian Goodfellow interview

Ian Goodfellow氏のインタビューの内容は、神経科学を学んでいた時にAndrew氏のAIの講義を勧められ、この講義を受けてAIの道に進もうと決めたこと、やはりAndrew氏の講義でTAを務めていた時にBeliefNetの論文に興味を持ち、友達と冬休みをつかってGPUマシンを構築したこと、このときから深層学習に未来を見出したこと、GANを発明した経緯―友達とバーで生成モデルについて話したあと、自宅に返って一晩で最初のバージョンのGANを完成させたこと、Yoshua Bengio氏、Aaron Courville氏と書いているテキストについて、深層学習を始めるにあたり必要となる数学の基礎について詳解してあること、アドバイスとしてGithubかArXiveにコードや論文を公開することなどでした。

COURSE 2, Week 1: Yoshua Bengio interview

Yoshua Bengio氏のインタビューの内容は、注意機構が氏のニューラルネットワークに対する見方を変えたこと―これまでニューラルネットワークはベクトルからベクトルへの写像ができる機械と考えていたものが、実際には注意機構によっていかなるデータ構造も扱い可能だということ、教師なし学習について、アドバイスとして非効率に思えても、理解を深めるためにフレームワークを用いずに自分自身で実装を試みること、なぜ自分はそれをしているのか、なぜ人々はそれをしているのか考えることなどでした。

COURSE 2, Week 2: Yuanqing Lin interview

Yuanqing Lin氏のインタビューの内容は、氏が最初のImageNet Competitionの勝者であること、アドバイスとしてオープンソースフレームワークからはじめてみることなどでした。又National Deep Learning Research Labについての言及があり、そのミッションは巨大な深層学習プラットフォームを構築すること、このプラットフォームは深層学習フレームワークと巨大な計算リソースと大量のデータを提供し、利用者はこのプラットフォーム上で研究や開発、またアプリケーションの提供もできるようなものを目指していることなどが語られていました。

COURSE 3, Week 1: Andrej Karpathy interview

Andrej Karpathy氏のインタビューの内容は、ImageNetのデータセットに対する人のベンチマークを自身で計測したことについて、氏が講師を務めたスタンフォード大学での授業Convolutional Neural Networks for Visual Recognitionについて、人工知能の将来の展望について2つの方向性―一つは特定領域に適用される人工知能でもう一つはAGIと考えていること、アドバイスとして、はじめはフレームワークなどを用いずに自分で実装してみて根底の概念を理解することなどでした。

COURSE 3, Week 2: Ruslan Salakhutdinov interview

Ruslan Salakhutdinov氏のインタビューの内容は、制約ボルツマンマシンについて、教師あり学習・教師なし学習・生成モデルについて、またアドバイスとして、新しいこと、発明を試みることを恐れずに異なることに挑戦してみることなどでした。

最後に

Deep Learning Specializationは深層学習の初心者からある程度経験のある人にまで有益なコースで、深層学習の基礎から画像・自然言語処理への深層学習の適用、特に現実問題への深層学習の適用やそういったプロジェクトの遂行方法について学ぶことができます。若干文量が多めですが、深層学習で活躍する人々へのインタビューも含めて一見の価値があると思います。

2017/12/22時点でCOURSE 5がまだ始まっていませんが(元々11月中公開だったのが延期されて今12/29開始予定になっています)、こちらも受講できたら本記事を更新しようと思っています。

以下は各コースを受講した時のメモです(内容が本記事とかぶっている箇所があります):