機械学習の機も知らない学生が機械学習(深層学習)を半年間学んだ話

# はじめに

2020年4月の時点で機械学習を全く知らない状態だった私が半年強の間に使った本や勉強のしかたなどを紹介しようと思います。機械学習初学者の参考になればうれしいです。
記事の目標としては、理論より応用を重視したい人が何をすればいいのかがわかることを目標にしています。

#目次
[1.自己紹介](#1-自己紹介)
[2.勉強の流れ](#2-勉強の流れ)
[3.本の紹介](#3-本の紹介)
[4.総括](#4-総括)



#1. 自己紹介

2020年4月
・情報系学部3年
・理論寄りの場所なので数学は講義でそこそこやった
　線形・微積・統計など、機械学習に必要な数学は軽くさらったような状態です。
・pythonはほぼ独学で、取り合えず書ける程度
　numpyやscikit-learnといった機械学習ライブラリとは無縁の状態です。
・英語はできません

この状態からスタートです。
私の機械学習のモチベーションは「画像生成で遊びたい」です。どうすればいち早く実践的なタスクができるかを念頭に置いて本を選びました。(G検定のはおまけです)








#2. 勉強の流れ
大まかな流れは以下の通りでした。

機械学習のエッセンス
↓
PythonとKerasによるディープラーニング
↓
スッキリわかるディープラーニングG検定


まず機械学習のエッセンスで機械学習の基本とnumpyの扱いを学びました。後で紹介しますが、この本には機械学習に必要な数学もしっかり解説されているのでこの分野の初学者はとりあえず買ってもいいと言えるぐらいおすすめです。

次にKerasを使って実際にディープラーニングの基礎から応用までをカバーしました。2冊目の本も良い本なのですが、ディープラーニングの初学者(≠機械学習の初学者)には少し難しいので間にもう一冊挟むべきだと感じました。

G検定はqiitaの記事などを参考にコードを書いて得た知識を整理するための題材として選びました。想像より幅広い知識が聞かれる(法律や国の政策など)ので勉強するとためになることも多いです。
G検定自体は割と簡単に受かる(実際上にあげた3冊＋模擬試験1周で受かりました)のでこの分野を専門にするつもりならとりあえず受けてみてもいいと思います。この検定合格を目指した勉強をすると自然に重要な知識がつくので、先にG検定の本に触ってみるのもいいかもしれません。

PythonとKerasによるディープラーニングである程度実践的なコードが書けるようになってから(6章ぐらいまで進んでから)は、qiitaで面白そうな記事を見つけてはほぼ完コピー/若干のアレンジを加えて簡単なタスクを行うコードを書きました。プログラミングするときに気を付けることの一つにモチベーションの維持があると思います。本の例だけでは面白くないので、画像分類の例でも自分でデータセットを作って遊ぶとモチベーションが高いまま学習を進められると思います。


個人的には、機械学習のエッセンス等で機械学習の全体を抑えた後はやりたいことに応じて自由に本を選べばいいと思っています。理論を重視するならニューラルネットワークの実装をする本、ディープラーニングを使うことが目的ならkeras,tensorflow, pytorchといったフレームワークの解説書を読むといいと思います。その際、厳しいと感じたら間にもう一冊挟むのもいいかもしれません。



#3. 本の紹介

##機械学習のエッセンス
はじめに言っておくと、この本はめっちゃおすすめです。特に初学者(pythonの経験が浅い、線形代数・微積に自信がない)はこれを読めば間違いないと思っています。

pythonはインストールから、数学は高2微積・ベクトルの内容から丁寧に解説しています。
pythonと数学の基礎を固めた後はpythonを用いた数値計算とグラフの描画を実際のコードを用いて解説していて、numpyとmatplotlibをしっかり扱います。

数理最適化・機械学習アルゴリズムのパートでは、コードのみの紹介ではなくアルゴリズムを数式を用いて解説しているので本質的な理解が得られます。数学の専門書のような固い感じではないので読みやすいです。

pythonや数学に自信のある人は前半を軽く読み飛ばしてもいいと思います。頑張れば2週間弱で読める本です。

サンプルコードや数式は、追うだけではなく実際に手を動かすと効率よく身につくと思います。

##PythonとKerasによるディープラーニング

ディープラーニングフレームワークKerasの作者François Cholletの本です。2017年の本で、年々進化する機械学習分野の本としては少し古いと思いますが、実践の入門書としてこれほど適したものはないでしょう。注意点として、KerasのバックエンドとしてTensorFlow1.3を使うので、最新の2.xをインストールしている場合には別途環境を作らないといけないのが欠点です。(古いのでしょうがないですが)

この本はKerasをもちいて実践的なタスクを行うコードが書けることを目標にしています。なので、ディープラーニングの理論的な面の解説は薄めです。そのあたりを知りたい人はtensorflowの解説書や0から始めるディープラーニングを読むことをお勧めします。私はとにかく機械学習で遊びたかったので実装をメインにとらえたこの本を読みました。

ディープラーニングの概要を述べた後、ニューラルネットワークと機械学習の簡単な解説を挟み、画像分類・時系列解析といった基本的なタスクを行うディープラーニングモデルを構築します。後半では応用として、より複雑なモデルの構築や画像生成モデルを扱います。

私がこの本をオススメする理由として、まずは紹介されているテクニックの多さを挙げたいと思います。少しでも予測の精度を上げるために非常に多くの工夫が見受けられます。それは誰でも簡単にできるものなので実践の場面でも役に立つと思います。
オススメするもう一つの理由としては、Keras作者の意見が載っていることです。この本の最初にはなぜＡＩなのか、最後にはディープラーニングの可能性と限界についての議論が載っています。テレビなどでなんでもできるように取り上げられることの多いAIの本質を見極めるのに最適です。新書で同じような議論をしている本を何冊か読みましたが、本書の意見が最も的を射ている感じました。

この本は著者自身のgithubで内容が公開されているので、英語ができる方はそちらで内容を気軽に覗くことができます。また、Kerasのドキュメントには本書の最後に書いてある著者の意見が載っています。

##スッキリわかるディープラーニングG検定
G検定の勉強用に買いました。AI分野の概要を知ることができます。G検定向けなので数式的な表現はほとんどありません。上記２冊で登場しなかった言葉・アルゴリズムの補足としては十分だと思います。発行が2020年3月で公式テキストよりも新しかったのでこれを選びました。最新の情報を得るという意味では正解だったと思います。



##その他コメントしたい本など
###ゼロから作るDeep Learning (シリーズ)
タイトルの通りニューラルネットワークを実装します。解説は丁寧ですが、私の目的に合わなかったのでリタイアしました。レベルとしては機械学習のエッセンスの後に読むとよいと思います。

###はじめてのディープラーニング
理論展開は分かりやすいですが、数式の記法に違和感を感じました。独自の記法が多いので、別の本で数学をしっかり押さえてから本書を読むとよいと思います。

###qiitaなどの個人記事
面白い記事が多いのでモチベーションを保つのに役に立ちます。実践的な話題の記事はkerasかpytorchで書かれてることがほとんどなので、ある程度知識が整ったら時間があるときに実際に手を動かしてみるとよいです。


###arXivなどの論文
少し初学者からは離れてしまいますが、最先端の論文を読んでみるのもひとつの手です。最新の動向を知れますし、githubでコードを公開してる場合には実際に試すことができます。もちろん英語で書かれてるので私みたいな人は注意が必要です...


#4. 総括
私の一押し入門書は機械学習のエッセンスですが、python＋機械学習の本は山ほどあると思うので、大きめの書店に出向いて自分に合うものを探すのが良いと思います。本を見つけたら手を動かしてコードを書きましょう。ある程度知識がついてからはネットの記事を参考にするのもいいと思いますが、初学者はやはり書籍で体系的に学ぶべきだと思います。
ここまで読んでいただきありがとうございました。