良質で多量なOSS・情報に囲まれて機械学習を学ぶ





Qiitaアドベントカレンダー[機械学習をどう学んだか by 日経 xTECH ビジネスAI②](https://qiita.com/advent-calendar/2019/machine-learning-01)
への参加記事です！



# はじめに

機械学習（特に深層学習）は学術スタートなので性質としてオープンですが、インターネットの整備・それに伴う便利なツール（Github, Docker, JupyterNotebook...）の出現・浸透後の **機械(深層)学習ブーム**は世界的にとてもインパクトが大きかったと思います。[^1]

機械学習周辺のライブラリ・フレームワーク・実行環境は次々に生まれ成長し、ネット上にある実行コードや解説記事の数は今や膨大です。

<br>
０から学習する方にとっては誠に幸運な環境ですが、同時に**数が膨大すぎて何から手をつけて良いのかてんやわんや**な環境であることも事実だと思います。
（少なくとも私がそうでした:sob:）


なのでこの記事では、自分の学習経験を元に、膨大な学習リソースの中から最速で機械学習をどう学ぶか？
について書いていきます！　（基本的に無料のコンテンツ中心）

<br>
質問・他意見等ウェルカムです！
**"爆速"の観点だと各ステップで１つのコンテンツを学ぶのがオススメです**
<br>


# ０歩目： 兎にも角にも興味

<br>
まず興味がないと何も始まりません。

機械学習の凄さが簡単に面白くわかるコンテンツもたくさんあります。
オススメは [TensorFlow.js](https://www.tensorflow.org/js/demos/?hl=ja)のデモページで、実際に機械学習を使ったゲームを動かせます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266096/4616a8e1-5f2e-b77a-7a20-3b65cc1e14cb.png)

Githubにコードも上がっているので、以下のステップ後に戻って来るのも良いかもしれません！



# 一歩目： 兎にも角にも実装

<br>
最初からコードを書いて進めた方が良いというのは、自分がプログラミングを始めた時にも感じました。
（[この記事](https://qiita.com/Yoji0806/items/d895d1fbd2d8c1736449)でも書きましたがKotlinスタートです）[^2]




Kotlinし始めた時はチュートリアル本を購入してその写経から入りましたが、機械学習系では無料で最高のコンテンツが山ほどあります。

その中でもオススメは[松尾研究室の講座](https://weblab.t.u-tokyo.ac.jp/%E6%BC%94%E7%BF%92%E3%82%B3%E3%83%B3%E3%83%86%E3%83%B3%E3%83%84%E5%85%AC%E9%96%8B%E3%83%9A%E3%83%BC%E3%82%B8/)です。日本語で初心者向け、質量ともにトップレベルです！ [^3]

この講義は深層学習メインですが、Pythonの numpy, pandas などのライブラリの操作も学べるので、他の機械学習もスムーズに進められると思います。

もう一つのオススメは、[PFNが公開しているチュートリアル](https://tutorials.chainer.org/ja/)で、数学的な基礎から、機械学習・ニューラルネットまで、本当に幅広く実装を通して学ぶことができます。[^4]

この時点では、訳の分からない数学的な部分は飛ばして、とりあえずコードで動く部分だけでも大丈夫です！

<br><br>

`※追記
英語が大丈夫な方は、　後述のKaggleが公開している Kaggle Learnもオススメです！`
URL→ [Kaggle Learn](https://www.kaggle.com/learn/overview)

`※上の２つの講座でもそうですが、実行環境にはJupyterNotebookをオススメします。よく分かんない方にはGoogle Colabotoryがオススメです。`


<br>
# 二歩目： 仕組みについて学ぶ


一歩目でコードの動きと Input&Output は何となく理解して、次は処理の中身です。

上の２つのコンテンツですっ飛ばした数学的な部分も、コード実装後なので頭に
スっと入る部分が多くなっているのではないでしょうか。

また、機械学習の登竜門とも言われている（適当）Andrew Ng教授のCourseraでの[機械学習講座](https://www.coursera.org/learn/machine-learning?utm_source=gg&utm_medium=sem&utm_content=17-DeepLearning-ROW&campaignid=6465471773&adgroupid=77415260637&device=c&keyword=coursera%20artificial%20intelligence&matchtype=b&network=g&devicemodel=&adpostion=1t1&creativeid=379493133115&hide_mobile_promo&gclid=CjwKCAiAis3vBRBdEiwAHXB29PI47WFaqZQTOKNqSj5utjENG935e2JmXUU7TSR5rU0N5QHvLKuOFBoCpy4QAvD_BwE)、[深層学習講座](https://www.coursera.org/specializations/deep-learning?utm_source=gg&utm_medium=sem&utm_content=17-DeepLearning-ROW&campaignid=6465471773&adgroupid=77415260637&device=c&keyword=coursera%20artificial%20intelligence&matchtype=b&network=g&devicemodel=&adpostion=1t1&creativeid=379493133115&hide_mobile_promo&gclid=CjwKCAiAis3vBRBdEiwAHXB29A05MmvmynzLBn1oEDsJrDRjBtiMg0WhZD7zql_XNZu25ncBWueSlxoCDaMQAvD_BwE)。
AI研究の第一人者らの [DeepLearning](http://www.deeplearningbook.org/)もオススメです！（日本語訳もあったような:rolling_eyes:）



しかし、どうしても頭だけで理解しないといけない分、詰まる箇所が多くなると思います。

以下に理解の手助けになるようなリンクを貼っていきます。

<br>
### ①「2分でディープラーニング」：　[URLはここ](https://www.nhk.or.jp/aibeginner/01/index.html#listVideos)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266096/12954fd4-5ff4-e2c4-14f2-1457efc92d71.png)

これは前述の松尾豊教授が出演されたNHKの番組での１コーナーで、視覚的にディープラーニングの仕組みが説明されてます。
自分の周りにも勧めたのですが、めちゃくちゃわかりやすいのでオススメです。
（勧めた相手の評判も「最高！」が多いです。）
`※追記
なぜか今ページが表示されてないようですね。。。残念です。
復帰したら是非ご覧ください！`

<br>
### ② 3Blue1Brown : [URLはココ](https://www.youtube.com/channel/UCYO_jab_esuFRV4b17AJtAw/videos)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266096/1989a3f2-24c9-b07a-0968-1c8e2141e544.png)

自分が大好きなYoutubeチャンネルの一つで、難しそうな概念等をとても平易に説明してくれてます。今回で言うと線形やニューラルネットの説明動画がオススメです。


<br>
### ③Tensorflow Playground： [URLはココ](http://playground.tensorflow.org/#activation=tanh&batchSize=10&dataset=circle&regDataset=reg-plane&learningRate=0.03&regularizationRate=0&noise=0&networkShape=4,2&seed=0.02997&showTestData=false&discretize=false&percTrainData=50&x=true&y=true&xTimesY=false&xSquared=false&ySquared=false&cosX=false&sinX=false&cosY=false&sinY=false&collectStats=false&problem=classification&initZero=false&hideText=false)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266096/a63b896b-bd82-5eb2-7cd5-02f6a55c400c.png)


一般的にブラックボックスと言われるニューラルネットワークを自由自在に構築でき、そのモデルの内部的な動きを目で追うことができます。

<br>
# n歩目： Let's Kaggle!

ここまで来ると、あとは実践あるのみです。
機械学習を勉強した人なら
>「環境構築が不要でGPUも使える実行環境が欲しいし、前処理済みの大規模データも欲しいし、頭良い人のコードや解法も見たいし、大金も名誉も欲しい」

となるのは人の常だと思います。（適当v2）
この欲望は全て [Kaggle](https://www.kaggle.com/) が満たしてくれます！

Kaggleは世界一のデータサイエンス・機械学習のコミュニティーで、上記の欲望+αが全て無料で行えます。
常に何らかのコンペティションが開催されていますが、今までの解法とそのコード・データを見るだけでも非常に勉強になります。

<br>
# n歩目： Let's 論文

論文として発表されているものは大きく分けて以下の２種類があります。

1. 機械学習のモデル等の新たな考案
2. ある問題に対しての、機械学習を使った新たな解決方法

自分の論文を読む割合は今は ①が30%, ②が70%ぐらいですが、最初はその逆でした。
①の論文は主要なモデルに限ると数も限られているので、キャッチアップも難しくないです。
②の論文は特に自分に関わるものを読むと興味を掻き立てられるのでオススメです！

検索はもちろん [Google Scholar](https://scholar.google.com/)で！！！

最近だと、論文と共に実装されたコードも公開されていることが多いです。（非常にありがたい:pray:）
そんな**コード付きの論文**のキュレーションサイトまであります。

それが[Papers with Code](https://paperswithcode.com/)と言うサイトで、更新頻度も高く、コンテンツもリッチでめちゃくちゃオススメです。

<br>
# 最後に
最後まで読んでいただきありがとうございました！
少しでも機械学習の学習（？）の手助けになれば幸いです。
オススメの学び方や、興味を掻き立てられるサイト ・ 学習に役立つコンテンツ等あれば是非コメントお願いします！


[^1]: 前後関係が曖昧な部分もありますが、ブームについては最近の社会全体的なものを指してます。
[^2]: プログラミング自体が初めてという方はまずは[pyq](https://pyq.jp/)というサービスがオススメです。機械学習等のコンテンツも豊かです。
[^3]: もう一つリンクがあったので貼っておきます。[URL](https://weblab.t.u-tokyo.ac.jp/deep-learning%E5%9F%BA%E7%A4%8E%E8%AC%9B%E5%BA%A7%E6%BC%94%E7%BF%92%E3%82%B3%E3%83%B3%E3%83%86%E3%83%B3%E3%83%84-%E5%85%AC%E9%96%8B%E3%83%9A%E3%83%BC%E3%82%B8/)
[^4]: Chainerを開発したPFN自体が[今後PyTorchをメインに使用することを発表](https://preferred.jp/ja/news/pr20191205/)したので、Chainer部分を学ぶのは強くオススメはしません。