見出し画像

Andrew Ng先生の『Machine Learning Specialization』を受けてみた

『Machine Learning Specialization』(機械学習特別講座)とは

スタンフォード大学兼任教授でCourseraDeepLearning.AIの創設者のAndrew Ng(アンドリュー・ン)先生が教えてくれる、たぶん世界で一番有名な機械学習の講座です。Courseraで受講できます。

受講の動機

この講座の存在自体はもう何年も前から知っていましたが、最近(というか、もうずいぶん前から)猫も杓子もAI、AIで、いい加減受けておきゃなきゃだめかな、という感じで受講を決意しました。ある事情でCourseraのサブスクリプションを無料で利用できるので、とりあえず始めてみるハードルは低かったです。やってみてダメだったらあきらめよう、無料だし、と軽い気持ちで開始しました。

講座の概要

きちんと調べたわけではないので、厳密な定義はわかりませんが、Courseraでは、複数コースから構成される特別講座を“Specialization”と呼んでいるようです。今回受講した『Machine Learning Specialization』は、『Supervised Machine Learning: Regression and Classification』『Advanced Learning Algorithms』『Unsupervised Learning, Recommenders, Reinforcement Learning』という3つのコースから構成されています。これらのコースは好きな順番で別々に受講することも可能で、それぞれ修了するごとにcertificate(修了証明書)がもらえます。そして3つすべてを修了するとそれぞれの修了証明書に加えて、『Machine Learning Specialization』の修了証明書も発行されます。

修了証明書

基本的にはどのコースでも、まず動画形式の講義を見て学習し、次にクイズを解いて理解度を確認、最後にプログラミング課題を解きながら学んだ概念をPythonで実装する、という流れになっています。クイズとプログラミング課題には合格ライン(たしかクイズは80%以上、プログラミング課題は70%)があって、それに達しないと不合格になります。ただ、一度不合格になっても受け直すことができ、再受験の回数制限などもおそらくないと思います。

講座の内容

機械学習分野から主だったトピック(教師あり学習、教師なし学習、線形回帰、ロジスティック回帰、分類、ニューラルネットワーク、決定木、クラスタリング、レコメンダーシステム、強化学習、Q学習などなど)を学習します。各コースで学ぶ内容をCourseraから抜粋します。

Supervised Machine Learning: Regression and Classification

Build machine learning models in Python using popular machine learning libraries NumPy & scikit-learn
Build & train supervised machine learning models for prediction & binary classification tasks, including linear regression & logistic regression

Advanced Learning Algorithms

Build and train a neural network with TensorFlow to perform multi-class classification
Apply best practices for machine learning development so that your models generalize to data and tasks in the real world
Build and use decision trees and tree ensemble methods, including random forests and boosted trees

Unsupervised Learning, Recommenders, Reinforcement Learning

Use unsupervised learning techniques for unsupervised learning: including clustering and anomaly detection
Build recommender systems with a collaborative filtering approach and a content-based deep learning method
Build a deep reinforcement learning model

講義の難易度

機械学習に関する事前知識

Courseraの講座情報に記載のレベルも“Beginner”に設定されていますし、機械学習分野の前提知識はゼロでもまったく問題ないです。

必要な数学的知識

行列やベクトルの基本的な計算方法と、あとはなんとなく微分の意味がわかっていればなんとかなります。Andrew先生は、よく“intuition”といって、難しい数学の概念なども具体例を使って直感的に説明してくれるので、行列や微分の知識がゼロでも、がんばればついていけると思います。

必要な英語力

僕は機械学習分野で使われる用語を英語で知りたかったのと、英語の勉強にもなるかと思って英語で聴講しましたが、講義にはスクリプト(講義の文字起こし)もありますし、スクリプトの日本語訳もおそらくあるはずなので、英語の聞き取りが苦手な人でも英語が読めれば全然だいじょうぶです。

クイズの難易度

僕の記憶が正しければどのクイズも全10問で80%以上(つまり8問以上)正解すれば合格です。講義の内容を8割程度理解できていて、ノートをしっかり取っていれば(記憶力のいい方はノートすら不要かもしれません)比較的容易にパスできると思います。上にも書いたとおり、合格するまで何度でも再受験できるはずです。

プログラミング課題の難易度

プログラミングの課題はJupyter Notebook形式で出題されます。Jupyer Notebookのノート欄に書かれた解説を読んで理解しながら、コードを実装していきます。全体で見れば最後はそれなりの行数の、複雑なコードが完成するのですが、すべてのコードを自分で書くのではなく、穴埋め形式での出題になります。以下のように、### START CODE HERE ###と### END CODE HERE ###に囲まれた部分に自分のコードを追加します。以下の例では、gradient(勾配)を計算する関数(の一部)を実装しています(解答を載せてはだめなので一部省略しています)。

