tokyonlp#7 きれいなジャイアンのカカカカ☆カーネル法入門-c++

87
きれいなジャイアンによる カカカカ☆カーネル法入門-C++ 2011-09-10 YOSHIHIKO SUHARA @sleepy_yoshi

Upload: sleepyyoshi

Post on 07-Jul-2015

7.063 views

Category:

Technology


5 download

DESCRIPTION

TokyoNLP#7 「きれいなジャイアンのカカカカ☆カーネル法入門-C++」の発表資料

TRANSCRIPT

Page 1: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

きれいなジャイアンによる カカカカ☆カーネル法入門-C++

2011-09-10

YOSHIHIKO SUHARA

@sleepy_yoshi

Page 2: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

自己紹介

• @sleepy_yoshi –キレイになりました

• 趣味 –検索とか機械学習とか

• ブログ – 睡眠不足?!

– http://d.hatena.ne.jp/sleepy_yoshi/

2

Page 3: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

本日の内容

• 前回を踏まえて,簡単なオンライン学習手法でカーネルを使う方法を紹介

• カーネル法の入門書に書いてあることがわかるくらいの基礎知識+αを紹介 – 木構造やグラフ構造を扱う話は一切ありません

3

Page 4: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

本日のノリ

• 使うこと第一,理解第一に考えるため,厨二ぽい名前の理論は扱わない

–×再生核ヒルベルト空間

–×リプレゼンター定理

• 前回の反省を踏まえ,微妙なネタは入れない

4

Page 5: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

前回のおさらい

5

Page 6: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

線形識別モデル

• 二値分類の線形識別モデルを考える

–モデルはM次元の重みベクトル𝒘

– M次元の特徴ベクトル𝒙に対する予測𝑦 は,

𝑦 = +1 if 𝒘𝑇𝒙 > 0−1 otherwise

• バイアス項は?

–必ず1になるM+1次元目の特徴を考えればよい

6

Page 7: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

パーセプトロン INPUT: (𝒙𝑛, 𝑦𝑛) ∈ 𝑫, 𝑇, 𝜂 OUTPUT: 𝒘 1: Initialize 𝒘0 = 𝟎, 𝑖 = 0 2: FOR 𝑡 in 0 to 𝑇 3: Obtain random sample (𝒙𝑡 , 𝑦𝑡) from 𝑫

4: IF 𝑦𝑡𝒘𝑖𝑇𝒙𝑡 ≤ 0 THEN

5: 𝒘𝑖+1 ← 𝒘𝑖 + 𝜂 𝑦𝑡𝒙𝑡 6: 𝑖 ← 𝑖 + 1 7: ENDIF 8: ENDFOR 9: RETURN 𝒘𝑖

7

Page 8: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

パーセプトロン INPUT: (𝒙𝑛, 𝑦𝑛) ∈ 𝑫, 𝑇, 𝜂 OUTPUT: 𝒘 1: Initialize 𝒘0 = 𝟎, 𝑖 = 0 2: FOR 𝑡 in 0 to 𝑇 3: Obtain random sample (𝒙𝑡 , 𝑦𝑡) from 𝑫

4: IF 𝑦𝑡𝒘𝑖𝑇𝒙𝑡 ≤ 0 THEN

5: 𝒘𝑖+1 ← 𝒘𝑖 + 𝜂 𝑦𝑡𝒙𝑡 6: 𝑖 ← 𝑖 + 1 7: ENDIF 8: ENDFOR 9: RETURN 𝒘𝑖

間違ったら重みを修正

8

Page 9: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

パーセプトロン INPUT: (𝒙𝑛, 𝑦𝑛) ∈ 𝑫, 𝑇, 𝜂 OUTPUT: 𝒘 1: Initialize 𝒘0 = 𝟎, 𝑖 = 0 2: FOR 𝑡 in 0 to 𝑇 3: Obtain random sample (𝒙𝑡 , 𝑦𝑡) from 𝑫

