機械学習の始め方ー機械学習って何?から実装&理論の勉強法まで
機械学習を初めて約2年、機械学習エンジニアになって半年と少したって、ちょうど書くきっかけもあったのでまとめることにしました。
内容としては、
機械学習って何?という人が、理論や実装の勉強をして、自分で何かを作ったり、コンペなどである程度の成績をだしたり、仕事にしたり……ということができるようになるまでの勉強方法
を先に大まかな流れをお話してから、各項目ごとにお話していきます。
最初のロードマップを見たあとは、流れの途中や、必要そうな部分だけを切り取って見ていただいても大丈夫です。
また、私もまだまだ若輩者ですので、この方がいいんじゃないの?みたいなものがあったら、ぜひご指摘いただけると嬉しいです。
ロードマップ
まずは、どんな勉強が必要なの?というのをざっくり見ていただきたいと思います。
大まかに分けると、機械学習の「理論」と「実装(プログラミング)」の2つに分かれると思います。初学者の方はとりあえず動いたほうが楽しいと思うので「実装」からやっていくのがいいでしょう。
ということで、本当に初学者の方はさっぱりだと思うので、さっそくロードマップです。
1.機械学習って何?を学ぶ
2.かんたんなPythonの勉強
3.とりあえず機械学習をしてみる
4.目的がある方はさっそく目的のものをやってみる
5.Pythonをしっかり学ぶ&数学をかんたんに学ぶ
6.ディープラーニングの実装&統計の基礎&数学の基礎
7.機械学習を網羅的に実装
8.目的にあった機械学習の実装&機械学習の理論の勉強&情報系の勉強&数学の勉強&プログラミングの勉強……などなど。
このような順番にした理由なども含め、項目別に解説していきます。
1.機械学習って何?
まずは、「機械学習とは何か」を知ることから始めましょう。
これには、ネットで「機械学習とは」で見漁るのもいいと思いますし、Youtubeなんかもいいと思います。また、書籍であれば私はこれを読みました。
・人工知能は人間を超えるか
例えば
・AIと機械学習の違い
・機械学習でできること、できないこと
・機械学習の種類
なんかがわかるようになるといいと思います。
これは、機械学習を「作る側」も「使う側」も必要な知識だと思うので、例えばアプリ制作者でコードを書かずに機械学習を使いたい……という方も知っておいたほうがいいことだと思います。
2.とりあえずのPython
機械学習とは何かがある程度分かったら、次は機械学習を書くためのPythonというプログラミング言語を勉強しましょう。
プログラミング言語は数多くありますが、今や機械学習といえばPythonというくらい、機械学習にはPythonというプログラミング言語が使われています。
ですが、後々そんなにPythonは使わない……という人もいるにはいると思うので、まずは簡単にざっくりと勉強していきましょう。
おすすめはProgateです。
これのPythonコースをすべてやりましょう。
もし書籍やネットで勉強したいという方がいれば、コースの内容をざっくり見ることができるので、その内容を理解できるくらいに勉強しておきましょう。
(「Pythonの開発環境を用意しよう」という講座の内容は、次のステップで扱うので、やらなくていいです。)
3.とりあえず機械学習をしてみる
これでとりあえず準備は整いました。
さっそく機械学習をつくって動かしてみましょう。
ただ、「とりあえず作ってみて動く感動を味わおう!」というのが目的なので、もし難しければここはとばしてください。
それではまず、自分のパソコンに、コードを書いて実行するための環境を用意するところから始めましょう。
この環境構築がなかなか難しくて、ネットの記事も色々あるのでどれを見ればいいのやら……となってしまうのですが、例えば以下のような方法があります。
・Windowsの方専用で私の記事(宣伝?)
・ネットで「mac Python 環境構築」などでぐぐって、今年書かれた記事を見てやってみる
・5で紹介するようなPythonの教科書に書いてある方法でやる
私の記事についてですが、Windowsの方であれば、一応これで環境構築はできる思います。C++やCという言語の環境構築法も一緒に書いてありますが、それは無視してください。
ネットでの記事を探す際は、古いものだとインストールの方法が変わっていたりするので、できるだけ新しく、そして細かく丁寧に書いてある記事を探すことをおすすめします。
また、一番安全なのが、書籍に書いてある方法を試すことですが、著者の癖が出ることもあるので、一長一短です。
ちなみに、環境構築の方法が分かれるポイントは3つあって、
・エディタ(コードを書く便利なメモ帳)を何にするか
・Pythonのインストール方法はどうするか
・仮想環境はどうするか(最初はあまり考えなくていいです)
になります。
最初は動けばいいからとりあえずなんでもいい……とも思うのですが、私個人のおすすめは、エディタはVScode、PythonのインストールはAnacondaというものを使うことです。
準備が終わったら、さっそく機械学習をしてみましょう。
以下のサイトが、わかりやすかったです。
このサイトではKerasというライブラリを使って、手書きの数字を分類しています。
やってもらいたいポイントは以下の2つなので、それができそうなWebサイトであれば他でも大丈夫です。
・Kerasというライブラリをインストールする
・機械学習の入門の定番、手書きの数字の分類を行う
ここまでできれば、ひとまず自分のパソコンで機械学習を動かすことができるようになります。
※とりあえずの実装をおすすめする理由
機械学習は理論などをしっかり勉強しようとすると大変ですが、今では便利な道具もたくさんあるので、結構簡単に動かすことできます。
目的によっては、本当にほとんどコードを書かないで機械学習を行うことも可能なので、ここまではとりあえず動かすことを目標にしました。何より動くのが一番楽しいですしね。
4.目的がある方はまず羽ばたいてみよう
ここまででとりあえず機械学習が最低限できるようになっていると思います。
とはいっても、Pythonの文法は簡単なものだけですし、理論的な部分は全く勉強していない状態です。
こんな状態ですが、私はとりあえず、「目的がある方はそれをまずはやってみること」がいいと思います。
例えば
・音楽を作りたい
・株をしたい
・ゲームAIを作りたい
などなど……
といった目的があったら、まずは「その目的+機械学習」で検索してみて、とりあえず色々試してみるのがいいと思います。
というのも、勉強は必要に迫られないとなかなか身につかないからです。
検索して、やってみて、もしわからければ自分に必要な部分を勉強していく……というのが、効率のいい勉強法なのかな、と思います。
ただ、一体何が足りないのかすらわからない……という場合は、やはり基礎が足りないのかなと思うので、機械学習に関してはこの記事の続きの部分をやっていただくのがいいと思います。
もちろん、わからない部分が例えば「機械学習を使ったアプリ制作」のアプリ制作の部分……ということであれば、アプリ制作の入門まとめのような記事から、勉強法を探していくのがいいでしょう。
5.しっかりPython&とりあえずの数学
ここからは、しっかりと機械学習の基礎を固めていく段階に入っていきます。
機械学習といえばPython、という話を2つめのステップで話しましたが、その2つ目のステップでは、基本的な文法だけを勉強しました。
それでも十分ではありますが、今後新しいことを学んでいく中で、プログラミング言語も新しいことばかりでは結構大変だと思うので、ここでPythonの入門書を1冊読むのがいいと思います。
内容は簡単なもので大丈夫です。また、Udemyやドットインストールなどの動画コンテンツで、Progateよりは内容が濃そうなものであれば、それでも十分です。
私は簡単めな入門書はあまりよんでいないので、これがおすすめ!というものはありませんが、一応読んだものを載せておきます。
・みんなのPython
私が最初に読んだ入門書。私的にはわかりやすかったが、評価は微妙?
・Pythonチュートリアル
書籍でも売っていますが、公式で無料で読むことができます。最初の1冊には少しむずかしいと思いますが、この本をもとにした検定などもあるくらい、しっかりしている印象です。
Pythonの勉強と並行して、数学も勉強しておくのがいいでしょう。
機械学習の理論を勉強するとなると、結構高度な数学(大学レベル)が必要になるのですが、そこまで理論は勉強しないという人も、どういった数学が必要なのか、その概要は知っておいて損はないと思います。
以下の動画が、とてもよくまとまっていて、わかりやすいと思いました。
この動画を見て、中学数学が結構わからない、と思った方は、同じくヨビノリさんの動画を見て学ぶのもいいと思いますし、簡単なドリルなんかで数学の勉強をして、この動画の内容がある程度理解できるようにしていきましょう。
ここまで勉強すれば、結構機械学習の実装の本も読みやすくなると思います。
6.ディープラーニングの実装&統計の基礎&数学の基礎
いよいよ本格的な機械学習の実装です。
ここではこの本をおすすめします。
・PythonとKerasによるディープラーニング
この本は、3つ目のステップで学んだKerasというライブラリを使って、ディープラーニングの様々な活用法を実戦形式で学べる本です。
理論的な部分は省いていることも多く、しっかりと理解しようとすると現段階ではかなり厳しいので、雰囲気を掴みつつ、とりあえずコードの意味を重視して勉強するようにしてください。
ついに機械学習でいろいろなことができるようになるので、難しいですが結構楽しいと思います。
並行して、次のステップの準備として、統計と数学の勉強をしておきましょう。
統計は、統計検定2級相当くらいがわかると安心です。
……と聞くと難しく感じるかもしれませんが、無料で学べるとても良いサイトがあるので、このサイトで言ってることがある程度わかるようになったら、それで十分です。
統計を勉強する理由は、ある程度統計の知識がないと、せっかく求めた分析結果を理解することができないからです。また、機械学習モデルを改善したいと思ったときにも、なぜこのモデルがうまく学習できないのかを理解することが難しくなってしまいます。
もしこのサイトが難しく感じるのであれば、ヨビノリさんの動画をまず見てみるのがわかりやすいと思います(めちゃくちゃヨビノリさんを推してますが、ヨビノリさんの回し者ではないです)。
数学の方は、次の本がわかりやすかったです。
・人工知能プログラミングのための数学がわかる本
これはステップ5の数学の内容をより詳しくした感じの内容を学ぶことができます。
理論はもういい、と割り切る場合には必要ありませんが、理論もある程度学びたいという方は、次のステップから数学的な内容も難しくなってくるので、この本くらいの内容はわかるようにしておくのがいいと思います。
7.機械学習を網羅的に実装
次は機械学習の手法を網羅的に勉強していきます。
以下の本がおすすめです。
[第3版]Python機械学習プログラミング 達人データサイエンティストによる理論と実践
私はこの書籍の第2版を読んだのですが、第3版を買ったほうがいいと思います(2版は使っているライブラリが古いです)。
この書籍は、機械学習の手法について網羅的に書いてあって、ライブラリを使った簡単な実装方法や、しっかり理論を意識して自分で書くコードも多く載っています。
ライブラリを使うのももちろんいいのですが、理解するためにはライブラリを使わずに書いてみることも結構勉強になるので、おすすめです。
しかし、理論的な部分に関しては省いている部分も多く、これだけでしっかり理解するのは難しいので、無理に理解しようとはしなくても大丈夫です。
※先にディープラーニングの実装から行った理由
6ステップ目ではディープラーニングに重点を置いて学びましたが、ここではその他の手法も学ぶことができます。ディープラーニングを先にやったのは、今最も使われている手法の1つだということと、この本より6ステップ目の本の方が実装に重きを置いているからです。
ここまでくれば、機械学習の入門は突破したのではないかなと思います。
8.道は開けた!
ここからは、一気に道がひらけて、ここまでで自分が興味を持った分野を重点的に行うのがいいかと思います。
もし全体的なレベルアップを行いたいのであれば、
・その他の機械学習手法の実装方法の勉強
・機械学習の理論の勉強
・情報系の勉強
・数学の勉強
・プログラミングの勉強
が必要になってくるかと思います。
ただ、4つ目のステップでも話したとおり、必要に迫られたときほど学習効果は高いと思うので、とりあえず何かを作ってみたりして、足りない知識を補っていくのがよいと思います。そして、これも同様に、わからない部分さえわからなくなったときに、基礎の勉強を固めるのがいいと思います。
もし作ってみたいものがなければ、腕試し的な意味でコンペに参加するのもいいかもしれません。
英語で書かれているサイトなので、不安であれば日本語の解説サイトなどを探してみるのが良いでしょう。
最後に、先程の5つの内容についてのおすすめのものを紹介して一旦終わりにしたいと思います。
・その他の機械学習手法の実装方法の勉強
例えば、強化学習という手法については、上記のおすすめの中に詳しくは入っていないので、以下のような本を一度読んでみるとおもしろいかもしれません。
強化学習はゲームAIなんかで使われる印象ですが、モデルを改善したり、画像認識の分野でも使われたりと、結構幅広く活躍している手法です。
・機械学習スタートアップシリーズ Pythonで学ぶ強化学習 [改訂第2版] 入門から実践まで
・機械学習の理論の勉強
以下の書籍がおすすめです。また、以前機械学習プロフェッショナルシリーズという、機械学習の理論書のシリーズについてまとめた記事を書いたので、こちらをご覧になることもおすすめしておきます(宣伝)。
・はじめてのパターン認識
・情報系の勉強
こちらは、エンジニアになるのであれば知っておいた方がいい内容だと思います。
具体的には、情報系の大学で学ぶような知識や、機械学習周りの知識です。
これについては、本当に幅広いので、例えば基本or応用情報技術者試験などの勉強にチャレンジするのもいいかもしれません。
この知識がなぜ必要なのかについてですが、例えば今まではモデル作成に重点を置いた学習内容でしたが、実際にはどのようにデータを集めるのかや、その運用方法のほうが、時間がかかることも多いです。
そういったときに、周辺の知識が大事になったりするんですね。
少し内容がずれてしまいますが、Dockerや、AWSなんかも、知っていると便利だと思います。
・数学の勉強
機械学習の理論を理解する上で欠かせないのが数学ですが、基本的な部分は今までの紹介で学べているので、次はそれぞれについて深堀りしていくことになります。
線形代数については以下の書籍がわかりやすかったです。
微積分については以下の書籍がわかりやすかったです。
また、統計については、以下の書籍が名著のようですが、内容は結構難しく、シリーズ3冊目は特に難しいです。
・プログラミングの勉強
プログラミング力といっても色々だと思いますが例えば以下の3つの観点で考えることができるでしょう。
・アルゴリズムの知識
・可読性の高いコード
・言語の理解
アルゴリズムの知識だと、例えばAtcoderのような競技プログラミングをやってみるのがいいかもしれません。以下のサイトは、初めてAtcoderをやる方に向けたとてもわかりやすい入門サイトです。
また、機械学習には実行スピードが早いC++もよく使われていて、競技プログラミングをC++でやるのも、勉強になっていいと思います。
実際、私も競技プログラミングはC++で書いていて、仕事でも使っています。(Pythonも仕事で使っています)
可読性の高いコードを目指すのであれば、以下の書籍は名著のようです(すみません、私はまだ読めていません)。
また、Pythonという言語の理解については、公式サイトを見るのも良いですし、以下の本も有名です。
最後に
ここまで読んでいただいてありがとうございました。
これを読んで誰かが機械学習を始めてくれたら、とても嬉しく思います。
偉そうに語っていますが、私もまだまだまだまだなので、ぜひこうした方がいいなどのアドバイスがあったら教えていただけると嬉しいです。
また、最初に述べた「書くきっかけ」は、私が通っている「42Tokyo」という学校で非公式に行われている、ブログを書こう!という企画です。
・42Tokyo
・42tokyo Advent Calendar 2020
この記事を出す頃はまだ他の記事は見れませんが、きっとおもしろい内容になると思うので、ぜひチェックしてみてください。