def compute_gradient(X, y, w, b, *argv): 
    """
    Computes the gradient for logistic regression 
 
    Args:
      X : (ndarray Shape (m,n)) data, m examples by n features
      y : (ndarray Shape (m,))  target value 
      w : (ndarray Shape (n,))  values of parameters of the model      
      b : (scalar)              value of bias parameter of the model
      *argv : unused, for compatibility with regularized version below
    Returns
      dj_dw : (ndarray Shape (n,)) The gradient of the cost w.r.t. the parameters w. 
      dj_db : (scalar)             The gradient of the cost w.r.t. the parameter b. 
    """
    m, n = X.shape
    dj_dw = np.zeros(w.shape)
    dj_db = 0.

    ### START CODE HERE ### 
    for i in range(m):
        f_wb_i = ...
        
        ...
        ...
        
        for j in range(n):
            dj_dw[j] += ...
    
    dj_db = ...
    dj_dw = ...
    ### END CODE HERE ###

        
    return dj_db, dj_dw

上記のように、講義で習った重要な概念を小さな単位で段階的に実装していくので、一つ一つの問題の難易度はそこまで高くありません。とはいえ、プログラミング自体が初めての方だと少し難しく感じるかもしれません。でも、安心してください。それぞれの問題には、普通のヒントに加えて「これほぼ答えじゃん!」という、とっても親切なヒントが付いているので、課題をパスできないということはないと思います。

講義ノート

講義ノートは作っておいた方がいいと思います。僕は最初ノートを取らずに進めていたのですが、クイズやプログラミング課題に取り組む際に、学んだことを思い出すのに苦労することがあったので、途中からノートを取り始めました。
ノートは基本的にNotionにまとめました。Notionはテキストだけでなく、画像やコード、そのうえ数式もLaTeXを使ってきれいに書けるので、講義ノートを取るのにぴったりでした。一時的に非表示にしたい部分をさっと隠せる折りたたみの機能も便利です。

講義ノート

Andrew先生が用意してくれたスライドに、自分で書き込みを入れて、それをNotionのノートに貼り付けたりもしました。ちなみに書き込みにはCleanShot XというMacアプリを使っています。講義で紹介される動画をGIFに収めたいこともときどきあり、CleanShot XはスクリーンキャプチャをGIF形式で書き出せるので重宝しました。NotionならGIFをそのまま貼り付けることができます。
頭の中だけで追えない計算は、iPadの「メモ」アプリを使って実際に手を動かして計算して確かめたりもしました。自分で手計算すると、理解度が格段に上がるような気がしました。

手書きの計算

ほかにも説明を聞いている(スライドを見ている)だけではイマイチ理解できないところを、手書きで整理すると不思議と理解できることがありました。行き詰まったときは、手書き、お勧めです。

Andrew Ng先生

すばらしいの一言。講義のわかりやすさが世界トップクラスなのはもちろん、とにかく人柄がすばらしい。「ここはわからなくてもだいじょうぶ」「ここまできた君たちは大半の人より機械学習に詳しくなっているはずだよ」など、事あるごとにモチベーションを高める言葉をかけてくれます。ほかにもクスッと笑える冗談を挟んできたり、ほかの講義だったかもしれませんが、小道具を使ったおちゃめな冗談を繰り出したり、人柄のよさが画面からにじみ出ています。
一番最後のまとめの講義でAndrew先生直筆の“Thank you”が画面に表示されたときはジーンときて、完全に先生のファンになりました。

Andrew Ng先生直筆の“Thank you”

最後に

シンプルに、受講してよかったです。
TensorFlowなどの機械学習フレームワークは一切使わず、PythonとNumPyだけを使ってゼロから機械学習モデルを実装してみる、というのはとてもいい経験になりました。Andrew先生も、ほかの機械学習専門家との対談の中で、その点(フルスクラッチで実装してみることの重要性)を再三強調されていました。
実際に実装してみることで、機械学習の基本(ベーシック)ではなく基礎(ファウンデーション)を理解できた感じがあります。自分が実装した小さな処理や関数を最後に組み合わされてモデルを構築し、そのモデルで本当に(ある程度の精度で)予測がうまくいくのを見たときは、感動を覚えました。
機械学習について、一般向けの書籍に書いてある内容よりも一つ深く学びたい人にお勧めできる講座です。


この記事が気に入ったらサポートをしてみませんか?