在上一篇博客中,較爲詳細的介紹了在數據完全線性可分的情況下,構建SVM模型的目標,並將構建目標轉化爲最大化幾何距離的優化過程,本篇就將介紹具體優化時的計算過程。還是一樣的,先推薦幾篇不錯的博文,大家也可以參考鏈接中的文章學習。
- 關於凸優化問題
http://www.360doc.com/content/18/0522/09/32196507_756021531.shtml
- 關於拉格朗日乘子法及對偶優化問題
https://www.cnblogs.com/xinchen1111/p/8804858.html
https://www.cnblogs.com/ooon/p/5721119.html
https://www.cnblogs.com/mashiqi/p/3719101.html
1.凸優化問題
在一般的優化問題中求最大值或最小值,通常的做法是找出那些梯度爲0的點(有的情況下還需要求出邊界點的值),然後比較這些點的函數值,最後找出最大值或最小值。這個過程中有兩個問題需要注意,一個是當存在多個極值點時,計算量會比較大;另外一個問題就是鞍點(比較常見的是函數在處)的問題。所以,如果優化問題能夠在附加一些限制條件時能到簡化,那將非常利於最大值或最小值的求解,凸優化問題正是這樣一種簡化後的優化問題。
1.1 凸集
對於 維空間中點的集合,如果對集合中任意兩個點、,以及實數,,都有
則集合稱爲凸集,在二維空間中,可以用一張簡單的圖來描述一下凸集和非凸集的區別
在一些特定的情況下,我們來考慮一下凸集
- 在 維實向量空間中,、,對任意實數,,顯然有
這一結論表明,如果一個優化問題不帶約束,那麼該優化問題的變量可行域是凸集。
- 在 維實仿射子空間
中,假設 、,對任意實數,,有
即,這一結論表明:若優化問題中的約束是一組等式約束,那麼它們確定的可行域是凸集。
- 在 維實向量空間中,多面體空間定義爲
在多面體空間中,假設 、,對任意實數,,有
即,這一結論表明:若優化問題中的約束是一組線性不等式約束,那麼它們確定的可行域是凸集。
最後,還有一個重要的結論是,多個凸集的交集仍然是凸集。
1.2 凸函數
對於函數,如果其定義域內的任意兩個點 、滿足
則函數成爲凸函數,在二維空間中我們映像最深的凸函數就是下面這種情況了
在多維空間中,如何判斷一個函數是否爲凸函數,需要依據其Hessian矩陣判斷。
在一個優化問題中,若目標函數是凸函數,變量可行域是凸集,那麼該優化問題就稱爲凸優化問題。通過以上對凸集及凸函數的定義,我們可以將單變量的凸優化問題用以下表達式描述,多變量的凸優化問題也類似
目標:
約束:
在凸優化問題中,局部最優值即是全局最優值。
2.拉格朗日乘子法
拉格朗日乘子法用於求解帶約束的優化問題,我們先從帶等式約束的情況着手,一步步分析到帶不等式約束的情況。
2.1 等式約束
現假設有函數,帶約束的優化目標爲
函數、投影在平面上的等值線、如下圖所示
圖中帶箭頭的線條表示曲線在該點處的梯度方向。從上圖中可以看到,只有約束曲線與等值線相切的地方,目標函數纔有局部極值,因爲在曲線與等值線不相切處(即交點處),變量沿曲線移動時會增大或者減小,無法得到局部極值。因此,在計算最小值時,首先應該計算出所有滿足約束的極值點,然後在這些極值點中找出最小值。
現在觀察一下等值線與曲線相切時的特徵,在二維空間中,梯度與切線方向垂直(在多維空間中,梯度與切點處切超平面垂直),也就是說、在切點處的梯度共線(這裏不能說反向,儘管上圖中顯示的是反向),因此在切點處有
(1)
爲梯度,爲任意實數,依據梯度的計算方式,式(1)等價於
(2)
(3)
爲偏導數計算符號,這樣在求解極值點時,聯立式(2)、式(3)和計算即可。爲了方便,構造函數
求極值時直接求對、、的偏導數,並令其爲0即可,結果和上面過程一樣,這種方法就是等式約束下的拉格朗日乘子法。
在多個等式約束情況下,也是一樣的做法,構造函數,然後求解對、、 的偏導數並令其爲0
2.2 不等式約束
針對2.1節中的優化問題,現增加一個不等式約束
在帶不等式約束的優化問題中,我們還是要採用先找出局部極值,然後通過比較極值的方式找出最小值,如果局部極值存在,那麼只可能有兩種情況,一種情況是局部極值點在的邊界上,另外一種是時局部極值點在的區域內。我們先將函數、、投影到平面上,點爲曲線與等值線的切點。
第一種情況如下圖所示
此時不等式約束成爲了等式約束,在2.1節中的約束問題中,因爲等式約束的原因無法施加更多的約束,只能要求目標函數與約束函數在切點處的梯度共線,而在不等式約束中,儘管切點位於約束區域的邊界上,但仍能將約束條件加強,我們知道梯度是數值增大最快的方向,函數在切點處的梯度肯定不是指向可行域的,因爲這會使的值減小,而我們的目標是極小值優化問題,切點處是一個極小值點,因此在可行域內越靠近切點,的值越小,所以函數在切點處的梯度方向應該是指向區域的,因此函數、在切點處的梯度方向相反,這樣我們可以利用拉格朗日乘子法構建函數
極值點一定滿足如下條件
第二種情況,切點 不在區域的邊界上,滿足
這種情況下在切點處的不等式約束相當於不存在,我們可以構建函數爲
極值點一定滿足如下條件
結合以上兩種情況,我們可以利用拉格朗日乘子法構造如下函數
該函數的極值點滿足
3.KKT條件與對偶問題
第2節中最終總結出了極值點需滿足的條件,這樣一組約束條件即稱爲KKT條件,它是優化問題中獲取極值點的必要條件。當然,在實際中並不是所有情況下極值點一定滿足KKT條件,解出的極值點還是要代入目標函數中檢查,要想一個優化問題的極值點滿足KKT條件還需要一些規範性條件,我這裏不在此列出這些規範性條件了(可以在文章推薦的文章中學習)。依據以上KKT條件,我們就可以求解優化問題了,但一般直接求解這組方程是比較困難的,爲了更好的解決這個優化問題,數學家還找到了它的對偶問題,當對偶問題比較容易求解時,我們可以通過求解對偶問題來間接的求解原優化問題,我們還是以單個等式約束、不等式約束問題爲例來說明其對偶問題。
利用拉格朗日乘子法構建以下函數及約束條件
我們先來看一下,約束範圍內的點滿足、,所以可以得到
不在約束範圍內的點,可以調整 和 的值使用取到無窮大
此時求解是沒什麼意義的。現在我們只考慮滿足約束的點,那麼原優化問題可以表達成
(4)
該問題的對偶問題即爲
(5)
我們有
在很多文章中都說 “ 最大值中的最小值比最小值中的最大值大是很顯然 ”,這樣的理解在多變量函數中理解起來有點費勁,不過也暫時只能先這樣理解了。求解公式(5)得到的解並不一定是公式(4)中的最優解,那麼我們自然就會問,在什麼條件下,公式(5)與公式(4)表示的問題是等價的呢?在上面說到的滿足KKT條件所需的一些規範性條件中,有一個條件稱爲 條件,滿足 條件的約束問題具有強對偶性質,公式(5)與公式(4)中的解是等價的。 條件表述爲:如果優化問題是個凸優化問題,且至少存在一個點滿足 和 ,則極值一定滿足 KKT 條件,並且滿足強對偶性質。
本篇文章到這裏爲止,已經將準備知識說完了,接下來我們着手處理一下上一篇遺留的優化問題。
4.構建SVM超平面時的優化問題
上一篇中最後的優化問題爲
我們將其轉化爲
這是等價的,目標函數顯然是一個我們熟知凸函數,約束條件定義的可行域也是上文中所說的凸集,所以這是一個凸優化問題。先利用拉格朗日乘子法構建如下函數
我們的優化目標可以表達如下
其對偶問題爲
(6)
很明顯,支持向量上的點滿足,因此優化問題滿足 條件,因此其對偶問題的解等價於原問題的解,這樣我們可以直接求解其對偶問題的最優解。
求取對、的偏導數,並令其爲0,得到
將計算的結果代入公式(6)中,得到
利用一些數值計算軟件,在訓練數據集上就可以計算出結果滿足最優結果的值了,繼而求解出、。也有一些算法能快速計算出結果,這個我們後面再介紹,完全線性可分情況下的支持向量機構建到這裏也就完成了。事實上,並不是所有的值均非0,只有支持向量機上的點其對應的值才非0,這和不等式約束中的第一種情況一致。
5.小結
本篇博客中首先介紹了構建SVM時涉及的數值優化計算過程的背景知識,但是我沒有很詳細的介紹,只是介紹了一些必須的部分,感興趣的同學可以自己再去多瞭解一些。本系列的前兩篇介紹的是在數據完全線性可分情況下SVM的構建,但數據完全線性可分的情況畢竟很少,因此這樣構建的SVM模型分類效果並不好,下一篇開始將進一步介紹數據不完全線性可分情況下SVM的構建。