Annabella Peng

Gaussian Kernel を正しく紹介するために、今週の投稿はいつもより少し抽象的な内容からスタートします。 この抽象度はガウスカーネルの仕組みを理解するのに厳密には必要ないのですが、一般的な確率分布を理解しようとするときに、抽象的な視点は直観の源として非常に有用です。 これから徐々に抽象度を上げていきますが,もし絶望的に分からなくなったり,これ以上我慢できなくなったりしたら,太字で「実用編」と書いてある見出しまで読み飛ばしていただいて構いません。 また、まだ問題がある場合でも、あまり心配しないでください。このブログの後の記事のほとんどは、ガウス カーネルを理解する必要はありませんので、来週の記事を待ってください (あるいは、後でこれを読む場合はスキップしてください)。

カーネルとは、データ空間と高次元空間の超平面の交点が、データ空間のより複雑で曲線状の決定境界を決めるような、高次元のベクトル空間へデータ空間を置く方法であると思い起こしください。 主な例として、座標(x,y)の各点を座標(x,y,x^2, y^2, x^y)の5次元点に送り、2次元データ空間を5次元空間へ送るカーネルを見た。 さらに柔軟性を持たせたい場合は、さらに高次元のカーネルを選び、たとえば点 (x,y) を9次元空間の点 (x,y,x^2, y^2, x^y, x^3, x^2y, xy^2, y^3) に送ります。

今週は高次元ベクトル空間を越え、無限次元ベクトル空間まで進みましょう。 上の 9 次元カーネルが 5 次元カーネルの拡張であることはおわかりいただけると思います。 このように次元をどんどん増やしていくと、どんどん高次元のカーネルになっていきます。 これを「永遠に」続けると、無限に多くの次元を持つことになる。 ただし、これは抽象的な話である。 コンピュータは有限のものしか扱えないので、無限次元のベクトル空間に計算を保存したり処理したりすることはできないのだ。 しかし、ちょっとだけ、何が起こるか見るために、できるふりをすることにしよう。

この仮想の無限次元ベクトル空間では、通常のベクトルと同じように、対応する座標を足すだけでベクトルを足すことができる。 ただし、この場合は無限に座標を足さなければならない。 同様に、スカラーの掛け算も、(無限にある)座標にそれぞれ与えられた数を掛けることで可能です。 各点(x,y)を無限ベクトル(x,y,x^2, y^2, x^y, x^3, x^2y, xy^2, y^3, x^4,\dots) に送って無限多項式のカーネルを定義することにする。 特に、変数xyの単項式、例えばx^7y^42y^{10000}はすべてこのカーネルのエントリのいずれかに、おそらく非常に下の方に現れる。

計算機の世界に戻るには、エントリの最初の5つ以外を忘れれば、元の5次元カーネルに戻れるのである。 実は、この無限次元空間の中に、元の5次元空間が含まれているのです。 (元の 5 次元カーネルとは、この 5 次元空間に無限多項式カーネルを投影して得られるものです。)

さて、深呼吸してください、これをもう一歩先に進めます。 ベクトルとは何か、ちょっと考えてみてください。 数学の線形代数の授業を受けたことがある人は覚えているかもしれませんが、ベクトルは公式には足し算と掛け算の性質で定義されています。 計算機の世界では、ベクトルは数字の羅列と考えるのが一般的です。 ここまで読まれた方は、そのリストが無限大になっても構わないと思っているかもしれません。 しかし、ベクトルとは、それぞれの数字が特定のものに割り当てられている数字の集まりだと考えて欲しいのです。 例えば、通常のベクトルでは、各数値は座標/特徴の1つに割り当てられています。 私たちの無限ベクトルの 1 つでは、各数値は私たちの無限に長いリスト内のスポットに割り当てられています。

しかし、これはどうでしょう。 もし、私たちの (有限次元の) データ空間の各ポイントに番号を割り当ててベクトルを定義したらどうなるのでしょうか。 このようなベクトルは、データ空間内の 1 つの点を選ぶのではなく、一度このベクトルを選ぶと、データ空間内の任意の点を指すと、ベクトルは番号を教えてくれます。 まあ、実はもう名前がついているんですけどね。 データ空間の各点に数値を割り当てるものを関数といいます。 実際、このブログでも、確率分布を定義する密度関数という形で、関数を何度も取り上げてきました。 しかし、ポイントは、これらの密度関数を無限次元のベクトル空間のベクトルと考えることができることです。

関数はどうしてベクトルになるのでしょうか。 さて、2つの関数を足すには、それぞれの点での値を足せばよいのです。 これは、先週の混合モデルの投稿で説明した、分布を結合する最初の方式でした。 2つのベクトル(ガウスの塊)の密度関数と、それらを足した結果を下の図に示します。 同じように関数に数値を掛けると、全体の密度が薄くなったり濃くなったりします。 実は、この2つの操作は、代数学の授業や微積分でたくさん練習したはずのものです。

addvectors

