magattacaのブログ

日付以外誤報

MITのオンラインコースでお勉強した話

随分とお久しぶりです。 6月から9月にかけて約3ヶ月間、オンラインコース機械学習のお勉強をしてみました。 折角なので内容をご紹介したいと思いいます。

f:id:magattaca:20190929214636p:plain
こんな感じ・・・格好良い

MIT MicroMasters Program

MicroMasters program はMITが edX というオンラインの学習プラットフォーム上で提供しているプログラムです。 MITのページ によると 「データサイエンティストの需要の拡大に応える」ために「働きながらでも統計学とデータを厳密な方法で勉強できるように機会を提供する」 と言うのが目的のようです。

修士課程の小さい版(?)ということで、分野と内容を絞ってコースが提供されています。 コースにもよりますが、基本的に無料で受講することが可能で、受講期間内であれば講義のビデオを繰り返し見たり、 オンライン上で問題を解いたりすることができます。但し、修了証明書を手に入れたり一部テストを受けるには授業料が必要になります。

MicroMasters program in Statistics and Data Science

MicroMasters program in Statistics and Data Scienceは 5つのコースからなっています。

  1. Probability - The Science of Uncertainty and Data
  2. Data Analysis in Social Science - Assessing Your Knowledge
  3. Fundamentals of Statistics
  4. Machine Learning with Python: from Linear Models to Deep Learning
  5. Capstone Exam in Statistics and Data Science

コース 5. は 1. - 4.のコースを受けた後の総括のテストのようなものなので、実質的に受ける授業としては4コースでしょうか? 全てのコースが一年中受けられる訳ではなく、各コースの開始 - 終了の日程が決められています。 さらに、修了証を手に入れるためには期間の中に設定された締め切りまでに、授業と宿題を進めていく必要があります。
(「Lecture 5 / Homework 3の deadlineは 07月20日だよ〜〜」みたいなのが設定されています。「君ら提出せんから延長するわ〜〜」みたいな感じで、割と2,3日期間は延長されます。)

気になるお値段ですが、1コース $300 USDです。5コース受けるとセット割引的なものもあるようですが中々のお値段・・・

今回、私は6月開講の 4. 「Machine Learning with Python: from Linear Models to Deep Learning」を受講しました。 絶対に途中で放棄する自信があったので、逃げ道を断つべく払いましたよ!300ドル! やる気はお金で買うんだ!(ダメ人間)

なぜ受けることにしたのか?

実はオンラインコースに挑戦するのは初めてではありません。 以前にMOOC (Massive Open Online Courses) の大手、CouseraでAndrew Ng先生の「Machine Learning」を受けようとしたことがあります。 ですが、優しい語り口の誘う眠気と、英語のハードル、Octave / Matlab (?)を覚えないといけない、ということでイントロで撃沈してしまいました・・・。

性懲りもなくまたオンラインコースに挑戦したのは、全くもって偶然に再開した旧い知人にこのコースを紹介されたからです。 この知人というのがとんでもなく優秀かつ出来る男なので、同じコースを受けたら私も賢くなるのでは!と思ってしまったんです。(・・・浅はか)

いくつかあるコースから「Machine Learning with Python: from Linear Models to Deep Learning」を選択したのは、 「Python」&「機械学習」という流行りに乗っかっとくか、という理由です。(・・・やっぱり浅はか)

内容

さて、肝心の内容です。カリキュラムは以下となっていました。

  1. Unit 1 「Linear Classifiers and Generalizations」 (2 weeks)
  2. Unit 2 「Nonlinear Classifications, Linear regression, Collaborative Filtering」 (2 weeks)
  3. Unit 3 「Neural networks」(2.5 weeks)
  4. Midterm Exam (1 weeks) ← 課金した人だけ
  5. Unit 4 「Unsupervised Learning」 (1 week)
  6. Unit 5 「Reinforcement Learning」(2 week)
  7. Final Exam (1 weeks) ← 課金した人だけ

各ユニットはさらに複数のLectureHomeworkProjectから構成されています。

f:id:magattaca:20190929215437p:plain
進捗がProgressで見られる

Lecture

Lectureは 各 5 ~ 20 分くらいの動画と付随するクイズ(1-2問)からなるセット、5〜6個から構成されています。 (全部でLecture 19個)

一つのページに、動画とクイズがあり、さらにDiscussion Forumと呼ばれる掲示板のようなものがあります。 ここでは、受講生が互いに議論したり、TAが質問に答えてくれたりしてくれます。 クイズやテストの回答そのものを書き込むことは禁止されていますが、 問題で躓くポイントや、解決手段、参考になるリンクを共有してくださる方がいらっしゃったので、 私はひたすらこの掲示板をカンニングしながらクイズと宿題に取り組んでいました。

「3回まで間違えてもOK!」とかそういう感じで設定されていて、なのに「選択肢:2つから選べ」というクイズだったりして、設計ミスの疑惑もありましたが、 クイズは理解を促すという目的なので優しい設定だったのでしょう。

Homework

Homework はいくつかの Lecture の内容をまとめた問題で、先のクイズよりも難しくなっています。 (全部でHomework 7個)
大雑把なイメージですが、Lecture の動画で理論やアルゴリズムの説明があり、Homeworkは具体的な数字やグラフを当てはめて実際に解いて見ましょう、という感じです。

Project

