次へ: マージン最大化と SVM
上へ: パーセプトロンからサポートベクタマシンへ
戻る: パーセプトロン
さて,線形分離可能でない場合にはどうすればよいだろうか.
そのためには
そのままではなく,いったん
を
高次元空間(特徴空間)に写像した
を
パーセプトロンに入れてやればよい.
一般に特徴空間の次元
を
以上にすればサンプルは線形分離可能になる.
そこで以下では入出力関数を
と定義する.
識別を誤ったサンプルに対して
に比例して重みを修正するので,
を初期値とすれば,学習終了時には
![\begin{displaymath}
\mbox{\boldmath$w$} = \sum_{i=1}^n \alpha_i \mbox{\boldmath$\phi$}(\mbox{\boldmath$x$}_i)
\end{displaymath}](img25.png) |
(1) |
という形になっている. これをパーセプトロンの入出力関数に
代入してやると
となる. さて,ここに出てくる二つの特徴空間の要素
と
の内積を
と書く. これが本講演の主役である カーネル関数
である.
入出力関数はカーネル関数を使って
と書ける. ここまでは単なる書き換えであるが,逆に勝手に持ってきた関数
が,ある特徴空間の内積の形になっていないかという
ことを考える. もしそれができれば,高次元への写像を計算してから
さらにその内積を取るという厄介なことをしなくても,簡単に計算できる
カーネル関数を代わりに使ってやればよいことになる.
実は
は何でもよいというわけではない.
どんな関数なら内積の形に書けるかは,以下の定理で与えられる.
定理 1 (Mercerの定理)
![$\mbox{\boldmath$x$},\mbox{\boldmath$y$}\in \cal X$](img32.png)
の関数
![$k$](img31.png)
が内積の形
![\begin{displaymath}
k(\mbox{\boldmath$x$},\mbox{\boldmath$y$}) = \sum_{j=1}^\in...
...boldmath$x$}) \psi_j(\mbox{\boldmath$y$}),
\quad \gamma_i\ge0
\end{displaymath}](img33.png) |
(2) |
と書けるための必要十分条件は,
![$k$](img31.png)
が対称関数
(
![$k(\mbox{\boldmath$x$},\mbox{\boldmath$y$})=k(\mbox{\boldmath$y$},\mbox{\boldmath$x$})$](img34.png)
)であり,かつ,半正定値すなわち
任意の
![$f$](img35.png)
に対して
を満たすことである. ただし,
![$\psi_j(\mbox{\boldmath$x$})$](img37.png)
は
![$k(\mbox{\boldmath$x$},\mbox{\boldmath$y$})$](img38.png)
の固有関数で,
ここで,入力空間を
から任意の集合
に一般化した.
カーネルを用いた学習機械では,実数に限らず記号列でもグラフでも
うまくカーネルが定義できれば何でもよいというのが一つの特長である.
さて,Mercer の定理を満たすカーネルをMercer カーネルと呼ぶ.
Mercer カーネルについては後の節でも述べるが,ここでは代表的な
カーネル関数を挙げておく. ニューラルネットとの関連が深いのは
シグモイドカーネル
や RBF カーネル
である. また,
多項式カーネル
などもよく使われる.
Shotaro Akaho
平成15年7月18日