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

       2011-09-10
    YOSHIHIKO SUHARA
      @sleepy_yoshi
自己紹介
• @sleepy_yoshi
  – キレイになりました

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

• ブログ
  – 睡眠不足?!
  – http://d.hatena.ne.jp/sleepy_yoshi/

                                          2
本日の内容
• 前回を踏まえて,簡単なオンライン学習手法でカーネ
  ルを使う方法を紹介
• カーネル法の入門書に書いてあることがわかるくらい
  の基礎知識+αを紹介
 – 木構造やグラフ構造を扱う話は一切ありません




                             3
本日のノリ
• 使うこと第一,理解第一に考えるため,厨二
  ぽい名前の理論は扱わない
 – ×再生核ヒルベルト空間
 – ×リプレゼンター定理


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



                         4
前回のおさらい



          5
線形識別モデル
• 二値分類の線形識別モデルを考える
 – モデルはM次元の重みベクトル
 – M次元の特徴ベクトルに対する予測は,


        = +1   if   > 0
            −1   otherwise

• バイアス項は?
 – 必ず1になるM+1次元目の特徴を考えればよい
                                  6
パーセプトロン
 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
パーセプトロン
 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
パーセプトロン
 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
マージンパーセプトロン
 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
マージンパーセプトロン
 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
Passive-Aggressive
 INPUT: ( ,  ) ∈ , 
OUTPUT: 
                                                              0                 ≥ 1
                                  ℓ(;  ,  ) =
1: Initialize 0 =                                   1 −        otherwise

2: FOR  in 0 to 
3: Obtain random sample ( ,  ) from 
4:       calculate  = ℓ /  2
5:       +1 ←  +   
6: ENDFOR
7: RETURN  

                                                                                        12
再掲: お伝えしたかったこと
• パーセプトロンを軸に楽しい仲間をぽぽぽ
  ぽーんできる!
 – 損失と最適化の方法
 – SVMとの関連
 – マージン最大化
 – どこを改善するか

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

           詳しくは http://d.hatena.ne.jp/sleepy_yoshi/20110423/p1
                                                          13
今回のお話



        14
カーネル法の背景


           15
16
17
もとい


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




                                    2
                    ×      
                ×                                           ×   ×
           ○                                     ○
           ○            ×                                           ×
                                                   ○
      ×             ○                     ×                     ○
                ○                                           ○
                    ○   positive
          × ×       ×   negative
                                              × ×

                         1                                        1
          線形モデル                               非線形モデル

               非線形モデルを利用することで,
               より高精度な分類を目指したい                                             19
非線形モデルの実現方法
• (1) モデルを非線形にする
 – e.g., 多層ニューラルネット
 –  大域最適解を求めることができない

• (2) カーネル法+線形モデル
 –  うまくカーネルを設定することで複雑な特徴を適
   切に把握できる
 –  線形識別モデルなので大域的最適解を保証


                          20
カーネル法ひとこと要約
                                               カーネル関数
           
•   =    =     ( , )
          非線形変換した             訓練データ
           入力データ              との類似度



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


       カーネル法の学習=
     サポートベクタの「重み」を学習
                                                        21
カーネル法のすごいところを
    ひとことで言うと
直接計算するのが困難or不可能な次元にお
ける線形識別関数を,入力データとサポート
ベクタのカーネル関数の出力の重みづけ和
で計算できるぜ!




                       22
カーネル関数って?
• ひとことで言えば類似度



          似てる?




  焼きそば    似てる!   焼きさば
                        23
カーネル関数って? (その2)
• 写像先の内積

      , ′ =     ′




                                    24
カーネル関数の種類
• (1) 閉じた形で計算できるもの
 – 例) 多項式カーネル,ガウスカーネル
• (2) 再帰などで計算できるもの
 – 例) 文字列カーネル (次発表をご期待!)
• (3) ちょっと特殊なもの
 – 例) Semantic similarity kernel [Sahami+ 06] (後述)



        効率的に計算できないとうれしくないよね..
                                                 25
基本的なカーネル
• 基本的なカーネル関数 (閉じたカーネル)
 – 線形カーネル:
   •   ,  =  
                        

 – 多項式カーネル:
                                         
   •   ,  =   + 
                                            ,  > 0

 – ガウスカーネル (*1):
                                                         2
   •   ,  = exp −  −                     ,  > 0
 – シグモイドカーネル:
   •   ,  = tanh(  + )
                               


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



              27
パーセプトロン
 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
カーネルパーセプトロンの導出
                                                         
