支持向量機SVM總結之拉格朗日對偶問題
前一章節最後得到了SVM的優化目標函數:
現在我們就需要想方設法去解這個函數優化問題。
凸優化
我們的函數優化問題是一個凸優化問題,什麼叫凸優化,我下面只是簡單得講一下,不過多深入。
解釋一下「凸」。在一段數據區間內[x1,x2],任意的數據點都可以用 表示,其中 ,這段區間稱為convex set。一個函數如果其變數域是convex set,且任意其變數域中的 都滿足: ,其中 ,則說明這個函數式嚴格凸的。二次函數曲線在實數域上是典型的一個凸的函數。
凸優化問題就是去尋找凸函數的極值。一般在沒有任何約束條件下,求函數極值一般是求偏導,然後令偏導為0,求得參數的值。這是最簡單的情況。但是我們的SVM優化目標函數是有不等式約束條件的。之前在隱馬爾可夫模型總結時,遇到過有等式約束的條件下,求函數的極值問題,使用的是拉格朗日乘子法。這個方法的具體內涵可以見quora上的經典回答。
https://www.quora.com/What-is-the-meaning-of-the-value-of-a-Lagrange-multiplier-when-doing-optimization/answer/Balaji-Pitchai-Kannu等式約束條件下的優化問題已經知道方法了,但是我們的SVM中的優化函數是帶不等式約束條件的,這個怎麼求?這裡我讀了幾篇博客包括淺談最優化問題的KKT條件,關於SVM數學細節邏輯的個人理解(二):從基本形式轉化為對偶問題 - xxrxxr - 博客園,給出了詳細的介紹,下面我先介紹一下對偶問題,然後結合上述博客,詳細說明對偶問題的KKT條件是如何推導出來的。
對偶問題
考慮同時帶等式約束和不等式約束的優化問題:
我們使用通用的拉格朗日乘子法,得到拉格朗日多項式:
其中, 是對應於 的拉格朗日乘子, 是對應於 的拉格朗日乘子。我們定義原始的優化目標:
這裡, 是非負的,這個目標就是最大化我們的拉格朗日多項式,將上述式子進行展開得到:
從上式可以得到,若我們的參數w不滿足 ,此時因為 是非負的,那麼取 為正數可以讓中間的項永遠大於0,因此 ;若參數w不滿足 ,那麼讓 ,使得 。相反,若參數w滿足所有的原始約束條件,那麼此時可以得到, , ,要使 最大,那麼就有: 。因此原始優化目標可以寫成:
因此我們S原來的找極小值的優化問題也可以寫成:
此時為了敘述方便,定義 表示我們需要求的最優目標值,這個通常叫做原始問題,表示原始的優化目標。
而往往對應於原始問題,我們能夠轉化為相應的對偶問題。對偶問題可以理解為在研究目標函數在約束條件下的極大值問題時,通常都存在與之匹配的求極小值的問題。因此上面的例子中,對應的對偶問題形式如下:
相當於是把原始問題中的max和min的位置進行了對調。有一個顯而易見的結論,即對一個序列先找極小值,然後在所有極小值中找到一個最大值a;對一個序列先找極大值,然後在所有極大值中找到一個最小值b。 是明顯成立的。因此有:
為何要研究對偶問題?我自己的理解是對偶問題比原始問題更容易解,容易在哪裡?可以看到對偶問題外層的優化目標參數是拉格朗日參數,然後通過求得的拉格朗日參數,間接得到我們最終要求的超平面的參數w。而原始問題外層的優化目標參數直接是w,無法直接去優化得到這個參數(因為還存在著其他未知的拉格朗日參數)
那麼什麼時候對偶問題能夠等價於原始問題呢?由於上式為 ,兩個問題要等價,相當於要使 。因此有數學家提出了一些理論來讓兩種問題等價。假設當前函數f以及 都是凸的,且 是仿射的(理解為帶截距的線性函數),同時存在w,使得 對所有i都成立。此時必然存在參數解 (第一個是原始問題的解,後兩個是對偶問題的解),使得 。 必須要滿足這樣一個條件,叫Karush-Kuhn-Tucker(KKT)條件:
其中第三個條件稱為KKT對偶補充條件。當 時,說明 。這個結論對後面提升SVM計算效率很有用,它能夠表明只有很少的一部分數據點需要考慮 。
簡單推導KKT
力學渣:淺談最優化問題的KKT條件
寫在SVM之前--凸優化與對偶問題 - vibe - 博客園
根據上面兩個博客中對KKT的推導,我簡單得進行總結,盡量用我自己的語言來描述。
首先,明確我們的目標:即參數解集 要使得 。
1、 必然是 的極值解。因此其對應偏導應當為0.
2、第二個KKT條件與第一個條件類似
3、由於 屬於 最小值集中的一個,因此
而 在上一節中推導對偶問題時,已知 ,因此有如下等式成立:
因為 =0本來就是我們的等式約束,因此可以得到:
而由於 和 本來就是約束條件,因此 ,要使上述等式成立,求和的每項只能等於0,因此得到:
SVM中的對偶問題應用
上面就是一些對偶問題的數學原理描述,不是很深入,但是對於了解SVM感覺應該夠用了。下面就將這個思想應用到我們的SVM模型問題中。重新看一下我們的SVM中的原始問題:
可以看到我們只有不等式約束,因此將不等式約束統一改寫為標準形式:
有KKT互補條件得知, 也即 的數據點表示的是那些間距為1的數據樣本點,這種樣本數據上一章我們提到過,叫支持向量。這裡就不細說了。等後面講到具體的SVM實現時,會提一下。下面我們構造我們的 :
要得到其對偶形式,首先固定參數 ,以w和b為參數,求 的極小值。求法很簡單,還是用求偏導數,令偏導數為0:
得到w的表達式:
同理對b求偏導,得到:
將w的表達式反代入L中,得到:
最後一項可以得到為0,因此有:
再結合我們的約束條件 以及
可以得到我們的對偶問題形式:
其實根據上面我們的推導過程,以及約束條件,可以看出我們的對偶問題滿足KKT條件。
至此,就可以用這個去解決問題了,相當於先求出最優的 ,然後推得對應的w和b,具體的在後面的SMO中會有講解。
這裡提一點,我們在訓練完模型後,假設得到了最優 、w和b,那麼預測過程為計算 ,若結果大於0,則預測y=1。其實 可以化為:
實際上, 為訓練樣本中的數據點。根據支持向量的性質,支持向量對應的 不為0,其他數據的 均為0,且支持向量的個數通常都比較少,因此可以極大降低計算的成本。
接下來有兩個問題:
1、計算樣本x之間的內積,計算量還是很大的,有沒有什麼方法減小計算量呢?
2、若大部分樣本數據在當前維度上不是線性可分的怎麼辦?
3、如果出現少量異常點怎麼辦?
對於1和2兩個問題,下面我們將引入kernel方法,將維度進行轉換。對於3這個問題我們將引入懲罰項,類似於regularization,將原來我們的hard-SVM轉換為soft-SVM來解決。下兩章將著重介紹這兩個方面。
reference:
cs229 notes
力學渣:淺談最優化問題的KKT條件寫在SVM之前--凸優化與對偶問題 - vibe - 博客園
推薦閱讀:
※Paper Reading | 多角度講解自動駕駛中的激光雷達感知系統
※降維技術解析:PCA, t-SNE and Auto Encoders
※入門教程 | 使用 Colab,玩轉谷歌深度學習全家桶!
※VC眼中的人工智慧!
※我是如何「元學習」的