はじめに
業務でscikit-learnとPyTorchを触りはじめた頃、自分はモデルを「回す」ことはできていた。データを読み込んで、前処理して、fitを呼ぶ。精度が出れば嬉しいし、出なければパラメータをいじる。それで一応仕事は進んでいた。
つまずいたのは、学習がまったく進まないモデルにぶつかったときだ。損失が下がらない。しばらくして発散する。何を疑えばいいのか分からず、学習率とバッチサイズを往復するだけの時間を溶かした。結局は特徴量のスケールが揃っていないだけの話で、指摘を受けて直したら一発で収束した。
そのとき痛感したのが、自分は勾配が何をしているのかを本当には理解していないという事実だった。フレームワークの層が厚いほど、中で何が起きているか見えなくなる。デバッグできるのは、中身を知っている人だけだ。
だから一度、順伝播と逆伝播を自分の手で書くところまで戻ることにした。そこから「全体像をつかむ」「動くものを作る」「実務で引く」という順に本を並べ替えて読み直したら、点だった知識がようやく線になった。今回はその流れで効いた4冊を紹介する。どれもコードと図が中心で、読んで終わりにならない本を選んだ。
① ニューラルネットワーク自作入門 — Tariq Rashid
著者のTariq Rashidは、専門外の読者に技術を説明することに長く取り組んできた人物で、この本も数学が苦手な読者を置いていかない設計になっている。
扱う範囲は驚くほど狭い。3層のニューラルネットワークをPythonとNumPyだけで組み、MNISTの手書き数字を認識させる。それだけだ。けれど狭いからこそ、行列の積が何を計算しているのか、重みの更新式がどこから出てくるのかを、逃げ場なく追いかけられる。
前半は微分と行列の話を、グラフと矢印で少しずつ積み上げていく。後半でそれをコードに落とす。写経すると、自分が普段呼んでいるbackward()が何をショートカットしてくれていたのかが体感で分かる。
自分に刺さったのは、学習率を変えたときの挙動を実際に試させる箇所だった。教科書的な説明を読むより、数字が暴れるのを目で見たほうが記憶に残る。反面、CNNやRNNには踏み込まないので、これ一冊で現代的なアーキテクチャまでは届かない。
こんな人に: フレームワーク経由でしか深層学習を触ったことがなく、一度中身を自分で書いてみたい人。
② なっとく!ディープラーニング — Andrew W. Trask
著者のAndrew W. TraskはDeepMindに所属する研究者で、プライバシー保護機械学習の分野でも知られている。研究の最前線にいる人が入門書を書くと、説明の解像度が上がる。
この本もフレームワークを使わず、NumPyだけで話を進める。ただし①より射程が広い。勾配降下法から始まって、正則化、畳み込み、単語埋め込み、再帰型ネットワーク、さらに自作の自動微分エンジンまで組み上げていく。
特徴的なのは、コードを載せる前に必ず「今どこにいるのか」を言葉と図で確認してくること。層を足す理由、活性化関数を変える理由が、思考の順序として提示される。だから途中で迷子になりにくい。
自作の自動微分の章は、正直かなり歯ごたえがある。しかしここを通ると、PyTorchの計算グラフが魔法ではなく単なる実装の積み重ねに見えてくる。分量はあるので、①を終えた後に腰を据えて読むのがおすすめだ。
こんな人に: 深層学習の主要トピックを、ライブラリに頼らず一通り手を動かして押さえたい人。
③ Neural Network Projects with Python — James Loy
Amazonで見る https://www.amazon.co.jp/dp/B07P77QWW7?tag=atyuhg-22
著者のJames Loyはデータサイエンス領域で実務と執筆の両方を手がけており、この本では6つのプロジェクトを通してKerasの使い方を体に入れさせる構成をとっている。
題材は具体的だ。住宅価格の回帰、顧客離反の予測、CNNによる犬猫分類、オートエンコーダによるノイズ除去、LSTMを使った感情分析、そして顔認識システム。データの取得から前処理、モデル設計、評価までが一本ずつ完結している。
ありがたいのは、うまくいったコードだけを見せる本ではないところ。探索的データ分析に相応のページを割き、どの特徴量を捨てるかという判断まで書いてある。実務でいちばん時間を食うのはこの部分なので、そこを飛ばさない姿勢に好感を持った。
英語だが文章は平易で、コードの比率が高いので読み進めやすい。Kerasのバージョン差でそのまま動かない箇所はあるため、エラーを自分で直す前提で臨むといい。むしろそれが良い練習になる。
こんな人に: 理屈は分かってきたので、手元で動くものを何本か作って自信をつけたい人。
④ Machine Learning Pocket Reference — Matt Harrison
Amazonで見る https://www.amazon.co.jp/dp/1492047546?tag=atyuhg-22
著者のMatt HarrisonはPythonのトレーニングを長く提供している実務家で、pandas関連の著書でも知られている。教える側に立ち続けている人らしく、説明に無駄がない。
構造化データを扱う一連の作業を、短い章に切り分けて並べたリファレンスだ。欠損値の処理、特徴量選択、不均衡データへの対処、各種分類器の比較、指標の読み方、モデルの解釈、クラスタリング、次元削減。テーブルデータの機械学習で踏む工程がほぼ網羅されている。
読み物として通読する本ではない。手を動かしている最中に「ROC曲線を描く最短のコードは何だったか」「特徴量重要度をどう出すか」と迷ったとき、該当ページを開いて数行コピーして進むための本だ。
自分の使い方は、新しいデータセットに向き合う前の下準備チェックとして目次を眺めることに落ち着いた。抜けがちな工程を思い出させてくれる。薄いので机に置いておける点も地味に効く。
こんな人に: テーブルデータの案件を回しており、手元に引ける一冊を置いておきたい人。
まとめ
| ステップ | 読む本 | 得られるもの |
|---|---|---|
| 中身を知る | ニューラルネットワーク自作入門 | 順伝播と逆伝播を自力で書ける感覚 |
| 広げる | なっとく!ディープラーニング | CNN、RNN、自動微分までの見通し |
| 作る | Neural Network Projects with Python | 前処理から評価までの一周の経験 |
| 引く | Machine Learning Pocket Reference | 実務で詰まったときの即答 |
今の課題に合わせて一冊選ぶなら、こんな基準で考えるといい。
- 学習が進まない原因を自分で切り分けられない: ニューラルネットワーク自作入門から始める
- 用語は知っているが各手法のつながりが見えない: なっとく!ディープラーニングを通読する
- 手を動かした成果物がなく、ポートフォリオが弱い: Neural Network Projects with Pythonを1プロジェクトずつ進める
- テーブルデータの前処理や評価指標で毎回検索している: Machine Learning Pocket Referenceを手元に置く
4冊すべてを同時に進める必要はない。今いちばん困っているところに対応する一冊を開いて、コードを写して動かす。それだけで次に読む本は自然に決まってくる。