Completed “Neural Networks and Deep Learning” course provided by deeplearning.ai on Coursera. It was a great session for engineers (or me) who even almost forgot math classes.
オンラインで受講できる機械学習(ディープラーニング)のコースには、いくつか有名なものがあります。その中の一つ、deeplearning.ai 社の “Neural Networks and Deep Learning” を受講してみました。
このコースは、もっと大きな “Deep Learning Specialization” というコース群(全 5コース)中の最初のコースになっていて、しかしこの 1コースだけで、平均 4週間(実受講時間 18時間程度)を要するという、なかなか内容の濃いものになっています。コース中ではプログラミング言語として Python + NumPy を使っていて、昨今のニーズに合っているように思いました。
他にもっと有名なコースとしてスタンフォード大学の “Machine Learning” というものもありますが、そちらは MATLAB (GNU Octave) をベースとしており、MATLAB はもちろん優れたツールですが、やや時代遅れな点は否めません。さすがに MATLAB はしんどかったので、前述の “Deep Learning Specialization” を受講した次第です。
何を学べるのか
詳細は上記のリンクから参照して頂きたいのですが、このコースでは最近流行りの Keras や Caffe といった機械学習フレームワークを一切使うことなく、原則として Python + NumPy だけで機械学習(深層ニューラルネットワーク)の仕組を理解していくという講義になっています。
講義の進み方ですが、ビデオで授業を受けた後、マークシート(?)式のテストを受け、オンラインで提供される Jupyter Notebook を使って課題のプログラムを作成して採点を受ける、という形になっています。全てオンライントレーニングとなっているので、自分の好きな時間に講義を受け、課題に取り組むことができますが、全ての課題に提出期限がある点に緊張しました。(私は提出期限に間に合ったので、期限に遅れるとどうなるかは分かりません。)
はい、何を学べるか。
- ニューラルネットワークの技術的(数学的)基礎を理解できる
- ロジスティック回帰モデルの考えを理解できる
- 最急降下法(gradient descent)の考えを理解できる
- バックプロパゲーションのやり方を具体的に理解できる
- 多数のトレーニング(教師)データを使って、具体的にどのような手順でニューラルネットワークを学習させるかを理解できる
- 深層(ディープ)ニューラルネットワークを Python で書けるようになる(最終的には便利なフレームワークツールを使うにしても、基礎と内部の仕組が分かっているのと、そうでないのでは、大きな差があるかと思います。)
- 実際にネコの画像を使って、その画像がネコかそうでないかを判定するプログラムを作成できる
といったところでしょうか。また付加的なものとしては、
- 英語で講義を受講するので、英語力もアップ!
- NumPy の具体的な使い方について自信が得られる
といったところもあるかと思います。NumPy のチュートリアルを読んでも具体的な使い方までは習得できないことが多いですが、実際に NumPy で行列演算のコードを多数書いていくと、「ああ、NumPy というのはこうやって使うものなんだ」という実感が湧いてくるのではないかと思います。
費用
私の支払い額は 5,299円でした。ちなみに最初の 1週間は無料で受講できます。1週間以内に修了して無料で受講証を貰うという荒技もあるらしいですが、まあ、自分の知識や技能を高めるためのトレーニングですから、時間をかけてじっくり取り組んだほうが良いのではないでしょうか。この内容で 5,299円は非常に安いと思います。
受講するのに必要な知識
周りに助けてくれる人がいれば、以下リスト中に不得手な分野があっても受講できると思いますが、できたら知識を予め身につけてから受講したほうが良さそうです。
- ニューラルネットワークとは、(なんとなく)どのようなものか
ニューラルネットワークを初めて学ぶ人は、序盤で「なんだなんだ?」ということになるかも知れません。ウェブや技術誌で見つかる、「ニューラルネットワークってなんだろう」くらいの知識はあったほうが良さそうです。 - 高校数学レベルの行列, 微分の理解
講師の方が、微分とは何か、という点を含めてかみ砕いて講義してくれますが、行列に関する、ごく基本的な計算を復習しておいたほうが良さそうです。逆に言うと、与えられた関数の導関数を求める、といった知識は要求されません。(私も、合成関数の微分公式とか忘れてましたけど、なんとかなりました。) - プログラミング言語 Python
Python について、初歩的な知識を得ておいたほうが良さそうです。変数、関数、リスト、dictionary、range() を使ったループの書き方、などについてです。クラス定義の方法など、詳しい理解は不要です。講師の方が、ときどき Python とは異なる構文で数式を説明したりすることがあるので、他の言語(C, JavaScript など)を少し知っていると、だいぶ楽に受講できると思います。 - 多少の英語力
トレーニングビデオには日本語字幕を出すこともできますが、完全な日本語訳とは言えないので、ある程度の英語の読解力、リスニング力があったほうが良いと思います。しかし逆に言うと、われわれ日本人の多くは英語での講義を受けた経験がないでしょうから、英語だけの講義というのはある意味新鮮で、かつ勉強になります。少し講義を受けていくと、recap とは何なのか、graded とは何なのかなど、基本的な講義用語や数学用語が英語で理解できて、参考になるはずです。 - 記憶力
ここですね、問題は。若い人は良いのでしょうが、私のように歳を取ってくると、前ページのスライドにあった数式すら忘れてしまい、頭を抱えることになります。この数式は重要だぞ、と思ったときは、スクリーンキャプチャを取りながら(できたら印刷して手元に並べておく)、さらにもっと勤勉な方は自分でノートに板書を書き写していくと、より理解が深まるのではないかと思います。もっとも、私は学生時代から要領の良いタイプ(?)でしたので、必要なときにビデオを巻き戻して済ませてしまいましたが。。。
修了証
おまえさん、本当に全部受講したの? ただの営業目的じゃないの? と言われそうなので、修了証を貼っておきます。皆様も、ぜひチャレンジしてみてください。間違いなく機械学習(ニューラルネットワーク)への理解が深まります。
今日はここまで。