機械学習
MachineLearning
coursera

ウェイ(17)でもCourseraのMachineLearningを死につつ修了できた話

Hellooooo!

Qiita初投稿です。よろしくおねがいします。
高校2年ウェイで、都内の高校に通っています。

こんな僕でも、なんとかCourseraでスタンフォード大学が提供してるMachineLearningコースを2018年4月からの一ヶ月間で修了することができました。
せっかくなので、おそらく受講者の中でもっとも無能だったと思われる僕の視点で、どうやって修了できたのかをまとめてみます。

InkedCoursera MachineLearning_LI.jpg

スペック

MachineLearningコースで必要とされるのは 1.機械学習を実装する上で必要な数学。 2.プログラミング課題をクリアするために必要なプログラミングスキル。 3.授業の内容を理解するために英語力。

この三点に焦点をあてると、

・数学は特別得意というわけではなく、テスト前に詰め込む
・プログラミングは一年前に始め、C#でunityのゲームを作ったり、pythonで競技プログラミングに参加したりする程度
・英語はイングランドに住んでいたので、多少の自信()がある

という感じで、あんまり自慢できないです。

きっかけ

最近の機械学習、AIの流れに乗リたかった。(とりま波に乗たがるウェイ系
これらを使った、ユニークなソフトウェアもたくさん出てきて、自分でも作ってみたくなった。
そんな中、このCourseraのMachineLearningコースを見つけ、その評判につられて、受講しました。

Coursera 

色々なところで紹介されていると思いますが、
知らない人のために解説すると、世界中の有名大学の講義をインターネットで学習できるサイトです。
このMachine Learningコースは機械学習界隈ではとても有名で、この分野の第一人者のAndrew先生が丁寧に教えてくれます。
機械学習について、教師あり学習(ニューラルネットワーク、SVMなど),教師なし学習(K-meansなど),機械学習が用いられたアプリケーションの仕組み、機械学習を実装を行う上でのコツなどなど、こんなに教えてもらっていいのかと思うほど教えてくれます。
とても面白く、楽しかったので自信をもって人に薦めることができます。

Machine Learning

なぜ終えられたのか

コースの途中たくさんの人のコースの経験のブログを読んできました。その中でいつもあれれ?と思う部分がありました。
それは、皆さんコースを終了させる時間が速すぎる。速い人では40時間、平均だと65時間くらいじゃないでしょうか。
これは僕には到底不可能で、130時間くらいかかっていると思います。とにかく、数学の知識が足りなかったです。一ヶ月で集中して勉強したので、かなりの睡眠不足でワンチャン死にそうでした。
だから、こんな僕でもなんとか修了させることができたのは、わからないところを調べて、足りない知識を補い、人の2,3倍の時間を使ったからだと思います。
つまり、時間さえかければ修了させることができる。わからなくても、粘り強くやればなんとかなる。
これからやる人は僕よりスペックが高いと思うので、これより早く、余裕で終えられます。

レッスンの進め方

このコースはビデオ→小テスト→プログラミング課題。
3ステップで組まれています。

ビデオは英語ですが、字幕がついています。字幕は日本語にも対応してくれています。
ですが、日本語字幕を使ってみたところ、翻訳が良くなくて内容が頭に入らなかったり、字幕が出てくるタイミングがおかしかったりで、親切とはいえなかったので、英語字幕を使いました。おそらく、英語で学習したほうが直感的な理解ができると思います。
英語が苦手な人も、Andrew先生が直感的に、難しい単語を使わないで、聞き取りやすい発音で話してくれるので、そんなに困らないです。
また、字幕を読みきれなかったときやわからない単語が出てきたときにはなどは一旦ビデオを停止して、字幕をゆっくり読むこともできますし、ネットで単語の意味を検索して、理解する事もできます。僕はデスクトップに常にweblioの小窓モードを常駐させて、単語の意味がわからないときにすぐ調べ、どうしても意味が理解できないときはGoogle翻訳に通して、なんとなくの意味を掴んでいました。
他にも、ノートを雑にとってました。そのレッスンのキーワードだけでも簡単にメモしてました。そうすると、あとから見直しても何をやったか思い出すことができますし、手を動かすことで、記憶定着の補助にもなりました。

このビデオには数学の知識(微分や指数関数など)が必要だったので、学校の授業中に数学の教科書と微分の本をひたすら読んで、ビデオに備えていました。Andrew先生はわりと数学の深い理解はしなくてもいいと甘えさせてくれるので助けられました。

小テストは、ビデオの復習です。正答率80パーセント(5問中4問正解)でパスすることができます。雑に問題文を読むと、普通に勘違いするので、しっかり読むことをお薦めします。

そして、もっとも大変なのがプログラミング課題です。これが僕の勉強時間の半分はとってます。Octaveという言語を用いて行い、関数型の言語を使ったことがあれば、すぐに理解できると思います。
プログラミング課題が大変なのは、その週のレッスンのしっかりとした理解がないと、実装の方法が全くわからないことです。その場合は、もう一回ビデオをが見ました。
あと、行列の計算に慣れていないと、時間を取られると思います。僕は行列が文部科学省の謎戦略によって数学の学習要領から外されてしまった高校生なので、「は?」と思う部分がかなりあり、よく混乱していました。だから、いきなりコードを書くのではなく、ノートに行列計算のイメージを書き、納得してから行いました。

苦労したプログラミング課題

2週目のlinear regression
5週目のニューラルネットワーク

2周目のプログラミング課題は内容自体はそんなに難しいものではなかったのですが、行列の計算になれなくて、時間を取られました。

5週目のニューラルネットワークのbackpropagationはこのコースでの自分にとって、プログラミング課題の一番の鬼門だったと思っています。総勉強時間で25時間かかってます。
なぜこんなに時間がかかったのかといえば、そもそものbackpropagationの詳しい理解ができていなかったにあると思います。あまりにも微分の話の意味がわからくて、本格的に微分を学ぶために「ゼロから学ぶ微分積分(amazon)」を購入し、勉強しなおしたうえで、トライしました。プログラミング自体の難しさもあ、8時間くらい椅子に座って一日が終わったときもありました。
誤差逆伝播法を宇宙一わかりやすく解説してみるというサイトを参考にしました。

5週目以降のプログラミング課題は数学的にはあまり難しさを感じなかったのでわりと楽に終える事ができました。

振り返って

機械学習を学ぶことで、現代社会でよく言われるAIができることとできないことがなんとなく実感することができました。
また、これからのディープラーニングやAIを学ぶ上でのいいきっかけになったと思います。

わかりやすい授業で、ウェイでも理解することができる素晴らしいコースなので、興味のある方は挑戦してみてください。