文系エンジニアがCourseraの機械学習コースを1ヶ月で修了したので振り返ってみました。

昨年の丁度同じ時期に、1ヶ月ほど仕事を休んで小学校の算数から高校数学までを学び直しまして、[文系エンジニアが機械学習に入門するために小学校の算数から高校数学までを一気に復習してみました](http://qiita.com/poly_soft/items/8ea0fc85577f0726f098)という記事を書きました。

その後、機械学習やディープラーニングに関する勉強をどんどん進めていく予定だったのですが、Go、Scala、DDD、[関数型言語の基礎](http://qiita.com/poly_soft/items/3e3626aff135ea0558cc)、Rust、そしてGCPやKubernetes等、仕事上でキャッチアップしなければならない分野が山積みだった(＆とても面白かった)ため、中々手を付けられませんでした。

それらの学習がやっと一段落した＆今年の7月から機械学習系の開発に強みを持つ会社様に職場が変わったということもありまして、機械学習の入門として非常に評判の良かった[Andrew Ng](http://www.andrewng.org/)先生の[Courseraの機械学習コース](https://www.coursera.org/learn/machine-learning)を(今回は仕事を休まずに)受講してみましたので、振り返ってみたいと思います。

# 講義の内容

こちらに関しては、「Coursera 機械学習」で検索すると良記事がたくさんありますので省略したいと思います。個人的には下記のkatsu1110さんとyubessyさんの記事が受講前にとても参考になりました。

[数学の苦手なバイオの学生がCourseraの機械学習コースを修了して気づいたこと - Qiita](http://qiita.com/katsu1110/items/423fc9ac567710a1bd9b)

[Coursera の機械学習コースを完走して修了証を取得した話 - yubessy.hatenablog.com](http://yubessy.hatenablog.com/entry/2016/01/11/214611)

# 受講スタイル

- 講義で使われるスライドは、各週の「Lecture Slides」のページに全てPDF形式でアップされている(Andrew先生の講義内での書き込みも含まれている)のですが、これを印刷してあらかじめ目を通してから受講して、受講中はそれをノート代わりにしてメモを書き込んでいく、というスタイルに最終的には落ち着きました。

- 大変ありがたいことに、ボランティアの方によって日本語字幕もアップされているのですが、機械学習の英語の用語に慣れたかったこと、および英語の勉強も一緒にやってしまおうということで、英語字幕で受講しました。 
  - Andrew先生の発音は日本人でも非常に聞き取りやすいのと、機械学習や数学の用語以外には難解な単語はあまり使われていないので、英文の読解にさほど苦手意識のない方であれば、英語字幕でも十分ついていけると思います。

# 受講期間

- 7月末から受講を開始して、8月末に修了しましたので、期間は約１ヶ月ほどでした。
  - 長くなればなるほど挫折の可能性が高くなると思いましたので、期間中は土日祝日の日中はほぼ全てこちらの勉強に使って、平日の夜も週平均2日程度は受講していました。
  - 間が空いてしまうと受講内容を忘れてしまって復習からやり直し的な感じになってしまい効率が悪いので、個人的には期間を決めて一気にクリアしてしまった方が良いという印象です。

# 料金＆認定証

- 無料で受講可能なコースですが、認定証をLinkedInに載せてみたかったのと、こんな素晴らしいコースを作ってくれたAndrew先生に対して感謝の意を表さなければということで、有料で受講＆認定証を取得しました。(料金は月額49ドルです)

![スクリーンショット 2017-08-28 19.38.56.png](https://qiita-image-store.s3.amazonaws.com/0/22932/d61bb0d5-cc1b-4663-38be-419e09cbd559.png)

# 受講メリット

- まだ受講していない方にとっては「他のネット上のコースや教材と比較した場合の受講メリット」が気になるところだと思いますが、これに関しては人それぞれだと思うので何とも言えません。

- ただ、私個人の感想としては「機械学習の入門としては非常に有用」でしたので、他の入門用教材に手を出す前にこちらの講義を受講してみた方が、勉強効率が良くなる可能性はかなり高いのではと考えております。

  - 自分で「勾配降下法」のアルゴリズムを書いたりするのは、書籍等を読んでいるだけだと中々やる気になれないと思いますし、自分でプログラムを書いてみるのと座学とでは理解度に相当差が出てしまうかなと。

- また、こちらのコースは非常に知名度が高いので、「Courseraの機械学習コースを修了しました」と言えば、その人がどの程度の基礎知識を持っているかを周囲の人たちが把握しやすいという点で、キャリア的にもメリットがあるような気がします。

# 数学の予備知識に関して

- 私と同様に文系出身の方や数学が苦手な方はこの点が気になるところだと思いますが、「やはり高校までの数学は一度全部復習しておいた方がよい」というのが私の実感になります。
  - 高校数学までの全ての範囲が必要ということではないですが、スポット的に色々な種類の数式が出て来るので、取捨選択して復習するよりも一気に全部やり直してしまった方が効率が良い気がします。
  - そういう意味では昨年の夏に数学を一気に復習したのは悪くない判断だったかなあと。

- ちなみに「微分」「線形代数」「統計」に関しては、私の場合受講前に下記の書籍でざっと復習しましたが、こちらの講義に関しては(Andrew先生の教え方が本当に上手いので)下記の書籍に記載されている範囲の知識で十分大丈夫だと思います。

[マンガでわかる微分積分](https://www.amazon.co.jp/dp/4797342501)
[マンガ線形代数入門](https://www.amazon.co.jp/dp/B00ZR7XVNO/)
[マンガでわかる統計学](https://www.amazon.co.jp/dp/479734251X/)

# Octaveに関して

- こちらの講義のプログラミング課題で使われるのが「Octave」という耳慣れない言語であることに抵抗を感じて受講を躊躇してらっしゃる方(私がそうでした)もいらっしゃると思うのですが、非常に理解しやすい言語なのでその心配は杞憂だと思われます。

- ただ、行列の扱い方が結構独特(というか多分私が扱いに慣れていないだけですが)な感じなので、プログラミング課題でそこに戸惑うケースは結構あると思うのですが、課題のドキュメントにたくさんヒントを掲載してくれているので、エンジニアであればさほど問題はないと思います。

- Macを使っている方への注意点ですが、講義の中で説明されているOctave 3.8のパッケージ版は、そのままインストールするとグラフ描画系の機能がうまく動作しないので、[こちら](https://www.coursera.org/learn/machine-learning/resources/P8Fp0)の情報を参考にしてhomebrew版をインストールすることをお薦めします。

# まとめ

[こちら](http://qiita.com/poly_soft/items/8ea0fc85577f0726f098)の記事を書いてから約1年経って、やっと機械学習に入門出来たかなという感じです。

私が麓でうろうろしている間にも、機械学習やディープラーニングの技術はどんどん進化しているようなので、業務として十分なレベルにキャッチアップ出来るのはいつになるのだろうかという感じではありますが、今後は少しずつ実務経験も積んでいって、いずれは自分一人でもそれなりの機械学習系システムを構築出来るようになりたいなと思っています。

次は、Andrew先生が新しくオープンされた[ディープラーニングコース](https://www.coursera.org/specializations/deep-learning)にチャレンジする予定なので、修了したらまた振り返りを書きたいと思います。

# おまけ

Youtubeの方で、ITエンジニアやIT業界に興味のある方たち(主にエンジニア未経験の学生さんや第二新卒の方たちが対象ですが)向けの[雑食系エンジニアTV](https://www.youtube.com/channel/UC_HLK-ksslL-Z_2wiIZDlMg)というチャンネルを始めました。

Qiitaを見ている方はほとんど現役エンジニアの方だと思うのでそういう方たち向けの内容ではないのですが、もしご興味ございましたらチャンネル登録してみて頂けると大変嬉しいです(^.^)