文章目录
前面我们针对Hard Margin SVM推导了他的原问题:
min ω ∣ ∣ ω ∣ ∣ 2 2 \min \limits_{\bold{\omega}}\frac{||\omega||^2}{2} ωmin2∣∣ω∣∣2 s . t . s.t. s.t. y ( i ) ( ω T x ( i ) + b ) ⩾ 1 i=1,2,...m y^{(i)}(\bold{\omega}^T\bold{x^{(i)}}+b)\geqslant1 \quad\text{i=1,2,...m} y(i)(ωTx(i)+b)⩾1i=1,2,...m
对应的对偶问题:
min α 1 2 ∑ i = 1 m ∑ j = 1 m α i α j y i y j x ( i ) ⋅ x ( j ) − ∑ i = 1 m α i \min\limits_{\alpha} \frac{1}{2}\sum\limits_{i=1}^m\sum\limits_{j=1}^m\alpha_i\alpha_jy_iy_jx^{(i)}\cdot x^{(j)}-\sum\limits_{i=1}^m\alpha_i αmin21i=1∑mj=1∑mαiαjyiyjx(i)⋅x(j)−i=1∑mαi
s . t . s.t. s.t.
α i ⩾ 0 i = 1 , 2 , . . . , m \alpha_i\geqslant0\quad i=1,2,...,m αi⩾0i=1,2,...,m ∑ i = 1 m α i y i = 0 \sum\limits_{i=1}^m\alpha_iy_i=0 i=1∑mαiyi=0
以及决策边界中未知量w的计算方法:
w = ∑ i = 1 m α i y ( i ) x ( i ) w=\sum\limits_{i=1}^m\alpha_iy^{(i)}x^{(i)} w=i=1∑mαiy(i)x(i)
那决策边界中的未知量b如何计算呢?就要用了KKT条件,同时用于求解对偶问题的SMO算法也要应用到KKT条件,所以这一次的内容从KKT条件开始。
3-1 KKT条件
我们说广义拉格朗日乘子函数的构造是从原本只能解决带等式约束的拉格朗日乘数法推广而来,所以我们先从最原始的拉格朗日乘数法的求解开始过程开始。
3-1-1 从拉格朗日乘数法的求解过程说起
拉格朗日乘数法是求解带有等式约束的最优化问题
min x f ( x ) \min\limits_{x}f(x) xminf(x)
h i ( x ) = 0 , i = 1 , 2 , . . . , p h_i(x)=0,\quad i=1,2,...,p hi(x)=0,i=1,2,...,p
对应的求解方法就是构造拉格朗日乘子函数
L ( x , λ ) = f ( x ) + ∑ i = 1 p λ i h i ( x ) L(x,\lambda)=f(x)+\sum\limits_{i=1}^p\lambda_ih_i(x) L(x,λ)=f(x)+i=1∑pλihi(x)
接着对原始的优化变量以及乘子变量求导,并令导数为0,即:
{ ∇ x f + ∑ i = 1 p λ i ∇ x h i ( x ) = 0 h i ( x ) = 0 , i = 1 , 2 , . . . , p \begin{cases} \nabla_xf+\sum\limits_{i=1}^p\lambda_i\nabla_x h_i(x)=0\\ h_i(x)=0,\quad i =1,2,...,p \end{cases} ⎩⎨⎧∇xf+i=1∑pλi∇xhi(x)=0hi(x)=0,i=1,2,...,p
解这个方程组就可以找到极值点,但目前只是把疑似极值点求出来了,至于是不是极值点,是极大还是极小点,还需要进一步判定。
所以上面的方程组只是取得极值的必要条件,而不是充分条件。
3-1-2 推广出KKT条件
针对既带有等式约束和不等式约束的优化问题,我们可以构造广义拉格朗日函数
min x f ( x ) \min\limits_xf(x) xminf(x)
g i ( x ) ⩽ 0 , i = 1 , 2 , . . . q g_i(x)\leqslant0,\quad i=1,2,...q gi(x)⩽0,i=1,2,...q
h i ( x ) = 0 , i = 1 , 2 , . . . p h_i(x)=0,\quad i=1,2,...p hi(x)=0,i=1,2,...p
构造拉格朗日乘子函数
L ( x , λ , μ ) = f ( x ) + ∑ i = 1 p λ i h i ( x ) + ∑ j = 1 q μ j g j ( x ) L(x,\lambda,\mu)=f(x)+\sum\limits_{i=1}^p\lambda_ih_i(x)+\sum\limits_{j=1}^q\mu_jg_j(x) L(x,λ,μ)=f(x)+i=1∑pλihi(x)+j=1∑qμjgj(x)
设极值点为 x ∗ x^* x∗
在极值点出必须要满足:
1.原问题的约束条件 | g i ( x ∗ ) ⩽ 0 , i = 1 , 2 , . . . q g_i(x^*)\leqslant0,\quad i=1,2,...q gi(x∗)⩽0,i=1,2,...q h i ( x ∗ ) = 0 , i = 1 , 2 , . . . p h_i(x^*)=0,\quad i=1,2,...p hi(x∗)=0,i=1,2,...p |
2.对偶问题的约束条件 | μ i ⩾ 0 , i = 1 , 2 , . . . q \mu_i\geqslant0,\quad i=1,2,...q μi⩾0,i=1,2,...q |
3.松弛互补条件 | μ i g i ( x ∗ ) = 0 , i = 1 , 2 , . . . q \mu_ig_i(x^*)=0,\quad i=1,2,...q μigi(x∗)=0,i=1,2,...q |
4.X同时是拉格朗日函数的极小点 ∇ x L ( x ∗ , λ , μ ) = 0 \nabla_xL(x^*,\lambda,\mu)=0 ∇xL(x∗,λ,μ)=0 |
∇ x f ( x ∗ ) + ∑ i = 1 p λ i ∇ x h i ( x ∗ ) + ∑ j = 1 q μ j ∇ x g j ( x ∗ ) = 0 \nabla_xf(x^*)+\sum\limits_{i=1}^p\lambda_i\nabla_xh_i(x^*)+\sum\limits_{j=1}^q\mu_j\nabla_xg_j(x^*)=0 ∇xf(x∗)+i=1∑pλi∇xhi(x∗)+j=1∑qμj∇xgj(x∗)=0 |
再次详细说明下其中的松弛互补条件:
根据 μ i g i ( x ∗ ) = 0 , i = 1 , 2 , . . . q \mu_ig_i(x^*)=0,\quad i=1,2,...q μigi(x∗)=0,i=1,2,...q
我们会发现
当 μ > 0 \mu>0 μ>0时, g i ( x ∗ ) = 0 g_i(x^*)=0 gi(x∗)=0。说明极值点在边界处取得。
当 μ = 0 \mu=0 μ=0时, g i ( x ∗ ) ⩽ 0 g_i(x^*)\leqslant0 gi(x∗)⩽0。说明这个不等式约束对函数没有影响。
以上四条就是KKT条件,它是对原问题最优解的约束,是最优解的必要条件。
但是如果原问题和对偶问题存在强对偶问题,则KKT条件就是取得极值的充要条件。
而我们的支持向量机的原问题不管是线性可分的还是不可分,即使加上后面的核函数,都是强对偶问题。使得我们可以使用KKT条件,得到极值点的一些特征。
3-1-3 KKT条件用于原问题
原问题:
min ω ∣ ∣ ω ∣ ∣ 2 2 \min \limits_{\bold{\omega}}\frac{||\omega||^2}{2} ωmin2∣∣ω∣∣2 s . t . s.t. s.t. y ( i ) ( ω T x ( i ) + b ) ⩾ 1 i=1,2,...m y^{(i)}(\bold{\omega}^T\bold{x^{(i)}}+b)\geqslant1 \quad\text{i=1,2,...m} y(i)(ωTx(i)+b)⩾1i=1,2,...m
根据KKT条件中的松弛互补条件(对于不等式约束,乘子变量*函数值=0)
α i ( y i ( w T x ( i ) + b ) − 1 ) = 0 , i = 1 , 2 , . . . m \alpha_i\Big(y_i(w^Tx^{(i)}+b)-1\Big)=0,\quad i=1,2,...m αi(yi(wTx(i)+b)−1)=0,i=1,2,...m
我们仔细分析下松弛互补条件:
当 α i > 0 \alpha_i>0 αi>0时, y i ( w T x ( i ) + b ) = 1 y_i(w^Tx^{(i)}+b)=1 yi(wTx(i)+b)=1 —>支撑向量
当 α i = 0 \alpha_i=0 αi=0时, y i ( w T x ( i ) + b ) ⩾ 1 y_i(w^Tx^{(i)}+b)\geqslant1 yi(wTx(i)+b)⩾1—>自由变量,对分类超平面不起作用
3-1-4 KKT条件的作用:
- SMO算法选择优化变量
SMO算法是用于求解之后对偶问题的算法,它是一个迭代算法,每次仅选取两个乘子变量进行优化。KKT条件可以帮助我们寻找出需要优化的乘子变量。 - 迭代终止的判定规则
因为对于支持向量机来说KKT条件是极值点的充分必要条件,所以如果在迭代过程中发现待求点已经满足KKT条件了,那我们就把极值点解出来了,无须继续迭代。
3-1-5 决策边界中b的计算:
我们通过将原问题转化为拉格朗日对偶问题,使得最优化的变量从原本的w,b转换为拉格朗日乘子变量 α \alpha α
如果我们可以求得使得对偶问题最优的 α \alpha α后。则决策边界中的w可以通过 w = ∑ i = 1 m α i y i x ( i ) w=\sum\limits_{i=1}^m\alpha_iy_ix^{(i)} w=i=1∑mαiyix(i)求得
而决策边界中b通过松弛互补条件求得。
前面说到,对于最优点来说,当 α i > 0 \alpha_i>0 αi>0时, y i ( w T x ( i ) + b ) = 1 y_i(w^Tx^{(i)}+b)=1 yi(wTx(i)+b)=1。
所以我们只需要到 α i > 0 \alpha_i>0 αi>0对应的样本,求得b。
理论上来说,任意符合 α i > 0 \alpha_i>0 αi>0的样本,都可以用来计算b的值,但由于计算有误差,一般为了减小误差,会用所有满足 α i > 0 \alpha_i>0 αi>0的样本计算b,再取均值。
3-2 SMO算法
3-2-1 我们现在面临的棘手问题
前面讲到了对偶问题,让我们再看下推导得到的对偶问题
min α 1 2 ∑ i = 1 m ∑ j = 1 m α i α j y i y j x ( i ) ⋅ x ( j ) − ∑ i = 1 m α i \min\limits_{\alpha} \frac{1}{2}\sum\limits_{i=1}^m\sum\limits_{j=1}^m\alpha_i\alpha_jy_iy_jx^{(i)}\cdot x^{(j)}-\sum\limits_{i=1}^m\alpha_i αmin21i=1∑mj=1∑mαiαjyiyjx(i)⋅x(j)−i=1∑mαi
s . t . s.t. s.t.
α i ⩾ 0 i = 1 , 2 , . . . , m \alpha_i\geqslant0\quad i=1,2,...,m αi⩾0i=1,2,...,m ∑ i = 1 m α i y i = 0 \sum\limits_{i=1}^m\alpha_iy_i=0 i=1∑mαiyi=0
为了方便之后进一步的推导,我们将对偶问题写成向量化的形式
min α 1 2 α T Q α − e T α \min\limits_{\alpha} \frac{1}{2}\alpha^TQ\alpha-e^T\alpha αmin21αTQα−eTα
s . t . s.t. s.t.
y T α = 0 y^T\alpha=0 yTα=0 α i ⩾ 0 , i = 1 , 2 , . . . , m \alpha_i\geqslant0,\quad i=1,2,...,m αi⩾0,i=1,2,...,m
其中
矩阵 Q i j = y i y j x ( i ) ⋅ x ( j ) Q_{ij}=y_iy_jx^{(i)}\cdot x^{(j)} Qij=yiyjx(i)⋅x(j)
向量 e T = [ 1 , 1 , . . . , 1 ] e^T=[1,1,...,1] eT=[1,1,...,1]
关于从 ∑ j = 1 m α i α j y i y j x ( i ) ⋅ x ( j ) \sum\limits_{j=1}^m\alpha_i\alpha_jy_iy_jx^{(i)}\cdot x^{(j)} j=1∑mαiαjyiyjx(i)⋅x(j)到 α T Q α \alpha^TQ\alpha αTQα
应用了二次型展开。
这部分我不是熟悉,只依稀记得一个例子
x 2 + y 2 + z 2 = [ x y z ] [ 1 0 0 0 1 0 0 0 1 ] [ x y z ] x^2+y^2+z^2=\begin{bmatrix} x &y&z \end{bmatrix}\begin{bmatrix} 1 & 0 &0\\ 0 & 1&0\\ 0 & 0 &1 \end{bmatrix}\begin{bmatrix} x\\ y\\ z \end{bmatrix} x2+y2+z2=[xyz]⎣⎡100010001⎦⎤⎣⎡xyz⎦⎤
中间的矩阵对应的是原本的系数,所以Q本质上就是 α i α j \alpha_i\alpha_j αiαj的系数矩阵
这是一个大规模的二次函数的最优化问题,由于本身是凸优化问题,所以一些经典的最优化算法(如牛顿法,梯度下降法)可以收敛到极值点处。
但棘手的是还存在着等式约束和不等式约束,所以需要更好的求解算法,那就是SMO算法(序列最小最优化算法)
从SVM提出,到SMO算法提出之前,SVM并没有广泛使用就是因为这个对偶问题的求解非常麻烦。
3-2-2 破解对偶问题的神器SMO算法
SMO算法(Sequential minimal optimization)序列最小最优算法的核心思想是分治法(把一个大问题拆解成很多子问题来求解,然后把解合并起来,形成大问题的解)
SMO算法的巧妙之处在于每次选取两个变量进行优化。为什么不只选出一个变量进行优化呢?
因为我们有一个等式约束 ∑ i = 1 m α i y i = 0 \sum\limits_{i=1}^m\alpha_iy_i=0 i=1∑mαiyi=0,如果只有一个 α \alpha α变化的话,就会破坏原来的等式约束。
因此只调整一个变量是不行的,最少要调整2个变量。
根据这个想法,就可以把原来的m元2次问题转化成2元2次问题。
而对于2元2次函数的极值问题的求解就是初中内容了,可以通过等式约束,消掉一个变量,变成一元二次函数求极值的问题。
一元二次函数就是一个抛物线,但因为有 α ⩾ 0 \alpha\geqslant0 α⩾0的限定条件,所以我们需要根据这个情况来进行极值的讨论。
3-2-3 SMO算法的理论推导
3-2-3-1 定义一些变量
之后原来代换的变量也写在这边,方便查看
定义矩阵Q | Q i j = y i y j X i T X j Q_{ij}=y_iy_jX_i^TX_j Qi |