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

11,501 views

Published on

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

Published in: Technology

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

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

×