More Related Content Similar to SMO徹底入門 - SVMをちゃんと実装する (20) More from sleepy_yoshi (20) SMO徹底入門 - SVMをちゃんと実装する9. カーネル法ひとこと要約
• 𝑓 𝒙 = 𝒘 𝑇
𝜙 𝒙 = 𝛼𝑖 𝑘(𝒙𝑖, 𝒙)𝑖
非線形変換した
入力データ
訓練データ𝒙𝑖
との類似度
• 予測値=訓練データとの類似度の重みづけ和
– 予測に用いるデータをサポートベクタと呼ぶ
カーネル法の学習=
サポートベクタの「重み」を学習
カーネル関数
9
10. カーネル関数の例
• 基本的なカーネル関数
– 線形カーネル: 𝑘 𝒙𝑖, 𝒙𝑗 = 𝒙𝑖
𝑇
𝒙𝑗
– 多項式カーネル: 𝑘 𝒙𝑖, 𝒙𝑗 = 𝛾𝒙𝑖
𝑇
𝒙𝑗 + 𝑟
𝑑
, 𝛾 > 0
– RBF (ガウス) カーネル: 𝑘 𝒙𝑖, 𝒙𝑗 = exp −𝛾 𝒙𝑖 − 𝒙𝑗
2
, 𝛾 > 0
– シグモイドカーネル: 𝑘 𝒙𝑖, 𝒙𝑗 = tanh(𝛾𝒙𝑖
𝑇
𝒙𝑗 + 𝑟)
10
11. SVMの予測値
• 𝑦 𝒙 = 𝑎 𝑛 𝑡 𝑛 𝑘(𝒙, 𝒙 𝑛)𝑁
𝑛=1 + 𝑏
– サポートベクタ (𝑎 𝑛 > 0) とのカーネル関数の値
の重み和
– 𝑏はバイアス項
11
12. 二次計画問題 (QP) としてのSVM
• 1-norm SVMの目的関数の双対形式は以下
のQPで定式化できる (PRML下巻 p.38)
max. 𝑛=1
𝑁
𝑎 𝑛 −
1
2
𝑎 𝑛 𝑎 𝑚 𝑡 𝑛 𝑡 𝑚 𝑘(𝑥 𝑛, 𝑥 𝑚)
𝑁
𝑚=1
𝑁
𝑛=1
s. t. 0 ≤ 𝑎 𝑛 ≤ 𝐶, 𝑎 𝑛 𝑡 𝑛
𝑁
𝑛=1
= 0
12
16. SMOの疑似コード
INPUT: (𝒙 𝑛, 𝑦𝑛) ∈ 𝐷,
OUTPUT: 𝒂 = 𝑎1, 𝑎2, … , 𝑎 𝑁
𝑇
1: Initialize 𝒂 = 𝟎
2: WHILE KKT条件を違反する変数が存在
3: KKT条件を違反する変数𝛼1を選択
4: 2つ目の変数𝛼2を選択
5: 𝛼1, 𝛼2を更新
6: END WHILE
7: RETURN 𝒂
16
20. KKT条件の導出 (1/2)
• PRML (7.28)式と(7.31)式
𝜇 𝑛 𝜉 𝑛 = 0
𝑎 𝑛 = 𝐶 − 𝜇 𝑛
• これより
𝜉 𝑛 𝐶 − 𝑎 𝑛 = 0
• よって 𝜉 𝑛 > 0 となるのは 𝑎 𝑛 = 𝐶 の点のみ
– それ以外は𝜉 𝑛 = 0
– すなわちマージンの内側かマージン上に存在
20
21. KKT条件の導出 (2/2)
• PRML (7.16)式より 𝑎 𝑛 𝑡 𝑛 𝑦 𝒙 𝑛 − 1 = 0
• 𝑎 𝑛 = 0 のとき
– 𝑡 𝑛 𝑦 𝒙 𝑛 − 1 ≥ 0
– 𝑡 𝑛 𝑦 𝒙 𝑛 ≥ 1
• 0 < 𝑎 𝑛 < 𝐶 のとき (𝜉 𝑛 = 0)
– よって,ぴったり𝑡 𝑛 𝑦 𝒙 𝑛 − 1 = 0である必要
– 𝑡 𝑛 𝑦 𝒙 𝑛 − 1 = 0
– 𝑡 𝑛 𝑦 𝒙 𝑛 = 1
• 𝑎 𝑛 = 𝐶 のとき (𝜉 𝑛 > 0)
– 𝑡 𝑛 𝑦 𝒙 𝑛 − 1 ≤ 0
– 𝑡 𝑛 𝑦 𝒙 𝑛 ≤ 1
21
23. 2変数の更新方法
• 𝑎1, … , 𝑎 𝑁から選択された2変数𝛼1, 𝛼2の値を
以下の手順で更新する
– (i) 更新値の値域を求める
– (ii) 更新式に基づいて値を更新する
23
24. 更新値の値域の決定 (1/2)
• 選択された2変数を更新する際,線形制約
𝑎 𝑛 𝑡 𝑛
𝑁
𝑛=1
= 0
• があるため, 0 ≤ 𝛼 𝑛 ≤ 𝐶 という制約の中で
𝛼1
𝑛𝑒𝑤
𝑡1 + 𝛼2
𝑛𝑒𝑤
𝑡2 = 𝛼1
𝑜𝑙𝑑
𝑡1 + 𝛼2
𝑜𝑙𝑑
𝑡2
• を満たす必要がある
• 𝛼1
𝑛𝑒𝑤
と𝛼2
𝑛𝑒𝑤
の値域をあらかじめ求めておく
– 𝛼2
𝑛𝑒𝑤
の最大値と最小値 𝐿 ≤ 𝛼2
𝑛𝑒𝑤
≤ 𝐻を求める
24※𝛼2
𝑛𝑒𝑤
に対して求めるのは元論文との一貫性のため
25. 更新値の値域の決定 (2/2)
• 𝑡1 ≠ 𝑡2 の場合
– 𝐿 = max 0, 𝛼2
𝑜𝑙𝑑
− 𝛼1
𝑜𝑙𝑑
– 𝐻 = min 𝐶, 𝐶 − 𝛼2
𝑜𝑙𝑑
+ 𝛼1
𝑜𝑙𝑑
• 𝑡1 = 𝑡2 の場合
– 𝐿 = max 0, 𝛼1
𝑜𝑙𝑑
+ 𝛼2
𝑜𝑙𝑑
− 𝐶
– 𝐻 = max 𝐶, 𝛼1
𝑜𝑙𝑑
+ 𝛼2
𝑜𝑙𝑑
25
はて,どうやって求めているのか?
26. 𝐿と𝐻の求め方 (1/2)
• 𝑡1 ≠ 𝑡2 の場合
𝛼1
𝑛𝑒𝑤
− 𝛼2
𝑛𝑒𝑤
= 𝛼1
𝑜𝑙𝑑
− 𝛼2
𝑜𝑙𝑑
= const.
𝛼2
𝑛𝑒𝑤
= 𝛼1
𝑛𝑒𝑤
+ (𝛼2
𝑜𝑙𝑑
− 𝛼1
𝑜𝑙𝑑
)
26
𝛼2
𝑛𝑒𝑤
𝛼1
𝑛𝑒𝑤0 𝐶
𝐶
𝛼1
𝑜𝑙𝑑
− 𝛼2
𝑜𝑙𝑑
< 0 の場合
𝛼2
𝑛𝑒𝑤
𝛼1
𝑛𝑒𝑤0 𝐶
𝐶
𝛼1
𝑜𝑙𝑑
− 𝛼2
𝑜𝑙𝑑
> 0 の場合
𝐶 − 𝛼2
𝑜𝑙𝑑
+ 𝛼1
𝑜𝑙𝑑
𝛼2
𝑜𝑙𝑑
− 𝛼1
𝑜𝑙𝑑
𝐿 = max 0, 𝛼2
𝑜𝑙𝑑
− 𝛼1
𝑜𝑙𝑑
𝐻 = min 𝐶, 𝐶 − 𝛼2
𝑜𝑙𝑑
+ 𝛼1
𝑜𝑙𝑑
よって
27. 𝐿と𝐻の求め方 (2/2)
• 𝑡1 = 𝑡2 の場合
𝛼1
𝑛𝑒𝑤
+ 𝛼2
𝑛𝑒𝑤
= 𝛼1
𝑜𝑙𝑑
+ 𝛼2
𝑜𝑙𝑑
= const.
𝛼2
𝑛𝑒𝑤
= −𝛼1
𝑛𝑒𝑤
+ (𝛼1
𝑜𝑙𝑑
+ 𝛼2
𝑜𝑙𝑑
)
27
𝛼2
𝑛𝑒𝑤
𝛼1
𝑛𝑒𝑤0 𝐶
𝐶
𝛼1
𝑜𝑙𝑑
+ 𝛼2
𝑜𝑙𝑑
< C の場合
𝛼2
𝑛𝑒𝑤
𝛼1
𝑛𝑒𝑤0 𝐶
𝐶
𝛼1
𝑜𝑙𝑑
+ 𝛼2
𝑜𝑙𝑑
> C の場合
𝛼1
𝑜𝑙𝑑
+ 𝛼2
𝑜𝑙𝑑
𝐿 = max 0, 𝛼1
𝑜𝑙𝑑
+ 𝛼2
𝑜𝑙𝑑
− 𝐶
𝐻 = max 𝐶, 𝛼1
𝑜𝑙𝑑
+ 𝛼2
𝑜𝑙𝑑
𝛼1
𝑜𝑙𝑑
+ 𝛼2
𝑜𝑙𝑑
− 𝐶
よって
28. 𝛼1
𝑛𝑒𝑤
, 𝛼2
𝑛𝑒𝑤
の解析解
• 𝛼2
𝑛𝑒𝑤,𝑢𝑛𝑐𝑙𝑖𝑝𝑝𝑒𝑑
= 𝛼2 +
𝑡2 𝐸1−𝐸2
𝑘 𝒙1,𝑥1 −2𝑘 𝒙1,𝒙2 +𝑘(𝒙2,𝒙2)
– ただし 𝐸𝑖 = 𝑦 𝒙𝑖 − 𝑡𝑖
• 𝛼2
𝑛𝑒𝑤
=
𝐿 𝛼2
𝑛𝑒𝑤,𝑢𝑛𝑐𝑙𝑖𝑝𝑝𝑒𝑑
< 𝐿
𝐻 𝛼2
𝑛𝑒𝑤,𝑢𝑛𝑐𝑙𝑖𝑝𝑝𝑒𝑑
> 𝐻
𝛼2
𝑛𝑒𝑤,𝑢𝑛𝑐𝑙𝑖𝑝𝑝𝑒𝑑
otherwise
• 𝛼1
𝑛𝑒𝑤
= 𝛼1
𝑜𝑙𝑑
+ 𝑡1 𝑡2 𝛼2
𝑜𝑙𝑑
− 𝛼2
𝑛𝑒𝑤
クリッピングと呼んだりするそうです
28
29. 𝛼2
𝑛𝑒𝑤,𝑢𝑛𝑐𝑙𝑖𝑝𝑝𝑒𝑑
の更新式導出
• 𝛼1
𝑛𝑒𝑤
= 𝛼1
𝑜𝑙𝑑
+ 𝛿1
• 𝛼2
𝑛𝑒𝑤
= 𝛼2
𝑜𝑙𝑑
+ 𝛿2 とする
• 目的関数のうち変化量𝛿1, 𝛿2に関わる部分だけ抜き出す
目的関数: 𝑛=1
𝑁
𝑎 𝑛 −
1
2
𝑎 𝑛 𝑎 𝑚 𝑡 𝑛 𝑡 𝑚 𝑘(𝑥 𝑛, 𝑥 𝑚)𝑁
𝑚=1
𝑁
𝑛=1
𝛿1 + 𝛿2 − 𝛿1 𝑡1 𝑎 𝑛 𝑡 𝑛 𝑘 𝒙1, 𝒙 𝑛
𝑁
𝑛=1
− 𝛿2 𝑡2 𝑎 𝑛 𝑡 𝑛 𝑘 𝒙2, 𝒙 𝑛
𝑁
𝑛=1
−
1
2
𝛿1
2
𝑘 𝑥1, 𝑥1 + 2𝛿1 𝛿2 𝑡1 𝑡2 𝑘 𝑥1, 𝑥2 + 𝛿2
2
𝑘 𝑥2, 𝑥2
29
※簡単のため,unclippedを外している
制約より
𝛿1 𝑡1 + 𝛿2 𝑡2 = 0
𝛼1 + 𝛿1 ≥ 0
𝛼2 + 𝛿2 ≥ 0
方針: 𝛿2に関する停留点を求める
※ 凸性を保証するため,正定値カーネルの必要
(*)
30. 𝑡1 = 𝑡2 の場合
• 𝛿1 = −𝛿2 より(*)式は
𝛿2 𝑡2 𝑎 𝑛 𝑡 𝑛 𝑘 𝒙1, 𝒙 𝑛
𝑁
𝑛=1
− 𝛿2 𝑡2 𝑎 𝑛 𝑡 𝑛 𝑘 𝒙2, 𝒙 𝑛
𝑁
𝑛=1
−
1
2
𝛿2
2
𝑘 𝒙1, 𝒙1 − 2𝛿2
2
𝑘 𝒙1, 𝒙2 + 𝛿2
2
𝑘 𝒙2, 𝒙2
𝛿2 𝑡2 𝑦 𝒙1 − 𝑦 𝒙2 −
1
2
𝛿2
2
𝑘 𝒙1, 𝒙1 − 2𝑘 𝒙1, 𝒙2 + 𝑘 𝒙2, 𝒙2
• これを𝛿2に関して偏微分して0とおく
𝑡2 𝑦 𝒙1 − 𝑦 𝒙2 − 𝛿2 𝑘 𝒙1, 𝒙1 − 2𝑘 𝒙1, 𝒙2 + 𝑘 𝒙2, 𝒙2 = 0
𝛿2 =
𝑡2 𝑦 𝒙1 − 𝑦 𝒙2
𝑘 𝒙1, 𝒙1 − 2𝑘 𝒙1, 𝒙2 + 𝑘 𝒙2, 𝒙2
𝛿2 =
𝑡2 𝑦 𝒙1 − 𝑡1 − 𝑦 𝒙2 − 𝑡2
𝑘 𝒙1, 𝒙1 − 2𝑘 𝒙1, 𝒙2 + 𝑘 𝒙2, 𝒙2
=
𝑡2 𝐸1 − 𝐸2
𝑘 𝒙1, 𝒙1 − 2𝑘 𝒙1, 𝒙2 + 𝑘(𝒙2, 𝒙2)
30
31. 𝑡1 = −𝑡2 の場合
• 𝛿1 = 𝛿2 より(*)式は
2𝛿2 + 𝛿2 𝑡2 𝑎 𝑛 𝑡 𝑛 𝑘 𝒙1, 𝒙 𝑛
𝑁
𝑛=1
− 𝛿2 𝑡2 𝑎 𝑛 𝑡 𝑛 𝑘 𝒙2, 𝒙 𝑛
𝑁
𝑛=1
−
1
2
𝛿2
2
𝑘 𝒙1, 𝒙1 − 2𝛿2
2
𝑘 𝒙1, 𝒙2 + 𝛿2
2
𝑘 𝒙2, 𝒙2
2𝛿2 + 𝛿2 𝑡2 𝑦 𝒙1 − 𝑦 𝒙2 −
1
2
𝛿2
2
𝑘 𝒙1, 𝒙1 − 2𝑘 𝒙1, 𝒙2 + 𝑘 𝒙2, 𝒙2
• これを𝛿2に関して偏微分して0とおく
2 + 𝑡2 𝑦 𝒙1 − 𝑦 𝒙2 − 𝛿2 𝑘 𝒙1, 𝒙1 − 2𝑘 𝒙1, 𝒙2 + 𝑘 𝒙2, 𝒙2 = 0
𝛿2 =
2𝑡2 𝑡2 + 𝑡2 𝑦 𝒙1 − 𝑦 𝒙2
𝑘 𝒙1, 𝒙1 − 2𝑘 𝒙1, 𝒙2 + 𝑘 𝒙2, 𝒙2
𝛿2 =
𝑡2 𝑦 𝒙1 − 𝑡1 − 𝑦 𝒙2 − 𝑡2
𝑘 𝒙1, 𝒙1 − 2𝑘 𝒙1, 𝒙2 + 𝑘 𝒙2, 𝒙2 31
※ほぼ同じ.異なる部分に赤の下線
32. 𝛼1
𝑛𝑒𝑤
の導出
• 制約より
• 𝛼1
𝑛𝑒𝑤
𝑡1 + 𝛼2
𝑛𝑒𝑤
𝑡2 = 𝛼1
𝑜𝑙𝑑
𝑡1 + 𝛼2
𝑜𝑙𝑑
𝑡2
• 𝛼1
𝑛𝑒𝑤
= 𝛼1
𝑜𝑙𝑑
+
𝑡2
𝑡1
𝛼2
𝑜𝑙𝑑
− 𝛼2
𝑛𝑒𝑤
•
𝑡2
𝑡1
= 𝑡1 𝑡2 より
• 𝛼1
𝑛𝑒𝑤
= 𝛼1
𝑜𝑙𝑑
+ 𝑡1 𝑡2 𝛼2
𝑜𝑙𝑑
− 𝛼2
𝑛𝑒𝑤
32
34. 1点目の選択法
• KKT条件を満たさない変数集合から選択する
– 高速に発見するため,0 < 𝑎𝑖 < 𝐶 であるような変数
集合から先にチェックする
– それらがすべてKKT条件を満たしている場合,残り全
ての点についてチェック
• 選択された変数を𝛼2とする (𝑎2 ではない)
– これ以降 𝒙2, 𝑡2は選択された事例の特徴ベクトルとラ
ベルを表す
– ※1点目なのに𝛼2としたのは元論文の記法と一貫性
を保つため
※元論文の疑似コードにおけるmain routine
34
35. 2点目の選択法
• (1) 変数の更新量が大きくなるように選択
– すなわち 𝐸1 − 𝐸2 を最大化する事例
– 𝐸2が正の場合→最小誤差𝐸1の事例を選択
– 𝐸2が負の場合→最大誤差𝐸1の事例を選択
• (2) 境界上にない事例をランダムに選択
– すなわち0 < 𝑎 𝑛 < 𝐶であるような事例
• (3) ランダムに選択
– 残りの事例を選択
• 選択された変数を𝛼1とする
※変数の変化量が小さい場合には2点目の選択からやり直す
※元論文の疑似コードにおけるexamineExample(i2)
35
47. References
• [Platt 98] J. C. Platt, "Sequential Minimal Optimization: A Fast Algorithm for Training
Support Vector Machines", In Advances in Kernel Methods Support Vector Learning,
MIT Press, 1998.
– 元論文.基本的にこれを読めばよい
• [Cristianini+ 05] N. Cristianini, J. Shawe-Taylor (大北剛訳), “サポートベクタ―マシン入
門”, 共立出版, 2005.
– 7章でSMOを紹介
– 巻末に[Platt 98]の疑似コードに対する解説あり
• [Keerthi+ 01] S. S. Keerthi, S. K. Shevade, C. Bhattacharyya, K. R. K.
Murthy,”Improvements to Platt's SMO Algorithm for SVM Classifier Design”,
Neural Computation, vol. 13(3), pp.637-649, 2001.
– KKT条件チェックの高速化
• [Fan+ 05] R.-E. Fan, P.-H. Chen, C.-J. Lin, "Working Set Selection Using Second
Order Information for Training Support Vector Machines", Journal of Machine
Learning Research, vol.6, pp.1889?1918, 2005.
– 変数選択のWWS 3論文
– 目的関数の2次勾配の情報を用いることで適切な選択が可能
47
48. 参考URL
• 福水健次. 正定値カーネルによるデータ解析ーカーネル法の基礎と展
開ー 4. サポートベクターマシン. 統計数理研究所公開講座
– http://www.ism.ac.jp/~fukumizu/ISM_lecture_2010/Kernel_4_SVM.pdf
• SMOアルゴリズム – Intelligence Architecture けんきうノート
– http://convexbrain.sourceforge.jp/cgi-
bin/wifky.pl?p=SMO%A5%A2%A5%EB%A5%B4%A5%EA%A5%BA%A5%E0
• 戸田健一. SVMの2次計画問題に関する解法の考察
– http://numataws1.ms.kagu.tus.ac.jp/THESIS/H15/presen_toda.pdf
• 山下浩, 田中茂. サポートベクターマシンとその応用.
– http://www.msi.co.jp/vmstudio/materials/svm.pdf
• SMO法でSVMの学習してみた – きちめも
– http://d.hatena.ne.jp/se-kichi/20100306/1267858745
• SVMの学習用アルゴリズムSMOを実装してみる – きしだのはてな
– http://d.hatena.ne.jp/nowokay/20080730/1217371769
48
Many thanks to authors!