webエンジニアの日常

RubyやPython, JSなど、IT関連の記事を書いています

なぜ線形代数ではn次元を学ぶのか

はじめに

理系大学生や機械学習を学ぶ社会人にとって線形代数は必須教科です。

大学に入るとまず習うのが線形代数だし、ディープラーニングの教科書をのぞいてみると線形代数を知っていることが前提に書かれています。

線形代数は簡単に言えば、高校で習ったベクトルの「その先」なのですが、急に次元がn次元に拡張されたことに驚かれるかもしれません。

私たちの住む世界は3次元なのに、なぜn次元なんて必要なんだろう。

そんな疑問を抱いたことはないでしょうか。このページではそんな疑問にお答えします。

線形代数とは

線形代数は名前の通り、「線形」という性質を持つ「代数」を扱います。

線形とは、和とスカラ倍で閉じていること、すなわち、「ベクトル同士足し算しても結果はベクトル」だし、「何か定数をベクトルにかけても結果はベクトル」ということです。

閉じてるというのは数学一般に使われる用語で、なにか領域を決めて、ある演算を施しても領域から出ないという意味です。

今でいうと領域はベクトルになり、演算は和とスカラ倍になります。

では代数とは何でしょうか。文字から読み取ると「数字の代わりに文字を使った計算」という気もしますが(始まりはそうだった)、さらにもっと広い意味で使われるようになり、「ある構造を持つ集合」というニュアンスになります。

ここもなかなか難しい概念なのですが、構造というのは簡単にいうと「演算が定義されている」ということです。

数字なんだから最初から定義されているでしょ。と思うかもしれません。

全く演算が無いとなると、これはただの集合論になってしまいます。

逆に多すぎると自由度が失われて、ごく少数の対象にしか適応されない理論となってしまいます。

構造を持たせる(演算を定義する)というのはある程度自由度を与えつつも制限をかけるということなのです。

数学にはもっと様々な制限のかけ方・自由の与え方をしているものがあり、個性豊かな理論が展開されるのです。

まとめると、線形代数というのは、「和とスカラ倍が定義された集合で、和とスカラ倍に関して閉じているという性質を持っているもの」と言えます。

なぜn次元なのか

さて、線形代数の正体は「演算が定義されている集合」のことでした。

高校の時に習ったベクトルは矢印であったり、成分表示したり、とても具体的でわかりやすかったのに、なぜか大学数学の線形代数ではぼや~としていますね。

実は、高校で習った座標平面上のベクトルというのは線形代数の1つの具体例でしかなく、2または3次元に限定して考えたものなのです。

線形代数は抽象的な概念です。

線形代数の一つの具体系が座標平面上のベクトルになるのです。

ではほかにどんな具体系があるのでしょうか。

ここで、あるスーパーのビールの売り上げを考えてみましょう。

まず、ビールの売り上げはその日の気温に比例します。

さらに、その日の来客数にも比例します。来客数はポイント〇倍デーとか、雨が降っているとか、定員さんがかわいい(orかっこいい)など様々な要因によって変動します。

そこで、ビールの売り上げをこれらの要因を使って予測してみましょう。

$$ y = a_{1}x_{1} + a_{2}x_{2} + a_{3}x_{3} + a_{4}x_{4} $$

yはビールの売り上げ、 x1~x4は気温、取得ポイントの倍率、天気の指数、定員さんの美形度を頑張って数値化したものです。

a1~a4はそれぞれの重みです。

これで一つの方程式が出来上がりました。では、xyzwp平面にプロットしてみましょう。

しかし残念ながら、私たちは3次元までしか絵で表現することができないので、1枚のグラフには描くことができません。

この方程式は5次元の空間にプロットされます。

3次元で生きているからと言っても、私たちの身の回りには3次元を超えるものなんて実はいくらでもあるのです。

このビールの例での数字の組 (x_1, x_2, x_3, x_4)が線形性を持っているかは置いといて、

さまざまな次元を持つ数字の組の集合を統一的に扱うために、線形代数では2や3などの限定した次元ではなく、n次元のベクトルを扱うのです。

逆に言えば、どんなに線形代数での議論が複雑怪奇になってきても、それは座標平面上でも成り立つ議論です。

n次元という抽象的な議論で何を言っているのか分からなくなったときは高校時代に習った矢印のベクトルに立ち返って考えるとよいでしょう。