4: IF 𝑦𝑡𝒘𝑖𝑇𝒙𝑡 ≤ 0 THEN

5: 𝒘𝑖+1 ← 𝒘𝑖 + 𝜂 𝑦𝑡𝒙𝑡 6: 𝑖 ← 𝑖 + 1 7: ENDIF 8: ENDFOR 9: RETURN 𝒘𝑖

間違ったら重みを修正

9

Page 10: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

マージンパーセプトロン INPUT: (𝒙𝑛, 𝑦𝑛) ∈ 𝑫, 𝑇, 𝜂, 𝛾 OUTPUT: 𝒘 1: Initialize 𝒘0 = 𝟎, 𝑖 = 0 2: FOR 𝑡 in 0 to 𝑇 3: Obtain random sample (𝒙𝑡 , 𝑦𝑡) from 𝑫

4: IF 𝑦𝑡𝒘𝑖𝑇𝒙𝑡 ≤ 𝛾 THEN

5: 𝒘𝑖+1 ← 𝒘𝑖 + 𝜂 𝑦𝑡𝒙𝑡 6: 𝑖 ← 𝑖 + 1 7: ENDIF 8: ENDFOR 9: RETURN 𝒘𝑖

10

Page 11: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

マージンパーセプトロン INPUT: (𝒙𝑛, 𝑦𝑛) ∈ 𝑫, 𝑇, 𝜂, 𝛾 OUTPUT: 𝒘 1: Initialize 𝒘0 = 𝟎, 𝑖 = 0 2: FOR 𝑡 in 0 to 𝑇 3: Obtain random sample (𝒙𝑡 , 𝑦𝑡) from 𝑫

4: IF 𝑦𝑡𝒘𝑖𝑇𝒙𝑡 ≤ 𝛾 THEN

5: 𝒘𝑖+1 ← 𝒘𝑖 + 𝜂 𝑦𝑡𝒙𝑡 6: 𝑖 ← 𝑖 + 1 7: ENDIF 8: ENDFOR 9: RETURN 𝒘𝑖

11

Page 12: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

Passive-Aggressive INPUT: (𝒙𝑛, 𝑦𝑛) ∈ 𝑫, 𝑇 OUTPUT: 𝒘 1: Initialize 𝒘0 = 𝟎 2: FOR 𝑡 in 0 to 𝑇 3: Obtain random sample (𝒙𝑡 , 𝑦𝑡) from 𝑫 4: calculate 𝜏𝑡 = ℓ𝑡/ 𝒙𝑡

2 5: 𝒘𝑡+1 ← 𝒘𝑡 + 𝜏𝑡𝑦𝑡𝒙𝑡 6: ENDFOR 7: RETURN 𝒘𝑇

ℓ(𝒘; 𝒙𝑛, 𝑦𝑛) = 0 𝑦𝑛𝒘

𝑇𝒙𝑛 ≥ 1

1 − 𝑦𝑛𝒘𝑇𝒙𝑛 otherwise

12

Page 13: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

再掲: お伝えしたかったこと

• パーセプトロンを軸に楽しい仲間をぽぽぽぽーんできる! –損失と最適化の方法

– SVMとの関連

–マージン最大化

–どこを改善するか

• 実装は超簡単 –重み更新部分だけ変えればよい

詳しくは http://d.hatena.ne.jp/sleepy_yoshi/20110423/p1 13

Page 14: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

今回のお話

14

Page 15: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

カーネル法の背景

15

Page 16: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

16

Page 17: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

17

Page 18: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

もとい

18

Page 19: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

線形モデルの問題点 • 必ずしも与えられた特徴ベクトルの線形和で判別ができるとは限らない

○ ×

×

○ ○

×

×

𝒘𝑻𝒙

positive

negative

×

𝑥1

𝑥2

×

× ○

×

×

○ ○

×

×

𝒘𝑻𝝓(𝒙)

×

×

線形モデル 非線形モデル

非線形モデルを利用することで, より高精度な分類を目指したい

