前幾篇侃了侃SVM的基本原理和一些相關(guān)知識(shí),尤其是在SVM學(xué)習(xí)——軟間隔優(yōu)化這一篇,提到了SVM學(xué)習(xí)器的兩種形式,常被叫做L1-SVM和L2-SVM,這兩種形式的區(qū)別在損失函數(shù)的形式上,令訓(xùn)練樣例為,
取值為-1或+1,
軟間隔優(yōu)化的原始形式為:
當(dāng)損失函數(shù)時(shí)就叫做L1-SVM,當(dāng)損失函數(shù)
時(shí)叫做L2-SVM,實(shí)際當(dāng)中解這個(gè)問(wèn)題其實(shí)可以從原始形式開(kāi)始,也可以從其對(duì)偶形式開(kāi)始:
設(shè),
,則兩種軟間隔優(yōu)化的對(duì)偶形式可以用統(tǒng)一的形式表示:
其中:
為單位列向量,
,
,
為對(duì)角矩陣
對(duì)于L1-SVM: &&
;對(duì)于L2-SVM:
&&
。
不管哪種形式,都是一個(gè)凸二次規(guī)劃問(wèn)題,不論是向量維度大或者是樣本量很大的時(shí)候,求解這個(gè)優(yōu)化問(wèn)題難度都不小,于是在解得稀疏性(比如只需要得到支持向量)、目標(biāo)函數(shù)的凸性等方面動(dòng)腦筋,得到一些較有效率的方法,比如SMO(Sequential Minimal Opimisation)、梯度下降法、Trust Region Newton Method、Coordinate Desent Method 等等,這里面呢,我對(duì)Coordinate Desent Method 比較感興趣,我就把我學(xué)到的東西說(shuō)一下。
先了解幾個(gè)概念:
1、度量空間:它是一個(gè)集合,在其中可以定義這個(gè)集合中元素之間的距離(叫做度量)的概念,這個(gè)距離滿足非負(fù)性、同一性、對(duì)稱(chēng)性以及三角不等式(類(lèi)似于咱們小時(shí)候?qū)W的,任意三角形,兩邊之和大于第三邊),見(jiàn)http://zh.wikipedia.org/zh-cn/%E5%BA%A6%E9%87%8F%E7%A9%BA%E9%97%B4。
2、Lipschitz 函數(shù):對(duì)于一個(gè)實(shí)值函數(shù)以及定義在實(shí)數(shù)域(實(shí)數(shù)域包含有理數(shù)和無(wú)理數(shù)而且它是完備的)上的集合
,如果存在常數(shù)L>0,使得
,則這個(gè)函數(shù)叫做Lipschitz 函數(shù)(這里用2-范數(shù)來(lái)度量集合
中兩個(gè)向量
和
的距離),它的幾何意義其實(shí)就是:曲線上的任意兩點(diǎn)的連線的斜率都有一個(gè)相同的上界,見(jiàn)http://zh.wikipedia.org/zh-cn/%E5%88%A9%E6%99%AE%E5%B8%8C%E8%8C%A8%E9%80%A3%E7%BA%8C。
直觀的看滿足Lipschitz 條件條件的函數(shù)一定是連續(xù)函數(shù),而且曲線更加光滑,反之不然,比如在[0,1]上的函數(shù),顯然它不滿足Lipschitz 條件。
定理1:如果定義在實(shí)數(shù)域上的集合是一個(gè)凸集,實(shí)值函數(shù)
連續(xù)可微且在
內(nèi)其梯度有界,則
。
偶簡(jiǎn)單推導(dǎo)一下:
是一個(gè)凸集,那么根據(jù)凸集定義:對(duì)于凸集中的任意向量
和
(不是一般性,假設(shè)
),有
,其中
。顯然
在[
,
]上連續(xù),在(
,
)內(nèi)可導(dǎo),而
在
與
之間,根據(jù)拉格朗日中值定理有,
,其中
,顯然
。
之所介紹Lipschitz 條件是因?yàn)?,如果可微函?shù)的梯度滿足Lipschitz連續(xù)條件,即:
,則有:
(證明過(guò)程比較直白,偶就不寫(xiě)了,只要把f展開(kāi)成二階泰勒級(jí)數(shù),然后代入Lipschitz連續(xù)條件得證)
基于梯度下降(GD)的算法應(yīng)該是最為大家所熟知的一類(lèi)算法(最速下降法、牛頓法、阻尼牛頓法、擬牛頓法等等),我把滿足上述條件的不等式換成另一種寫(xiě)法吧:
對(duì)于最小化問(wèn)題,總是希望每次迭代都可以讓,這樣我們會(huì)越來(lái)越接近目標(biāo),對(duì)于上式的右邊部分用函數(shù)
代替,可以很容易知道,在
點(diǎn),
取到極小值(嘿嘿,比如求導(dǎo)),于是,梯度下降算法可以被概括為:
GD Algorithm:
1、選擇初始點(diǎn),令
;
2、(不滿足結(jié)束條件){
; //這里的S是個(gè)保序操作符(
是保序操作符,指如果
,則有
)
;
}
與GD較為不同的另一類(lèi)算法就叫做Coordinate Desent Method,這種方法的特點(diǎn)是,算法有兩層迭代,最內(nèi)層迭代是一個(gè)搜索過(guò)程,搜索是依據(jù)n維向量的n個(gè)坐標(biāo)方向分別搜索,每次迭代會(huì)將除了當(dāng)前方向外的其他方向分量固定,然后在此基礎(chǔ)上最小化目標(biāo)函數(shù),下次迭代時(shí)會(huì)選擇另外一個(gè)分量進(jìn)行相同的處理,經(jīng)過(guò)了n次迭代后得到一個(gè)n維向量,然后更新目標(biāo)向量,接著繼續(xù)進(jìn)行外層的迭代,概括這個(gè)過(guò)程如下:
CD Algorithm :
1、選擇初始點(diǎn),令
;
2、(不滿足結(jié)束條件){
{ //假設(shè)特征空間維度為
; //這里的S是個(gè)操作符
; (
)
}
;
;
}
還記著開(kāi)篇提到的L1-SVM和L2-SVM的統(tǒng)一形式吧,稍微轉(zhuǎn)換一下形式,并把擴(kuò)展為
,把
擴(kuò)展為
:
其中:
為單位列向量,
,
,
為對(duì)角矩陣
對(duì)于L1-SVM: &&
;對(duì)于L2-SVM:
&&
。
下面介紹一種基于Coordinate Descent 的算法,該算法出自《A Dual Coordinate Descent Method for Large-scale Linear SVM》一文。
整個(gè)算法架構(gòu)同CD Algorithm。
1、假設(shè)樣本數(shù)為,當(dāng)前外層循環(huán)的索引為
,當(dāng)前內(nèi)層循環(huán)索引為
,其取值為
,對(duì)于
向量有表示形式:
,
;
,表示還沒(méi)有開(kāi)始內(nèi)層循環(huán)時(shí)的狀態(tài),
,表示對(duì)所有分量更新完畢。
2、內(nèi)層循環(huán)中的S操作的過(guò)程是求解子問(wèn)題:
,其中
,第
個(gè)分量的值為1。
大家可以在紙上稍作推導(dǎo),上面這個(gè)問(wèn)題的目標(biāo)函數(shù)可以表示為:
,其中
表示梯度
的第
個(gè)分量
這是一個(gè)二次函數(shù),除了帶d的部分以外可以看做一個(gè)常量,即上述形式為:
令
1)、當(dāng)時(shí)不需要對(duì)當(dāng)前分量進(jìn)行更新;
2)、對(duì)上式求K-T點(diǎn)并考慮約束條件,如果
則有:
計(jì)算,就是將核矩陣的第
行向量和
向量做內(nèi)積,這個(gè)操作代價(jià)很高,但是對(duì)于線性SVM,有
(還記得那個(gè)互補(bǔ)條件吧,嘿嘿),又有
、
,于是上式就變成了
,這個(gè)計(jì)算的代價(jià)就沒(méi)有那么高了,顯然在更新
的時(shí)候需要對(duì)
也更新,要是每次都計(jì)算
就代價(jià)太高了,所以文中利用
更新前和更新后的值來(lái)確定
,如下:
(這個(gè)方法很巧)
3)、當(dāng)時(shí)候,可知
,這種情況只會(huì)出現(xiàn)在L1_SVM中,且此時(shí)沒(méi)有閾值項(xiàng),就是那個(gè)
向量里的分量1,否則
不可能滿足,此時(shí)新的
分量值就取
。
A dual coordinate descent method for Linear SVM算法描述如下:
1、選擇初始點(diǎn),
令,
;
2、(不滿足結(jié)束條件,這里可以設(shè)置一個(gè)精度條件){
{
;
;
{
;
;
;
}
}
;
;
}
與GD方法相比,coordinate descent 類(lèi)方法的特點(diǎn)是每次迭代的代價(jià)較低,由于各分量之間有前后依賴(lài)關(guān)系,所以感覺(jué)要實(shí)現(xiàn)并行有點(diǎn)困難, 但是總的來(lái)說(shuō),沒(méi)有最好的方法只有最適合的方法。
聯(lián)系客服