SVM -支持向量機原理詳解與實踐之二
-
SVM原理分析
以下內容接上篇。
-
拉格朗日對偶性(Largrange duality)深入分析
-
前面提到了支持向量機的凸優化問題中拉格朗日對偶性的重要性。
因為通過應用拉格朗日對偶性我們可以尋找到最優超平面的二次最優化,
所以以下可以將尋找最優超平面二次最優化(原問題),總結為以下幾個步驟:
- 在原始權重空間的帶約束的優化問題。(注意帶約束)
- 對優化問題建立拉格朗日函數
- 推導出機器的最優化條件
-
最后就是在對偶空間解決帶拉格朗日乘子的優化問題。
注:以上這個四個步驟是對優化問題的的概括,后面會注意講解這幾個步驟。
於是首先想到的幾個隨之而來的幾個問題:
- 第一個問題是拉格朗日對偶性是什么?
- 第二問題是為什么拉格朗日對偶性可以幫助我們找到最優超平面的二次最優化?
-
第三個問題是如何運用拉格朗日對偶性找到最優超平面的二次最優化?
下面的內容將對以上三個問題進行深入的分析。
首先對於第一個問題,我們首先必須清楚兩個概念即原問題和對偶問題,以及他們之間的關系.
-
原問題
假設是定義在
上的連續可微函數,考慮約束最優化問題:
稱為約束最優化問題的原問題。注意必須是連續可微的。類似的對比我們之前分析的最優超平面的二次最優化問題:
其中就為
,約束條件
對應的就是
,都是帶約束的最優化問題。如果是不帶約束(沒有后面的約束條件)我們知道可以直接對
直接求偏導,即可解出最優解。
但是如何把帶約束的原始問題轉化為不帶約束的原問題呢?拉格朗日函數就是解決這個問題的,於是我們引入廣義的拉格朗日函數:
其中是拉格朗日乘子,需要注意的是約束條件
。
如果我們把上面這個廣義的拉格朗日函數看做是一個關於
的函數,於是要求求解這個關於
的函數
的極大值,表示如下:
要求解上式,我們可以將看做常數,求解出一對
使得
得極大值,求出這一對
后,又由於
已經確定,很顯然的:
只是一個和有關的函數,我們將這個函數定義為:
這里中的P下標表示"primal"。讓我們假設
已經給定,我們可以通過是否滿足約束條件來分析這個函數。
-
情況一:
違反了原始的約束,也就是
或是
,如下:
有前面的定義可知,又由於違反了原始的約束,也就是
或是
這個情況,所以很容易通過取拉格朗日乘子
的值使得
,也就是:
-
情況二:
滿足原始的約束,也就是
或是
,所以:
注意要想使得最大化,由於滿足約束條件
或是
,其實就是后面兩個式子就等於0,又由於在最大化的過程中
為常數,常數的最大值就是本身,所以:
通過上述的分析我們可以總結,也就是:
上面分析了原問題在
滿足原始的約束和不滿足原始約束的情況下的取值,那么如果是在滿足原始約束的條件下面我們考慮最小化
的問題:
也即:
是的,到這里我們發現和我們前面定義的原問題
一樣。它們是等價的,於是我們將原始問題的最優值定義為:
總結:通過拉格朗日函數重新定義一個無約束問題,這個無約束問題等價於原來的約束優化問題,從而將約束問題無約束化!
-
對偶問題
定義一個關於的函數:
這里的D是指'Dual' 即對偶,注意和是一個關於
的函數不同,這里的
是一個關於
兩個拉格朗日乘子的函數。等式的右邊確定是關於
的函數的最小化,當
確定以后,最小值只和
有關。
下面極大化,於是有:
觀察上式,對比原問題:
我們可以看到對偶問題是先最小化再對結果取最大化,而原問題則相反,它們的區別在於:
- 原問題先固定
中的
,優化出參數
,再優化出最優的
;
- 對偶問題則是先固定
,優化出最優的
,最后確定參數
。
為了方便講解我們定義對偶問題的最優值為:
-
原問題與對偶問題的關系
定理:若原始問題與對偶問題都有最優值,則:
證明:對任意有:
即:,
由於原始問題和對偶問題都有最優值,所以:
即:
也就是說原始問題的最優值不小於對偶問題的最優值,但是我們要通過對偶問題來求解原始問題,就必須使得原始問題的最優值與對偶問題的最優值相等,於是可以得出下面的推論:
推論:設和
分別是原始問題和對偶問題的可行解,如果
,那么
和
分別是原始問題和對偶問題的最優解。
到此我們通過對原問題和對偶問題,以及它們之間關系的了解,也就回答了前面提的第一個問題:拉格朗日對偶性是什么?
這里再次總結拉格朗日對偶性:即
- 如果原問題有最優解,對偶問題也有最優解,並且相應的最優值是相同的;
-
-
KKT條件
-
定理:對於原始問題和對偶問題,假設函數和
是凸函數,
是仿射函數(即由一階多項式構成的函數,
),A是矩陣,b是向量);並且假設不等式約束
是嚴格可行的,即存在
,對所有
有
,則存在
和
,使得
是原始問題的最優解,
是對偶問題的最優解,並且:
定理:對於原始問題和對偶問題,假設函數和
是凸函數,
是仿射函數(即由一階多項式構成的函數,
),A是矩陣,b是向量);並且假設不等式約束
是嚴格可行的,即存在
,對所有有
,則存在
和
,分別是原始問題和對偶問題的最優解的充分必要條件是
和
,滿足下面的Karush-Kuhn-Tucker(KKT)條件:
關於KKT 條件的理解:前面三個條件是由解析函數的知識,對於各個變量的偏導數為0(這就解釋了一開始為什么假設三個函數連續可微,如果不連續可微的話,這里的偏導數存不存在就不能保證),后面四個條件就是原始問題的約束條件以及拉格朗日乘子需要滿足的約束。
特別的條件叫做KKT的對偶互補條件,這個條件隱含了如果
,那么
,也就是說,
,
處於可行域的邊界上,這時才是起作用的約束,其他位於可行域內部(如
)的點都是不起作用的約束,這時候的
。
總結:在某些條件下,把原始的約束問題通過拉格朗日函數轉化為無約束問題,如果原始問題求解棘手,在滿足KKT的條件下用求解對偶問題來代替求解原始問題,使得問題求解更加容易。
-
最優間隔分類器
上個章節中我們詳細介紹了拉格朗日對偶性,原問題以及對偶問題,還有他們之間的關系,最后還介紹了KKT條件,這也就回答了在拉格朗日對偶性章節開頭提到第一個和第二個問題。
這一章節我們就開始介紹從二次優化問題構造拉格朗日函數開始一步步介紹如何運用拉格朗日對偶性求解對偶問題的解,從而得到原問題解的過程。也就是我們的第三個問題。
-
支持向量、構造拉格朗日函數
在二次最優化章節中,我們將尋找決策曲面使得幾何間隔最大化的問題轉化為了可以通過拉格朗日對偶性求得最優解的二次最優化問題,如下:
因為我們是要求關於w的最優化,所以在這一章節中我們將約束條件改為關於w的函數:
為什么將而不是令
呢?
因為我們為了通過拉格朗日對偶性求解問題,則原問題的約束條件就需要寫成前面提到定義一樣的形式即 (這里的x就是w),也就是約束條件轉化為小於0的形式即:
0,所以令
。
對於任一訓練樣本我們只有這樣的一個約束條件,注意前面章節最后提到的從KKT對偶互補條件,我們有,但這只是對於函數間隔正好為1的訓練樣本(例如,那個對應的約束,即保持等式
)。考慮下圖,在下圖中實線表示最大間隔分離超平面:
如上圖我們可以看到那些有着最小間隔的點正是距離決策邊界最近的點,圖中有三個這樣的點,其中一個在負例兩個為正例,他們恰好在決策邊界兩邊的虛線上。這些在虛線上的點就是函數間隔為1的訓練樣本,這些樣本點前面的系數就是,由前面分析知道,這些樣本是非零(
> 0)的,
為這些特殊樣本點前面系數,其他的的都是
=0的。這些特殊的點就是支持向量。事實上這些支持向量的個數要比訓練集大小要更小就更有幫助。
下面為我們的優化問題構造拉格朗日運算,在這之前先回顧廣義的拉格朗日函數:
對比廣義的拉格朗日函數,優化問題也就是上式的
,約束
1, 參考原問題中的約束條件
,所以沒有拉格朗日乘子
,於是我們為優化問題構造優化問題拉格朗日函數:
-
求解拉格朗日函數
根據上一章節所描述的,求解上式我們需要從它的對偶形式着手,所以首先要找到上式的對偶形式,為了達到這個目的,參考上一章節對偶問題的描述:
- 對偶問題則是先固定拉格朗日乘子
,優化出最優的
,最后確定參數
。
在這里就是首先最小化關於的函數
(就是
),先固定拉格朗日乘子
,優化出最優的
,最后再確定參數
;為了得到
首先需要對關於w的函數求偏導,
|
也就是:
|
上式就是一個關於w的表達式,但是它是最優的,下面對關於b的函數求偏導,
|
(3.7.2-2) |
我們將對w求得到的偏導帶入到原
中可得到該函數的最小值:
|
(3.7.2-3) |
上式的計算過程如下,其中, 另外5)到6)步用到了線性代數的轉置運算,6)到7)步用到了乘法運算法則:
(a+b+c…)(a+b+c…) = aa + ab+ac+ba+bb+bc+ca+cb+cc…
由關於對b的函數求偏導計算結果(3)可知,(4)中的最后一項為0;所以簡寫(4)可得:
|
(3.7.2-4) |
回顧得到上式(5)的整個過程,我們是通過最小化關於的函數得到的,觀察5)我們可以發現
只包含了變量
,至此我們完成了對偶問題中先固定乘子
,得到最優化的
(關於
的表達式)的步驟,然后就是要確定乘子
(有了
我們才可以最終確定
),為了確定
我們下一步就是要最大化
,也就是對偶問題:
為了確定,我們首先要將上式表示成關於
的函數即:
其中為
的內積形式。
到此我們還不能解(6)方程,后面會通過SMO算法來求解,因為在線性不可分模式下尋找最優超平面,還需要引入軟間隔,求解的結果和上式類似。但是到這里可以確定的是,一旦確定,我們就可以通過式(2),也就是對w求的偏導數:
求得到,也就是原問題的解。然后通過以下公式,可以直接求出截距
:
|
(3.7.2-6) |
-
預測新樣本分類
假設我們已經通過SMO算法計算出了w,隨之計算出了b,於是我們得到了一個可供預測新樣本分類的模型,現在來了一個新的樣本需要我們預測,於是我們回到了預測問題
,帶入:
可得:
觀察上式可知,為了預測新樣本的分類,我們就必須計算一個量,這個量取決於新樣本和所有訓練集中的樣本
的內積和,這個計算不會很大,因為我們從KKT條件可以知道只有支持向量的點
,因為我們已經知道支持向量是那些距離最優超平面最近的點,所以這些點不會很多,也就是說大多數的向量點都的系數
;從而上式中的大多數項都等於0,我們只需要計算支持向量和新樣本
即可,所以訓練完成后最終的模型只和支持向量有關。
-
不可分模式下的最優超平面
前面我們已經討論了線性可分模式下的最優超平面的情況,但是在現實中訓練集往往是線性不可分的。例如下圖所示:
從上圖我們可以看到,在二維空間正例和負例是交叉的,但是在三維空間我們就可以找到一個決策曲面將訓練樣本分隔開來。所以我們希望將在二維空間線性不可分的問題轉化到三維去解決,面對現實中更復雜的問題,我們可以抽象的說,將在低維空間線性不可的問題轉化為高維空間線性可分的問題,嘗試在高維空間去找到這個將正例和負例分隔開來的決策曲面,這樣往往比較有效,但是不是絕對的,需要記住這點。
為了將低維的數據(其實也就是向量)映射到高維空間,我們就需要映射函數的表示,我們這里將它統一的表示為:
向量的維度也就是說向量的長度,例如幼兒做兒童保健的時候需要看一些指標來判定兒童的生長狀況{身長,體重,腦顱寬度,囟門}等,這里我們說指標數據是四維的。
一個房子要評估它的價格有幾個特征可以參考如{面積,房間個數,廁所個數}等,這里的特征數據就是三維的。
- 輸入屬性(input attributes):就是原始問題的屬性,例如面積
。
- 輸入特征(input features):就是通過映射后傳給學習算法的量。
- 特征映射(features mapping): 從輸入屬性到輸入特征的映射,這里用
表示,輸入特征即
特別的如果輸入向量有m維,則可以表示為: