今回はカーネルについてです。カーネルといえば次元削減がもっともポピュラーな関連ワードなんじゃないでしょうか。なぜカーネルなのか、どうやって働いているのか、について少し考察してみます。
そもそもカーネルとはなんなのか?という問いに対しては
ある空間(主に高次元)での内積を計算する手法が答えになります。では次に来るのはなぜ内積を計算したいのか?という問いです。 データを扱う際、別に高次元だけでなくあらゆる空間で内積をとるという行為はあちこちで必要となります。これについてはSVMの実装とか色々勉強してみるとわかります。つまり、先走ると、データを別次元で扱いたいさいはその内積さえわかればいいことが多いんです。
内積だけでいいのか??
と絶対思いますよね。上の図でいえば写像を知る必要なしに、右側のFeature Spaceで左側のInput Spaceのデータを扱うことができるなんてあり得るのでしょうか?それがあり得るんです。 みていきましょう写像を画像左側から右側へのものとします。すると、特徴空間でのとの内積はとなります。つまり、カーネルは次のようになります。
これだけではわからないので具体例を見ましょう。すればわかります。
上のカーネル関数を考えます。これを分解していきましょう。つまり
とします。もうわかりましたでしょうか。例えばとすると
ということになります。つまり、この例だと写像は上のようなものであり、特徴空間は9次元だったということです。ちなみにこのカーネル関数を線形カーネルと言います。もう一例みましょう。
同様に分解すると
でのとき
見ての通り13次元の特徴空間であることがわかります。一般化するとは次元でのカーネルになります。
ここまででカーネルがでたらめではなく、ちゃんと高次元での内積を計算してくれていることがわかりました。では次の疑問としてどういったカーネル関数ならいいのか?が現れます。実はここが非常に難しいのです。
Mercer’s Theorem
Reproducing Kernel Hilbert Space (RKHS)
- symmetry:
- Positive semi-definiteness
カーネルが何か、そして何をしているのかわかったかと思います。面白いカーネル関数がわかれば僕に連絡ください。笑