𝑥2

𝑥1

19

Page 20: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

非線形モデルの実現方法

• (1) モデルを非線形にする – e.g., 多層ニューラルネット

– 大域最適解を求めることができない

• (2) カーネル法+線形モデル – うまくカーネルを設定することで複雑な特徴を適切に把握できる

– 線形識別モデルなので大域的最適解を保証

20

Page 21: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

カーネル法ひとこと要約

• 𝑓 𝒙 = 𝒘𝑇𝜙 𝒙 = 𝛼𝑖𝐾(𝒙𝑖 , 𝒙)𝑖

非線形変換した 入力データ

訓練データ𝒙𝑖 との類似度

• 予測値=訓練データとの類似度の重みづけ和 – 予測に用いるデータをサポートベクタと呼ぶ

カーネル法の学習= サポートベクタの「重み」を学習

カーネル関数

21

Page 22: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

カーネル法のすごいところを ひとことで言うと

直接計算するのが困難or不可能な次元にお

ける線形識別関数を,入力データとサポートベクタのカーネル関数の出力の重みづけ和で計算できるぜ!

22

Page 23: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

カーネル関数って?

• ひとことで言えば類似度

焼きそば 焼きさば

似てる?

似てる!

23

Page 24: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

カーネル関数って? (その2)

• 写像先の内積

𝐾 𝒙, 𝒙′ = 𝜙 𝒙 𝑇𝜙 𝒙′

24

Page 25: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

カーネル関数の種類

• (1) 閉じた形で計算できるもの

–例) 多項式カーネル,ガウスカーネル

• (2) 再帰などで計算できるもの

–例) 文字列カーネル (次発表をご期待!)

• (3) ちょっと特殊なもの

–例) Semantic similarity kernel [Sahami+ 06] (後述)

効率的に計算できないとうれしくないよね..

25

Page 26: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

基本的なカーネル

• 基本的なカーネル関数 (閉じたカーネル) – 線形カーネル:

• 𝐾 𝒙𝑖 , 𝒙𝑗 = 𝒙𝑖𝑇𝒙𝑗

– 多項式カーネル:

• 𝐾 𝒙𝑖 , 𝒙𝑗 = 𝛾𝒙𝑖𝑇𝒙𝑗 + 𝑟

𝑑, 𝛾 > 0

– ガウスカーネル (*1):

• 𝐾 𝒙𝑖 , 𝒙𝑗 = exp −𝛾 𝒙𝑖 − 𝒙𝑗2

, 𝛾 > 0

– シグモイドカーネル:

• 𝐾 𝒙𝑖 , 𝒙𝑗 = tanh(𝛾𝒙𝑖𝑇𝒙𝑗 + 𝑟)

(*1) 正確にはガウスカーネル.RBFカーネルは一般化した呼び方 (*2) 𝛾, 𝑟, 𝑑はカーネルパラメータ 26

Page 27: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

カーネルパーセプトロン

27

Page 28: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

パーセプトロン INPUT: (𝒙𝑛, 𝑦𝑛) ∈ 𝑫, 𝑇, 𝜂 OUTPUT: 𝒘 1: Initialize 𝒘0 = 𝟎, 𝑖 = 0 2: FOR 𝑡 in 0 to 𝑇 3: Obtain random sample (𝒙𝑡 , 𝑦𝑡) from 𝑫

4: IF 𝑦𝑡𝒘𝑖𝑇𝒙𝑡 ≤ 0 THEN

5: 𝒘𝑖+1 ← 𝒘𝑖 + 𝜂 𝑦𝑡𝒙𝑡 6: 𝑖 ← 𝑖 + 1 7: ENDIF 8: ENDFOR 9: RETURN 𝒘𝑖

間違ったら重みを修正

28

Page 29: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

カーネルパーセプトロンの導出

𝒘𝑖+1 = 𝒘𝑖 + 𝜂𝑦𝑖𝒙𝒊

