めいふの備忘ログ

やったことを忘れないように書きこのしておくのです。

「1番かんたんな機械学習の教科書を頼む!」な厳選3冊

数学が苦手でも勉強が進む機械学習の本3冊と「現存!古代生物史 パッキー」

<枕詞>

あー、過去にブログ記事を書いてから(2017年の2月から)、6年もたってしまいました。

その間にブログの更新はなく、自分の怠惰っぷりがやばいっすです。人生終わっちゃう。世界の激動の変化もまじやばいっす(コロナとかAIの進歩とか色々ありましたね)。

その間、私はかつて作りたいとか言っていた「文の芥川龍之介度判定器」とか「テキストで記述されている内容が架空のものなのかリアルなのか判定器」とか「テキストの人称視点ズレ検出器」とかを作っていたわけではないのです。何もしてません。

じゃあ何やってたんだよ。生きていた(ような気がします)。本当、何してたんでしょうね。怖いですね。

でも、sevenseasやまほがく(http://www.sssloxia.jp/) という定期更新ゲームは遊んでいましたよ。あと、イバラシティも遊んでましたよ。楽しかったですね。

さて、

<この記事は数学が苦手な人でも読みやすい機械学習の本を紹介します>

それでも、ワタクシはひっそりと機械学習の勉強は続けていたのです。昨今話題の機械学習の仕組みを理解したくて、数学の本も読んでみたのです。機械学習を理解するには数学の理解・知識が必要です。

ですが、ワタクシは数学が苦手なのです。数字で物事を理解できないタイプなのです。2のほうが1よりも2倍も大きいわけですが、1位と2位とですと、1位のほうが価値が大きそうですね。2のほうが1より必ず大きいわけではないのです、不思議だなぁとか思われます。ワタクシは数字とその意味がなかなか頭でスパッと理解できないポンコツなのです。

それゆえにか、いろんな機械学習の本を読みましたが、なかなか理解できませんでした。あの有名な黄色の本(https://www.maruzen-publishing.co.jp/item/?book_no=294524)とか、さっぱりわかりませんでしたよ。

難しい教科書を読もうとしても、「現存!古代生物史 パッキー」で高校数学に挑戦したパッキーさんやスティギーくんみたいな感じに頭にぴよぴよしてしまうのです。

「現存!古代生物史パッキー」(レツ先生著)の1巻より。引き算やかけ算を愛するパッキーとスティギーは高校数学の授業にチャレンジするものの、内容が高度すぎて理解できずにピヨピヨしてしまう・・・。

メモ:「現存!古代生物史 パッキー」(レツ先生著、集英社)(https://bookwalker.jp/series/165117/は現代の竹田家に居候するパキケファロサウルスのパッキーと仲間の古代生物たちが繰り広げる面白日常を描いた漫画なのです。小学生レベルの数学力しかもっていないパッキーさんとスティギーさんが高校数学の授業に果敢にチャレンジしたのだが頭ぴよぴよになってしまうというエピソードがあるのです。勉強はコツコツ積み上げが大事!

難しい機械学習の本をがんばって読んだとしても、自分の頭の数学力がその教科書に達していなければ、書かれている事柄が理解できないものなのです。理解できなければ、プログラムで実装して、実際の世界で役に立てることもできません。教科書は自分の力量にあったものを選ばなければ努力に対するリターンが期待できないものなのです。

「1番かんたんな機械学習の教科書を頼む!」

というわけで、ワタクシ、かんたんな機械学習の教科書を探して読んでみました。この記事では、数学力に自信のないワタクシでも「これならわかるかも!」と感じた機械学習の教科書について、備忘ログを残しておきます。

数学力のないワタクシが求めたという3冊の教科書。

  1. 「やさしく学ぶ 機械学習を理解するための 数学のきほん」(LINE Fukuoka 株式会社 立石賢吾 著 マイナビ
  2. 自然言語処理シリーズ 1 言語処理のための 機械学習入門」(高村大也 著、奥村 学 監修、コロナ社
  3. 「ゼロから作る Deep Learning Python で学ぶ ディープラーイングの理論と実践」(斎藤 康毅 先生著、O’Reilly


ここからワタクシが何を学んだかをメモ書き程度に書き記しておきます。数学力よわよわ人類が「本を手にとる」参考になればと思います(本の内容の解説はしていません。内容については個々の書籍を直接ご参照ください)。


「やさしく学ぶ 機械学習を理解するための 数学のきほん」(LINE Fukuoka 株式会社 立石賢吾 著 マイナビ)で学んだこと

book.mynavi.jp

この本は機械学習の基本ムーブが学べます!

  • 何かを予測するモデルの例(まずは多項式から)
  • 2次元上にプロットされたデータを線を引いて分ける白黒分けるイメージ(分離曲線)
  • 奥義!最小二乗法!
    • 最小二乗法は、予測式のパラメータをデータから更新する方法である!
    • 損失関数:正解とデータとの差分の二乗を表す関数。実際のデータと理想との誤差がなく、誤差が少なくなるのがよい
    • データ全体で誤差が最小になるようにパラメータ調整する。二乗なのは計算する上で都合がよいから
    • 損失関数を微分する。微分とは変化の度合い。損失関数が0に近づくようにパラメータを更新する
    • データでモデルで表現して、正解との差などを微分を駆使して最小化させる、これが機械学習基本ムーブだ!
  • 後々にもつながる知識
    • 複数の変数がある誤差関数の偏微分には、合成関数の微分法を用いる。モジュールみたいな感じ
    • 確率的勾配降下法では、パラメータ更新時にランダムに1つのデータを用いる。局所最適に陥らないようにする効果がある!
    • Logistic Regression(ロジスティック回帰)はクラス分類の確率を予測するモデル
      • 線形分離不可能なデータに対しても分離曲線が引ける
(やさしく学ぶ 機械学習を理解するための 数学のきほん のまとめ)

この本ではアヤノおねーさんとミオおねーさんの会話を通じて機械学習でできることとその理屈を学ぶことができるのです。会話形式だと「何のためにやっていることなのか」というコンテキストがすんなり理解できるような気がします(気がする)。線形モデルやLogistic Regressinといった機械学習統計学におけるよくよくみる手法について、数式を追いつつ、Pythonでの実装も学ぶことができます。手を動かすのは大事ですね。

「やさしく学ぶ 機械学習を理解するための 数学のきほん」は機械学習を学びたい人の入門本としてはベストの1冊なのではないでしょうか? なお、高校数学程度の微分は出てくるので、その辺が怪しい人は高校の数学の復習をしよう。

自然言語処理シリーズ 1 言語処理のための 機械学習入門」で学んだこと

www.coronasha.co.jp

この本では、以下のことが学べます。

  • 機械学習を学ぶ上で基礎になる数学的知識
    • 凸計画問題
      • 関数の最大値や最小値を与える変数値と関数値を求める方法のこと
      • 不等式制約凸計画問題」とか名前がかっこいい
      • グランジェ未定乗数法とか機械学習の本によくよく出てくるやつの解説がわかりやすいぞ
      • (備忘録)方程式は数式を解くみたいな解き方(解析的に解く)では解けないものもあって、試行錯誤しながら値を求める方がある。最適化手法では、機械学習でどっちの方向に数字をいじっていけば良い方向なのか?の道標を与えてくれるわけである。
    • 確率の基礎(確率分布の解説がコンパクトにまとまっています)
      • ベルヌーイ分布はロジスティック回帰(Logistic Regressin)とかで出てくる
      • 正規分布はいろんなところ(統計学の本や統計学以外の本(医学の本とか)で)で何度も何度も出てくるので、何度も何度も勉強しよう
    • 情報理論
  • 文書をベクトルにする方法(文書を数学で表す方法)
    • 機械学習で行う言語処理の超ベーシック手法「Bag Of Words(BOW)」
    • 似たような文書のまとまりを作るクラスタリング手法
      • もちろん「k-means」の解説もあるぞ
    • このへんの知見は時代を超えて有効だ。BOWとか現役ですもんね
  • 奥義!「EMアルゴリズム
    • EMアルゴリズムとは観測されたデータから未観測の事象の確率値を推定する方法。統計的な言語処理でよく見かける手法(他のジャンルでも活躍しているはず)
  • Support Vector MachineSVM)の最適化問題を解いてパラメータ更新式を導出する方法
    • 今でも現役なSVMの理論と成り立ちをコンパクトに学べる
    • 実際にSVMで解を効率的に求めるためのソルバーが研究されており、逐次最小最適化(SMO)という方法があるそうなのですが、本書ではその詳細までには踏み込んでいない模様
  • テキストに対する系列ラベリング
    • (備忘録)テキスト(token列)から固有名詞を抽出する、品詞を割り当てるといった問題はシーケンス(系列)ラベリング問題として解かれ、Hidden Markov Model(HMM)や(linear-chain)Conditional Random Field(CRF)といった手法が適用されてきました
    • CRFとは?
      • 対数線形モデル(最大エントロピーモデル)を系列ラベリング問題に適用したもの
    • CRFの学習時のパラメータ更新方法
    • 前向き・後ろ向き(forward-backward)アルゴリズムによるCRFでの推論方法(信念伝搬)
  • 言語処理システムの評価についての基礎知識が学べます
    • 評価尺度(F値など)のマクロ平均とマイクロ平均の違いについて例が示されている
  • 言葉の使い方について
    • 系列ラベリング問題ではなく通常の分類問題に対して「CRFを用いた」と述べるのは誤解を招くので「対数線形モデル」まはた「最大エントロピーモデル」を用いたと述べるべきであること(著者の高村先生の言葉の使い方に対する熱い思いを感じられてよかった)
(CRFについてのメモ)

系列ラベリング問題(固有名抽出や品詞の割り当てのなど)には、かつて(90年代〜2010年代)多くの場合でCRFが適用されていました。深層学習やBERTなどの事前学習モデルが流行っている最近(2020年代)ではどうなんでしょうね?

系列ラベリングにおける確率値の計算方法である前向き・後ろ向き(forward-backward)アルゴリズム」の考え方の一般化したものが確率伝搬法(belief propagation)です。確率伝搬は、現在盛んに研究・開発されている、深層学習の基本となる技術だそうでして、技術は連なっているんだなーと思いました。

(言語処理のための 機械学習入門まとめ)

首都大の小町研究室では学生さんはまずこの本で機械学習ベースの自然言語処理の勉強をされるそうです(https://cl.sd.tmu.ac.jp/prospective/prerequisite)。コンパクトながら機械学習の分野で頻出する概念がまとめられていて、類書や論文を読んでいて「あ!『言語処理のための 機械学習入門』で見たやつや!」ということも多いと思います

特にConditional Random Fields(CRF)の解説は、学習時の更新式の導出や推論方法が丁寧に解説されていまして、わかりやすくてオススメです。ここのところ深層学習ベースの論文の方が増えているので、CRFとかのモデルはあまり見かけないかもしれませんが、系列ラベリング問題という考え方、最適化や確率分布や評価方法などの基礎的な知識は腐らないと思います。

全ての例題と演習問題には回答がついてきます。全部とこう! ワタクシも全部解きました! なお、分類モデルの演習問題はちょっと歯ごたえがあり、ワタクシには歯が立ちませんでした。数式の添字の意味が追いきれませんでした(要復習)。

「ゼロから作る Deep Learning Python で学ぶ ディープラーイングの理論と実践」

www.oreilly.co.jp

こちらは深層学習に入門するために読んでみました。この本では以下のことが学べます。

  • 損失関数とか機械学習の基本
    • 最小二乗法とか勾配の計算とか、「やさしく学ぶ 機械学習を理解するための 数学のきほん」や「自然言語処理シリーズ 1 言語処理のための 機械学習入門」で出てきた概念も出てきます。いろんな本で何度も出てくる考え方は、普遍性があるということです。何度も学んで理解を深めるのです。
  • 奥義!計算グラフで理解する誤差伝搬方!
    • 計算グラフとは数式の計算を、ノードの演算子(+とか*(かけ算)とか)、数値がリンクの繋がりで表したもの
    • 複雑な計算もグラフでバラバラに表現すれば、末端は簡単な四則演算で計算できる
    • 計算結果はリンクによって次のノードに伝えられて最終結果となる
      • (奥義)微分値は計算グラフを逆方向にだどることで計算できる
      • 複雑な数式の微分は合成関数の微分で解く。合成関数の微分は分けた関数の微分の結果を逆に連鎖させることで計算できる(連鎖律)
      • 計算グラフの逆伝搬によって各ノードの微分が計算できる、ニューラルネットワークの数式の勾配がグラフの逆伝搬により効率的に計算できるのだ(誤差逆伝播
    • 計算グラフによって誤差逆伝播を説明するアイディアはAndrej Karpath氏のブログ、Fei-Fei Li教授のスタンフォード大のディープラーニングの授業(CS231n)が原典らしい
  • 畳み込みニューラルネットワーク(Convolutional neural network :CNN)の仕組み
    • 画像の検出や分類でよく使われているCNNでの畳み込みを体感する。(ベクトルの)大きな数字の方眼の四角が小さなな方眼の四角に畳まれて行ったのをみたよ・・・。
  • BatchNormalizationの仕組み
    • ニューラルネットワークの初期値をうまく設定する方法。学習が早くなり、過学習を抑止する効果がある。深層学習の基礎技術
      • なお、Batch NormはGoogleが特許を取得している模様。Tensorflowで使えばお咎めはないらしい
(ゼロから作る Deep Learning のまとめ)

この本では深層学習の基礎をpythonのプログラムを作ることを通して学べると思います。特に、計算グラフで誤差逆伝播の仕組みを説明する5章に、ワタクシは感動いたしました。「ゼロから作る Deep Learning」シリーズは続刊も発売されてますので、続けて勉強したいと思います。

(本備忘ログまとめ)

この3冊をしっかり学べば、数学がちょい苦手な人でも、(深層学習含む)機械学習の「息吹」「呼吸」を体得できるのではないかと、ワタクシ、確信しているのです。数学とプログラミングや実データの面から学びを深めることができます。3冊ともとっても良い本です。

そして、本で読んだりしたことは、実践しなければ、です。モノを作って自分や他の人の役に立てなければ、です。これこそ技術の基本ムーブ。次の備忘ログでは最近のモダンなライブラリを使ってテキスト分類問題に取り組んでみたいと思います(ライブラリ使うなら数学学んだ意味はあるのだろうか?(自問)。まあいいか。多分ある。)

余談、Logistic Regressionちゃんについて

あと、3冊の本を読んで勉強した気になっていたのですが、備忘ログをまとめるにあたり再読したところ、本の内容は結構忘れていて、知識はなかなか身につかないことを実感いたしました。最近、別の本でLogistic Regressionちゃんのことを勉強していて「こんな方法があったんだ〜、ワタクシ、Logistic Regressionちゃんのこともっと知りたいな」とか思っていたのですが、実はワタクシは「やさしく学ぶ 機械学習を理解するための 数学のきほん」ですでにLogistic Regressionちゃんのことは知っていたのです。すっかり忘れてたよ。

というか、他の統計学の本で学んだのですが、Logistic Regressionちゃんは回帰分析と同じく一般化回帰モデルという一形態みたいな記述があり、ひょっとしてワタクシ、もっと大昔から(統計学の本で読んで)Logistic Regressionちゃんとは知っていたのでは?(そしてきれいに忘れていたのでは?) 

これはギャルゲイムでいうところの「そのキャラは幼馴染だったんだけど主人公は忘れてしまっていた」みたいなパターンだなと思いました。ワタクシたちは、幼馴染エンドを迎えるためにも、やはり、教科書は今の自分の実力や理解力にあったものから読んだ方が良いよね?と思いました。

終わり。