+1 =  +             () =            ( ) ⋅ ()
                                                        =1
                

    =                                        

               =1                           =               ( , )
                                                        =1
                

  =             
                             
               =1
                                         は不要?
                                         ⇒ 特徴ベクトルの正規化で対応
                                                       29
カーネルパーセプトロン
 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
カーネルパーセプトロン
 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
実装: 訓練ルーチン




             32
実装: 予測関数




  関数ポインタ




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




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




                35
カーネルPA



         36
Passive-Aggressive
 INPUT: ( ,  ) ∈ , 
OUTPUT: 
                                                              0                 ≥ 1
                                  ℓ(;  ,  ) =
1: Initialize 0 =                                   1 −        otherwise

2: FOR  in 0 to 
3: Obtain random sample ( ,  ) from 
4:       calculate  = ℓ /  2
5:       +1 ←  +   
6: ENDFOR
7: RETURN  

                                                                                        37
カーネルPAの導出
                                                        
+1 =  +             () =            ( ) ⋅ ()
                                                       =1
             

    =                                      

            =1                                 =              ( , )
                                                        =1
             

  =             
                               
            =1

                                                                                    38
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
カーネル行列と
カーネルキャッシュ



            40
カーネル行列
• ポイント
 – カーネルパーセプトロンでは,サポートベクタのラ
   ベルとカーネル関数の出力しか使っていない
 – 生のデータ点そのものが不要!


• カーネル行列
                      1 2
 –   N個の訓練データの全ての組み合わせ  個の
                      2
       ,  を(i,j)成分に持つ行列

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

• 参考
 – Passive Aggressive と多項式カーネル – ny23の日
   記
   • http://d.hatena.ne.jp/ny23/20090624


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



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

• 対策のひとつ
 – サポートベクタ数に上限を設ける方法 (Budget法)
  • Aggressive Perceptron [Crammer+ 03]
  • Forgetron [Dekel+ 05]
  • など


                                          44
Budget-consicous Aggressive
  Perceptron [Crammer +03]




                              45
Budget-consicous Aggressive
  Perceptron [Crammer +03]




                              46
Budget-consicous Aggressive
  Perceptron [Crammer +03]


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




                              47
Budget-consicous Aggressive
  Perceptron [Crammer +03]


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




                                 48
Budget-consicous Aggressive
  Perceptron [Crammer +03]
                      多分typo
                       −1 −    

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




                                                     49
Budget-consicous Aggressive
  Perceptron [Crammer +03]



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




                                50
Budget-consicous Aggressive
  Perceptron [Crammer +03]




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




                                51
その他のカーネル



           52
ちょっと変わったカーネル
• Semantic similarity kernel [Sahami+ 06]
  – short text snippet同士の類似度をうまく測るため
    のカーネルを提案




                                            53
Semantic similarity kernel [Sahami+ 06]




                                          54
Semantic similarity kernel [Sahami+ 06]




                                          55
Semantic similarity kernel [Sahami+ 06]




                                          56
Semantic similarity kernel [Sahami+ 06]




                                          57
Semantic similarity kernel [Sahami+ 06]




                                          58
Semantic similarity kernel [Sahami+ 06]




                                          59
Semantic similarity kernel [Sahami+ 06]




                                          60
参考: SVM


          61
SVMの場合
                                        
             1               2
主問題:     =                   −             {    +  − 1}
             2
                                      =1
       – 極値は
                       
         •  =        =1   ( )
                      
         • 0=         =1  

       – で与えられるため,
                                              
                             1
双対問題:    =           −                                   
                             2
               =1                  =1 =1                            ( ,  )
           カーネルを利用するためには双対問題を解く必要がある
              ※ 主問題を高速に解く手法が利用できない                                                              62
参考:
Kernelized Nearest Neighbor


                          63
k-Nearest Neighbor (k-NN)
• ユークリッド距離が最小である事例のラベル
  で予測
        argmin  −  2
                           2

                  2
      −     2   =  −   ( −  )

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

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




 カーネルを展開して主問題で解く方法がありマす
                          66
多項式カーネルの展開
• 2次の多項式カーネルの場合
                  ,  =   + 1 2
           + 1 2 = 1 1 + 2 2 + 1         2

     2 2       2 2
= (1 1 + 2 2 + 21 1 2 2 + 22 2 + 21 1 + 1)
         2       2                                                
  =    1     2        21 2        22       21    1
         2       2
      (1     2       21 2        22       21     1)

                                                                       67
多項式カーネルの展開
• 2次の多項式カーネルの場合
                  ,  =   + 1 2
           + 1 2 = 1 1 + 2 2 + 1         2

  () 2 2
     2 2
