【初心者理系大学生向け】機械学習の学習法

[Google Developre Student Clubs（以下GDSC）](https://gdsc.community.dev/tokyo-university-of-agriculture-and-technology/)で代表をしていますほきです。
現在は[AcademiX](https://www.academix.jp/)というAI学習コミュニティに所属し、日々勉強をするとともに、AI開発の長期インターンに参加させていただいています。
今回は **「機械学習というワード最近よく聞くので勉強してみたい」** といった方や、 **「研究で使うことになったけど何からやったらいいのかわからなくて困っている」** といった方に向けて、僕なりのロードマップを紹介していきたいと思います。

:::note warn
今回は幹すなわち全体像を捉えることを目標としています。
あまり深入しすぎずに、どんどん次のステップへ進んでもらえたらと思います。
:::

# 0.はじめに
本記事では、理系大学生向けと銘打っていますが、次のような方を対象としています。
### 記事の対象者
- 高校レベルの数学(微分・積分など)を理解している
- 機械学習というワードは聞いたことがあるがあまりよく知らない
- Pythonの簡単なコードを動かしたことがある
### この記事は合わない人
- 高校数学を学んでいない
- コンペで上位入賞を狙っている・論文から実装できるようになりたい
- プログラミングを一切やったことがない

また、挙げている本や講座は、**僕が実際に勉強した時にお世話になったもの**に絞っています。
人によって合う合わないはもちろんあると思うので、似たようなものを使ってもOKです。

# 目次
| 章 | タイトル | 備考 |
|:-:|:-:|:-:|
|  0. | [はじめに](#0はじめに)  |   |
|  1. | [Pythonを学習しよう](#1Pythonを学習しよう)  | Pythonを学ぶのに最適な教材を紹介  |
|  2. |  [機械学習の基礎を学習しよう](#2機械学習の基礎を学習しよう) | 機械学習の基礎を学ぶのに最適な教材を紹介  |
|  3. |  [深層学習の基礎を学習しよう](#3深層学習の基礎を学習しよう) | 深層学習の基礎を学ぶのに最適な教材を紹介  |
|  4. |  [アウトプットしよう](#4アウトプットしよう) |  今後の勉強のためにアウトプット法を紹介 |
|  5. |  [おわりに](#5おわりに) |   |


# 1.Pythonを学習しよう
Rなど他の言語でも機械学習を学ぶことができますが、今回はライブラリが充実しているPythonを例に挙げて話を進めていきます。
機械学習ではifやforなのどの基本知識に加えて、
- NumPy
- Pandas
- scikit-learn

といったライブラリの使い方をマスターする必要があります。

Pythonを学ぶ教材はいくらでもありますが、**無料で公開されているもので特にいいなと思ったものを2つ**を挙げておきます。
- [東京大学「Pythonプログラミング入門」](https://utokyo-ipp.github.io/)
めちゃめちゃ詳しく書かれているのでつまみ食いしながら読むことをお勧めします。
**GDSCではこの教材を用いてPython初心者向け勉強会を行いました。**
- [ゼロから学ぶPython](https://kaityo256.github.io/python_zero/index.html)
ただPythonを学ぶのではなく文字コードの話など情報系の学生にとって重要なことも同時に学べてとてもお勧めです。
あと余談がおもろいので余談だけでも全部読むべき（）

実行環境について最初は**Google Colaboratory**を使うことをお勧めします。
Anaconda等を用いてももちろんいいのですがプログラミング学習において環境構築は1番の心が折れるポイントと言っても過言じゃないと思います。
またゲーミングPCを使っている人以外はGPUがないパソコンを普段使っていることが多いと思います。
3章の深層学習に進むときにGPUが必要になってくるのでローカルでモデルを回せるスペックがないならColab一択だと思います。
僕はコンペやインターンでGPUを頻繁に使うのでPro+というプランに入っていますが、勉強のため個人で使う程度であれば無料プランでも十分使えます。

# 2.機械学習の基礎を学習しよう
Pythonの基礎が学べた人は、機械学習の勉強に入りましょう。
この段階では、難しい理論はひとまず置いておいて、全体像を早く掴むことをおすすめします。
まず、この記事は大学生向けなので、講義で **「機械学習」** に関係がある内容をやっていないか思い出してみてください。
例えば、僕が所属している大学では
- アルゴリズム論
- パターン認識と機械学習
- 人工知能
- データ分析の数理

といったものが該当します。また、数学分野では
- 線形代数
- 数理統計学

が役に立ちます。
大学の講義は、理論ベースで隅から隅まで理解すると時間がかかってしまうので、 **サラッと目を通すくらいでいい** と思います。
大学で該当するような講義がない場合は、次の講座や書籍がおすすめです。

- [東京大学グローバル消費インテリジェンス寄附講座](https://gci.t.u-tokyo.ac.jp/)
人工知能分野で有名な松尾研究室が主催している講座です。
学生なら東大生以外でも無料で受けることができます。
- [Kaggleで勝つデータ分析の技術](https://www.amazon.co.jp/Kaggle%E3%81%A7%E5%8B%9D%E3%81%A4%E3%83%87%E3%83%BC%E3%82%BF%E5%88%86%E6%9E%90%E3%81%AE%E6%8A%80%E8%A1%93-%E9%96%80%E8%84%87-%E5%A4%A7%E8%BC%94/dp/4297108437/ref=sr_1_1?adgrpid=128786769567&gclid=CjwKCAiAkfucBhBBEiwAFjbkr780-3M1apbb_d8zt1bG02QrwFFvF_lmE9WljxHUIhJfm-EV9IXKlxoCeCAQAvD_BwE&hvadid=611329897876&hvdev=c&hvlocphy=1009324&hvnetw=g&hvqmt=e&hvrand=1749554958364123269&hvtargid=kwd-1431951857514&hydadcr=4080_13255671&jp-ad-ap=0&keywords=kaggle%E3%81%A7%E5%8B%9D%E3%81%A4+%E3%83%87%E3%83%BC%E3%82%BF%E5%88%86%E6%9E%90%E3%81%AE%E6%8A%80%E8%A1%93&qid=1671373600&sr=8-1)
Kaggleと書いてありますが機械学習の初歩から説明されているのでコンペ関係なく機械学習の初学者の方におすすめです。
テーブルデータを中心に特徴量作成、決定木、パラメータのチューニングの仕方など機械学習の基礎的なトピックを広く取り扱っています。

また、GDSCの資料もおすすめです。特に時間がない方や知識があまりなく全体像を早く知りたい方には向いていると思います。
- [Explore ML DSC | Beginner Track | Lesson 1 - 機械学習入門 - 公開用](https://docs.google.com/presentation/d/1EtnDfnrdwrS-IN6w7kCfavk1kyDAOcu2BwvKYyQ_78w/edit?resourcekey=0-ZMvNydiIQ_DayPq5sIV0Mg#slide=id.g4762c6ad4b_0_0)

# 3.深層学習の基礎を学習しよう
機械学習の基礎がわかったら深層学習へ進みましょう。
最近のAIブームは深層学習がメインで、ここを理解できるとやれることが一気に増えます。
おすすめの書籍を挙げます。
- [ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装](https://www.amazon.co.jp/%E3%82%BC%E3%83%AD%E3%81%8B%E3%82%89%E4%BD%9C%E3%82%8BDeep-Learning-%E2%80%95Python%E3%81%A7%E5%AD%A6%E3%81%B6%E3%83%87%E3%82%A3%E3%83%BC%E3%83%97%E3%83%A9%E3%83%BC%E3%83%8B%E3%83%B3%E3%82%B0%E3%81%AE%E7%90%86%E8%AB%96%E3%81%A8%E5%AE%9F%E8%A3%85-%E6%96%8E%E8%97%A4-%E5%BA%B7%E6%AF%85/dp/4873117585/ref=d_msx_wsirn_v1_sccl_2_4/357-4085340-6798308?pd_rd_w=EWiQ6&content-id=amzn1.sym.cf1bd798-4efb-468f-abe6-ad0928db5255&pf_rd_p=cf1bd798-4efb-468f-abe6-ad0928db5255&pf_rd_r=07HGX5V635CDG6ESD34A&pd_rd_wg=K826f&pd_rd_r=a4a1fc79-d9eb-4ec5-bcbd-88d37483aebb&pd_rd_i=4873117585&psc=1)
Deep Learingではとても有名な本です。
PyTorchやTensorflowなどのライブラリに頼らず一から実装をおこなっており深層学習の理論を学ぶ上では最適だと思います。

ゼロつくでは理論を理解するためライブラリを用いずに実装していますが、実際には必要となってくることが多いです。
有名なライブラリとしてPyTorchとTensorflowがあります（この記事ではTensorflowに焦点を当てます）。

:::note info
Tensorflowとは2015年にGoogleが開発した機械学習向けライブラリです。
Tensorと呼ばれるベクトルを用いて計算することでビックデータが簡単に扱えたり
Keras APIなどツールやライブラリが充実している点が特徴です。
:::

Tensorflowの入門〜応用を扱ったGDSCの資料を紹介しておきます。
- [Explore ML DSC | Intermediate Track | Lesson 3 - Tensorflow 入門 - 公開用](https://docs.google.com/presentation/d/1JqSET4pXyZ7Plpp0JHV-oSy6sco1KoJwu-4M2i-kubw/edit)
- [Explore ML DSC | Intermediate Track | Lesson 4 - 転移学習を用いた画像分類 - 公開用](https://docs.google.com/presentation/d/1-cyFwkAUqerPDoIMRyC5W_x0i8qiYoAExvuTfP8DdCU/edit)
- [Explore ML DSC | Intermediate Track | Lesson 5 - 画像キャプション生成 - 公開用](https://docs.google.com/presentation/d/1q0l5LHFlrB1MgzHUcKAlzo7rIrw847QufVWTAdnwJyc/edit)
- [Explore ML DSC | Intermediate Track | Lesson 6 - テキスト分類 - 公開用](https://docs.google.com/presentation/d/1tZDeVcD-WIszT4owwJV0ZmwVXFLFTAoTnqcBIC27m8c/edit?resourcekey=0-G0Fh0u5G1_PP55_ZW3NZ-A)

# 4.アウトプットしよう
ここまでやれば全体像はなんとなく掴めると思います。
機械学習に限らず、プログラミング学習においていかにアウトプットするかということはとても大切です。
いくつかアイデアを紹介するので、興味に応じて実践してみてください。
### 機械学習コンペに参加する
プログラミングのアウトプットとして競技プログラミングが有用なように、機械学習分野でもKaggleやSIGNATEといったコンペに出るのは、理解が深まりいいと思います。
といってもコンペはハードルが高いので、最初は**テーブルデータを扱うコンペを選んだり、経験が豊富な人とチームを組んでキャリーしてもらう**のがいいと思います。
SIGNATEの方が日本語で書かれていたり、入賞のハードルがKaggleに比べて低い（かといって簡単なわけではありませんが…）など初めての方には向いているかもしれません。特に初心者の方には**Beginner限定コンペ**がおすすめです。
また有名な日本語コンペとしてはatmaCupやNishikaといったものもあります。
現在(2022/12/19)に開催されているコンペをいくつか紹介しておくので、気になるものがあったら参加してみてください。
- [OTTO – Multi-Objective Recommender System](https://www.kaggle.com/competitions/otto-recommender-system)
- [ひろしまQuest2022：河川の水位予測](https://signate.jp/competitions/908)

### 資格を取得する
こちらはインプットよりになってしまいますが、**就活に役立つ＆明確な目標になる**という意味で紹介しました。
機械学習や人工知能に関する資格としては[G検定](https://www.jdla.org/certificate/general/)や[E資格](https://www.jdla.org/certificate/engineer/)があります。
E資格はハードルが高いですが、G検定は人工知能分野を広く知るきっかけになるし受けてみる価値はあると思います。
僕自身も来年受ける予定で両方取得できるよう勉強中です。

### インターンに参加する
上の２つに比べるとハードルが高いですが、**僕自身1番良かったことなのでこれはとても推したい**。
**自分のスキルを高めるのに1番効率がいいですし、実際にプロダクトを開発することで生データを扱う難しさや、業界のリアルな姿が知れてとても勉強になります。また、人脈も広がるので刺激になっていいです。** ~~何よりお金がもらえるの嬉しい。~~

:::note info
上のどれも難しそう…そんなかたには**自分の好きなこと×機械学習**で探してみることをおすすめします。
例えば
- 音楽が好き→音声合成×機械学習
- 言葉が好き→自然言語処理
- ゲームが好き→ゲームAI
- お金が好き→金融×機械学習
:::

# 5.おわりに
今回はGDSCの教材を中心に私が考える機械学習の勉強のロードマップを紹介しました。
少しでもこれから機械学習を勉強し始める方の力になれば幸いです。
またGDSCではこれからも機械学習系だけでなくアプリ開発などのイベントを企画しています。
興味がありましたらぜひチームに参加してください！お待ちしています！！