𝒘 = 𝜂 𝑦𝑖𝒙𝒊

𝑇

𝑖=1

𝒘 𝑇𝒙 = 𝜂 𝑦𝑖𝒙𝑖𝑇𝒙

𝑇

𝑖=1

𝒘 𝑇𝜙(𝒙) = 𝜂 𝑦𝑖𝜙(𝒙𝑖) ⋅ 𝜙(𝒙)

𝑇

𝑖=1

   = 𝜂 𝛼𝑖𝐾(𝒙𝑖 , 𝒙)

𝑁

𝑖=1

𝜂は不要? ⇒ 特徴ベクトルの正規化で対応 29

Page 30: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

カーネルパーセプトロン INPUT: (𝒙𝑛, 𝑦𝑛) ∈ 𝑫, 𝑇, 𝜂, 𝐾(⋅,⋅) OUTPUT: 𝜶 1: Initialize 𝜶 = 𝟎, 𝑖 = 0 2: FOR 𝑡 in 0 to 𝑇 3: Obtain random sample (𝒙𝑡 , 𝑦𝑡) from 𝑫 4: IF 𝑦𝑡 𝛼𝑖𝐾(𝒙𝑖 , 𝒙𝑡)𝑖 ≤ 0 THEN 5: 𝛼𝑡 ← 𝛼𝑡 + 𝑦𝑡 6: ENDIF 7: ENDFOR 8: RETURN 𝒘𝑖

30

Page 31: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

カーネルパーセプトロン INPUT: (𝒙𝑛, 𝑦𝑛) ∈ 𝑫, 𝑇, 𝜂, 𝐾(⋅,⋅) OUTPUT: 𝜶 1: Initialize 𝜶 = 𝟎, 𝑖 = 0 2: FOR 𝑡 in 0 to 𝑇 3: Obtain random sample (𝒙𝑡 , 𝑦𝑡) from 𝑫 4: IF 𝑦𝑡 𝛼𝑖𝐾(𝒙𝑖 , 𝒙𝑡)𝑖 ≤ 0 THEN 5: 𝛼𝑡 ← 𝛼𝑡 + 𝑦𝑡 6: ENDIF 7: ENDFOR 8: RETURN 𝒘𝑖

間違ったら重みを修正

31

Page 32: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

実装: 訓練ルーチン

32

Page 33: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

実装: 予測関数

関数ポインタ

33

Page 34: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

実装: カーネル関数の定義

34

Page 35: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

実装: カーネル関数の定義

35

Page 36: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

カーネルPA

36

Page 37: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

Passive-Aggressive INPUT: (𝒙𝑛, 𝑦𝑛) ∈ 𝑫, 𝑇 OUTPUT: 𝒘 1: Initialize 𝒘0 = 𝟎 2: FOR 𝑡 in 0 to 𝑇 3: Obtain random sample (𝒙𝑡 , 𝑦𝑡) from 𝑫 4: calculate 𝜏𝑡 = ℓ𝑡/ 𝒙𝑡

2 5: 𝒘𝑡+1 ← 𝒘𝑡 + 𝜏𝑡𝑦𝑡𝒙𝑡 6: ENDFOR 7: RETURN 𝒘𝑇

ℓ(𝒘; 𝒙𝑛, 𝑦𝑛) = 0 𝑦𝑛𝒘

𝑇𝒙𝑛 ≥ 1

1 − 𝑦𝑛𝒘𝑇𝒙𝑛 otherwise

37

Page 38: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

カーネルPAの導出

𝒘𝑖+1 = 𝒘𝑖 + 𝜏𝑖𝑦𝑖𝒙𝒊

𝒘 = 𝜏𝑖𝑦𝑖𝒙𝒊

𝑇

𝑖=1

𝒘 𝑇𝒙 = 𝜏𝑖𝑦𝑖𝒙𝑖𝑇𝒙

𝑇

𝑖=1

