1. 程式人生 > >【svm學習筆記】svm_理論學習圖譜_下

【svm學習筆記】svm_理論學習圖譜_下

接著上一篇說。

泛化理論幫我們解決了維數災難的問題,同時又指導我們找到了目標函式,將模型學習問題轉化成了有約束條件下的優化問題。那麼我們又知道,svm實際上是在高維空間學習一個超平面,那這個目標函式到底找到的是哪個超平面啊?這有引入了一些神馬函式間隔、幾何距離等東東。然後發現,找的是距離兩類樣本有“最大間隔”的超平面。這就是目標函式的幾何意義。

那麼我們有了最優化問題,那怎麼解決這個問題呢?這就要請最優化理論來幫忙了。從前我們遇到的都是無條件優化問題,有等式條件優化問題。前者求導,解方程;後者拉格朗日方法,轉化為前者。而現在遇到的問題有點特殊,是不等式優化問題。咋整?通常意義上來講,沒法整。不過svm又幸運地走了特殊性。首先,我們將問題轉化成對偶問題,也就是另一個不同的問題,但與現在的問題有相同的解(或者說兩個問題的解可以相互轉換)。這是一個凸二次規劃問題

,只要滿足KKT條件(和VC維一樣,三個人名字的首字母組合在一起),不等式約束的優化問題就能轉化為等式約束的優化問題,這個問題就有解析解。各位看官,這個可是解析解啊,就是那種套用個神馬公式就能算出來結果的解啊,不是數值演算法求得的近似解。多麼令人心奮的事情。

不過別高興的太早,這個東西不實用。為啥?它要求樣本數目平方的空間複雜度。當樣本數量是1k的時候,就需要10^6的空間——不是說這麼多的int型別啊——而是說要儲存這麼多樣本的所有資訊。通常樣本是用向量表示的,對於文字分類來講,向量通常有個幾萬維都是正常的。呵呵,嚇人吧。所以說,上面那些講的,那些我們冥思苦想的公式、理論,跟svm的具體訓練、程式碼實現嘛關係沒有——這是最讓我抓狂的。你妹啊,老子花了那麼多時間看你每個公式的每個符號,看到這裡卻發現對寫程式碼一點幫助都沒有。這就像《葵花寶典》裡面說:欲練神功,必先自動;即便自宮,未必成功。艹。

那麼,解析解不行,只能數值解了。其實在神經網路的訓練中,反向傳播演算法也是數值解,利用梯度逐漸更新引數。這裡的思路也是一樣,可以用梯度迭代求解。不過現在最常用的是SMO演算法,翻譯過來是序貫最小化演算法。思路是這樣的:如果整個樣本的集合太大,無法同時全部優化的話,那麼就先優化一部分,然後再優化其它部分,然後再優化這部分.....如此反覆,不也相當於優化了全部了麼。雖然不是同時的吧,但好歹是全部的啊。空間複雜度降下來了,但對於某個引數,需要多次優化,時間複雜度上去了。這是用用時間換空間的想法。哦,光說思想了。序貫最小化演算法做得更加極端,每次只優化兩個引數。說是兩個引數,其實自由度是一,因為當一個引數確定了,另一個也能確定下來。對於訓練演算法,我還想單獨寫一篇來講,這裡就不羅嗦了。

寫到這裡,svm已經能夠被訓練出來了,並用於分類了。這時候又遇到了問題。如果樣本點中有噪聲,使得資料不可分,怎麼辦?那好辦,繼續增加空間維度不就行了。不過在現實中,也有些顧慮。一方面噪聲點肯定是不對的,我們不應該根據這些來做訓練。而用飽含噪聲點的訓練集訓練出來的模型異常複雜,雖然在那種條件下泛化效能最高,但是當遇到新的樣本的時候,新樣本往往不是噪聲點,對其分類其實並不需要那麼複雜的模型來處理。而且,降低維度,降低模型的複雜度,能進一步提高模型的泛化效能。也就是說,不應該要那麼複雜的模型。不過,這個是機器無法判斷的——他並不知道那些是噪聲、那些不是噪聲。這個其實是人的經驗來確定的。題外話,雖然理論保證了模型的泛化效能,但是仍然需要人的先驗知識才能取得好的效果。另一方面,樣本的空間維度往往是樣本的某個描述屬性,如:大小、色彩、光澤等等。在現實中,這些屬性往往是有限的,不是說增加就能夠有的。而且,在特徵選擇中我們會看到,某些屬性對正確分類其實起到了相反的作用。

怎麼辦?以上沒有噪聲點,能夠被正確分類的,svm模型叫做硬間隔模型。對於上一段中提到的,包含噪聲點,無法正確分類的,我們進一步擴充套件了理論,提出了軟間隔優化svm。具體做法挺複雜,不過思路很簡單:對於那些明顯的“離群點”,在一定程度上視而不見就可以了。複雜在於,什麼算作明顯的離群點,在多大程度上視而不見。這就加入了鬆弛變數,帶著這個東東,將從前的那些理論公式又都更新了一遍,還好,理論基本上沒太大變化。而對應鬆弛變數,又引入了一個模型引數,叫做懲罰因子,用C表示,意味著在多大程度上忽略離群點。需要注意的是,C的選擇必須在模型訓練之前,而且沒有什麼指導原則,只能嘗試。其實我們看到,svm初衷很好,理論也很優美,不過具體做起來,好多地方還需要人的先驗知識和手動嘗試。免費的午餐,svm不是,現在也沒有。

再說一下核函式。上文中說了,核函式在svm模型中起到了關鍵的作用,因為它有很神奇的功能:對於低維空間中的量,不必顯示的對映到高維空間,就能夠計算出輸入量在高維空間中的內積。這麼神奇的東西,肯定難找,找到了,也肯定不多。要說的是,核函式之所以成為核函式,必須滿足Mercer條件。而且現在已知的核函式不多:線性核、徑向基等等。雖然創造新的核函式也是擴充套件svm模型的手段之一,不過,門檻有點高啊。

好了,就寫這麼多,以後想起什麼,再補充。