囫圇吞棗看完SVM涎显,個人感覺如果不好好理解一些概念挚瘟,或說如果知其然而不知其所以然的話叹谁,不如不看。因此我想隨便寫一寫乘盖,把整個思路簡單地整理一遍焰檩。:)
支持向量機并不是神經(jīng)網(wǎng)絡(luò),這兩個完全是兩條不一樣的路吧订框。不過詳細來說析苫,線性SVM的計算部分就像一個單層的神經(jīng)網(wǎng)絡(luò)一樣,而非線性SVM就完全和神經(jīng)網(wǎng)絡(luò)不一樣了(是的沒錯穿扳,現(xiàn)實生活中大多問題是非線性的)衩侥,詳情可以參考知乎答案。
這兩個冤家一直不爭上下矛物,最近基于神經(jīng)網(wǎng)絡(luò)的深度學(xué)習(xí)因為AlphaGo等熱門時事顿乒,促使神經(jīng)網(wǎng)絡(luò)的熱度達到了空前最高。畢竟泽谨,深度學(xué)習(xí)那樣的多層隱含層的結(jié)構(gòu)璧榄,猶如一個黑盒子,一個學(xué)習(xí)能力極強的潘多拉盒子吧雹。有人或許就覺得這就是我們真正的神經(jīng)網(wǎng)絡(luò)骨杂,我們不知道它那數(shù)以百千計的神經(jīng)元干了什么,也不理解為何如此的結(jié)構(gòu)能誕生如此美好的數(shù)據(jù)
——
猶如復(fù)雜性科學(xué)般雄卷,處于高層的我們并不能知道底層的”愚群“為何能涌現(xiàn)搓蚪。兩者一比起來,SVM似乎也沒有深度學(xué)習(xí)等那么令人狂熱丁鹉,連Hinton都開玩笑說SVM不過是淺度學(xué)習(xí)(來自深度學(xué)習(xí)的調(diào)侃)妒潭。
不然悴能,個人覺得相對于熱衷于隱含層的神經(jīng)網(wǎng)絡(luò),具有深厚的數(shù)學(xué)理論的SVM更值得讓我們研究雳灾。SVM背后偉大的數(shù)學(xué)理論基礎(chǔ)可以說是現(xiàn)今人類的偉大數(shù)學(xué)成就漠酿,因此SVM的解釋性也非神經(jīng)網(wǎng)絡(luò)可比,可以說谎亩,它的數(shù)學(xué)理論讓它充滿了理性炒嘲,這樣的理性是一個理工科生向往的。就如匈庭,你渴望知道食物的來源以確定食物是否有毒夫凸,如果有毒是什么毒,這樣的毒會在人體內(nèi)發(fā)生了什么反應(yīng)以致于讓你不適
—— 我的理性驅(qū)使我這么想阱持,一個來路不明的食物是不能讓我輕易接受的夭拌。
簡單點講,SVM就是個分類器衷咽,它用于回歸的時候稱為SVR(Support Vector Regression)鸽扁,SVM和SVR本質(zhì)上都一樣。下圖就是SVM分類:
(邊界上的點就是支持向量兵罢,這些點很關(guān)鍵献烦,這也是”支持向量機“命名的由來)
SVM的目的:尋找到一個超平面使樣本分成兩類滓窍,并且間隔最大卖词。而我們求得的w就代表著我們需要尋找的超平面的系數(shù)。
用數(shù)學(xué)語言描述:
這就是SVM的基本型吏夯。
SVM的基本型在運籌學(xué)里面屬于二次規(guī)劃問題此蜈,而且是凸二次規(guī)劃問題(convex quadratic programming)。
二次規(guī)劃的問題主要用于求最優(yōu)化的問題噪生,從SVM的求解公式也很容易看出來裆赵,我們的確要求最優(yōu)解。
簡介:
在限制條件為
的條件下跺嗽,找一個n 維的向量 x 战授,使得
為最小。
其中桨嫁,c為n 維的向量植兰,Q為n × n 維的對稱矩陣,A為m × n 維的矩陣璃吧,b為m 維的向量楣导。
其中,根據(jù)優(yōu)化理論畜挨,如果要到達最優(yōu)的話筒繁,就要符合KKT條件(Karush-Kuhn-Tucker)噩凹。
KKT是在滿足一些有規(guī)則的條件下,一個非線性規(guī)則問題能有最優(yōu)解的一個充分必要條件毡咏。也就是說驮宴,只要約束條件按照這個KKT給出的規(guī)則列出,然后符合KKT條件的血当,就可以有最優(yōu)解幻赚。這是一個廣義化拉格朗日乘數(shù)的成果。
把所有的不等式約束臊旭、等式約束和目標函數(shù)全部寫為一個式子
L(a, b, x)= f(x) + a*g(x)+b*h(x)
KKT條件是說最優(yōu)值必須滿足以下條件:
L(a, b, x)對x求導(dǎo)為零
h(x) = 0
a*g(x) = 0
將一個原始問題轉(zhuǎn)換為一個對偶問題落恼,懂的人知道對偶問題不過是把原始問題換了一種問法,從另一角度來求問題的解离熏,其本質(zhì)上是一樣的佳谦。就好像我不能證明我比百分之五的人丑,但是我能證明我比百分之九十五的人帥滋戳,那樣就夠了钻蔑。那么,為啥要用對偶問題奸鸯,直接求原始問題不好嗎咪笑?參考一下為什么我們要考慮線性規(guī)劃的對偶問題?
而二次規(guī)劃的對偶問題也是二次規(guī)劃娄涩,性質(zhì)窗怒、解法和原來一樣,所以請放心蓄拣。(只做簡要介紹
最后訓(xùn)練完成時扬虚,大部分的訓(xùn)練樣本都不需要保留,最終只會保留支持向量球恤。這一點我們從圖上也能看得出來辜昵,我們要確定的超平面只和支持向量有關(guān)不是嗎?
(你看咽斧,只和支持向量有關(guān))
然而堪置,問題又出現(xiàn)了(新解法的出現(xiàn)總是因為新問題的出現(xiàn)),對于SVM的對偶問題张惹,通過二次規(guī)劃算法來求解的計算規(guī)模和訓(xùn)練樣本成正比舀锨,開銷太大。換句話來說诵叁,輸入數(shù)據(jù)小的時候還好雁竞,不過小數(shù)據(jù)幾乎沒啥用,但是數(shù)據(jù)量大起來又計算量太大,所以就得尋找一種適合數(shù)據(jù)量大而且計算量小的解法碑诉,這個就是SMO彪腔。
SMO,Sequential Minimal Optimization进栽,針對SVM對偶問題本身的特性研究出的算法德挣,能有效地提高計算的效率。SMO的思想也很簡單:固定欲求的參數(shù)之外的所有參數(shù)快毛,然后求出欲求的參數(shù)格嗅。
例如,以下是最終求得的分類函數(shù)唠帝,也就是我們SVM的目標:
SMO算法每次迭代只選出兩個分量ai和aj進行調(diào)整屯掖,其它分量則保持固定不變,在得到解ai和aj之后襟衰,再用ai和aj改進其它分量贴铜。
如何高效也能通過SMO算法的思想看得出來 ——
固定其他參數(shù)后,僅優(yōu)化兩個參數(shù)瀑晒,比起之前優(yōu)化多個參數(shù)的情況绍坝,確實高效了。然而苔悦,與通常的分解算法比較轩褐,它可能需要更多的迭代次數(shù)。不過每次迭代的計算量比較小玖详,所以該算法表現(xiàn)出較好的快速收斂性把介,且不需要存儲核矩陣,也沒有矩陣運算竹宋。說白了劳澄,這樣的問題用SMO算法更好地技。
我們的SVM目的其實也簡單蜈七,就是找一個超平面,引用一張圖即可表述這個目的:
然而現(xiàn)實任務(wù)中莫矗,原始樣本空間也許并不能存在一個能正確劃分出兩類樣本的超平面飒硅,而且這是很經(jīng)常的事。你說說要是遇到這樣的數(shù)據(jù)作谚,怎么劃分好呢:
告訴我你的曲線方程吧三娩,傻了吧~
于是引入了一個新的概念:核函數(shù)。它可以將樣本從原始空間映射到一個更高維的特質(zhì)空間中妹懒,使得樣本在這個新的高維空間中可以被線性劃分為兩類雀监,即在空間內(nèi)線性劃分。這個過程可以觀看視頻感受感受,由于是youtube所以我截一下圖:
這是原始數(shù)據(jù)和原始空間会前,明顯有紅藍兩類:
通過核函數(shù)好乐,將樣本數(shù)據(jù)映射到更高維的空間(在這里,是二維映射到三維):
而后進行切割:
再將分割的超平面映射回去:
大功告成瓦宜,這些就是核函數(shù)的目的蔚万。
再進一步,核函數(shù)的選擇變成了支持向量機的最大變數(shù)(如果必須得用上核函數(shù)临庇,即核化)反璃,因此選用什么樣的核函數(shù)會影響最后的結(jié)果。而最常用的核函數(shù)有:線性核假夺、多項式核淮蜈、高斯核、拉普拉斯核已卷、sigmoid核礁芦、通過核函數(shù)之間的線性組合或直積等運算得出的新核函數(shù)。(這里只涉及概念悼尾,不涉及數(shù)學(xué)原理)
知道了上面的知識后柿扣,你不是就覺得SVM分類就應(yīng)該是這樣的:
然而這也不一定是這樣的,上圖給出的是一種完美的情況闺魏,多么恰巧地兩類分地很開未状,多么幸運地能有一個超平面能將兩個類區(qū)分開來!要是這兩個類有一部分摻在一起了析桥,那又該怎么分八静荨:
有時候如果你非要很明確地分類,那么結(jié)果就會像右邊的一樣 ——
過擬合泡仗。明顯左邊的兩個都比過擬合好多了埋虹,可是這樣就要求允許一些樣本不在正確的類上,而且這樣的樣本越少越好娩怎,”站錯隊“的樣本數(shù)量要通過實際來權(quán)衡搔课。這就得用上”軟間隔“,有軟間隔必然有硬間隔截亦,應(yīng)間隔就是最開始的支持向量機爬泥,硬間隔支持向量機只能如此”明確“地分類。特意找來了這個數(shù)學(xué)解釋:
其中一個樣本要是”站錯隊“就要有損失崩瓤,我們的目的就是:找出總損失值最小并且能大概分類的超平面袍啡。而計算一個樣本的損失的損失函數(shù)也有很多種,例如:hinge損失却桶、指數(shù)損失境输、対率損失等。
只是簡單地把思路整理了一遍而已。