𝒘 𝑇𝜙(𝒙) = 𝜏𝑖𝑦𝑖𝜙(𝒙𝑖) ⋅ 𝜙(𝒙)

𝑇

𝑖=1

   = 𝛼𝑖𝐾(𝒙𝑖 , 𝒙)

𝑁

𝑖=1

38

Page 39: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

Kernelized Passive-Aggressive INPUT: (𝒙𝑛, 𝑦𝑛) ∈ 𝑫, 𝑇 OUTPUT: 𝒘 1: Initialize 𝒘0 = 𝟎 2: FOR 𝑡 in 0 to 𝑇 3: Obtain random sample (𝒙𝑡 , 𝑦𝑡) from 𝑫 4: calculate 𝜏𝑡 = ℓ𝑡/ 𝒙𝑡

2 5: 𝛼𝑡 ← 𝛼𝑡 + 𝜏𝑡𝑦𝑡 6: ENDFOR 7: RETURN 𝒘𝑇

39

Page 40: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

カーネル行列と カーネルキャッシュ

40

Page 41: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

カーネル行列

• ポイント

– カーネルパーセプトロンでは,サポートベクタのラベルとカーネル関数の出力しか使っていない

–生のデータ点そのものが不要!

• カーネル行列

– N個の訓練データの全ての組み合わせ1

2𝑁2個の

𝐾 𝒙𝑖 , 𝒙𝑗 を(i,j)成分に持つ行列

41

Page 42: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

カーネルキャッシュ

• データ数2のカーネル関数の出力を計算するのが困難な場合 and/or 値を保持するのが困難な場合,一部の出力だけを保持しておく

• 参考

– Passive Aggressive と多項式カーネル – ny23の日記

• http://d.hatena.ne.jp/ny23/20090624

42

Page 43: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

オンラインカーネル学習 の問題点

43

Page 44: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

オンライン学習+カーネル法の問題

• 損失を生むサンプルの重みを増やしてしまうので,サポートベクタが増えてしまう – cf. SVMはバッチ学習で疎な解を求められる

• 対策のひとつ –サポートベクタ数に上限を設ける方法 (Budget法)

• Aggressive Perceptron [Crammer+ 03]

• Forgetron [Dekel+ 05]

• など

44

Page 45: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

Budget-consicous Aggressive Perceptron [Crammer +03]

45

Page 46: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

Budget-consicous Aggressive Perceptron [Crammer +03]

46

Page 47: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

Budget-consicous Aggressive Perceptron [Crammer +03]

マージンパーセプトロンと同じノリ

47

Page 48: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

Budget-consicous Aggressive Perceptron [Crammer +03]

サポートベクタが いっぱいの場合

48

Page 49: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

Budget-consicous Aggressive Perceptron [Crammer +03]

影響の少ない サポートベクタを除去

多分typo

𝑦𝑗 𝒘𝑡−1 − 𝛼𝑗𝑦𝑗𝒙𝑗 𝒙𝑗

49

Page 50: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

Budget-consicous Aggressive Perceptron [Crammer +03]

選択されたサポートベクタをなかったことにする

50

Page 51: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

Budget-consicous Aggressive Perceptron [Crammer +03]

新しいサポートベクタを 追加

51

Page 52: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

その他のカーネル

52

Page 53: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

ちょっと変わったカーネル

• Semantic similarity kernel [Sahami+ 06]

– short text snippet同士の類似度をうまく測るためのカーネルを提案

53

Page 54: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

Semantic similarity kernel [Sahami+ 06]

54

Page 55: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

Semantic similarity kernel [Sahami+ 06]

55

Page 56: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

Semantic similarity kernel [Sahami+ 06]

56

Page 57: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

Semantic similarity kernel [Sahami+ 06]

57

Page 58: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

Semantic similarity kernel [Sahami+ 06]

58

Page 59: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

Semantic similarity kernel [Sahami+ 06]

59

Page 60: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

Semantic similarity kernel [Sahami+ 06]

60

Page 61: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

参考: SVM

61

