例の機械学習コースが良いらしいと知りながらも2年間スルーし続けたがやはり良かったという話

先日、オンライン学習サイトCourseraの"Machine Learning"コースを修了しました。これが最高に勉強になったわけですが、機械学習に興味があって情報収集を始めてる人にとって、「<b>Courseraの機械学習コースがおすすめです</b>よ」という話は


「はい、<b><font color="red">知ってます</font>」


</b>という感じではないでしょうか。

（たとえば、Qiitaで検索してみると、以下のような同コースに関連する超人気記事が出てきます）

- [数学を避けてきた社会人プログラマが機械学習の勉強を始める際の最短経路 - Qiita](http://qiita.com/daxanya1/items/218f2e3b922142550ef9)
- [機械学習をゼロから1ヵ月間勉強し続けた結果 - Qiita](http://qiita.com/junichiro/items/3457e33e502086a200f1)

僕もそんな感じで、幾度となく人や記事に同コースを薦められたりしつつ、たぶん2年ぐらいスルーし続けてきたと思います。


しかし約2ヶ月前、ひょんなきっかけから本講座を始めてみて、やはり評判通り最高だったと思うと同時に、僕と同じような感じでこのコースが<font color="red">良いらしいと知りながらもスルーし続けてる人</font>は多いんじゃないかと思いまして、（おせっかいながらも）自分の脳内にあった<b>「やらない理由」</b>を列挙しつつ、「いや、<b>それでもやった方がいい</b>ですよ」というのを書いてみたいと思います。

- [Machine Learning - Stanford University | Coursera](https://www.coursera.org/learn/machine-learning)




##「スタンフォードの授業」レベル高そう

世界最高峰のスタンフォード大学の授業、いくら「入門です」と言われても、

「それはレベルの高い中での入門でしょ？」

と思ってました。技術書を読んでもさっぱり頭に入ってこない人の気持ちなんてわからないでしょうよ、と。


いえ、この授業はサルでもわかります。

<b><font color="red">・・・とは言えません</font></b>。


やっぱり数式がたくさん出てきて何言ってるのかわからなくなります。眠くなります。でも少なくともスタンフォードに入学できる程の<b>世界最高峰の前提知識が必要ってことはない</b>です。


高校レベルの数学、プログラミングが出来れば前提知識としては十分で、Andrew先生は数式の意味を説明するのがめちゃくちゃうまいです。項を削ぎ落としてシンプルにしたところから、順序立ててその数式の性質を説明してくれて、それが機械学習でどう役立つのか、という話をしてくれるので、納得感・腹落ち感があります。


そして時には、「<b>この数式の意味はわかってなくても<font color="red">偉い人が実装したライブラリ使えば機械学習はできる</font>から大丈夫だ</b>」と言ってくれたりもします。わからない人の気持ちがわかってる先生だなと随所で感じます。


##わからない分野の話を、英語で学ぶなんて・・・

全編に<b>日本語字幕</b>があります。自動翻訳の気持ち悪い日本語ではなくて、ボランティアによる自然な日本語です。


当初僕には「<font color="Red">英語の動画を日本語字幕で見るのは何か負けた感がある</font>」「英語で観ると英語の勉強にもなって一石二鳥」という変なこだわりもありましたが、

- 機械学習を学ぶのが先決
- （英語で観ることで）心理的ハードルが高くなって講座をやらなくなっては本末転倒

と開き直って全て日本語で観ました。


##その後色々なオンラインコースが出てきてるし、もっと良いのがあるんじゃない？

このコースがいつからあるのかわかりませんが、たぶん2012年にはもうあったと思います。今では最初から日本人が日本語で解説している講座もあるでしょうし、ディープラーニングまでカバーしているものもありますし、評価が高いものもあります。


このコースが優れている点として、Andrew先生の説明がわかりやすい、実践的な内容である、といったことがよく挙げられますが、それらももちろん良いわけですが、


<b><font color="Red">毎週のプログラミング課題の提出が義務付けられている</font></b>


という点で、僕は他のオンライン講座と比べて圧倒的に良いと思いました。


動画で学んだニューラルネットワークとかレコメンドシステムを<b>自分で実装</b>して、毎週提出する必要があります [^1]。

[^1]: 自動ですぐに採点されるようになっています

これが本当に素晴らしくて、

- 動画を見てよく理解できなくても、自分でプログラムを書いてみるとよく理解できる
- 動画を見て理解できたと思っていても、自分でプログラムを書いてみると<b>理解が曖昧だった部分が浮き彫りに</b>なることがある
- 「<b>自分はもうこれを実装できる</b>」という自信を得られる

という効果があると感じました。他のオンライン講座ではあまりこの形式は見たことなくて、どんなに動画が良くても、結局これがないと意味ないような、とさえ思います [^2]。

[^2]: 宿題として課されなくても自分で手を動かして学べる人は別

ちなみに最近、『ゼロから作るDeep Learning』という書籍がとても評判が良く、これでゼロから学び始めた／学ぼうと思っている、という人も多いと思います。


<div class="amazlet-box" style="margin-bottom:0px;"><div class="amazlet-image" style="float:left;margin:0px 12px 1px 0px;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4873117585/22301-22/ref=nosim/" name="amazletlink" target="_blank"><img src="https://images-fe.ssl-images-amazon.com/images/I/512ru2i5gyL._SL160_.jpg" alt="ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装" style="border: none;" /></a></div><div class="amazlet-info" style="line-height:120%; margin-bottom: 10px"><div class="amazlet-name" style="margin-bottom:10px;line-height:120%"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4873117585/22301-22/ref=nosim/" name="amazletlink" target="_blank">ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装</a><div class="amazlet-powered-date" style="font-size:80%;margin-top:5px;line-height:120%">posted with <a href="http://www.amazlet.com/" title="amazlet" target="_blank">amazlet</a> at 17.02.07</div></div><div class="amazlet-detail">斎藤 康毅 <br />オライリージャパン <br />売り上げランキング: 65<br /></div><div class="amazlet-sub-info" style="float: left;"><div class="amazlet-link" style="margin-top: 5px"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4873117585/22301-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jpで詳細を見る</a></div></div></div><div class="amazlet-footer" style="clear: left"></div></div>


僕も最近買って読んでみて、この本の「手を動かして自分で実装してみる」というコンセプトの良さに通ずるものが、このCourseraの機械学習コースもある、と思いました。上述しましたが<b>学んだことは全て自分で実装することになる</b>ので。


ちなみにこの本とCourseraの機械学習コースは（被る部分もありますが）<b>カバーする範囲が違うので両方ともやって損はない</b>と個人的には思います。ディープラーニング本はディープラーニングに到達するための要素技術／知識を最短距離で学ぶ感じですが、Coursera機械学習コースはもっと機械学習の基本事項を広く網羅する感じです。 [^3]

[^3]: 個人的には、先にCourseraの方をやり、後からこの本で（既に知っているところは飛ばしつつ）やった方がわかりやすいのでは、と思いました。

##OctaveじゃなくてPythonでやりたい

「今機械学習やるならPythonだし、なぜOctave・・・？」というところで避けてしまう人も多いかもしれません。


もちろん僕もOctaveは初めて触りましたしこの講座以外でもう触ることもないんじゃないかとさえ思いますが、<b>Octave独自の使い方とか記法を学ぶ、というオーバーヘッドはほとんどなかった</b>と思います。序盤でOctaveの使い方の動画がありますが、ほとんど飛ばして、テストと課題で必要になる度にググる、という方法で十分乗り切れました。

プログラミング課題でやった実装は<b>自分で中身を理解している</b>（どういう関数を使っているか、なぜそういう計算をしているか）ので、つくったものをあとから<b><font color="Red">他の言語やフレームワークに移植するのも簡単</font></b>そう、と思っています。

##今忙しいので落ち着いてから・・・

ここまで読んで、「良さそうだな」って思った方もいらっしゃるかもしれません。でも同時に「今忙しいので、落ち着いたらやろう」と思った方は多いんじゃないかなと推察します。仕事は毎日あるし、エンジニアは学ぶことは他にもいくらでもあるし。

僕もそうでした。仕事もプライベートもめちゃめちゃ忙しかったし、優先的に学ぶべき技術も他にあったので、

「1ヶ月後ぐらいには今よりは落ち着いてるはずだからまたその頃に・・・」

って思いかけたのですが、ふとコースのカリキュラムを見て考えが変わりました。

- https://www.coursera.org/learn/machine-learning#syllabus

「**ニューラルネットワークぐらいは**ちゃんと理解したいな」と思っていたのですが、本コースでニューラルネットワークについて学ぶのはWEEK4, 5。ちゃんと1ヶ月後に受講開始したとして、順当に進めて、ニューラルネットワークの基礎を学べるのがその1ヶ月後。

この機械学習／ディープラーニングが盛り上がってる中、**<font color="red">最低でもあと2ヶ月は自分はスタート地点にすら立てていないことになる</font>**、と愕然とし、すぐに始めることにしたわけです。

当初は修了することは重視してなかったので、いきなりニューラルネットの章だけやることも考えました。が、本コースのカリキュラムは**知識が積み上がっていくようにデザイン**されていて、序盤の「線形回帰」とか「ロジスティック回帰」で学んだ知識はその後の章のあらゆる部分に関係してきたので、最初から通しでやってよかった、と思っています。


##続けるコツ

こうやっておすすめしているわけですが、<font color="Red">機械学習で何かをやる具体的な予定があるわけでもなく、仕事もプライベートも普通に忙しい</font>、という状況においては実際のところ完走するのはなかなか大変なんじゃないかと思います。


僕は第1週目は「機械学習の歴史」みたいな流し見しても良い内容だろうと思って最初は気軽に始めてみたのですが、最初の動画だか2つ目の動画だかでもういきなり数式がバリバリ出てきて面食らった記憶があります。<b>普通に気が重い</b>です。


そんな中でも続けられた理由が3つほどあるなと思うので参考までに書いておきます。


###1. 中間目標があった

当初は完走するつもりはなくて、とりあえず第5週のニューラルネットワークまではやろう、と思っていました。


で、第5週目までやって、修了証書が欲しいわけでもなかったのでやめてもよかったわけですが、その先のカリキュラムに「次元削減」「レコメンドシステム」等いくつか学びたい項目があったので、もうちょっとやってみるか、と。


8週目ぐらいまでやったとき、<font color="Red">最後の第10週、第11週はプログラミング課題がない</font>ことに気づきました。実質あと2週がんばれば完走じゃん！と。


そんなこんなで、中間目標を見ているうちに完走できた、という話です。


###2. 「挫折したらもう一生オンライン講座で勉強できない体になる」という意識があった

自分の性質上、<b><font color="Red">一度自分の意志を折った前例をつくってしまうと、もうダメ</font></b>なんですよね。そこが基準になってしまう。


「今週めっちゃ忙しいけど、一週でもサボったらもうこの講座をやることはないだろう」

「この講座を完走しなかったら、<font color="Red">もう一生どんなオンライン講座も完走することはない</font>だろう」


極端だと思われるかもしれませんが、人生を40年近くやってきて実際そんな感じだったので、「ここで<b>オンライン講座という貴重な学習の選択肢を失うわけにはいかない</b>」という思いで後半は進めていました。


###3. 適度に飛ばしながら進めた

例えば（上述した通り）Octaveの書き方の動画は飛ばしましたし、前半には結構あるテキストによる解説とPDFは全部飛ばしましたし、プログラミング課題の"optional"問題も容赦なく飛ばしました。やった方がいいのは間違いありませんが、挫折するよりは前に進んだほうがいいので。


##まとめ

というわけでCourseraの"Machine Learning"、おすすめです！

- https://www.coursera.org/learn/machine-learning