SlideShare a Scribd company logo
きれいなジャイアンによる
カカカカ☆カーネル法入門-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 + 2������1 ������1 ������2 ������2 + 2������2 ������2 + 2������1 ������1 + 1)
         2       2                                                ������
  =    ������1     ������2        2������1 ������2        2������2       2������1    1
         2       2
      (������1     ������2       2������1 ������2        2������2       2������1     1)

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

  ������(������) 2 2
     2 2
= (������1 ������1 + ������2 ������2 + 2������1 ������1 ������2 ������2 + 2������2 ������2 + 2������1 ������1 + 1)
         2       2                                                  ������
  =    ������1     ������2        2������1 ������2        2������2       2������1      1
         2       2
      (������1     ������2       2������1 ������2        2������2       2������1       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

More Related Content

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

  • 2. 自己紹介 • @sleepy_yoshi – キレイになりました • 趣味 – 検索とか機械学習とか • ブログ – 睡眠不足?! – http://d.hatena.ne.jp/sleepy_yoshi/ 2
  • 3. 本日の内容 • 前回を踏まえて,簡単なオンライン学習手法でカーネ ルを使う方法を紹介 • カーネル法の入門書に書いてあることがわかるくらい の基礎知識+αを紹介 – 木構造やグラフ構造を扱う話は一切ありません 3
  • 4. 本日のノリ • 使うこと第一,理解第一に考えるため,厨二 ぽい名前の理論は扱わない – ×再生核ヒルベルト空間 – ×リプレゼンター定理 • 前回の反省を踏まえ,微妙なネタは入れない 4
  • 6. 線形識別モデル • 二値分類の線形識別モデルを考える – モデルはM次元の重みベクトル������ – M次元の特徴ベクトル������に対する予測������は, ������ = +1 if ������������ ������ > 0 −1 otherwise • バイアス項は? – 必ず1になるM+1次元目の特徴を考えればよい 6
  • 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 ������������ 7
  • 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 ������������ 8
  • 9. パーセプトロン 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
  • 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 ������������ 10
  • 11. マージンパーセプトロン 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
  • 12. 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
  • 13. 再掲: お伝えしたかったこと • パーセプトロンを軸に楽しい仲間をぽぽぽ ぽーんできる! – 損失と最適化の方法 – SVMとの関連 – マージン最大化 – どこを改善するか • 実装は超簡単 – 重み更新部分だけ変えればよい 詳しくは http://d.hatena.ne.jp/sleepy_yoshi/20110423/p1 13
  • 16. 16
  • 17. 17
  • 18. もとい 18
  • 19. 線形モデルの問題点 • 必ずしも与えられた特徴ベクトルの線形和で判別がで きるとは限らない ������������ ������(������) ������2 ������2 × ������������ ������ × × × ○ ○ ○ × × ○ × ○ × ○ ○ ○ ○ positive × × × negative × × ������1 ������1 線形モデル 非線形モデル 非線形モデルを利用することで, より高精度な分類を目指したい 19
  • 20. 非線形モデルの実現方法 • (1) モデルを非線形にする – e.g., 多層ニューラルネット –  大域最適解を求めることができない • (2) カーネル法+線形モデル –  うまくカーネルを設定することで複雑な特徴を適 切に把握できる –  線形識別モデルなので大域的最適解を保証 20
  • 21. カーネル法ひとこと要約 カーネル関数 ������ • ������ ������ = ������ ������ ������ = ������ ������������ ������(������������ , ������) 非線形変換した 訓練データ������������ 入力データ との類似度 • 予測値=訓練データとの類似度の重みづけ和 – 予測に用いるデータをサポートベクタと呼ぶ カーネル法の学習= サポートベクタの「重み」を学習 21
  • 22. カーネル法のすごいところを ひとことで言うと 直接計算するのが困難or不可能な次元にお ける線形識別関数を,入力データとサポート ベクタのカーネル関数の出力の重みづけ和 で計算できるぜ! 22
  • 23. カーネル関数って? • ひとことで言えば類似度 似てる? 焼きそば 似てる! 焼きさば 23
  • 24. カーネル関数って? (その2) • 写像先の内積 ������ ������, ������′ = ������ ������ ������ ������ ������′ 24
  • 25. カーネル関数の種類 • (1) 閉じた形で計算できるもの – 例) 多項式カーネル,ガウスカーネル • (2) 再帰などで計算できるもの – 例) 文字列カーネル (次発表をご期待!) • (3) ちょっと特殊なもの – 例) Semantic similarity kernel [Sahami+ 06] (後述) 効率的に計算できないとうれしくないよね.. 25
  • 26. 基本的なカーネル • 基本的なカーネル関数 (閉じたカーネル) – 線形カーネル: • ������ ������������ , ������������ = ������������ ������������ ������ – 多項式カーネル: ������ • ������ ������������ , ������������ = ������������������ ������������ + ������ ������ , ������ > 0 – ガウスカーネル (*1): 2 • ������ ������������ , ������������ = exp −������ ������������ − ������������ , ������ > 0 – シグモイドカーネル: • ������ ������������ , ������������ = tanh(������������������ ������������ + ������) ������ (*1) 正確にはガウスカーネル.RBFカーネルは一般化した呼び方 (*2) ������, ������, ������はカーネルパラメータ 26
  • 28. パーセプトロン 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
  • 29. カーネルパーセプトロンの導出 ������ ������������+1 = ������������ + ������������������ ������������ ������������ ������(������) = ������ ������������ ������(������������ ) ⋅ ������(������) ������=1 ������ ������ = ������ ������������ ������������ ������ ������=1    = ������ ������������ ������(������������ , ������) ������=1 ������ ������������ ������ = ������ ������������ ������������ ������ ������ ������=1 ������は不要? ⇒ 特徴ベクトルの正規化で対応 29
  • 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 ������������ 30
  • 31. カーネルパーセプトロン 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
  • 33. 実装: 予測関数 関数ポインタ 33
  • 37. 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
  • 38. カーネルPAの導出 ������ ������������+1 = ������������ + ������������ ������������ ������������ ������������ ������(������) = ������������ ������������ ������(������������ ) ⋅ ������(������) ������=1 ������ ������ = ������������ ������������ ������������ ������ ������=1    = ������������ ������(������������ , ������) ������=1 ������ ������������ ������ = ������������ ������������ ������������ ������ ������ ������=1 38
  • 39. 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
  • 41. カーネル行列 • ポイント – カーネルパーセプトロンでは,サポートベクタのラ ベルとカーネル関数の出力しか使っていない – 生のデータ点そのものが不要! • カーネル行列 1 2 – N個の訓練データの全ての組み合わせ ������ 個の 2 ������ ������������ , ������������ を(i,j)成分に持つ行列 41
  • 42. カーネルキャッシュ • データ数2のカーネル関数の出力を計算する のが困難な場合 and/or 値を保持するのが困 難な場合,一部の出力だけを保持しておく • 参考 – Passive Aggressive と多項式カーネル – ny23の日 記 • http://d.hatena.ne.jp/ny23/20090624 42
  • 44. オンライン学習+カーネル法の問題 •  損失を生むサンプルの重みを増やしてしま うので,サポートベクタが増えてしまう – cf. SVMはバッチ学習で疎な解を求められる • 対策のひとつ – サポートベクタ数に上限を設ける方法 (Budget法) • Aggressive Perceptron [Crammer+ 03] • Forgetron [Dekel+ 05] • など 44
  • 45. Budget-consicous Aggressive Perceptron [Crammer +03] 45
  • 46. Budget-consicous Aggressive Perceptron [Crammer +03] 46
  • 47. Budget-consicous Aggressive Perceptron [Crammer +03] マージンパーセプトロン と同じノリ 47
  • 48. Budget-consicous Aggressive Perceptron [Crammer +03] サポートベクタが いっぱいの場合 48
  • 49. Budget-consicous Aggressive Perceptron [Crammer +03] 多分typo ������������ ������������−1 − ������������ ������������ ������������ ������������ 影響の少ない サポートベクタを除去 49
  • 50. Budget-consicous Aggressive Perceptron [Crammer +03] 選択されたサポートベクタ をなかったことにする 50
  • 51. Budget-consicous Aggressive Perceptron [Crammer +03] 新しいサポートベクタを 追加 51
  • 53. ちょっと変わったカーネル • Semantic similarity kernel [Sahami+ 06] – short text snippet同士の類似度をうまく測るため のカーネルを提案 53
  • 54. Semantic similarity kernel [Sahami+ 06] 54
  • 55. Semantic similarity kernel [Sahami+ 06] 55
  • 56. Semantic similarity kernel [Sahami+ 06] 56
  • 57. Semantic similarity kernel [Sahami+ 06] 57
  • 58. Semantic similarity kernel [Sahami+ 06] 58
  • 59. Semantic similarity kernel [Sahami+ 06] 59
  • 60. Semantic similarity kernel [Sahami+ 06] 60
  • 62. SVMの場合 ������ 1 2 主問題: ������ = ������ − ������������ {������������ ������������ ������ ������������ + ������ − 1} 2 ������=1 – 極値は ������ • ������ = ������=1 ������������ ������������ ������(������������ ) ������ • 0= ������=1 ������������ ������������ – で与えられるため, ������ ������ ������ 1 双対問題: ������ = ������������ − ������������ ������������ ������������ ������������ ������ ������������ ������ ������ ������������ 2 ������=1 ������=1 ������=1 ������(������������ , ������������ ) カーネルを利用するためには双対問題を解く必要がある ※ 主問題を高速に解く手法が利用できない 62
  • 64. k-Nearest Neighbor (k-NN) • ユークリッド距離が最小である事例のラベル で予測 argmin������ ������ − ������������ 2 2 2 ������ − ������������ 2 = ������ − ������������ ������ (������ − ������������ ) ������ ������ ������ = ������ ������ − 2������������ ������ + ������������ ������������ RBFカーネルのような差分に対して定義 されるカーネルの場合,これだけで良い 64
  • 65. 疑問 65
  • 66. Q. カーネルを計算するコストが高いンなら 無理してカーネル使わなくてよくね? カーネルを展開して主問題で解く方法がありマす 66
  • 67. 多項式カーネルの展開 • 2次の多項式カーネルの場合 ������ ������, ������ = ������������ ������ + 1 2 ������������ ������ + 1 2 = ������1 ������1 + ������2 ������2 + 1 2 2 2 2 2 = (������1 ������1 + ������2 ������2 + 2������1 ������1 ������2 ������2 + 2������2 ������2 + 2������1 ������1 + 1) 2 2 ������ = ������1 ������2 2������1 ������2 2������2 2������1 1 2 2 (������1 ������2 2������1 ������2 2������2 2������1 1) 67
  • 68. 多項式カーネルの展開 • 2次の多項式カーネルの場合 ������ ������, ������ = ������������ ������ + 1 2 ������������ ������ + 1 2 = ������1 ������1 + ������2 ������2 + 1 2 ������(������) 2 2 2 2 = (������1 ������1 + ������2 ������2 + 2������1 ������1 ������2 ������2 + 2������2 ������2 + 2������1 ������1 + 1) 2 2 ������ = ������1 ������2 2������1 ������2 2������2 2������1 1 2 2 (������1 ������2 2������1 ������2 2������2 2������1 1) ※効率的な展開は[Isozaki+ 02] など ������(������) 68
  • 69. 参考 • 線形識別器でカーネルトリックを使う方法 – PFI Research Blog – http://research.preferred.jp/2011/09/kernel- trick/ 69
  • 71. どうすればカーネルになるのよ • カーネル行列が半正定値であること ������������ ������������ ≥ 0 ⇔ 全ての固有値が非負 – 例外もあり: シグモイドカーネル /) ///) /,.=゙''"/ / i f ,.r='"-‐'つ____ こまけぇこたぁいいんだよ!! / / _,.-‐'~/⌒ ⌒\ / ,i ,二ニ⊃( ●). (●)\ / ノ il゙フ::::::⌒(__人__)⌒::::: \ ,イ「ト、 ,!,!| |r┬-| | / iトヾヽ_/ィ"\ `ー'´ / 71
  • 72. カーネル設計の練習 (1/2) • 文書dの特徴ベクトルxを文書内に出現する 単語頻度freq(d, i)で表す ������ = (������1 ������2 ⋯ ������������ ) ただし ������������ = ������������������������(������, ������) ������ ������ ������ ������������1 , ������������2 = ������ ∈ 1, ������ ������������ 1 = ������������ 2 } 頻度が一致する数 実はブッチャー本 [Buttcher+ 10] の例を引用 72
  • 73. カーネル設計の練習 (2/2) • 一般に頻度freqは無限に存在.そこで以下の写像を考える – 例えば,M=10の場合,1の位が特徴ベクトルの添字を表 し,10の位より大きな数字で頻度を表現する ������ ������������������������, ������ = ������ + ������ ⋅ ������������������������ • この写像を用いることにより,以下の特徴ベクトルで表現で きる 1 ������������������ = ������ ������������ ������������ = 0 ������������������ ≠ ������ • これより,������ ������������1 , ������������2 = ������������ ������������1 ������ ������ ������������2 ������ – おぉっ! なんかカーネルぽい!! 73
  • 74. カーネル構築のヒント ������1 , ������2 が有効なカーネルの場合,以下の関数もカーネルとして有効である. • ������ ������, ������′ = ������������1 ������, ������′ • ������ ������, ������′ = ������(������)������1 ������, ������′ ������(������′) • ������ ������, ������′ = ������ ������1 ������, ������′ • ������ ������, ������′ = exp ������1 ������, ������′ • ������ ������, ������′ = ������1 ������, ������′ + ������2 ������, ������′ • ������ ������, ������′ = ������1 ������, ������′ ������2 (������, ������′ ) • ������ ������, ������′ = ������3 ������ ������ , ������ ������′ • ������ ������, ������′ = ������������ ������������′ • ������ ������, ������′ = ������������ ������������ , ������′ + ������������ ������������ , ������′ ������ ������ • ������ ������, ������′ = ������������ ������������ , ������′ ������������ ������������ , ������′ ������ ������ 74
  • 75. まとめ 75
  • 77. 主問題か双対問題かそれが問題だ Q. 主問題/双対問題どっちで解くか? – カーネルを利用したい ⇒ 双対問題 – 特徴次元数 ≫訓練事例数 ⇒ 双対問題 – 訓練事例数 ≫特徴次元数 ⇒ 主問題 • 展開可能なカーネル (e.g.,組み合わせ素性) を利用したいのであれば,明示的に基底関数 ������(⋅)を利用する方法もありなんじゃないでしょ うか 77
  • 78. 再掲: カーネル法ひとこと要約 • ������ ������ = ������������ ������ ������ = ������ ������������ ������(������������ , ������) 非線形変換した 訓練データ������������ 入力データ との類似度 • 予測値=訓練データとの類似度の重みづけ和 – 予測に用いる訓練データをサポートベクタと呼ぶ カーネル法の学習= サポートベクタの「重み」を学習 78
  • 79. カーネル法の適用に関係するステージ ������ ������ ������(������, ������) = ������������ ������(������������ , ������) データ カーネル関数 カーネル行列 学習 予測関数 アルゴリズム [Shawe-Taylor 04] 図2.4を参考 79
  • 80. カーネル法の適用に関係するステージ ������ ������ ������(������, ������) = ������������ ������(������������ , ������) データ カーネル関数 カーネル行列 学習 予測関数 アルゴリズム [Shawe-Taylor 04] 図2.4を参考 80
  • 81. カーネル法に対する私の考え • どのような特徴/類似度が予測に効果的か? という人間の知識をモデルに取り入れるひと つの方法 • カーネルの選択≒ feature engineering 81
  • 82. この後の話 • 文字列カーネルや木構造カーネルこそがNLPに おけるカーネル法の醍醐味 • 理論的背景や発展に関する話題については,専 門家の資料があるので,そちらをご参照されたし • Kernel learning, Multiple Kernel Learning あたり がそこそこ最新の話題なのでしょうか? – 教えて詳しい人 82
  • 83. まとめ • カーネルとはなんぞ? • オンライン学習のカーネル化を紹介 – パーセプトロン – Passive-Aggressive • オンラインカーネル学習の問題 – Budget法 • Budget-consicous Aggressive Perceptron • その他のカーネル – Semantic similarity kernel • カーネルの展開 • カーネルの設計(もどき) 83
  • 84. 参考資料 • [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
  • 87. 87