機械学習関連の勉強を始めようと思うときに必ず立ちはだかるのが数学の壁です。いまや機械学習は理系のみならず、数学にさほど関わりがなかった文系の人たちにとっても興味のある話題となっています。
そこで機械学習で必要な数学の基礎をまとめてみたいと思います。まず、機械学習の勉強を始めるにあたって最低限必要な数学というのは実はそんなに多くありません。数学の全てを知ろうとするのではなく、最低限必要なものを抑えてから、個々の手法を使いながら更に深ぼっていけばイイと思います。ここではその最低限必要だと思う数学を題材にします。
必要なのは大雑把に言ってしまえば
線形代数
微分積分
確率・統計
のみです。もちろん更に深く理論を知ろうと思えば、もっといろいろな数学が必要になってきますが、機械学習の具体的な手法が何をしようとしているのかというのを、数式を追って確認する分にはこれくらいで大丈夫なはずです。更にこれらの数学を完全にマスターする必要もなく、それぞれ使われるであろう概念を認識していればそれで十分です。必要に応じて数学の力は補強していけばイイと思います。
今回は高校レベルの基本的な計算はできるものとして、機械学習で出てくる計算で何だこれは?と初学者がつまりそうなところを題材にしていきます。
線形代数
積の計算方法
ベクトルの基本的な計算、和・差・内積はおそらく問題ないでしょう。
内積は横ベクトル✕縦ベクトルのように表示されます。
という3次元縦ベクトルとという3次元縦ベクトルを考えれば、内積は
で表されます。よく知る計算です。
しかし、たまに縦ベクトル✕横ベクトルという順番の計算が現れますね。これを見て、なんだこれ?表記ミスか?と思った初学者は少なくないでしょう。これは間違いでもなんでもなく、内積とは別の、違う積として定義されています。
この積では行列の各成分にベクトルの各成分の積が割り当てられています。今は3次元ベクトル同士の積を考えていますから、3✕3の行列が出来上がることになります。
固有値問題と二次形式、そしてラグランジェの未定定数
線形代数を学ぶと必ず固有値問題というものが出てきます。
固有値問題とは行列が定められているときに、
となるようなスカラーλとベクトルxを見つける問題です。なぜこんなことを考える必要があるのかというと、通常、行列をベクトルに対して左から掛けてやると、ベクトルは方向と大きさを変えてしまいます。しかし、行列に対して一切方向を変えることのないベクトルというのが実は存在します(大きさは変わります)。これが行列の固有ベクトルと呼ばれるものです。大きさは変わりますから、その倍率をと置いてやれば、
(行列をベクトルに左から掛けると)
(方向を変えることなく倍される)
ということです。普通このときの倍率を固有値と呼びます。行列Aに対して固有値と固有ベクトルを求めるのが固有値問題になります。
機械学習における固有値問題の具体的な応用例では、データの共分散行列としてが得られたときに分散が最大化されるようなデータの基底を見つけたいという問題があります。このときには、見つけたい基底をとして、がデータを上に射影した際の分散となります。つまり分散を最大化するような基底を見つける問題はこのを最大化する問題と言えます。このとき、の大きさには興味がなく、知りたいのは方向だけです。従って制約条件を課します。ラグランジェの未定定数をλとして
を最大化する問題です。で微分して0になる点が最大値を与える候補になります。すなわちその条件は
で表され、固有値問題そのものになります。
通常、のようにベクトルに行列が挟まれている形を二次形式と言います。二次形式に対して、ベクトルの大きさが1、すなわちという条件を課した場合のラグランジェの未定定数は、行列Sに対する固有値と同等であるということになります。更に、この場合二次形式の最大値は固有値の最大値に一致しており、結局、二次形式の最大化問題が非常に簡単に解ける固有値問題に帰着されるということになります。
通常最大化問題などの最適化問題は、極値がたくさん出てきたりして、一発で解くことは困難です。コンピュータに対して色々値を変えて計算をしてもらい、一番適している値を探してもらうしか方法はないのですが、このようにベクトルの大きさに制約を加えると固有値問題に帰着されるため、多くの応用でこの制約を採用しています(最近はスパースコーディングが流行りですが)。
微分積分
尤度関数の最大化
機械学習では尤度関数を最大化しようという問題が頻出します。
そのとき決まって、尤度関数の対数を取った対数尤度の最大化を行うという問題に切り替わります。まず、これには2つのメリットがあることを認識しておいてください。
1.尤度関数が関数の積で表される場合に、対数を取ると和になる⇛微分が楽
2.logを取ると基本的に数値は小さくなる⇛コンピュータのオーバーフローが防げる
尤度関数の代わりに対数尤度関数の最適化問題に切り替えてるメリットは分かりました。では勝手に問題をすり替えていいのかを見てみたいと思います。これは実は高校レベルの知識で十分で、
の最大値を求めたいときには、微分してを求めようと考えます。一方での微分を調べてみましょう。として
のによる微分は、チェインルールで
となっており、この値が0になるときというのは、結局のときですから、同じ条件を求めていることになります。それならば、計算が楽な対数尤度を扱おうということになります。
ベクトルの微分
普通の微分はよく見慣れているはずです。
しかし、機械学習ではベクトルのスカラーによる微分や、スカラーのベクトルによる微分というものが出てきます。
まずはベクトルのスカラーによる微分を見ます。
仮にベクトルというものをスカラーで微分するならば
となります。それぞれの成分をで微分した新しいベクトルが得られます。
ではスカラーのベクトルによる微分とは何でしょうか。ここでも具体例を見ましょう。
スカラーをベクトルで微分すると
となります。番目の成分がとなるようなベクトルが得られます。微分の具体的な計算は難なくこなせるようにしておきましょう。
また、機械学習の教科書では、具体的な計算ではなく、もっと一般的な関数に対してどのようなアルゴリズムが導出できるのかを記述しています。従って、具体的な計算のみならず文字式のままでの計算も慣れておく必要があります。
特にスカラーのベクトルによる微分に対する性質を以下にまとめておきます。
1.ベクトルとベクトルの内積(スカラー)をベクトルで微分
2.行列の二次形式のベクトルによる微分
3.行列の対角和のベクトルによる微分
他にもスカラーの行列による微分もあります。これは成分をとするような行列が得られます。
確率・統計
この分野は、機械学習の基礎を築く部分になっていますから、基本的に書籍に必要な知識は書かれています。特別確率・統計について知っておかなければいけない知識はありません。高校数学の確率の取り扱いを知っていることと、あとは条件付き確率などの概念を知るようにしてください(間違いなく、どの書籍にも書かれているので割愛します。必要があると感じればいつか解説したいと思います)。
特別新たに学ぶべきはベイズ統計に関することですが、本ブログでも度々取り扱っているのでカテゴリーから他の記事を覗いてみてください。また最尤推定とKLダイバージェンスとの関係なども様々な記事で触れています。
線形代数と微分積分は計算を進める上で、確率・統計は機械学習の基礎づけとしての意味合いを持っております。確率・統計が統計的機械学習では最も本質的な部分になってきますから、機械学習と同時進行的に進めて具体例と絡めながら学ぶと良いと思います。(線形代数や微積分の基本的計算については予め抑えておかなければ数式が読めませんので注意してくださいね。)