〇、說明
支持向量機(Support Vector Machine,SVM)是監(jiān)督學(xué)習(xí)中非常經(jīng)典的算法。筆者主要參考學(xué)習(xí)的是李航老師《統(tǒng)計學(xué)習(xí)方法(第二版)》[1]和周志華老師的西瓜書《機器學(xué)習(xí)》[2]跷坝。
如有錯誤疏漏,煩請指正序无。如要轉(zhuǎn)載械念,請聯(lián)系筆者,hpfhepf@gmail.com座享。
關(guān)于這個算法婉商,讀者可以參考算法發(fā)明者Platt的原始論文[3][4]。知乎文章《支持向量機原理詳解(六): 序列最小最優(yōu)化(SMO)算法》[5][6]系列也是關(guān)于SMO算法不錯的文章,讀者可一并參考閱讀蕊蝗。
一烁巫、SMO算法簡介
1.1 為什么
支持向量機的學(xué)習(xí)是一個凸二次規(guī)劃問題,凸二次規(guī)劃問題問題具有全局最優(yōu)解蘑秽,有許多最優(yōu)化算法可以用于這一問題饺著。但當(dāng)訓(xùn)練樣本容量很大時,這些算法往往變得比較低效筷狼。目前有很多支持向量機的快速實現(xiàn)算法瓶籽,序列最小最優(yōu)化(Sequential Minimal Optimization,SMO)算法就是其中一個埂材。[1]
1.2 SMO算法思路
1. 在支持向量機的對偶問題優(yōu)化中塑顺,每一輪迭代,將其它變量看作常數(shù)俏险,只優(yōu)化其中兩個變量严拒。
2. 每一輪迭代,啟發(fā)式地選擇優(yōu)化量最大的兩個變量進行優(yōu)化竖独。
二裤唠、SMO算法詳述
支持向量機的對偶優(yōu)化問題如下
優(yōu)化問題一:
優(yōu)化目標(biāo)是找到使目標(biāo)函數(shù)最小的拉格朗日乘子向量。
2.1 兩個變量的優(yōu)化方法
每一輪迭代中莹痢,假設(shè)已選擇的兩個變量是和
种蘸,其它變量
是固定的。則式
表示的優(yōu)化問題可以寫成
優(yōu)化問題二:
其中竞膳,航瞭,
是常數(shù),優(yōu)化目標(biāo)函數(shù)省略了不含
和
的常數(shù)項坦辟。
等式約束決定了這個優(yōu)化問題是一個單變量優(yōu)化問題刊侯,這里考慮為變量的優(yōu)化問題。
第一步锉走,求解未經(jīng)剪輯的最優(yōu)解
定義
?
則目標(biāo)函數(shù)可寫為
由可得
滨彻,代入上式,目標(biāo)函數(shù)可表示為單變量
的目標(biāo)函數(shù)
對求導(dǎo)
令其為0挪蹭,得到
將等號左邊用
代替亭饵,等號右邊代入
和
,并令
梁厉,則有
即
這里需要注意冬骚,。
第二步,確定剪輯邊界
兩個變量的約束只冻,如下圖所示
式不等式約束使得
和
正方形
內(nèi)庇麦,等式約束使得它們在平行于正方形對角線的直線上。
如上所述喜德,優(yōu)化問題二(式)實質(zhì)上是一個但變量優(yōu)化問題山橄,同樣,我們?yōu)榭紤]
的優(yōu)化問題舍悯。由于
需要滿足不等式約束航棱,所以有
由式的等式約束
,當(dāng)
時萌衬,
(
是一個常數(shù)饮醇,滿足
),則有
當(dāng)時秕豫,
朴艰,則有
第三步,剪輯優(yōu)化結(jié)果
綜上所述混移,經(jīng)剪輯后的為
根據(jù)式的等式約束,求解
2.2 第一個待優(yōu)化變量選擇
SMO算法稱選擇第一個優(yōu)化變量的過程為外層循環(huán)歌径。每次只選擇兩個變量進行優(yōu)化毁嗦,那如何選擇呢?
支持向量機是凸優(yōu)化問題回铛,滿足KKT條件的點是支持向量機優(yōu)化問題的解[7]狗准。
線性支持向量機的符合KKT條件如下
將式、
茵肃、
和
單獨拿出來驶俊,如下
由上式可推導(dǎo)出
這里需要注意,上式中免姿,“”在李航老師《統(tǒng)計學(xué)習(xí)方法(第二版)》中,使用的是“
”榕酒,這個是不嚴(yán)謹(jǐn)?shù)呐卟病L鎿Q成核函數(shù)版本,如下
代入的定義想鹰,在優(yōu)化過程中紊婉,
不是最優(yōu)解,所以辑舷,驗證條件應(yīng)表述為
這就是SMO算法選擇第一個優(yōu)化變量的條件喻犁,也是停機條件。
第一個優(yōu)化變量的選擇方法:首先遍歷滿足的樣本點,檢驗它們是否滿足式
肢础;如果這些樣本點都不滿足約束还栓,則遍歷
和
的樣本點,檢驗是否符合式
和
的約束传轰。
這里需要注意剩盒,在下面選擇第二個優(yōu)化變量時,有可能會拋棄一選擇的第一個變量慨蛙,重新選擇第一個變量辽聊,詳見下文。
2.3 第二個優(yōu)化變量選擇
SMO算法稱選擇第二個優(yōu)化變量的過程為內(nèi)層循環(huán)期贫。假設(shè)已經(jīng)找到了第一個優(yōu)化變量跟匆。第二個優(yōu)化變量
的選擇標(biāo)準(zhǔn)是希望這個變量有足夠大的變化。
第一種方式
由式可知通砍,
是依賴于
的玛臂,為了加快計算速度,可以選擇使之最大的
埠帕,一般來講就是選擇與
符號相反垢揩,絕對值最大
對應(yīng)的
作為第二個優(yōu)化變量。
通常敛瓷,為了加快速度叁巨,保存在一個列表里。
第二種方式
特殊情況下呐籽,如果內(nèi)層循環(huán)找到的不能使目標(biāo)函數(shù)有足夠的下降锋勺,則采用另一種啟發(fā)方式繼續(xù)選擇
:遍歷在間隔邊界上的支持向量點(滿足
的樣本),依次試用狡蝶,直到目標(biāo)函數(shù)有足夠的下降庶橱。
如果還找不到合適的,遍歷所有數(shù)據(jù)集贪惹;如果仍然找不到苏章,則放棄這個
,重新選擇奏瞬。
2.4 更新
為什么要更新枫绅,因為后面更新
時要用到。在前面幾篇筆記所述的支持向量機[b][c]理論中硼端,參數(shù)
是根據(jù)最優(yōu)拉格朗日乘子
來計算的并淋。但是在SMO算法中,
是跟隨
優(yōu)化的變量珍昨。
如何優(yōu)化參數(shù)呢县耽,KKT條件就是優(yōu)化的方向(符合KKT條件的解是最優(yōu)解[5])句喷。因為是局部優(yōu)化,需要先分別求解
和
兔毙,然后再求出
唾琼,先求
,根據(jù)式
瞒御,當(dāng)
時父叙,
因為已經(jīng)保存在列表里,可以利用其來計算
肴裙,減少計算量趾唱。由
定義可知
可得
代入式,可得
同理蜻懦,當(dāng)時甜癞,有
通過和
計算
,分兩種情況:
第一種情況
當(dāng)時宛乃,
悠咱,證明如下
將式的變形
代入式
和
,計算
上式中征炼,析既。當(dāng)
時,
在約束邊界內(nèi)谆奥,剪輯前后相同眼坏,所以有
此時,
第二種情況
當(dāng)在邊界上酸些,且
時宰译,第一種情況求得的值還可以繼續(xù)使用。
和
以及它們之間的數(shù)都符合KKT條件(因為證明較復(fù)雜魄懂,且用到后面的知識沿侈,證明放在附錄),選擇他們的中點作為
市栗,也即
這里需要注意缀拭,這里有一個的條件。為什么有這樣一個條件填帽?如下圖蛛淋,當(dāng)
時,直線
或
在約束范圍內(nèi)退化成一個點(讀者可自己證明)盲赊,沒有優(yōu)化的空間,這樣的
需要重新選擇敷扫。
2.5 更新
如前所述哀蘑,挑選和計算時诚卸,都會用到
。每次迭代都需要更新
绘迁,以備下一輪迭代使用合溺。
根據(jù)的定義(式
),有
變換式和式
可得
可以證明(讀者可自行證明)缀台,當(dāng)時棠赛,
原始論文中[4],作者表示式用來更新沒有參與優(yōu)化且不在邊界上的支持向量對應(yīng)的
膛腐,也即更新除
和
以外且
對應(yīng)的
睛约。
但我認(rèn)為,當(dāng)在邊界上哲身,不符合式
辩涝,此時至少有一個參與優(yōu)化的變量對應(yīng)的
也需要更新。
三勘天、SMO算法總結(jié)
第一步怔揩,給定精度參數(shù),初始化
脯丝,
商膊。
第二步,按照2.2節(jié)和2.3節(jié)選擇優(yōu)化變量宠进,按照2.1節(jié)解析求解優(yōu)化問題晕拆,更新這兩個變量。
第三步砰苍,按照2.4節(jié)和2.5節(jié)更新和
潦匈。
第四步,在精度范圍內(nèi)檢查是否滿足KKT條件(式
):若滿足赚导,則轉(zhuǎn)第五步茬缩;不滿足,則轉(zhuǎn)第二步吼旧。
第五步凰锡,得到最優(yōu)解。
這里圈暗,精度內(nèi)檢查讀者可參看參考資料[6]掂为。
四、附錄
A员串、
在邊界上時
符合KKT條件的證明
重復(fù)正文2.4節(jié)的結(jié)論:當(dāng)在邊界上勇哗,且
時,
和
以及它們之間的數(shù)都符合KKT條件寸齐。
這里參考[8]予以證明欲诺。
如正文2.5節(jié)所述抄谐,當(dāng)時,
扰法。但當(dāng)
在剪輯邊界上時蛹含,也即
和
至少有一個為0或
。當(dāng)某一個變量為0或C時塞颁,
不一定為0浦箱。更一般的,我們暫時認(rèn)為它們不為0祠锣。由正文式
酷窥,有
當(dāng)變量在邊界時,經(jīng)過剪輯锤岸,由正文式竖幔,有
其中,是偷,
拳氢。又由正文式
,有
將式代入式
蛋铆,可得
將式和式
代入正文式
馋评,有
同理有
構(gòu)造如下,其中
刺啦,使得
在
和
之間
將式和式
代入式
留特,構(gòu)造
,有
將式玛瘸、式
和式
代入式
蜕青,可得
同理可得
當(dāng)時
符合正文式KKT條件。
當(dāng)時
同樣符合正文式KKT條件糊渊。
或
同理可證右核。
得證。
B渺绒、參考
[1]贺喝、《統(tǒng)計學(xué)習(xí)方法(第二版)》,李航著宗兼,清華大學(xué)出版社
[2]躏鱼、《機器學(xué)習(xí)》,周志華著殷绍,清華大學(xué)出版社
[3]染苛、Sequential Minimal Optimization: A Fast Algorithm for Training Support Vector Machines, John C. Platt, 1998
[4]、Fast Training of Support Vector Machines Using Sequential Minimal Optimization, John C. Platt, 2000
[5]主到、《支持向量機原理詳解(六): 序列最小最優(yōu)化(SMO)算法(Part I)》
[6]茶行、《支持向量機原理詳解(七): 序列最小最優(yōu)化(SMO)算法(Part II)》
[7]贸呢、《凸優(yōu)化(八)——Lagrange對偶問題》
[8]、Struggling to understand threshold(b) update step in SMO
C拢军、相關(guān)目錄
[a]、支持向量機(一)——線性可分支持向量機導(dǎo)出
[b]怔鳖、支持向量機(二)——線性可分支持向量機求解
[c]茉唉、支持向量機(三)——線性支持向量機
[d]、支持向量機(四)——核方法
[e]结执、支持向量機(五)——SMO算法
D度陆、時間線
2020-06-18 第一次發(fā)布
2020-06-20 添加附錄A的證明