# 附錄 C、SVM 對偶問題
> 譯者:[@rickllyxu](https://github.com/rickllyxu)
為了理解對偶性,你首先得理解拉格朗日乘子法。它基本思想是將一個有約束優化問題轉化為一個無約束優化問題,其方法是將約束條件移動到目標函數中去。讓我們看一個簡單的例子,例如要找到合適的  和  使得函數  最小化,且其約束條件是一個等式約束:。使用拉格朗日乘子法,我們首先定義一個函數,稱為**拉格朗日函數**:。每個約束條件(在這個例子中只有一個)與新的變量(稱為拉格朗日乘數)相乘,作為原目標函數的減數。
Joseph-Louis Lagrange 大牛證明了如果  是原約束優化問題的解,那么一定存在一個 ,使得  是拉格朗日函數的駐點(駐點指的是,在該點處,該函數所有的偏導數均為 0)。換句話說,我們可以計算拉格朗日函數  關于  以及  的偏導數;然后我們可以找到那些偏導數均為 0 的駐點;最后原約束優化問題的解(如果存在)一定在這些駐點里面。
在上述例子里,偏導數為

當這些偏導數均為 0 時,即 ,即可得 。這是唯一一個駐點,那它一定是原約束優化問題的解。然而,上述方法僅應用于等式約束,幸運的是,在某些正則性條件下,這種方法也可被一般化應用于不等式約束條件(例如不等式約束,)。如下公式 C-1 ,給了 SVM 硬間隔問題時的一般化拉格朗日函數。在該公式中, 是 KKT 乘子,它必須大于或等于 0。
> 譯者注
>
>  是  抑或 ,取決于拉格朗日函數的寫法,以及原目標函數函數最大化抑或最小化。

就像拉格朗日乘子法,我們可以計算上述式子的偏導數、定位駐點。如果該原問題存在一個解,那它一定在駐點  之中,且遵循 KKT 條件:
- 遵循原問題的約束:, 對于 
- 遵循現問題里的約束,即 
-  或者第`i`個約束條件是積極約束,意味著該等式成立:。這個條件叫做 互補松弛條件。它暗示了  和第`i`個樣本位于 SVM 間隔的邊界上(該樣本是支持向量)。
注意 KKT 條件是確定駐點是否為原問題解的必要條件。在某些條件下,KKT 條件也是充分條件。幸運的是,SVM 優化問題碰巧滿足這些條件,所以任何滿足 KKT 條件的駐點保證是原問題的解。
我們可以計算上述一般化拉格朗日函數關于`w`和`b`的偏導數,如公式 C-2。

令上述偏導數為 0,可得到公式 C-3。

如果我們把上述式子代入到一般化拉格朗日函數(公式 C-1)中,某些項會消失,從而得到公式 C-4,并稱之為原問題的對偶形式。

現在該對偶形式的目標是找到合適的向量 ,使得該函數  最小化,且 。現在這個有約束優化問題正是我們苦苦追尋的對偶問題。
一旦你找到了最優的 ,你可以利用公式 C-3 第一行計算 。為了計算 ,你可以使用支持向量的已知條件 ,當第 k 個樣本是支持向量時(即它對應的 ),此時使用它計算 。對了,我們更喜歡利用所有支持向量計算一個平均值,以獲得更穩定和更準確的結果,如公式 C-5。
