淺析SVM中的對偶問題
關於SVM對偶問題求解的博客有很多,但是關於為什么要進行對偶問題的分析卻很零散,這里做一個總結
1. 為什么要研究對偶問題?
廣義上講,將原問題的研究轉換為對偶問題的研究主要有一下幾個優勢:
- 原始問題的約束方程數對應於對偶問題的變量數, 而原始問題的變量數對應於對偶問題的約束方程數, 而約束方程數目越少, 優化問題求解的復雜度越低
如在線性SVM的原問題中,樣本量為N\[p^* = min \ \frac{1}{2}||w||^2 \\ s.t. \ y_{i}(w^{T}x_{i} + b ) \geq 1 \]其中2個變量:w, b,但在優化目標函數中只有1個w N個限制條件 在線性SVM的對偶問題中 $$ d^* = min ( \sum\limits_{i=1}^{N}\sum\limits_{j=1}^{N}\alpha_{i}\alpha_{j}y_{i}y_{j}x_{i}x_{j} - \frac{1}{2}\sum\limits_{i=1}^{N}\alpha_{i} )\\ s.t. \ \sum\limits_{i=1}^{N}\alpha_{i}y_{i} = 0\\ \alpha_{i} \geq 0 $$其中N個變量:$\alpha_{i}: \ i=1,2...N$,1個限制條件 - 無論原問題本身是不是一個凸優化問題, 對偶問題總是可以轉換為凸優化問題來研究;當原問題的難以求解時, 對偶問題可以給出一個下界,即:
\[ d^{*} \leq p^{*} \]
2. 在SVM中研究對偶問題的優勢?
假設訓練集一共有N個樣本,每個樣本點維數為n,映射到特征空間中的維度為d 原問題的求解形式為:$f(x) = sign(w^{T}\phi(x_{i}) + b)$ \ 所需計算的乘法次數為:d 對偶問題的求解形式為:$f(x) = \sum\limits_{i=1}^{N}\alpha_{i}y_{i}\kappa(x_{i}, x_{j}) + b$ \ 可以通過KKT條件推導,只有支撐向量對應的$\alpha_{i}$不為0,設支撐向量的總個數為$N_{sv}$,對偶問題所需計算的乘法次數為:$N_{sv}n$ (最少僅由2個支撐向量就可以確定一個超平面,見< <統計學習方法> >P101) **當訓練樣本總數不大,特征空間的維度d>>n時,選擇在對偶問題中求解將有效減少計算量** **同時,當前解決對偶問題已經有了非常高效的算法,如SMO** ## 3. 為什么在實際問題中原問題反而應用得更多? 主要有三點: * 當訓練集很大時,支撐向量很多,計算量:$N_{sv}n >> d$ * 當求解一個SVM的近似解時,研究原問題反而比對偶問題更好(可以參考[Chapelle](http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.129.3368&rep=rep1&type=pdf)等人的論文) * 對偶問題的Gram矩陣的大小為N * N,當訓練集很大時,如N = $10^{6}$,N * N = $10^{12}$,1T,內存根本開不了這么大的空間,訓練都沒辦法訓練!4. 參考資料
Advantages of dual over primal solution of an optimization problem
Why do we prefer Dual Problem over Primal Problem in convex optimization
Why study duality in optimization?