内積空間 とは
長さ、角度、直角はあまりに馴染み深く、定義が要らないように見えます。ベクトル空間では、この三つはただでは与えられません。装置一つ、内積 <u,v> が三つを一度に作ります。長さは自分自身との内積の平方根、角度は二つのベクトルの内積を長さで割った値、直角は内積が 0 の場所です。点乗積は、この内積の一例にすぎません。内積を変えると、軸ごとに重みを変えれば、同じベクトルの上で幾何そのものが曲がります。関数もベクトルです。二つの関数の内積は積を積分した値で、フーリエ変換とカーネルはここから始まります。画面の矢印がその幾何を描きます。内積が変わると、同じ矢印の長さと角がいっしょに変わります。重みを変えると円は楕円に押しつぶされます。楕円の長い軸は、重みの軽い方向です。画面の下の四つの数が、その幾何の読み値です。明るくなった矢印が、その世界の直角です。
緑のベクトル u を水平に固定し、青いベクトル v をドラッグすると、画面の下の四つの数がついてきます。内積 <u,v>、u の長さ、v の長さ、そして両者の角度です。v を u と同じ向きに長く伸ばすと内積は大きくなり、直角に立てると内積は 0 になり、逆に回すと負になります。内積一つが長さと角度を一つの箱に入れます。長さも、角度も、直角かどうかも、この一つの量から解けます。緑と青がその二つのベクトルです。四つの数のうち、内積が残りの三つを生みます。
まず長さです。一つのベクトルを自分自身と内積すると <v,v> が出て、これが長さの二乗です。長さ ||v|| は <v,v> の平方根です。v をドラッグすると、矢印の先までの半径がその長さで、点線の単位円は長さがちょうど 1 のベクトルの集まりです。v を単位円の上に置くと <v,v> はちょうど 1 になります。長さを別に定義しなくても、内積があれば長さがついてきます。自分自身との内積がそのベクトルの長さの二乗だという一文が、ノルムの出発点です。
今度は内積そのものを変えます。重み付き内積は <u,v>w = w1·u1·v1 + w2·u2·v2 で、二つの軸に違う重みを与えます。スライダー w1、w2 を動かすと、長さが 1 のベクトルの集まり、つまり単位球は円ではなく楕円になります。半軸の長さは 1/sqrt(w1) と 1/sqrt(w2) なので、ある軸の重みを大きくするほどその方向は短くなります。その方向では距離がより高く値付けされるからです。ベクトルはそのままで、何を長いと呼ぶかの基準が変わり、幾何が曲がります。身長と体重のように軸ごとに単位が違うデータを扱うとき、使っているのは重み付き内積です。
直交も内積で定義されます。二つのベクトルが直交するとは <u,v>w = 0 ということです。一つの軸により重い重みを固定し、v の角度だけをスライダーで回します。重み付き内積が 0 を横切る瞬間、v が明るくなります。その瞬間、画面の上の u と v は 90 度には見えません。重みが空間を曲げ、その世界の直角が目の直角とずれます。直角とは、目に見える 90 度ではなく、内積が 0 だという事実です。どの内積を使うかが、何が直交かを決めます。
最後に、関数もベクトルです。二つの関数の内積は、区間の上で両者を掛けて積分した値 <f,g> = ∫ f·g です。f = sin(x) を固定し、スライダーで g = sin(kx) の整数周波数 k を変えます。積 f·g の面積が陰影で塗られ、k が 1 のときは正の面積が残ります。k が 1 でない整数になると、正の部分と負の部分が打ち消し合って積分は 0、つまり直交になります。異なる周波数の正弦波は、関数の空間で互いに直角です。信号を周波数ごとに分けるフーリエ変換は、この直交の上に立っています。周波数が違うと、積の面積が互いに消し合います。陰影が基準線の上下に分かれると、積分は打ち消し合います。点線の円が長さの基準です。フーリエ変換は、この直交を周波数の分解に使います。