Page 62: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

SVMの場合

𝐿 =1

2𝒘 2 − 𝑎𝑛{𝑡𝑛 𝒘𝑇𝜙 𝒙𝑛 + 𝑏 − 1}

𝑁

𝑛=1

– 極値は

• 𝒘 = 𝑎𝑛𝑡𝑛𝜙(𝒙𝑛)𝑁𝑛=1

• 0 = 𝑎𝑛𝑡𝑛𝑁𝑛=1

– で与えられるため,

𝐿 = 𝑎𝑛

𝑁

𝑛=1

−1

2 𝑎𝑛𝑎𝑚𝑡𝑛𝑡𝑚𝜙 𝒙𝑛

𝑇𝜙 𝒙𝑚

𝑁

𝑚=1

𝑁

𝑛=1

𝐾(𝒙𝑛, 𝒙𝑚)

主問題:

双対問題:

カーネルを利用するためには双対問題を解く必要がある ※ 主問題を高速に解く手法が利用できない 62

Page 63: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

参考: Kernelized Nearest Neighbor

63

Page 64: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

k-Nearest Neighbor (k-NN)

• ユークリッド距離が最小である事例のラベルで予測

argmin𝑖 𝒙 − 𝒙𝑖 22

𝒙 − 𝒙𝑖 2

2 = 𝒙 − 𝒙𝑖𝑇(𝒙 − 𝒙𝑖)

= 𝒙𝑇𝒙 − 2𝒙𝑖𝑇𝒙 + 𝒙𝑖

𝑇𝒙𝑖

RBFカーネルのような差分に対して定義 されるカーネルの場合,これだけで良い

64

Page 65: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

疑問 65

Page 66: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

Q. カーネルを計算するコストが高いンなら 無理してカーネル使わなくてよくね?

カーネルを展開して主問題で解く方法がありマす 66

Page 67: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

多項式カーネルの展開

• 2次の多項式カーネルの場合 𝐾 𝒙, 𝒛 = 𝒙𝑇𝒛 + 1 2

𝒙𝑇𝒛 + 1 2 = 𝑥1𝑧1 + 𝑥2𝑧2 + 1 2

= (𝑥1

2𝑧12 + 𝑥2

2𝑧22 + 2𝑥1𝑧1𝑥2𝑧2 + 2𝑥2𝑧2 + 2𝑥1𝑧1 + 1)

= 𝑥12 𝑥2

2 2𝑥1𝑥2 2𝑥2 2𝑥1 1𝑇

(𝑧12 𝑧2

2 2𝑧1𝑧2 2𝑧2 2𝑧1 1)

67

Page 68: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

多項式カーネルの展開

• 2次の多項式カーネルの場合 𝐾 𝒙, 𝒛 = 𝒙𝑇𝒛 + 1 2

𝒙𝑇𝒛 + 1 2 = 𝑥1𝑧1 + 𝑥2𝑧2 + 1 2

= (𝑥1

2𝑧12 + 𝑥2

2𝑧22 + 2𝑥1𝑧1𝑥2𝑧2 + 2𝑥2𝑧2 + 2𝑥1𝑧1 + 1)

= 𝑥12 𝑥2

2 2𝑥1𝑥2 2𝑥2 2𝑥1 1𝑇

(𝑧12 𝑧2

2 2𝑧1𝑧2 2𝑧2 2𝑧1 1)

𝜙(𝒙)

𝜙(𝒛) ※効率的な展開は[Isozaki+ 02] など 68

Page 69: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

参考

• 線形識別器でカーネルトリックを使う方法 – PFI Research Blog

– http://research.preferred.jp/2011/09/kernel-trick/

69

Page 70: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

カーネルの設計

70

Page 71: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

どうすればカーネルになるのよ

• カーネル行列が半正定値であること

𝒙𝑇𝐾𝒙 ≥ 0 ⇔ 全ての固有値が非負

–例外もあり: シグモイドカーネル

