カーネル法について理解した事
http://str.i.kyushu-u.ac.jp/plone/news/7b2c1556de30fc30e030ed30e930df30f330ef30fc30af30b730e730c3-2010-gpw-10-8ad66587767a8868/files/gpw2010.pdf
http://www.geocities.co.jp/Technopolis/5893/publication/kernel.pdf
この辺の資料を参考に。
まず、一般的に線形の関数近似を行う場合*1は以下の様な形になる。は特徴ベクトルの次元数、は重み係数、は特徴量。
パラメータ更新則は一般的に次の様な形になる。はj番目の学習データの特徴量、は学習率では学習アルゴリズムによって異なる係数。
んで、重みの初期値を0とした場合、は下記の様に書き換えれる。Mは学習データの数。
このをの式に当てはめると、次の様になる。
ここで、を適当な関数を用いてに置き換える。
この時、との内積がとなる様にを決める。また、では元々のn次元のベクトルを、より高次のN次元(n<
つまり
- n次元の特徴をより高次なN次元の特徴に変換してやれば、線形識別不可能だった問題か識別可能になる
- その際、カーネルトリックを用いる事で高速化が可能
という事らしいです。
ちなみに最初のリンクの資料にある「対応する特徴空間…(中略)…の各次元が、高々d次の単項式に対応する」(つまり、低次元の特徴の組み合わせが高次の特徴として表れる)って記述については、何でそうなるのかよく分かりません。要勉強です。
あと、局面評価のたびに過去の訓練データ全部の特徴量を参照するのって速度的にどうなのよ、とか疑問はありますが、まぁぼちぼち勉強していきます。とりあえず今はココまで理解しました、って事で。
// 06:50追記
すぐ上の件ですが、を事前に計算しておけば、過去の訓練データ全部の特徴量をなめる必要無いかも。
うーん、やっぱり寝起きの頭じゃ回転遅いのかなぁ…
// 14:06追記
あれ? それだとカーネルトリックの意味が無い?