機械学習をやる上で線形代数のどのような知識が必要になるのか

TL;DR

  • 「機械学習をやるなら線形代数はやっとけ」的な話が出るけど具体的な話があまり見当たらない
  • 研究でなく実務レベルで機械学習を扱う場合にどのような線形代数の知識が必要になるのか考えてみた
  • 高校でやるベクトル・行列+αくらいあれば概念的には十分で、計算が苦じゃない基礎体力が重要では?

機械学習が流行ることで、機械学習に必要な数学的基礎にも話が及ぶことが多くなってきている。 特に、線形代数や微積に関しては基礎を押さえとけみたいなことを言う人が結構いる気がする。 中身のない話をしたい場合はまあそれだけでもいいのだけれど、具体的に何が必要になるのかを説明してくれてる人はあまりいない。少なくとも自分の観測範囲では。 レベル感が様々なので万人に通用する議論はできないのはしょうがないが、「自分としてはこれは必要だと思っている」みたいな意見は聞いてみたい。

自分の考えはどうだろう、ということで線形代数を対象としてちょっと考えてみる。 研究でなく業務で機械学習を道具として使うという人をターゲットに考えてみる。 道具として使うと言っても有効に使うために重要な能力はもっと他にあると思っているが、あくまで線形代数に絞って考える。

必要だろ!というもの

ベクトルの基本的な取り扱いは外せない。 内積や一次独立とか。

行列の基本的な演算も必要だろう。 行列の掛け算が分かりません、というのはさすがに厳しいと思う。

同じように逆行列や固有値も知らないと難しい場面が多いのではないだろうか。 ただしこの辺りまでは高校の数学をやっていればカバーできているので復習すれば大丈夫だろう。 最近では行列が削除されてる?おっさんだから分かりません。

ちょっと微積と被るが、ベクトルによる微分とか行列による微分、というのも避けては通れない。 ここは慣れがない人にとっては辛い部分で、ある程度の訓練が必要そう。

ランク辺りは意見が割れるかも。 正則でない場合は当然よく現れるのでムーア・ペンローズ逆行列とかそれに類する内容は理解しているとよいかもしれない。

テンソルに関しては双対とか多重線形性とか難しい概念は必要ない。 行列が2階のテンソル、くらいの意味で階数が上がった時にも基本的な演算が理解・実行できれば十分。

あれ?ひょっとして内容としてはこれくらいかも? 色んな概念を知ることよりも、この辺りを手を動かして計算して基礎体力をつける方が有益そう。

必要なの?というもの

上記の内容を見ると、いわゆる大学で初めて触れる線形代数の内容はそこまで入ってないことに気付く。 いや、上記内容もやるか。ただ高校のベクトルや行列の話から概念としてとても新しいものはない、みたいな感じ?(完全に昔の話を忘れてるのでそうじゃないかも)

準同型定理とか次元定理とかジョルダン標準系とかグラム・シュミットの直交化とか、線形代数の講義で必ず出くわすやつらはほとんどの場合いらない。 ベクトル空間の定義なんかも持ち出す必要性が生じることがほぼない。

機械学習の具体例として、SVMとか真面目にやるなら再生核ヒルベルト空間が必要だろ、と怒る人がいるかもしれない。 自分はそういうのも好きな方なので勉強したけど、自分以外の人からは聞いたことは(学会以外では)ほぼない。

うーむ、線形代数と聞いて自分が典型的に思い浮かべるものはそんなに必要ないのでは? みんなどういう意味で「線形代数はやっとけ」と言っているのだろうか?

まとめ

機械学習やるなら線形代数が必要、という話を自分なりに考えてみた。

概念的には高校のベクトル・行列+αくらいで、むしろその範囲で手を動かして慣れておく方が重要な気がする。 みんなどういう意味で言ってるのか教えて欲しい。




Written on April 14, 2018