カーネル法

  • カーネル法は、一般化した定義があるが、一般化した話をするとイメージが湧かないので、具体例に即して書いて、そこに(可能な範囲で)一般化したときにどういうことかということを書き添えることにする
  • 正定値カーネル関数(Wiki)
    • カーネル関数というのがある。特に、機械学習等で使われるカーネル関数は正定値カーネル関数と言うもので、「正定値」な性質を持つ
    • 『意味・意義』は?といえば、2つの値・点の遠近の程度を表す関数である
    • v^T M v = \sum_i,\sum_j v_i v_j M(i,j)となるような正方行列Mが表す関数はvの関数であるが、これがすべてのvについて0以上になる(0になるのはv=0のとき)ことをもって、「正定値」と言う
    • また、v_1^T M v_2とすると二次形式である
    • K(x_1,x_2)=e^{-\frac{(x_1-x_2)^2}{2\sigma^2}}は正定値カーネル関数の例である。今、x_1,...,x_nがあったときに、そのペアについてK(x_i,x_j)を定めたときに、K(x_i,x_j)を(i,j)要素とする行列Mは正定値行列であるようなカーネル関数を正定値カーネルと言う。
    • x_1,x_2は任意次元座標とみなしてよい。式からもわかるように、x_1,x_2を入れ替えても値は変わらない。対称性を有する、とも言う。K(x_1,x_2)=K(x_2,x_1)
    • (ハスケルの)型制約で言えば、二つの同じ型の引数x_1,x_2を取って、実数を返すような関数に相当する(複素関数の世界でもカーネル関数は定義されているが、ここでは実数関数とする。引数も実ベクトルとして考えて行くことにする)
  • ヒルベルト空間とそこでの内積
    • 正定値カーネル関数K(x_1,x_2)の値が何かしらの内積であると、正定値カーネルを決めるx_iを「内積を持った空間の点」とみなせる
    • したがって、このカーネル関数K(x_1,x_2)を(広い意味での)内積と見ることにすれば、必要になるのは、「何の内積」なのか、ということである
    • 内積が定義された空間にヒルベルト空間と言うのがあるから、K(x_1,x_2)内積となっているようなヒルベルト空間を考えると、よいことがある(かも知れない)
    • さて。x_1,x_2の遠近の程度を表しているのがカーネル関数K(x_1,x_2)。この関数を「内積」とするヒルベルト空間にx_1に対応する何か、と、x_2に対応する何か、とを定義して、その間に「内積」が定義できるとよいことになる。(x_1,x_2とが混合した何か2つ定義するのもありかもしれないが、せっかく、オリジナルには別々だったのだから、ヒルベルト空間でも、別々の方がスッキリする)
    • ここでカーネル関数K(x_1,x_2)は「関数」なので、それを分離して作る2つのものも「関数」にするのはアリ、である。そういう意味で、次のような関数を定めることとし、このヒルベルト空間は、関数の空間であることにする
      • K_{x_1}(z),K_{x_2}(z)という2つの関数をx_1,x_2にそれぞれ対応付ける。ただしK_{x_1}(z) = K(z,x_1),K_{x_2}(z) = K(z,x_2)とする。ガウシアンカーネルの場合にはK_{x_1}(z) = e^{-\frac{(z-x_1)^2}{2\sigma^2}}のことである。
      • そして、このK_{x_1}(z)K_{x_2}(z)と言う2つの関数の内積を、K(x_1,x_2)と「定め」ることで、出来上がっている空間が、このカーネル関数K(x_1,x_2)にとって、よく出来たヒルベルト空間である、という関係にある
  • どうして、こんなに面倒くさいことをするのか…
    • 内積を備えたヒルベルト空間というのは、一般化されていて、何ができて何ができないのかがよくわかっている空間であるし、調べモノ・証明などをしたくなったときにも使いやすい空間であることはメリット
    • 逆に、ヒルベルト空間とその内積で考えることができるようなカーネル関数はどういうものかというと、それは正定値関数であることが導き出せることから、2つの要素x_1,x_2の遠近の定義として、ヒルベルト空間がきちんと支えてくれるような遠近定義であるかどうかの議論ができたり、複数の遠近の定義の異同を、関数が収まっている空間で議論することも可能になる、というメリットがある
    • さらに、応用上のメリットも。
      • 機械学習では、representer theoremというすごい定理があることで、何かを最小化して答えにしよう、限られた数の標本でそれをやろう、という作戦がどうして効を奏するのかに根拠を与えてくれる。
      • 観察に乱雑項が含まれるときに、推定したり分類したりして、予測もしたいことがある。そのときに予測の期待値の計算を支えてくれるのもカーネル関数。ノンパラメトリックな分布推定をすることがどうしてできるのかを支えているのもカーネル関数
      • カーネル関数を使った応用手法はたくさんあり、そうやっても大丈夫なのは、「カーネル関数について知られている以上のような諸々の性質」があるからであって、そこのあたりを、意識しないで活用しつつ、正定値カーネルかどうかだけを気にしておけばよくしてくれるメリットがある
  • ここまで辿った上で、以下を読む
    • カーネル法では、遠近関係を気にする対象がある。その対象の遠近を決める関数がカーネル関数。この遠近の程度を、対象に対応する関数の内積であると考えるのがカーネル法。したがって、対象は集合の1要素だったのだが、それに対応する関数にしてやって、その内積に切り替えている。この「対応する関数」たちは、空間の点(内積を持つのでベクトル)になるのだが、この空間が(関数の)ヒルベルト空間である。また、集合からヒルベルト空間への写像をFeature mapとも呼ぶ
    • Reproducing kernel Hilbert spaceという単語は知っているとよいと思う。上で書いたような、正定値カーネルとそれに対応するヒルベルト空間ではK_{x_1}(z)K_{x_2}(z)という、2つの1変数関数(zに関する関数、x_1,x_2によって規定される関数)の内積K(x_1,x_2)という2変数関数である、と言っている。ここで、< K_{x_1}(z),K_{x_2}(z) > = K(x_1,x_2)と言うように、左辺を内積、右辺をカーネルと書いた上で、さらに変形して< K_{x_1}(z),K_{x_2}(z) > = K_{x_1}(K_2)と書き、さらにわかりやすいように[tex: = f(x_2)]と書くとする。すると、あるx_2を取り上げたときに、ヒルベルト空間の点である、ある関数f(.)を持ち出して、それとの内積を考えると、その関数f(.)x_2を渡したときの値になる、というように、左辺と右辺との両辺にf(.)が現れる形となる。これがreproducingな性質。この性質がrepresenter theoremとかの条件ともなるし、カーネル法の特徴でもあるので、知っていてもよい単語として挙げておくことにする