次のステップは、元のデータ空間からこの無限次元空間へのカーネルを定義することですが、ここで私たちは多くの選択肢を持っています。 最も一般的な選択肢の1つは、過去の投稿で何度か見てきたガウス・ブロブ関数です。 このカーネルでは、ガウスブロブの標準サイズ、すなわち、偏差の固定値sigmaを選択します。 そして、各データ点をその点を中心とするガウス関数に送ります。 元のデータ空間の各ポイントをより高い (実際には無限) 次元のベクトル空間に配置します。

さて、ここで問題です。計算の世界に戻すために、この無限次元ベクトル空間にある有限次元ベクトル空間を選び出し、無限次元空間を有限次元の部分空間に「投影」する必要があります。 有限次元の空間を選ぶには、データ空間から(有限)個の点を選び、その点を中心とするガウス型ブロブによって広がるベクトル空間を選びます。 これは、上記の無限多項式カーネルの最初の5つの座標で定義されるベクトルペースに相当します。 これらの点の選択は重要ですが、それについては後で説明します。 今のところ、問題はどのように投影するかです。

有限次元のベクトルでは、投影を定義する最も一般的な方法は、ドットプロダクトを使用することです。 これは、2 つのベクトルの対応する座標を掛け合わせ、それらをすべて足した数です。 例えば、3次元ベクトル(1,2,3)(2,.5,4)の内積は1 \cdot 2 + 2 \cdot .5 + 3 \cdot 4 = 15.

関数でも同じことができ、データセット中の該当点の値を掛け合わせることで、その関数が取るべき数値がわかる。 (しかし、これらの数値は無限にあるので、すべてを足し合わせることはできない。 そこで、積分をとることになります。 (数学者の方には申し訳ないのですが……)。 ここで良いのは、2つのガウス関数を掛け合わせて積分すると、中心点間の距離のガウス関数と同じ数になることです。 (新しいガウス関数は異なる偏差値を持ちますが。)

つまり、ガウスカーネルは無限次元空間の内積を、データ空間の点間距離のガウス関数に変換しているのです。 データ空間の2点が近ければ、カーネル空間でそれらを表すベクトル間の角度は小さくなります。 データ空間の2点が近ければ、カーネル空間でそれらを表すベクトル間の角度は小さくなります。点が離れていれば、対応するベクトルは「垂直」に近くなります。 9882>次元のガウスカーネルを定義するには、まず、データ空間から<9882>点を選びます。

このカーネルがどのように機能するかをよりよく理解するために、超平面とデータ空間の交点がどのようなものかを考えてみましょう。 (これはとにかく、ほとんどの場合、カーネルで行われることです。ここで (x_1,\dots,x_N) は(高次元カーネル空間での)点の座標、a_1,industrialldots,a_N は超平面を定義するパラメータです。 ガウスカーネルを使う場合、ドットプロダクトのバージョンにより、(x_1,indys,x_N)の値はN選ばれた点への距離を測定しています。

これを解くのはまだ難しいので、値 a_1,\ldots,a_K が1または-1である例を見てみましょう。 すると、a_i = 1のラベルを持つ各データポイントの近くでは、値x_iは1に非常に近くなり、他の値x_jは小さくなるので、和a_1 x_1 + a_2 x_2 + \cdots + a_N x_Nは正となる。 同様にa_i = -1の点の近くでは和が負になる。 したがって、b = 0とすると、判定境界は正の点と負の点を分離することになる。 実際、カーネルを定義するガウス球を思わせるような領域が切り取られることになる。 下図の左側はその一例で、係数が正か負かを色で表している。 見ての通り、結果は最近傍アルゴリズムの滑らかなバージョンのように見えます。

gaussianclassif

パラメータ a_1,\ldots,a_K を調整すると、これは点の周りのガウス球のサイズを変える効果があり、図の右にあるように、決定境界をそれらから遠ざけたり近づけることがあります。 係数が正から負に切り替わると、判定境界は点の一方から他方へ移動する。 ラベル付けされたデータセット(ガウスカーネルを定義するN点と一致することもしないこともある)があれば、カーネル空間で線形分類アルゴリズム(SVMやロジスティック回帰など)を学習することは、この決定境界を、上で定義した制約の中で動かし、正しい側にあるデータ点の数を最大化することに対応します。

つまり、これにより、決定境界をより柔軟に選択できるようになりますが (あるいは、少なくとも異なる種類の柔軟性が得られます)、最終結果は選択する N ベクトルに大きく依存することになります。 もし多すぎる場合(例えばカーネルを定義するN点をデータ点と同じにする場合)、最近傍アルゴリズムがオーバーフィッティングを引き起こす傾向があるのと同様に、オーバーフィッティングの危険性があります。 私たちが本当に欲しいのは、集合全体に均等に分布している少数の点であり、理想的には、N 点のそれぞれが同じクラスの点のほとんどに近いものです。

こうした点の集まりを見つけることは、このブログのこれまでの投稿で焦点を当ててきたものとは非常に異なる問題で、教師なし学習/記述的分析のカテゴリに属します。 (カーネルの文脈では、特徴選択/エンジニアリングと考えることもできます)。 次の数回の投稿では、ギアを入れ替えて、この線に沿ってアイデアを探求し始めます。

コメントを残す

メールアドレスが公開されることはありません。