/) ///) /,.=゙''"/ / i f ,.r='"-‐'つ____ こまけぇこたぁいいんだよ!! / / _,.-‐'~/⌒ ⌒\ / ,i ,二ニ⊃( ●). (●)\ / ノ il゙フ::::::⌒(__人__)⌒::::: \ ,イ「ト、 ,!,!| |r┬-| | / iトヾヽ_/ィ"\ `ー'´ /

71

Page 72: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

カーネル設計の練習 (1/2)

• 文書dの特徴ベクトルxを文書内に出現する単語頻度freq(d, i)で表す

𝒙 = (𝑥1 𝑥2⋯𝑥𝑀) ただし 𝑥𝑖 = 𝑓𝑟𝑒𝑞(𝑑, 𝑖)

𝐾 𝒙𝑑1 , 𝒙𝑑2 = 𝑖 ∈ 1,𝑀 𝒙𝑖𝑑1 = 𝒙𝑖

𝑑2}

実はブッチャー本 [Buttcher+ 10] の例を引用

頻度が一致する数

72

Page 73: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

カーネル設計の練習 (2/2)

• 一般に頻度freqは無限に存在.そこで以下の写像を考える

– 例えば,M=10の場合,1の位が特徴ベクトルの添字を表し,10の位より大きな数字で頻度を表現する

𝜋 𝑓𝑟𝑒𝑞, 𝑖 = 𝑖 + 𝑀 ⋅ 𝑓𝑟𝑒𝑞

• この写像を用いることにより,以下の特徴ベクトルで表現できる

𝜙𝜋 𝒙𝑑 = 1 𝑥𝑖

𝑑 = 𝑓

0 𝑥𝑖𝑑 ≠ 𝑓

• これより,𝐾 𝒙𝑑1 , 𝒙𝑑2 = 𝜙𝜋 𝒙𝑑1𝑇𝜙𝜋 𝒙𝑑2

– おぉっ! なんかカーネルぽい!! 73

Page 74: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

カーネル構築のヒント

𝐾1, 𝐾2が有効なカーネルの場合,以下の関数もカーネルとして有効である.

• 𝐾 𝒙, 𝒙′ = 𝑐𝐾1 𝒙, 𝒙′

• 𝐾 𝒙, 𝒙′ = 𝑓(𝒙)𝐾1 𝒙, 𝒙′ 𝑓(𝒙′)

• 𝐾 𝒙, 𝒙′ = 𝑞 𝐾1 𝒙, 𝒙′

• 𝐾 𝒙, 𝒙′ = exp 𝐾1 𝒙, 𝒙′

• 𝐾 𝒙, 𝒙′ = 𝐾1 𝒙, 𝒙′ + 𝐾2 𝒙, 𝒙′

• 𝐾 𝒙, 𝒙′ = 𝐾1 𝒙, 𝒙′ 𝐾2(𝒙, 𝒙′)

• 𝐾 𝒙, 𝒙′ = 𝐾3 𝜙 𝒙 , 𝜙 𝒙′

• 𝐾 𝒙, 𝒙′ = 𝒙𝑇𝐴𝒙′

• 𝐾 𝒙, 𝒙′ = 𝐾𝑎 𝒙𝑎, 𝒙𝑎′ + 𝐾𝑏 𝒙𝑏, 𝒙𝑏

• 𝐾 𝒙, 𝒙′ = 𝐾𝑎 𝒙𝑎, 𝒙𝑎′ 𝐾𝑏 𝒙𝑏, 𝒙𝑏

74

Page 75: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

まとめ

75

Page 76: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

学習アルゴリズムのカーネル化

(1) がんばって特徴ベクトルの内積に式変形

(2) 基底関数φの内積に変換

(3) カーネル関数に置換

76

Page 77: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

主問題か双対問題かそれが問題だ

Q. 主問題/双対問題どっちで解くか? – カーネルを利用したい ⇒ 双対問題

–特徴次元数 ≫訓練事例数 ⇒ 双対問題

