はじめに
この記事は、私が機械学習を学んできて感じた、数学の役割をまとめたものです。記事を書く上で特に意識したのは、ある数学が機械学習においてどのように活躍し、どのような旨味をもたらしたのか、そして、そこから数学を学ぶ意義を改めて抑えることです。
数学の解説をすることが目的ではないため、直接的に数学の疑問を晴らすということにはなりませんが、
これから機械学習を学んで行こうという場合に、数学がどのように役立ちうるのか、その全体像を予め把握しておくことに使っていただけると幸いです。
機械学習に使われる主要な数学
多くの書籍、多くの記事が世の中に出回っている中、既にご存知かと思われますが、機械学習で主に使われている数学は以下の3つになります。
1.線形代数
2.微分積分
3.確率・統計
これらについて順を追って見ていけたらいいのですが、とりあえず今回は「線形代数」について話したいと思います。
理由は、機械学習を勉強する上では、恐らく最も重要だからです。
更に、なぜ最も重要だと考えられるのかについても答えていきます。
線形代数
最も重要な理由
私がこれまで機械学習を学んできて感じた線形代数に対する率直な感想は
機械学習を記述する上での言語の役割をしている
ということです。
もちろん線形代数自体が数学を記述する素晴らしい体系であり、更に数学的な問題を解くための重要な手法になるのは間違いありませんが、機械学習における最も大きな側面は、
「機械学習での解決方法を定式化する際に、線形代数の記法を使わない時よりも、だいぶ簡潔に記述することができる」
という点です。
線形代数って何なんだ?
例えば、機械学習ではよく
のような計算が現れます。この計算は、この式のままで十分に意味が通じるものであり、その時点で完結していると言えます。しかし、このような計算が通常、大量に現れます。例えば以下のような感じです。
もちろんこれでも全く持って問題ありません。意味も通じますし、計算もできます。
しかし、このようなたくさんの式に対して、通常は再び何らかの計算をしなければいけません。式がどんどん膨大に膨れ上がっていくのです。そこで
と書くことに決めてあげましょう。すると
と非常に簡潔に式を表しておくことができるのです。
こうすれば紙面も全然必要ありませんし、手書きをする上でもとっても楽です(もちろんパソコンで打ち込むのも楽)。
楽になるっていう理由だけで、こんな表記にしただけならあまり意味がないかもしれません。
しかし心配はご無用で、数学者たちはこの見た目のまま、ちゃんと行いたい式変形ができるようにいろいろ調整を図っていきました。
要するに、線形代数はたくさんの式を上手く操作するために生まれてきたのです。
具体的には連立方程式を解くために考案されました。方程式がたくさん並んで、非常に大きな連立方程式になった時、そもそもその連立方程式が解けるのか、解けるとしたら素早く解く方法はないのか、そのような問題意識によって生まれてきたんです。
例えば逆行列を求めることは、連立方程式を解く操作になっています。行列式なるものは、連立方程式がそもそも解けるのかを調べる操作になっています。便利に楽に既存の方法を昇華させていったのが線形代数なのです。
したがって、線形代数は生まれながらにして、たくさんの数式を同時に扱う上で非常に強力な操作ツールになっているのです。
行列の計算は一見奇妙に見えるかもしれません。その奇妙さは、とにかく上手くたくさんの式を操作したいという問題意識が先にあって、それを解決する方法を実現するために、後付的に計算の仕方が定義されたところから来ているのです。
線形代数を学ぶモチベーション
実際のところ、このように数式を簡潔に表せるようにしてから、更にその操作方法も作り上げていきましたが、それに留まらず、これが数学的に面白い体系になっていないかが調べあげられ、数学を基礎付ける一大分野に出世しました。
世の中に出回っている教科書というのは線形代数の体系が出来上がったあとに出版されているので、その綺麗な体系を説明することが目的になります。
したがって、とりあえず線形代数を勉強しようと思って本を手に取れば、一面に広がる謎の数式と謎の計算、膨大な専門用語と、壮大な理論体系に圧倒され、そっと本を閉じたくなるのです(新し目の教科書はそうでもないかもしれないけど)。
線形代数は、便利なツールと言ってしまうには実は惜しい存在でもあります。
それでも、機械学習を学んできて一番思うことは、やはり初心に戻って線形代数は便利なツールであったということです。
もちろん数学に対して意欲的ならば、線形代数をもっと深く勉強してもいいでしょう。しかし、まずは線形代数が便利なツールとして、
機械学習で即戦力になりうるものであることをモチベーションに学んでいくのが良いと思います。
線形代数を学んで、できるようになること
線形代数を学ぶと、固有値問題が解けるようになります(スペクトル分解ができるようになる)。線形空間の操作方法を獲得できます。関数をベクトルと見なすことで、線形関数に関する巨大な理論体系である関数解析学への挑戦権を獲得できます。
上記は全部数学を学ぶことがモチベーションの場合の話です。
機械学習において、線形代数を学ぶ最大のモチベーションは、本が読めるようになることです。
大抵の場合、自分の頭の中にすべての答えが詰まっているわけではないので、調べものをしなければなりません。機械学習のことを調べようとした場合、その調べものはたいてい線形代数という言語で表記されています。
線形代数を知らずに機械学習の本を読み漁ることは、まるで英語を知らない人が英語の推理小説を読むようなものです。
英語を読めるようになったとして、推理小説の中身を完全に理解し、犯人を自力で特定できるかは分かりません。これは別種の問題です(国語の現代文のテスト満点取れますか?)。しかし、英語を読めなければ端から何もわからないのです。
一方で、幸いなことに、機械学習というのは線形代数が分かると、意外とわかります。
機械学習の本は推理小説の本ではありません。書いてあることそれ自体がそのまま事実です。推理小説で言う犯人です。機械学習がわからないと思い込んでる一方で、実は線形代数という言語を知らないあまり、チンプンカンプンに見えるということがあるのです。
したがって、線形代数を学ぶことで機械学習の理解に大きく近づきます。
回帰や分類という機械学習の言葉は勿論覚えなければなりません。それの利用価値や、実装方法も別途学ぶ必要は有るでしょう。でもそれらの具体的な記述はたいてい線形代数です。
補足
微分積分学は?
ひとまず理解して置かなければならないのは、
微分という計算が勾配を意味しています
ということくらいです。それを理解したあとは、線形代数を使ってたくさんの式を一気に微分していきます。微分の意味は直感的でわかりやすいのだが、線形代数の記述がわからなくて、ついていけなくなるという事のほうが多いと思います。
確率統計は?
重要です。機械学習の動作を理論付ける大切な分野です。例えば典型的なもので言えば、
・最小二乗法はガウスノイズを仮定した際の最尤推定になっている
・リッジ回帰は事前分布にガウス分布を仮定した際のMAP推定になっている
などの事実があります。また、統計的な推定が難しい場合に、それらを近似した手法が、そのまま機械学習のとある手法に一致しているケースなどもあります。
確率・統計は機械学習を深く理解していくうえでは非常に重要な役割を担うのは間違いありません。
しかし、機械学習をこれから学ぼうという時に、いきなりここから入るときっと躓くでしょう。何より、確率・統計に関しても線形代数が言語として使われてきます。
ですから、確率・統計はもっと後でも良いと思います。大切だということを頭に置いておくくらいでひとまず大丈夫でしょう。
勿論、「平均」とか「分散」くらいは知っておいた方が良いでしょう。
確率・統計を考えていくための初歩を確認したい人は以下の記事へ