Courseraのスタンフォード機械学習講座がおすすめ!そして受講後のこと
Courseraのスタンフォード大学、機械学習講座
オンラインで大学の講義が受けられるCourseraというサービスがある。そのサービスの中で人気の講座にスタンフォード大学のMachine Learningがある。
この講座は全11週から構成されていて、1週あたり大体6時間ぐらいの学習時間が想定されている。そのコースを先日無事修了したので感想を書いておく。ちなみに修了証も発行されてちょっと嬉しい。
なぜCouseraのスタンフォード大学機械学習講座をやろうと思ったか?
(比較的)機が熟していたように感じた。
何かをやるのに完璧なタイミングというのはほとんどないと思うが、今ならかなりの確率で修了できるような気がしていた。ちなみに僕は同じコースを4年前ぐらいの大学生のときに挑戦して挫折している。なぜ機が熟していたかというと
- 12月から数学を社内勉強会でやっていた。
代表の加藤とCTOの今の呼びかけで、すうがくぶんかという会社から講師を招き週一で数学の講義を受講した。この勉強会では機械学習を使っていくのに耐えうる数学力を身につけることを一つの目標にしている。2016年の12月に開始したのだが、最初は線形代数を勉強した。機械学習を勉強するのに線形代数は必須だからとても役に立った。
- 英語力
仕事でソフトウェアエンジニアを2年ほどやって英語のドキュメントを読む機会が増え、技術系英語への抵抗が少なくなっていた。Coureseraは有志の方々がつけてくれた日本語訳もあるのだが、ちょっとわかりづらくてかなり神経を使わないと理解できない。英語で受講するのがいいと思う。
- 興味
ソフトウェアの仕組みの中で、UIをよりも何(内容)を見せるかという論点にすごく興味が出てきた。僕が今の会社に入ったときはiOSエンジニアとして入社した。その時は使いやすいアプリを作ることにとても興味があった。そして時がたつにつれ、どう使ってもらうかよりも何を見せるかの方に興味が動いて来たのを感じていた。例えば、Amazonで買い物をすると関連した商品がリコメンドされる。グーグルで人を検索すると、その人だけでなく、関連した人も出てくる。そういった相手を先回りして情報を届ける技術に興味が出てきた。
なぜ続けられた?
結構興味はあったのだが、機械学習の勉強は退屈になりがちだ。iOS開発ならコード書いてそれが動くのがわかりやすいし、最終的にアプリ公開までするのがそこまで難しくない。しかし、機械学習だとイマイチどう動いているのかわかりにくいし、学んだことが実際に役に立つまでをイメージするのが比較的対へだ。でも今回は続けられた。それはきっと以下のような理由がある。
- やる時間を決めた。
電車の中。僕は通勤中、30分ずっと座っていられるので、その時間は必ずCourseraを受講するようにした。そうすると行き帰りで1日1時間の勉強時間が半自動的に手に入る。iPadに入れると動画部分は通信を使わなくてできる。動画ファイルをダウンロードすることもできたけど、動画途中のミニクイズがPCのブラウザか、アプリでないと受けられないからこの方法にした。余談だが、動画途中のミニクイズはとても有効だった。
- 他の社員も勉強してた
まず一人目が弊社代表。傍から見て僕より何倍も忙しそうにしている弊社代表が東大の公開講座を修了していて、社長より機械学習に疎いのはなんとなくやべえと思い、Couresraごときクリアできないのはやべえと思った。
二人目が弊社の英文科卒業エンジニア。同じコースをやっていて、彼女が修了して僕ができなかった未来を想像するととても悔しかったのでなんとしてでもやりきろうと思った。数学は高校時代数学は控えめに言っても比較的得意だったのでプライドがあった。
修了してどう?
機械学習系の話題を理解するのに以前よりもずっと抵抗がなくなった。これが一番大きいと思う。このコースを修了しても実践で使えるようになる気が全くしないのだが、機械学習に対する抵抗がなくなり基本的な枠組みがわかったことで、機械学習関連のニュースや論文を読んでもなんとなく理解できるようになった。
これから何をする?
- python勉強しよう
Courseraの中ではOctaveというプログラミング言語を使った。しかし、実際に機械学習の現場で使われている言語はpythonが主流だからだ。新しいプログラミング言語を勉強するのは嫌いじゃないが、普段使う言語数はあまり多くしたくない。ちなみに僕は、iOSだけでObjective-CとSwiftを使い、サーバーサイドでRubyをつかっている。この3つだけでも切り替えるときは若干頭を使うのに機械学習でも言語が2つ以上あったらちょっとめんどくさい。一分野一言語が理想。誰か、noteやcakesのアプリを完全にSwift化してくれるのを手伝ってくれないだろうか?
[追記: 2018/04/21]
記事公開当時の2017年8月頃は言語ごとに頭を切り替えるのが億劫に感じていたが、最近は前よりも億劫でなくなった。プログラミングは言語は違えど、方言みたいなもので、やることは同じで言葉が違うだけだ。
もちろん、言語Aでできて、言語Bでできないこともある。以前はその違いを思い出すのに苦労していたが、今はPythonならPythonの自分用チートシートのようなものを作って、それを眺めればPythonモードに入れるようにした。
チートシートは簡単なもので、入門的な書籍に載っているサンプルコードを気持ち程度のコメント付きで羅列している。僕が使った入門書は以下の2冊だけど、自分が気に入ればなんでもいい。
- 学んだ知識を実践で活かしたい。
最終的にはもちろんここ。冒頭でも書いた「何を見せるか」を実装する段階に早く行きたい。さしあたり興味があるのはリコメンドシステム。どの分野の機械学習をするのにもデータをどう集めるか?という問題がある。機械学習の理論の勉強も必要だが、実際にはデータがないと始まらないのでそこを収集する仕組みづくりから始めないといけない。
Quoraでは次のステップについていろいろな意見がかわされている。
また、ロールモデルのような記事もあった
Courseraの機械学習を終えたことでスタート地点に立てたようなきがする。ここからちゃんと歩みを始めたい。