内積は空間に幾何を与える
長さとは何か、角度とは何か、直角とは何か。当たり前すぎて、わざわざ定義する必要などないように感じますよね。ところがベクトル空間では、この三つはただで与えられるものではありません。たった一つの装置、内積 <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、つまり直交になります。異なる周波数のサイン波は、関数空間でたがいに直角なのです。信号を周波数ごとに分けるフーリエ変換は、まさにこの直交性の上に立っています。