–訓練事例数 ≫特徴次元数 ⇒ 主問題

• 展開可能なカーネル (e.g.,組み合わせ素性) を利用したいのであれば,明示的に基底関数𝜙(⋅)を利用する方法もありなんじゃないでしょうか

77

Page 78: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

再掲: カーネル法ひとこと要約

• 𝑓 𝒙 = 𝒘𝑇𝜙 𝒙 = 𝛼𝑖𝐾(𝒙𝑖 , 𝒙)𝑖

非線形変換した 入力データ

訓練データ𝒙𝑖 との類似度

• 予測値=訓練データとの類似度の重みづけ和 – 予測に用いる訓練データをサポートベクタと呼ぶ

カーネル法の学習= サポートベクタの「重み」を学習

78

Page 79: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

カーネル法の適用に関係するステージ

𝐾(𝒙, 𝒛) 𝑓 𝑥= 𝛼𝑖𝐾(𝒙𝑖 , 𝒙)

[Shawe-Taylor 04] 図2.4を参考

データ カーネル関数 カーネル行列 学習 アルゴリズム

予測関数

79

Page 80: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

カーネル法の適用に関係するステージ

𝐾(𝒙, 𝒛) 𝑓 𝑥= 𝛼𝑖𝐾(𝒙𝑖 , 𝒙)

データ カーネル関数 カーネル行列 学習 アルゴリズム

予測関数

[Shawe-Taylor 04] 図2.4を参考 80

Page 81: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

カーネル法に対する私の考え

• どのような特徴/類似度が予測に効果的か?

という人間の知識をモデルに取り入れるひとつの方法

• カーネルの選択≒ feature engineering

81

Page 82: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

この後の話

• 文字列カーネルや木構造カーネルこそがNLPにおけるカーネル法の醍醐味

• 理論的背景や発展に関する話題については,専門家の資料があるので,そちらをご参照されたし

• Kernel learning, Multiple Kernel Learning あたりがそこそこ最新の話題なのでしょうか? – 教えて詳しい人

82

Page 83: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

まとめ

• カーネルとはなんぞ? • オンライン学習のカーネル化を紹介

– パーセプトロン – Passive-Aggressive

• オンラインカーネル学習の問題 – Budget法

• Budget-consicous Aggressive Perceptron

• その他のカーネル – Semantic similarity kernel

• カーネルの展開 • カーネルの設計(もどき)

83

Page 84: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

参考資料

• [Sahami+ 06] Mehran Sahami, Timothy D. Heilman. A Webbased Kernel Function for Measuring the Similarity of Short Text Snippets. WWW2006.

• [Isozaki+ 02] Hideki Isozaki and Hideto Kazawa, “Efficient Support Vector Classifiers for Named Entity Recognition”, COLING2002.

• [Crammer+ 03] Koby Crammer, Jaz Kandola, Yoram Singer, “Online Classification on a Budget”, NIPS2003.

• [Dekel+ 05] Ofer Dekel, Shai Shalev-Shwartz, Yoram Singer, “The Forgetron: A Kernel-Based Perceptron on a Fixed Budget”, NIPS2005.

• [Shawe-Taylor 04] John Shawe-Taylor, Nello Cristianini, “Kernel Methods for Pattern Analysis”, Cambridge University Press (2004). [邦訳: 大北剛訳. カーネル法によるパターン解析. 共立出版]

84

Page 85: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

教科書 (和書)

85

Page 86: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

教科書 (洋書)

Amazonリストマニア「機械学習/データマイニング(1) 」kashi_pong http://www.amazon.co.jp/%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92-%E3%83%87%E3%83%BC%E3%82%BF%E3%83%9E%E3%82%A4%E3%83%8B%E3%83%B3%E3%82%B0%EF%BC%88%EF%BC%91%EF%BC%89/lm/1J5BFNYLWKWHI/ref=cm_lmt_dtpa_f_1_rdssss0 86

Page 87: TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++

87