Coursera Machine Learning を修了したので、感想を書いてみる

#概要

Coursera は無料で大学レベルの教育が受けられるオンラインサービス。その中でも特に評判のよい [Machine Learning コース](https://www.coursera.org/learn/machine-learning/home/welcome) をこのたび修了しました。一言でいうと、非常によかったです！これから本格的に機械学習を学ぼうとする人には本当におすすめ。


#対象読者と私のバックグラウンド
この記事の対象読者は、「数学にはあまり自信がないけど、プログラミングはそこそこできる」という人たちとします。まさにそれが私そのものですので。

私は20数年前に卒業した大学では、経済学とそれに必要な解析学・線形代数・統計学を学びました（そしてほぼ忘れました）。最近になって、線形代数だけ復習しました。プログラミングに関しては、仕事で Ruby を使っています。

線形代数の復習は、[「プログラミングのための線形代数」](https://www.amazon.co.jp/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AE%E7%B7%9A%E5%BD%A2%E4%BB%A3%E6%95%B0-%E5%B9%B3%E5%B2%A1-%E5%92%8C%E5%B9%B8/dp/4274065782)で行いました。リファレンス的に[「高校数学の美しい物語」](http://mathtrain.jp/)
というサイトの記事を参照させていただきました。

#感想

Coursera ということで、授業は基本的に英語で行われます。ただし、Machine Learning コースのビデオについては、日本人有志が訳してくれた日本語字幕を見ることができますので、ハードルはグッと下がります。

とにかく構成がすばらしいです。これぞ大学の授業という感じで、学習項目を積み上げていくことで、ごく自然に高度な内容が理解できるように誘導してくれます。講師の Andrew Ng 先生の授業もすばらしくわかりやすい（個人的な感想ですが、声が優しく聞きやすいです）。

授業は、Week 1 から Week 11 に分かれています。普通にやると、3ヶ月弱かかる計算ですが、この時間にこだわる必要はありません。自分のペースにあわせて、早くやっても遅くやってもかまいません。私の場合は、約1ヶ月間で終わらせました。時間でいうと約75時間かかりました。

ビデオで講義を見て、Review と言われるテストを受けます。Review は講義内容をきちんと理解していれば、簡単に解けます。

Week の終わりにプログラミングの宿題があります。ファイルを一式ダウンロードしてプログラム演習の問題を解き、オンラインで採点が行われます。すでにひな形が用意されていて、それを埋めるだけの宿題です。プログラミングとしてはたいしたことはないのですが、その背景となる数学はしっかり理解する必要があるので、それなりに時間がかかります。

Octave という統計・機械学習専用の言語を使いますが、プログラミングに慣れている人なら、簡単に習得できます。機械学習では Python が主流ですが、Octave で学んだことを自然に活かすことができます。

週ごとにやったことは以下のとおりです。正確なシラバスは、[ここ](https://www.coursera.org/learn/machine-learning/home/welcome)を参照してください。

- Week 1 単回帰
- Week 2 重回帰
- Week 3 ロジスティック回帰
- Week 4 ニューラルネットワーク（表現）
- Week 5 ニューラルネットワーク（学習）
- Week 6 機械学習を適用する上でのアドバイス
- Week 7 サポートベクターマシン
- Week 8 教師なし学習
- Week 9 異常検出
- Week 10 大規模機械学習
- Week 11 写真 OCR

Week1からWeek5までは密接に関連しあっています。単回帰→重回帰→ロジスティック回帰、と自然に理論が拡張されていきます。さらに、ニューラルネットワークがロジスティック回帰の自然な拡張であることを知った時には、思わず鳥肌が立ちました。教師あり学習とは、仮説関数と目的関数（cost function)という対になる関数を定義し、目的関数を最小化するようにパラメータを設定することだ、という大枠を理解できたのは、大きな収穫でした。

Week 5 は前半の山場だと思います。やはりバックプロパゲーションを理解するのは一苦労でした。ただ、私はすでに[「ゼロから作る Deep Learning」](https://www.oreilly.co.jp/books/9784873117584/)を読んでいたので、なんとか理解することができました（この本も本当におすすめです！）。「ゼロから…」ではきちんと説明されていなかった、ニューラルネットワークについての数学的な定式化をここで知ることができたのはとてもよかったです。

Week 6 では、未学習（high bias)と過学習(high variance)という対になる概念と、機械学習モデルのハイパーパラメータ設定における基本的な方針を理解することができました。

Week 9 は後半の山場のように感じました。ここでは、正規分布という統計学的な概念がでてきます。私は、この部分の数学の復習をしていたら、おもったより時間がかかってしまいました。

# まとめ

Andrew Ng 先生も、最初のころは慣れなかったようで、板書もよく間違えたりしていました（逆に、こんな偉い先生でもこういう間違いをするんだ、という人間味を感じられてほっとしました）。ただ、コースも後半に入って行くと板についてスムーズになっていきます。

Andrew Ng 先生の普段の研究から得られた経験則のようなものも、随所で紹介されており、機械学習をこれから実践していく上で、とても役立ちそうな感触があります。

このコースを通じて、機械学習というものの全容が少しだけつかめました。これから、本格的に機械学習を実践していくスタートラインに立てた気がしています。こんな素晴らしい講座を無料で提供してくれている Andrew Ng 先生、コースを支えるスタッフ陣、そして Coursera に深く感謝しています。

あらためて、本当におすすめです。英語だから、ということで尻込みしてしまうのは、本当にもったいないです。日本人でもすでにこのコースを修了した方が多数いて、そういう人たちがウェブ上でさまざまな感想や解説を述べていますので、そういうものを見ていけば、問題なく修了することができると思います（私もたいへんお世話になりました）。

ここまで読んでくださってありがとうございました。

【後日談】
79 USD 払って、[公式の修了証(Certificate)](https://www.coursera.org/account/accomplishments/certificate/3NPQHUKLARMF)を取得しました！
Certficate の取得は任意ですが、Coursera と Machine Learning コースに対するささやかな感謝の気持ちです。