SMO算法最通俗易懂的解释(SVM中的SMO算法)
任何關(guān)于算法、編程、AI行業(yè)知識(shí)或博客內(nèi)容的問(wèn)題,可以隨時(shí)掃碼關(guān)注公眾號(hào)「圖靈的貓」,加入”學(xué)習(xí)小組“,沙雕博主在線(xiàn)答疑~此外,公眾號(hào)內(nèi)還有更多AI、算法、編程和大數(shù)據(jù)知識(shí)分享,以及免費(fèi)的SSR節(jié)點(diǎn)和學(xué)習(xí)資料。其他平臺(tái)(知乎/B站)也是同名「圖靈的貓」,不要迷路哦~
SVM通常用對(duì)偶問(wèn)題來(lái)求解,這樣的好處有兩個(gè):1、變量只有N個(gè)(N為訓(xùn)練集中的樣本個(gè)數(shù)),原始問(wèn)題中的變量數(shù)量與樣本點(diǎn)的特征個(gè)數(shù)相同,當(dāng)樣本特征非常多時(shí),求解難度較大。2、可以方便地引入核函數(shù),求解非線(xiàn)性SVM。求解對(duì)偶問(wèn)題,常用的算法是SMO,徹底地理解這個(gè)算法對(duì)初學(xué)者有一定難度,本文嘗試模擬算法作者發(fā)明該算法的思考過(guò)程,讓大家輕輕松松理解SMO算法。文中的“我”擬指發(fā)明算法的大神。
001、初生牛犢不怕虎
最近,不少哥們兒向我反映,SVM對(duì)偶問(wèn)題的求解算法太低效,訓(xùn)練集很大時(shí),算法還沒(méi)有蝸牛爬得快,很多世界著名的學(xué)者都在研究新的算法呢。聽(tīng)聞此言,我心頭一喜:“兄弟我揚(yáng)名立萬(wàn)的機(jī)會(huì)來(lái)了!”
我打開(kāi)書(shū),找出問(wèn)題,看到是這個(gè)樣子的:
這明顯就是一個(gè)凸二次規(guī)劃問(wèn)題嘛,還不好解?等等,哥們說(shuō)現(xiàn)有算法比較慢,所以我絕對(duì)不能按照常規(guī)思路去思考,要另辟蹊徑。
蹊徑啊蹊徑,你在哪里呢?
我冥思苦想好幾天,都沒(méi)有什么好辦法,哎!看來(lái)?yè)P(yáng)名立萬(wàn)的事兒要泡湯了。放下書(shū),我決定去湖邊(注:是瓦爾登湖不?)散散心,我已經(jīng)在小黑屋關(guān)得太久了。
010、得來(lái)全不費(fèi)工夫
正午時(shí)分,一絲風(fēng)也沒(méi)有,湖邊零零散散的小情侶在呢喃私語(yǔ),只有苦逼的我單身一個(gè),我坐在湖邊的一塊大石上,平靜的湖面映出我胡子拉碴憔悴的臉,我心里苦笑:“湖想必是可憐我,映出個(gè)對(duì)影陪我。”“對(duì)影???!!!”我心頭一道亮光閃過(guò),猶如干裂的土地聽(tīng)到第一聲驚雷!我突然有了新的思路!
我瘋狂地跑回屋里,身后是一對(duì)對(duì)受驚的小情侶怨恨的眼神。
我開(kāi)始整理自己的思緒:
這個(gè)問(wèn)題如果作為單純的凸二次規(guī)劃問(wèn)題來(lái)看,很難有什么新的辦法,畢竟凸二次規(guī)劃已經(jīng)被研究得透透了。但它的特殊之處在于:它是另一個(gè)問(wèn)題的對(duì)偶問(wèn)題,還滿(mǎn)足KKT條件,怎么充分利用這個(gè)特殊性呢?
我隨機(jī)找一個(gè)α=(α1,α2,…,αN)。假設(shè)它就是最優(yōu)解,就可以用KKT條件來(lái)計(jì)算出原問(wèn)題的最優(yōu)解(w,b),就是這個(gè)樣子:
進(jìn)而可以得到分離超平面:
CodeCogsEqn.gif
按照SVM的理論,如果這個(gè)g(x)是最優(yōu)的分離超平面,就有:
姑且稱(chēng)這個(gè)叫g(x)目標(biāo)條件吧。
根據(jù)已有的理論,上面的推導(dǎo)過(guò)程是可逆的。也就是說(shuō),只要我能找到一個(gè)α,它除了滿(mǎn)足對(duì)偶問(wèn)題的兩個(gè)初始限制條件:
由它求出的分離超平面g(x)還能滿(mǎn)足g(x)目標(biāo)條件,那么這個(gè)α就是對(duì)偶問(wèn)題的最優(yōu)解!!!
至此,我的思路已經(jīng)確定了:首先,初始化一個(gè)α,讓它滿(mǎn)足對(duì)偶問(wèn)題的兩個(gè)初始限制條件,然后不斷優(yōu)化它,使得由它確定的分離超平面滿(mǎn)足g(x)目標(biāo)條件,在優(yōu)化的過(guò)程中始終確保它滿(mǎn)足初始限制條件,這樣就可以找到最優(yōu)解。
我不禁感到洋洋得意了,哥們我沒(méi)有按照傳統(tǒng)思路,想著怎么去讓目標(biāo)函數(shù)達(dá)到最小,而是想著怎么讓?duì)翝M(mǎn)足g(x)目標(biāo)條件,牛X!我真他媽牛X!哈哈!!
011、中流擊水停不住
具體怎么優(yōu)化α呢?經(jīng)過(guò)思考,我發(fā)現(xiàn)必須遵循如下兩個(gè)基本原則:
-
每次優(yōu)化時(shí),必須同時(shí)優(yōu)化α的兩個(gè)分量,因?yàn)橹粌?yōu)化一個(gè)分量的話(huà),新的α就不再滿(mǎn)足初始限制條件中的等式條件了。
-
每次優(yōu)化的兩個(gè)分量應(yīng)當(dāng)是違反g(x)目標(biāo)條件比較多的。就是說(shuō),本來(lái)應(yīng)當(dāng)是大于等于1的,越是小于1違反g(x)目標(biāo)條件就越多,這樣一來(lái),選擇優(yōu)化的兩個(gè)分量時(shí),就有了基本的標(biāo)準(zhǔn)。
好,我先選擇第一個(gè)分量吧,α的分量中有等于0的,有等于C的,還有大于0小于C的,直覺(jué)告訴我,先從大于0小于C的分量中選擇是明智的,如果沒(méi)有找到可優(yōu)化的分量時(shí),再?gòu)钠渌麅深?lèi)分量中挑選。
現(xiàn)在,我選了一個(gè)分量,就叫它α1吧,這里的1表示它是我選擇的第一個(gè)要優(yōu)化的分量,可不是α的第1個(gè)分量。
為啥我不直接選兩個(gè)分量呢?
我當(dāng)時(shí)是這么想的,選擇的兩個(gè)分量除了要滿(mǎn)足違反g(x)目標(biāo)條件比較多外,還有一個(gè)重要的考量,就是經(jīng)過(guò)一次優(yōu)化后,兩個(gè)分量要有盡可能多的改變,這樣才能用盡可能少的迭代優(yōu)化次數(shù)讓它們達(dá)到g(x)目標(biāo)條件,既然α1是按照違反g(x)目標(biāo)條件比較多來(lái)挑選的,我希望選擇α2時(shí),能夠按照優(yōu)化后讓?duì)?、α2有盡可能多的改變來(lái)選。
你可能會(huì)想,說(shuō)的怪好聽(tīng)的,倒要看你怎么選α2?
經(jīng)過(guò)我一番潛心思考,我還真找到一個(gè)選α2的標(biāo)準(zhǔn)!!
我為每一個(gè)分量算出一個(gè)指標(biāo)E,它是這樣的:
我發(fā)現(xiàn),當(dāng)|E1-E2|越大時(shí),優(yōu)化后的α1、α2改變?cè)酱蟆K裕绻鸈1是正的,那么E2越負(fù)越好,如果E1是負(fù)的,那么E2越正越好。這樣,我就能選到我的α2啦。
啥,你問(wèn)這是為什么?
這個(gè)回頭再說(shuō),現(xiàn)在要開(kāi)始優(yōu)化我的α1、α2啦。
100、 無(wú)限風(fēng)光在險(xiǎn)峰
怎么優(yōu)化α1、α2可以確保優(yōu)化后,它們對(duì)應(yīng)的樣本能夠滿(mǎn)足g(x)目標(biāo)條件或者違反g(x)目標(biāo)條件的程度變輕呢?我這人不貪心,只要優(yōu)化后是在朝著好的方向發(fā)展就可以。
本以為峰回路轉(zhuǎn),誰(shuí)知道峰回之后是他媽一座更陡峭的山峰!我心一橫,你就是90度的山峰,哥們我也要登它一登!!
在沉思中,我的眼睛不經(jīng)意地瞟見(jiàn)了對(duì)偶問(wèn)題:
靈光一閃,計(jì)上心來(lái)!
雖然我不知道怎樣優(yōu)化α1、α2,讓它們對(duì)應(yīng)的樣本違反g(x)目標(biāo)條件變輕,但是我可以讓它們優(yōu)化后目標(biāo)函數(shù)的值變小啊!使目標(biāo)函數(shù)變小,肯定是朝著正確的方向優(yōu)化!也就肯定是朝著使違反g(x)目標(biāo)條件變輕的方向優(yōu)化,二者是一致的啊!!
我真是太聰明了!
此時(shí),將α1、α2看做變量,其他分量看做常數(shù),對(duì)偶問(wèn)題就是一個(gè)超級(jí)簡(jiǎn)單的二次函數(shù)優(yōu)化問(wèn)題:
其中:
至此,這個(gè)問(wèn)題已經(jīng)變得超級(jí)簡(jiǎn)單了!
舉例來(lái)說(shuō)明一下,假設(shè)y1和y2都等于1,那么第一個(gè)限制條件就變成了
13.png
首先,將α1=K-α2代入目標(biāo)函數(shù),這時(shí)目標(biāo)函數(shù)變成了關(guān)于α2的一元函數(shù),對(duì)α2求導(dǎo)并令導(dǎo)數(shù)為0可以求出α2_new。
然后,觀察限制條件,第一個(gè)條件α1=K-α2相當(dāng)于
0≦K-α2≦C
進(jìn)而求得:
K-C≦α2≦K,再加上原有的限制
0≦α2≦C,可得
max(K-C,0)≦α2≦min(K,C)
如果α2_new就在這個(gè)限制范圍內(nèi),OK!求出α1_new,完成一輪迭代。如果α2_new不在這個(gè)限制范圍內(nèi),進(jìn)行截?cái)啵玫叫碌摩?_new_new,據(jù)此求得α1_new_new,此輪迭代照樣結(jié)束!!
至此,我終于找到了一個(gè)新的求解SVM對(duì)偶問(wèn)題的方法,在SVM這塊土地上,種上了一棵自己的樹(shù)!揚(yáng)名立萬(wàn)也就是水到渠成啦
>>>關(guān)于作者
CSDN 博客專(zhuān)家,2019-CSDN百大博主,計(jì)算機(jī)(機(jī)器學(xué)習(xí)方向)博士在讀,業(yè)余Kaggle選手,有過(guò)美團(tuán)、騰訊算法工程師經(jīng)歷,目前就職于Amazon AI lab。喜愛(ài)分享和知識(shí)整合。
關(guān)注微信公眾號(hào),點(diǎn)擊“學(xué)習(xí)資料”菜單即可獲取算法、編程資源以及教學(xué)視頻,還有免費(fèi)SSR節(jié)點(diǎn)相送哦。其他平臺(tái)(微信/知乎/B站),歡迎關(guān)注同名公眾號(hào)「圖靈的貓」~
總結(jié)
以上是生活随笔為你收集整理的SMO算法最通俗易懂的解释(SVM中的SMO算法)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: php dirtoarray,PHP D
- 下一篇: NFV基本概念_nf缩写是什么意思