読者です 読者をやめる 読者になる 読者になる

北野坂備忘録

主にインストールやプログラミングのメモを載せています。

(カーネル法における)カーネル関数とは何か 

Wikipediaしましま先生 の「カーネル」の項目を読んで、
「分からんわ-!」
 と叫びながら壁に頭を打ちつけ続けたみなさん、こんにちは。

 あなたは正常です。

 いったい日本人のうちの何人があれを見て
「あっ、カーネル関数ってこういうことなんだー!」
 と分かるのでしょうか。いることはいると思いますが。

 はい、というわけで「カーネル関数」の説明です。ややこしいことに「カーネル関数」は「カーネル」とだけ書かれることもあります。あと、「核関数」と表現されることもあります。

 まずはカーネル法の話をします。
 カーネル法は2つの工程に分かれます。
 1つ目は、
1. 線形分離不可能なデータ構造を
2. 高次元への写像関数を使って高次元空間へ写像することで
3. 線形分離可能な構造に変換すること。
 です。つまり「高次元に写像して線形分離可能にする工程」です。
 2つ目は「カーネルトリック」で、この「高次元に写像して線形分離可能にする方法」で発生する高コストな写像関数の計算を、
・「写像関数」を直接使わずに「カーネル関数」を使って間接的に高次元のデータについて低コストで計算処理を行う方法
 のことです。「特徴空間での変数を陽に扱わない」という不思議な日本語で表されることも多いアレです。
 ここまでは理解できている人も多いと思います。

 で、「カーネル関数」と言うと「内積」「内積」と思われがちですが、別に内積計算するものだけがカーネル関数ではありません
 「カーネル関数」とは本来「2つのデータの間のある種の類似度を表す」関数のことです。
 黄色本の上巻には「内積でないカーネル関数」の良い例(Parzen窓)が掲載されています。
 
 しかしながら、カーネル法に使えるカーネル関数は限られています。カーネル関数ならなんでもいいわけではないのです。
 カーネル関数k(x,x')がカーネル法で有効なカーネル関数である十分条件は、
・対称性を持つこと & 半正定値性を持つこと
=任意の{x_n}に対して、要素がk(x_n,x_m)で与えられるグラム行列Kが半正定値であること

 グラム行列Kが半正定値であるカーネル「半正定値カーネルと言います。カーネル法の文脈では「半」が無視されて「正定値カーネル」と書かれることのほうが多いです。グラム行列はN×N対称行列なのでグラム行列と言った時点で対称性も満たされます。

 というわけで、上記のカーネルトリックの定義を少し修正します。
・「写像関数」を使わずに「半正定値カーネルを使って間接的に高次元のデータについて低コストで計算処理を行う方法
 ただ、カーネル法の文脈で使われる「カーネル(関数)」とはたいてい「半正定値カーネル」のことを意味するので、前者のような表現が多くなるわけです。

 「半正定値カーネル」の有利な点は、
・低次元な入力空間で内積計算を済ますことができるので、計算量とメモリを削減できる
 ことです。
 実を言うと「内積」を一般化したものが「半正定値カーネル」なのです。数学的な話をするとさらにここから「再生核ヒルベルト空間」に入っていくわけですが、しましま先生のところですら項目ができていないのでそちらに入り込んでいくのはやめておきましょう。

 で、この「半正定値カーネル」というのもいっぱい種類があります。
 しかも、これら「半正定値カーネル」は組み合わせることも可能です。半正定値カーネルの和、積、指数関数は再び半正定値カーネルになります。
 といっても代表的な半正定値カーネルは以下の2つです。これは『はじめてのパターン認識』に載っていますので詳しくはそちらを参考にしてください。
1. 多項式カーネル
2. 動的基底カーネル(RBFカーネル)=ガウスカーネル(ガウシアンカーネル
(ちなみに『はじめてのパターン認識』では半正定値カーネルは「内積カーネル」という表現になっています。)
 他にも、
・フィッシャーカーネル
木構造カーネル
・文字列カーネル
 など、用途に応じて様々なカーネル関数が存在します。
【例外】
 「半正定値カーネル」ではないカーネル関数も存在します。
・シグモイドカーネル
・シンプソンカーネル
 これらのカーネル関数はグラム行列が「半正定値」ではないので「半正定値カーネル」ではないのですが、性能が良いので用いられています。
 このようなカーネル関数は「不定値カーネルと言います。


 まとめましょう。
1. 本来のカーネル関数とは、「2つのデータの間のある種の類似度を表す」関数のこと。
2. ただしカーネル法で使えるカーネル関数は「半正定値カーネル」のみである。そしてカーネル法の文脈では「半正定値カーネル」ではなく「正定値カーネル」と表現されることが多い。
3. 「半正定値カーネル」は計算速度・メモリの観点から有利である。
4. 「半正定値カーネル」の中でも一般的に用いられるのは「多項式カーネル」と「ガウスカーネル(RBFカーネル)」である。
5. しかしながら「半正定値カーネル」はいくらでも組み合わせることが可能であり、用途に応じた様々なカーネル関数が開発されている。
6. 実用上では「半正定値カーネル」ではない「不定値カーネル」も用いられている。
 以上です。