= (1 1 + 2 2 + 21 1 2 2 + 22 2 + 21 1 + 1)
         2       2                                                  
  =    1     2        21 2        22       21      1
         2       2
      (1     2       21 2        22       21       1)


  ※効率的な展開は[Isozaki+ 02] など                                  ()       68
参考
• 線形識別器でカーネルトリックを使う方法 –
  PFI Research Blog
 – http://research.preferred.jp/2011/09/kernel-
   trick/




                                                  69
カーネルの設計



          70
どうすればカーネルになるのよ
• カーネル行列が半正定値であること
        ≥ 0 ⇔ 全ての固有値が非負
 – 例外もあり: シグモイドカーネル
                        /)
                     ///)
                  /,.=゙''"/
      /          i f ,.r='"-‐'つ____      こまけぇこたぁいいんだよ!!
    /         /       _,.-‐'~/⌒ ⌒\
        /     ,i       ,二ニ⊃( ●). (●)\
      /     ノ        il゙フ::::::⌒(__人__)⌒::::: \
          ,イ「ト、 ,!,!|             |r┬-|       |
         / iトヾヽ_/ィ"\             `ー'´   /

                                                          71
カーネル設計の練習 (1/2)
• 文書dの特徴ベクトルxを文書内に出現する
  単語頻度freq(d, i)で表す
  = (1 2 ⋯  ) ただし  = (, )

                                               
    1 , 2 =  ∈ 1,       1 =  2 }
                                     頻度が一致する数




                             実はブッチャー本 [Buttcher+ 10] の例を引用
                                                         72
カーネル設計の練習 (2/2)
• 一般に頻度freqは無限に存在.そこで以下の写像を考える
  – 例えば,M=10の場合,1の位が特徴ベクトルの添字を表
    し,10の位より大きな数字で頻度を表現する
           ,  =  +  ⋅ 

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


• これより,   1 , 2   =    1       2
                                                
  – おぉっ! なんかカーネルぽい!!                                         73
カーネル構築のヒント
1 , 2 が有効なカーネルの場合,以下の関数もカーネルとして有効である.
•  , ′ = 1 , ′
•  , ′ = ()1 , ′ (′)
•  , ′ =  1 , ′
•  , ′ = exp 1 , ′
•  , ′ = 1 , ′ + 2 , ′
•  , ′ = 1 , ′ 2 (, ′ )
•      , ′   = 3   ,  ′
•      , ′   =  ′
•      , ′   =   , ′ +   , ′
                                                    
•      , ′   =   , ′   , ′
                                                 




                                                           74
まとめ



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

(1) がんばって特徴ベクトルの内積に式変形
(2) 基底関数φの内積に変換
(3) カーネル関数に置換




                         76
主問題か双対問題かそれが問題だ
Q. 主問題/双対問題どっちで解くか?
 – カーネルを利用したい ⇒ 双対問題
 – 特徴次元数 ≫訓練事例数 ⇒ 双対問題
 – 訓練事例数 ≫特徴次元数 ⇒ 主問題

• 展開可能なカーネル (e.g.,組み合わせ素性)
  を利用したいのであれば,明示的に基底関数
  (⋅)を利用する方法もありなんじゃないでしょ
  うか
                         77
再掲: カーネル法ひとこと要約
•   =    =     ( , )
           非線形変換した              訓練データ
            入力データ               との類似度



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


       カーネル法の学習=
     サポートベクタの「重み」を学習
                                                 78
カーネル法の適用に関係するステージ



                                       
      (, )
                                      =  ( , )




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



                               [Shawe-Taylor 04] 図2.4を参考
                                                      79
カーネル法の適用に関係するステージ



                                       
      (, )
                                      =  ( , )




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



                               [Shawe-Taylor 04] 図2.4を参考
                                                      80
カーネル法に対する私の考え
• どのような特徴/類似度が予測に効果的か?
  という人間の知識をモデルに取り入れるひと
  つの方法

• カーネルの選択≒ feature engineering




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

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

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

                                                  82
まとめ
• カーネルとはなんぞ?
• オンライン学習のカーネル化を紹介
 – パーセプトロン
 – Passive-Aggressive
• オンラインカーネル学習の問題
 – Budget法
    • Budget-consicous Aggressive Perceptron
• その他のカーネル
 – Semantic similarity kernel
• カーネルの展開
• カーネルの設計(もどき)

                                               83
参考資料
• [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
教科書 (和書)




           85
教科書 (洋書)




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%E
3%82%B0%EF%BC%88%EF%BC%91%EF%BC%89/lm/1J5BFNYLWKWHI/ref=cm_lmt_dtpa_f_1
_rdssss0                                                                  86
終
    87

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