Stanfordの機械学習コースは初学者にホントおススメです。

10月から3ヶ月間受講してきた、スタンフォード大学の機械学習のオープンコースであるhttp://www.ml-class.org/ のコースを修了しました。

機械学習の初学者として受講してとても満足感&充実感があったのでシェアさせてもらいます。

来期(1月スタート)ã‚‚同コースが開催されますので興味をもたれた方はぜひどうぞ。

学んだこと

敷居は高くないです

このクラスは通常のstanford open courseよりも難易度的には低く設定されてて、大学レベルの数学を知らない人もトライできるくらいに随所に必要な基礎知識の解説が出てくるので、気軽に参加できます。(ビデオの中でも、「数学的な細かいことは知らなくても大丈夫だから」とか言ってますw)

しかも、タダ。受講に際しての制約も一切なし。来るもの拒まず、去るもの追わず。
そういった意味でもとてもオープンなコースなので気軽に参加できます。

また、コースが2種類に分かれていて、自分の好きなほうで受講できるというのもポイントです。(ちなみに僕はAdvanced Trackで受講しました)

  • Basic Track:ビデオ講義、ミニテスト(Review Question)、プログラム演習すべて受講可能だが、提出しなくてもいいコース(見るだけ、やるだけ)
  • Advanced Track:ビデオ講義、ミニテスト(Review Question)、プログラム演習すべてを提出しなければいけないコース(見なきゃだめ、やらなきゃだめ)

それでいて結構実践的です

かといって概論や基礎だけにとどまらず、かなり実践を意識した講義&演習内容になっています。

といった、かなり実践的な題材を取り上げてくれています。講義でも「機械学習のエンジニアとしての人生に役に立つと思います」的な言葉もありました。

また、機械学習アルゴリズムを実際に適用したときに悩むような問題

なんかへの対策なんかも含まれていて、このコースが終わると機械学習の技術者として通用するんじゃないか、といった気分になれます。

ゆったりペースで学べます

個人的にはかなりゆるいペースで十分こなせたましたので、日夜仕事に追われあまり時間が取れないといわれる社会人の方々でも大丈夫だと思います。技術者として仕事の合間をぬってマイペースにスキルアップできるので、とってもオヌヌメです。

ペースとしてはこんな感じした:

  • 平日の通勤時間(片道1時間弱)に、満員電車内でガメつく席を確保してiPadでビデオ講義を聞く&Review Quizに答える
  • 土日のどっちかで数時間プログラミング演習(by octave)に割く。

 ⇒演習結果はgithubで公開中:https://github.com/everpeace/ml-class-assignments

プログラミング演習の多くは穴埋め形式になっていて、アルゴリズム全体を実装するのではなく、講義で学習したコアな部分のプログラムを埋めるといった形式です。

たとえばニューラルネットワークの演習では

となっていました。

なので、プログラミング演習の負荷はそこまで高くないにもかかわらず、実践的な機械学習アルゴリズムの全容を理解することができるようになっているという点もとてもポイントになると思います。

みんなで学びあえます

インターネットで受講ということで、受講生の数もかなり多い反面、スタッフは数人です。

ということで、スタッフに直接質問はできないのですが、コース内のページには受講生どうしがやり取りできる(もちろんスタッフとも)Q&Aフォーラムがあってかなり活発に質疑がされていました。

私が演習問題で詰まった時や、これは課題の方がおかしいんじゃないか?なんて疑問をフォーラムに書き込んだときは数分で誰かから返答が来てびっくりでした。全世界で受講生がいるので24時間いつだって、どこかでだれかは同じ勉強してるんですね。

この点でも、一人で進めていて挫折する、なんて危険性にも考慮してくれているのもポイントです。

参考ですが、今回のコースの受講生分布を表すヒートマップ(Global版)です。
日本がかなり薄いのがちょっと残念ですね。

機械学習以外も色々あっておススメです

今期(2011/10〜2011/12)は人工知能、機械学習、データベースくらいのコースだったんですが、来期(1月スタート)はさまざまな分野のコースが開催されるようです。もちろん機械学習のコースも再度開催されます。

今期の機械学習ページ http://www.ml-class.org/ に来期開催されるコース群へのリンクがありますので興味があればぜひ。

僕の琴線に触れるのは

・Software as a Service
・Design and Analysis of Algorithms I
・Game Theory
・Cryptography

といったところ。僕は来期はcryptographyかgame theoryか悩み中(両方はちょっと高負荷になっちゃうかもなので)。。。

学んだらちゃんとモノにしたい

時代は、ビッグデータ全盛期。クラウドも分散計算も大フィーバー。winnyの作者の方も無罪確定でP2Pの技術開発はほう助罪に当たらない判例ができて本当によかっねといった感じで、

はとってもこれからはキーになると思われます。

そんな時に機械学習のコースを受講できたのはとってもありがたかったです。しかも仕事にもプライベートにもまったく支障をきたさず勉強できたのはとてもうれしいです。

ただ、今回のプログラム演習で使用したoctaveは実稼動の機械学習システムではあまり適用されていない模様。となるとやっぱり実稼動でも通用する言語で機械学習を実装できる技術がほしいところです。

コース内のフォーラムではやっぱC/C++でしょ、pythonでしょ、データの前処理ならperlだろ、と色々いう人がいました。

octaveとペアで良く聞かれるRですが、Rは実稼動システムで実績はあるのでしょうか。RIHPEもあるからこれからは使われていくようになるのかな?最近だとWeb系の会社では「Rの知識があると望ましい」みたいな求人もあるようなので、現場で使われているのかもしれませんね。

僕が選択できる実用的な言語というとやっぱりJavaかScala。ということで、そっち系でちょこちょこ見たりしています。

Hadoop上で動く機械学習ライブラリMahoutもウォッチはしてるけれど、ここ数ヶ月動きがない模様。

SparkっていうScalaベースの分散計算のライブラリを最近触ってみたけど、行列計算とかがまだまだ充実してなくて、すぐに分散機械学習アルゴリズムで楽しめるってわけじゃなさそうです。分散計算だけ手軽にかけてかなりいいと思うんだけど。(分散の行列計算から実装しなきゃだとちょっと面倒。。機械学習のアルゴリズムを動作させたいですからね。)

分散には対応していないけれど、Scalaだと、Scalalaっていう線形代数ライブラリがあるので、これで演習のやり直しでもしてみようかな、なんて思ったりしています。見たところ行列演算は結構Octaveっぽく書いたりできるので、やりやすいかなって思ったり。最近良く聞くの並列コレクションとか対応してるのかな。。。

といったところで実践に向けた活動はまだまだ停滞気味なんだけれども、なんとか実践で使える機械学習の技術を磨いていきたいところです。

クラウドやら分散の時代がやってきて、SIerで雇われてるプログラマなんて多くが職にあぶれる時代がやってくるぞ、なーんて怖いニュースも聞いたりする世知辛い時代ですが、日々精進することで、そんな篩(ふるい)がやってきてもちゃんと引っかかるようになりたいものですね。

おしまい。