初めに
4x歳越えのエンジニアにとって機械学習は何やらややこしいもの、本を開けば数式があり、pythonがあり、何それおいしいの?5年ほど前にCourceraで機械学習を学ぼうとしたがあっさりAndrew Ng先生はWeek4で挫折。"教師付き学習"と"教師なし学習"のちがいなんだっけ?
想定している読者
IT業界で別のキャリアを持っていて機械学習のキャリアをみにつけたい、あるいは身につけようとしたが挫折してしまった人
自分のキャリアについて
ホストの開発エンジニアから始まり、クライアントサーバー、Webアプリと開発系を云十年。その後ネットワーク、インフラ系を主な仕事にしています。
機械学習とのかかわり
5年ほど前に機械学習の勉強をしようとしたが、何をやっているか意味が分からず、あっさり挫折。その後は雑誌などで読む程度。
注)データ分析・機械学種・人工知能については、この文章では厳密に分けていません。
挫折した敗因
- 機械学習について理解していなかった件
- 勉強の仕方
機械学習について理解していなかった件
まず機械学習が何かを理解していなかった。
- 人工知能、機械学習、データ分析、統計とあるがこの違いを理解せず、ひたすら機械学習を統計の一分野と信じ込んでいた。
- 学習という言葉を過去の統計量のなにか"すごいもの"と考えていた
- 結果としてそれが予測としての"回帰", "分類"に続くという概念がなかった。
勉強の仕方がわかっていなかった
- いきなり数式から勉強しだした→時間かかるが業務には役に立たず
- 勉強しても使えないので、相変わらずSQL, エクセル、ピボットテーブルに頼る
- モチベーションが下がって続けるのが嫌になってやめた
今回の勉強方法
視点を分けて効率よく理解できるように進めることにした。
- ユーザーと機械学習について話をできるようにする -> 人工知能概要
- 機械学習に頼らない一般的なデータ分析を理解する -> データ分析一般
- 機械学習を導入するプロジェクトポイントを理解する -> プロジェクト管理
- 機械学習をとりあえず使えるようにする -> 機械学習の初歩
- Pythonを使えるようにする -> Pythonを学ぶ
- 数学について理解を深めて、機械学習の実装コードを書く -> 数学
- 機械学習をさらにディープに学ぶ -> 機械学習中級者へ向けて
人工知能概要
- 社内システムエンジニアにとって避けて通れないのは機械学習をビジネスに役立てる方法である。
- 内部顧客に対して機械学習システムを売り込んでいく、これがなければ社内での必要性を醸成できないし、予算も獲得できない。
おすすめの教材
G検定
「ユーザーに対して機械学習・AIについて何かを話せるようになりたい。しかも2週間で!」という人に間違いなくお勧めがG検定である。人工知能に関する歴史、今後の展開、危険性、哲学が効率よく学べる。お勧めの教材は下記の2つ。
人工知能は人間を超えるか ディープラーニングの先にあるもの
この本は絶対に読むべきである。データ分析、機械学習、人口知能は様々な用語が複雑に絡み合い、使っている本人も明確な定義や違いを理解していない。第一章では人工知能を明確に定義し、かつ他の用語との違いを明らかにしている。さらに第二章から第五章では人工知能の歴史をたどることのより、人工知能における様々な分野が整理されている。第六章および第七章はビジネスでユーザーに話す際のAIについて知見として含蓄に富んでいる。二時間程度で読み終わる、何はともあれ読むべき一冊である。
徹底攻略 ディープラーニングG検定 ジェネラリスト
G検定をとるにあたり様々な参考書が出ているが、自分としてはこの一冊があれば十分と考える。この本で理解できなかった部分だけをインターネット上で調べてテストに臨んだ結果としてG検定を取得できた。G検定を修了するととりあえずユーザーとはそれっぽい言葉を使ってお話をできる。またデータ分析、機械学習、人工知能にまつわる用語まある程度使い分けができる。
データ分析一般
データ分析の一分野が機械学習であり、機械学習の一分野が人工知能である。大きな枠組みとしてのデータ分析を理解していなければ、一時しのぎの機械学習エンジニアにしかなれない。その反面、データ分析という分野を理解していれば必要に応じて、統計手法、機械学習手法、人工知能を使い分けられる。エクセルですむデータ分析に人工知能をもちいるのは意味なし!
おすすめの教材
本物のデータ分析力が身に付く本
この本の素晴らしいことろは、設計→事前チェック→分析方法→分析→評価および解釈→表現を一気通貫で一冊のしかもコンパクトな本にまとめているところである。問題がある分野の定義からいかにしてデータ分析に進めていくか、図解、基本問題を明確に理解する。さらにあらかじめエクスセルで作成されテンプレートでハンズオンを実施すれば間違いなくデータ分析初級者卒業である。
一億人のための統計解析
著者の西内啓氏は「統計学が最強の学問」でよく知られている。しかし超実践という意味ではこの本がおすすめである。IT技術者としてデータ分析にかかわり始めると、最初の難関はビジネスで起きている問題をどのように把握して、データ分析に持ち込むかである。データ分析の手法および実践は基本的なIT知識があればあまり困難なく実施できる。しかしビジネス→データ分析分野への持ち込むにはITではなくビジネス寄りの知識が必要になる。この本は実際のケーススタディを基にしてデータ分析を進める。使っているソフトはエクセル、手法はピボットテーブルおよび統計が主である。この本を読むことでビジネス上の課題を以下にアプリケーションに落とし込むかを理解できる。
データ解析の実務プロセス入門
この本は先の2冊に比べると細かくより実践的である。しかしそれだからこの本を先に読むとほぼ間違いなく挫折する。あるいは挫折しなくても、何をやっているかを理解できずに読み終わり時間だけ無駄になる。上記2冊はそれぞれ一週間ほどでハンズオンも含めて終了できる。その後にこの本を読むことで、データ分析を趣味からビジネスレベルへとブラッシュアップできる。この本はいつでもそばに置いてあり、なにか行き詰った時にはアイデアを出すために読んでいる。
プロジェクト管理
社内での新しいシステムを導入するためにはプロジェクトとして進める必要がある。プロジェクトにしなければ、予算はつかない、人員もつかない、関係部署ともやり取りできない。システム開発のプロジェクトについては進め方を理解していても、データ分析プロジェクトでは何が違うかを明らかにする。
おすすめの教材
人工知能システムのプロジェクトがわかる本
さすがに40歳を越えるとIT系のプロジェクトは複数回経験がある。そこでポイントになるのは今までのITプロジェクトと機械学習のプロジェクトは何が違うのか、大事なのは他のシステム開発とは同じポイントは何か、異なるポイントは何かを理解することである。これにより今までの知見を活かしつつ、スムーズに機械学習・人工知能プロジェクトを導入できる。そして今までのプロジェクトと明らかに異なる点は2つある。POCとKPIであり、これがわかりやすく紹介されている本は一冊だけであった。
機械学習の初歩
機械学習の核心となるのがこの分野である。言語してはPythonとRから選べるが、今は資料および将来性からPythonで機械学習の基本を学ぶことをお勧めする。
おすすめの教材
Pythonデータサイエンスハンドブック
何からはじめたらよいかわからなければまずここからです。この本は英語版であれば無料で利用できます。
Pythonで機械学習を利用する場合、間違いなく利用するパッケージがnumpy, pandas, matplotlibです。導入としてまずそれぞれのパッケージの使い方について基礎を学びます。そして実際の機械学習パッケージであるscikitlearnへと進みます。量も多すぎず少なすぎずであまり時間を掛けずに進めることができます。機械学習の章では、数式も出てきますが、ここは無理に理解しようとせず、とりあえずパッケージの使い方に注力すればよいでしょう。
Pythonによるデータ分析入門
この本は上記Pythonデータサイエンスハンドブックを読み終わってから、取り掛かることをお勧めします。
一説ではデータの準備に8割、機械学習の実施に2割の労力が必要とされるといわれます。この本は機械学習ではなく、データ分析手法に主に取り扱っています。ファイル入出力、データ型、可視化、データ変換などをより細かく扱っています。そのためPythonの知識が必須です。読み込むのもハンズオンを含めるとそれなりに時間がかかります。しかしこれを一冊終わらせたら間違いなくPython初心者卒業であり、しかもデータ分析をするにあたっての、numpy, pandas, matoplotlibについて使いこなせるでしょう。
Pythonで始める機械学習
さて上記2冊を終わらせると、データの準備及び基本となる機械学習についてはばっちりである。この本は機械学習中級者への第一歩となる。機械学習を始めてみると、時間がかかるのはデータのクレンジングと特徴量設計である。特徴量設計は実践という意味ではkaggleのKernelがおすすめである。しかしこの本で特徴量設計についてはあらかじめ基礎を理解しておけば、なぜカーネルで記述されているような特徴量設計がされているかが理解できる。この賞は何回でも読み直したい。
Python
機械学習を学ぶ際の言語としては先にも記述したがPythonとRが主流である。かくいう自分はかつては統計データの取り扱いでRを利用していた。しかし今機械学習を学ぶ上では間違いなくPythonがおすすめである。
まずPythonで提供されているscikitlearnは機械学習を学ぶのに最適なパッケージである。そして様々な本やオンラインのトレーニングも提供されている。さらに機械学習の前段となるデータクレンジングのステップでもPythonは強力なツールとなる。
おすすめの教材
Udemy 現役シリコンバレーエンジニアが教えるPython3
面倒くさいことは言いません、とりあえずここからはじめるのが一番です。値段が安い時を狙ってください。
みんなのPython
Pythonを基礎から教えてくれる本である。イテレータ、ジェネレータ、デコレータなどの理解が難しい分野についてもわかりやすく説明している。
独学プログラマー Python言語の基本から仕事のやり方まで
プログラマーとして仕事を始めると、言語以外の知識も必要になってくる。この本を読めばPythonプログラマーとして必要なツールについても理解が深まる。新しい会社に働きに行って、「このPythonはシェルに組み込んでおいてね」や「必要なソースコードはgitからプルしてね」といった会話にも付いていける。
数学
正直業務で使うだけなら、それほど数学は必要ない。しかしある程度は理解しているほうがトラブルシューティングやコードの改善にも役立つ。
Andrew NG氏による機械学習
数学という意味では少々分野がずれるかもしれない。しかしAndrew NG氏によるこのコースはアルゴリズムの理解とその背景にある数式、さらにOctaveによるコードまで、一気通貫で説明する。線形代数、ベクトルを単体で勉強したとしても機械学習のアルゴリズムの中でどのように利用されているか、そしてどのようにコーディングされるかが理解できないと実務には役に立たない。その点このコースはアカデミックと実務をバランスよく組み合わせたコースである。ただしテストはかなり難しい。。。
統計学が最強の学問である[数学編]
再び西内啓氏の登場である。とにかく「統計学が最強の学問である」が良く知られているが、個人的にはこちらのほうがおすすめである。数式も出てくるが、説明がわかりやすく平易な日本語で書かれているために、数学の素養がなくてもねばりさえすれば理解できる。"ベクトルの内積とΣの関係"、"統計学での内積の使い方"の章でようやく内積の意味を理解できた気がする。
やさしく学ぶ 機械学習を理解するための数学のきほん
[やる夫で学ぶ機械学習シリーズ]
(http://tkengo.github.io/blog/2016/06/06/yaruo-machine-learning0/)の著者による執筆である。このシリーズを見たときにはやる夫なかなか、やるな!と実感した。こちらのシリーズを終えてからより実践的なこちらの本で勉強を始めた。数式もばっちり出てくるが、基本をしっかり押さえつつ、初学者にはあまり必要でないややこしいところはうまい具合に取り除いている。数学で挫折した人にまずはお勧めしたい一冊である。ちなみに数式という意味では、[ビショップ本](https://www.amazon.co.jp/%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3%E8%AA%8D%E8%AD%98%E3%81%A8%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92-%E4%B8%8A-C-M-%E3%83%93%E3%82%B7%E3%83%A7%E3%83%83%E3%83%97/dp/4621061224)が著名であるが、初心者が手を出すと間違いなく挫折します。
機械学習中級者へ向けて
さてここまででおそらく初級者としては十分すぎるほどである。しかしどうすれば中級者にむけた足掛かりをつくれるか、これは股別問題である。ここでは自分が読んだ中で、間違いなくレベルアップを実感できた二冊の本を紹介する。良書と呼ばれる本はこのレベルでも複数ある。しかし正直難しすぎることが多く、途中で挫折してしまった本が多いのもこのレベルの特徴である。
おすすめの教材
脱初級に向けて何か一冊となったら間違いなくこの本である。正直この本を読むまでは”誤差逆伝播法"という単語は知っていたが、まったく理解できていなかった。本などを読んでもいまいちピンとこない。この本の第五章はその名も”誤差逆伝播法"であり、一から実装する。この本の中でどこかひとつ選ぶとなったら、まさしく第五章である。ただし第三章のニューラルネットワークおよび第四章のニューラルネットワークの学習で実装した内容を用いるために、こちらも併せて読みたい。
機械学習プログラミング 達人データサイエンティストによる理論と実践
現在手を付けているのがこの本である。おそらくこの本を読了してコードも一通り理解できれば、実装という意味では中級卒業と考えられる。数式は出てくるが基本を押さえておけばわかる範囲であり、”やさしく学ぶ 機械学習を理解するための数学のきほん”を理解していれば問題ない。大事なのは数式が理解できなかったらすぐに調べることです。なぜなら、数式の説明の後に、これを容赦なくコードに落とし込んでいくので単層パーセプトロンを一から実装する。シンプルで平易なコードであるが、Pythonコードを読む能力が相当要求される。第二章を足掛かりとして、ほかの機械学習の分類アルゴリズム、データの前処理、クロスバリデーションと話を進めていく。全体として難しい内容を平易な文章とコードで説明しようとする意図が感じられる良書である。