ProjectLectureHomework の内容を踏まえてより複雑な問題設定で取り組んで見ましょうという形式です。 (全部でProject 5個)
Pythonを使ってプログラミングを行うのは主にこのProjectでした。
具体例で行くと、「Collaborative Filtering」ではお題として「映画をオススメするシステムを作りましょう」といった大枠が設定されます。(Netflix関連??)
これだけだとどこから手をつけて良いかさっぱりわからん・・・となってしまいますが、ご安心ください。
データセットとプログラム全体の枠組みは予め用意されていて、その中で使われている関数の中身を指示に従ってstep by step で実装していけば出来上がるように作られています。
つまり、受講生は果たすべき機能と引数のみ設定された一つ一つの関数の肉付け、「アルゴリズムをどうPythonで書き下せば良いか?」に集中すればOKとなっています。
(・・・とはいえこれが私にとってはメチャクチャしんどかったです。)

MicroMastersのコース紹介には「大体、週10 - 14 時間」取り組むことになりますよ。」と、書かれていましたが、 私の場合は平日ほとんど機能停止しているため、土日両日丸々つぶしてやっと、という感じでした。(体感では20時間くらい?)

感想

ごまかしごまかしなんとか証明書を獲得したので、偉そうに感想を書きます。・・・最低レベルの体験談として聞き流してください。

f:id:magattaca:20190929215642p:plain
お金で買える幸せ

アルゴリズム

個人的にもっとも良かった点は、パラメータを順次更新していくことで最適化するという、アルゴリズムで問題を解くというプロセスの理論と具体例を繰り返し実践できたことです。

私は数学が大の苦手で、高校数学でとまってしまっている(既にそれも危うい)のですが、高校までの数学で問題を解くといった場合、 数式をなにやら式変形して特定の解を導くといったことがほとんどだったように思います。 また、大学進学後も微分積分線形代数といった授業はありましたが、方法としては似たようものでした。(薬学部だったからかもしれません)

なので、今回edXで学んだような、更新のルールとそれが収束する理由が説明されて、 あとは繰り返しループを回して実際に逐次値が安定化して行くという経験をしたことがありませんでした。 ひょっとすると大学で、工学部等に進学されて最適化数学(?)を学ばれたのではない方は私と同じような状態なのではないかと思います。

「本当にこれで収束するのか!」「確かにループを回す解き方ならプログラミングでコンピューターにやらせるしかないな!」というのを納得できたのは非常に良い経験でした。

数学力?

また、Pythonでプログラミングを行おうとして、数学力がいるというのを実感しました。
行列同士の処理を行おうとした際に、「要素同士を掛け算して〜、足し合わせて〜」という処理を行いたいとして、 「これはなんか良い感じで内積とれば良い感じになるのでは??」とは思うのですが、結局どうして良いかわからず、 for ループを回してインクリメントしつづけるということを繰り返していました。 模範解答と比較した、自分のfor ループを回し続ける方法の遅さたるや!! Macが雄叫びをあげておりました・・・

ビデオ講義 ?

オンラインで講義を受けることのメリット・デメリットですが、スライド講義の場合は少しわかりづらいと感じました。 「Here, xxx *** ~~~~」みたいな感じで説明されるのですが、Hereってどこ!今どこの話しているの??となりました。 私はアナログ人間なので黒板に板書をしながら説明されているところを撮影した動画の方が流れを追いやすかったです。

一方で、繰り返し動画を見ることができる。高次元のグラフが綺麗に描写され、収束の様子がムービーで提示される。 何より、自分で自宅から授業を受ける時間を選ぶことができるという点は代え難いメリットだと思いました。 とりわけ地方在住のへっぽこ会社員にも新しい分野を勉強する機会が手軽に手に入るというのは大きいです。

もっと感想

で、これだけで「機械学習 & Deep Learning & Pythonすべてばっちり!」かというとそういうわけには行かないかな、という感想です。機械学習の話題だけでいえば「はじめてのパターン認識」の方が広く取り扱っているようにも思いました。実際に問題を解く上で、Lectureで解説されている内容だけでは足りず、「はじパタ」等を参照たりググったりしてやっと意味がわかるということがありました。
(Discussion ForumでもLecture と Homework・Projectの内容があっていないとの意見がありました)

ですが、私の場合は「はじパタ」単独では難しすぎて理解できなかったので、Lecture形式で順をおって説明されたことでやっと内容がわかったことがたくさんありました。 (例えば、k-MeansとK-medoidsの違いとか。。。) Lecture形式の良い点は躓きやすい点に力点を置いて説明してくれることだと思います。やっぱり教科書で字面を追うのとは違います。

Deep Learningについて、私は全く詳しくないのですが多分同じ感じなのかな?と思います。話題の網羅性だけなら、専用のコースや書籍を読む方が良いのでしょう。
また、Project等で取り扱われた問題も、既存のライブラリを使えば簡単に解けるものだと思います。

一方で、このコースでは、同じ問題 (例えばMNIST) を単純な線形判別・パーセプトロンからはじめてDLへと一貫して追って行くことができ、また、アルゴリズムを自分でプログラムに書く経験ができる点で理解が深まり良いと思いました。

私は教科書を読んでみても、実際に使うところまで落とし込むことはできないので、締め切りに追われて強制的に手を動かしてやっと少しわかりました。すみません・・・

まとめ

以上、オンラインコース受講のとりとめのない感想でした。

総じて質の高いコースだったので、興味を持たれた方は無料の講義をいくつか眺めてみられてはいかがでしょうか?課金するかどうかを決める期限は、開講後一ヶ月後程度に設定されているので、とりあえず眺めてから判断されたら良いと思います。英語の勉強にもなりますし(字幕もあります)、MITのコース受けてるって行ったらなんか格好いいし!

課金したのに感想のレベルが低すぎてすみません・・・

ちなみに、同じMicroMastersで現在edXで「Fundamentals of Statistics」が開講中です。 こっちはLecture 0からさっぱりわからなくて諦めた・・・。 新しい分野を英語で勉強するのは私には難しすぎました。