这次一定要弄懂-SVM-3-Hard Margin SVM的对偶问题的求解(SMO算法)


前面我们针对Hard Margin SVM推导了他的原问题:
min ω ω 2 2 \min \limits_{\bold{\omega}}\frac{||\omega||^2}{2} 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}


对应的对偶问题:
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

s . t . s.t.
α i 0 i = 1 , 2 , . . . , m \alpha_i\geqslant0\quad i=1,2,...,m i = 1 m α i y i = 0 \sum\limits_{i=1}^m\alpha_iy_i=0

以及决策边界中未知量w的计算方法:
w = i = 1 m α i y ( i ) x ( i ) w=\sum\limits_{i=1}^m\alpha_iy^{(i)}x^{(i)}

那决策边界中的未知量b如何计算呢?就要用了KKT条件,同时用于求解对偶问题的SMO算法也要应用到KKT条件,所以这一次的内容从KKT条件开始。

3-1 KKT条件

我们说广义拉格朗日乘子函数的构造是从原本只能解决带等式约束的拉格朗日乘数法推广而来,所以我们先从最原始的拉格朗日乘数法的求解开始过程开始。

3-1-1 从拉格朗日乘数法的求解过程说起

拉格朗日乘数法是求解带有等式约束的最优化问题

min x f ( x ) \min\limits_{x}f(x)
h i ( x ) = 0 , i = 1 , 2 , . . . , p h_i(x)=0,\quad 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)

接着对原始的优化变量以及乘子变量求导,并令导数为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}

解这个方程组就可以找到极值点,但目前只是把疑似极值点求出来了,至于是不是极值点,是极大还是极小点,还需要进一步判定。

所以上面的方程组只是取得极值的必要条件,而不是充分条件。

3-1-2 推广出KKT条件

针对既带有等式约束和不等式约束的优化问题,我们可以构造广义拉格朗日函数

min x f ( x ) \min\limits_xf(x)
g i ( x ) 0 , i = 1 , 2 , . . . q g_i(x)\leqslant0,\quad i=1,2,...q
h i ( x ) = 0 , i = 1 , 2 , . . . p h_i(x)=0,\quad 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)

设极值点为 x x^*
在极值点出必须要满足:

1.原问题的约束条件 g i ( x ) 0 , i = 1 , 2 , . . . q g_i(x^*)\leqslant0,\quad i=1,2,...q
h i ( x ) = 0 , i = 1 , 2 , . . . p h_i(x^*)=0,\quad i=1,2,...p
2.对偶问题的约束条件 μ i 0 , i = 1 , 2 , . . . q \mu_i\geqslant0,\quad i=1,2,...q
3.松弛互补条件 μ i g i ( x ) = 0 , i = 1 , 2 , . . . q \mu_ig_i(x^*)=0,\quad i=1,2,...q
4.X同时是拉格朗日函数的极小点
x L ( x , λ , μ ) = 0 \nabla_xL(x^*,\lambda,\mu)=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

再次详细说明下其中的松弛互补条件:
根据 μ i g i ( x ) = 0 , i = 1 , 2 , . . . q \mu_ig_i(x^*)=0,\quad i=1,2,...q
我们会发现
μ > 0 \mu>0 时, g i ( x ) = 0 g_i(x^*)=0 。说明极值点在边界处取得。
μ = 0 \mu=0 时, g i ( x ) 0 g_i(x^*)\leqslant0 。说明这个不等式约束对函数没有影响。

以上四条就是KKT条件,它是对原问题最优解的约束,是最优解的必要条件。
但是如果原问题和对偶问题存在强对偶问题,则KKT条件就是取得极值的充要条件。

而我们的支持向量机的原问题不管是线性可分的还是不可分,即使加上后面的核函数,都是强对偶问题。使得我们可以使用KKT条件,得到极值点的一些特征。

3-1-3 KKT条件用于原问题

原问题:
min ω ω 2 2 \min \limits_{\bold{\omega}}\frac{||\omega||^2}{2} 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}

根据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 > 0 \alpha_i>0 时, y i ( w T x ( i ) + b ) = 1 y_i(w^Tx^{(i)}+b)=1 —>支撑向量
α i = 0 \alpha_i=0 时, y i ( w T x ( i ) + b ) 1 y_i(w^Tx^{(i)}+b)\geqslant1 —>自由变量,对分类超平面不起作用

3-1-4 KKT条件的作用:

  1. SMO算法选择优化变量
    SMO算法是用于求解之后对偶问题的算法,它是一个迭代算法,每次仅选取两个乘子变量进行优化。KKT条件可以帮助我们寻找出需要优化的乘子变量。
  2. 迭代终止的判定规则
    因为对于支持向量机来说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)} 求得

而决策边界中b通过松弛互补条件求得。
前面说到,对于最优点来说,当 α i > 0 \alpha_i>0 时, y i ( w T x ( i ) + b ) = 1 y_i(w^Tx^{(i)}+b)=1
所以我们只需要到 α i > 0 \alpha_i>0 对应的样本,求得b。

理论上来说,任意符合 α i > 0 \alpha_i>0 的样本,都可以用来计算b的值,但由于计算有误差,一般为了减小误差,会用所有满足 α i > 0 \alpha_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

s . t . s.t.
α i 0 i = 1 , 2 , . . . , m \alpha_i\geqslant0\quad i=1,2,...,m i = 1 m α i y i = 0 \sum\limits_{i=1}^m\alpha_iy_i=0

为了方便之后进一步的推导,我们将对偶问题写成向量化的形式

min α 1 2 α T Q α e T α \min\limits_{\alpha} \frac{1}{2}\alpha^TQ\alpha-e^T\alpha

s . t . s.t.
y T α = 0 y^T\alpha=0 α i 0 , i = 1 , 2 , . . . , m \alpha_i\geqslant0,\quad i=1,2,...,m

其中
矩阵 Q i j = y i y j x ( i ) x ( j ) Q_{ij}=y_iy_jx^{(i)}\cdot x^{(j)}
向量 e T = [ 1 , 1 , . . . , 1 ] e^T=[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)} α T Q α \alpha^TQ\alpha
应用了二次型展开。

这部分我不是熟悉,只依稀记得一个例子
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}
中间的矩阵对应的是原本的系数,所以Q本质上就是 α i α j \alpha_i\alpha_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 ,如果只有一个 α \alpha 变化的话,就会破坏原来的等式约束。

因此只调整一个变量是不行的,最少要调整2个变量。

根据这个想法,就可以把原来的m元2次问题转化成2元2次问题。

而对于2元2次函数的极值问题的求解就是初中内容了,可以通过等式约束,消掉一个变量,变成一元二次函数求极值的问题。

一元二次函数就是一个抛物线,但因为有 α 0 \alpha\geqslant0 的限定条件,所以我们需要根据这个情况来进行极值的讨论。

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
定义 u i u_i u i = j = 1 m y j α j X j X i + b u_i=\sum\limits_{j=1}^my_j\alpha_jX_j\cdot X_i+b
u i u_i 相当于把第i个样本带到我们的预测函数中
定义 K i j K_{ij} K i j = X i T X j K_{ij}=X_i^{T}X_j
定义s s = y 1 y 2 s=y_1y_2
定义 v i v_i v i = k = 1 , k = ̸ i , k = ̸ j m y k α k K i k v_i=\sum\limits_{k=1,k=\not i,k=\not j}^m y_k\alpha_kK_{ik}
定义 ξ \xi ξ = y i α i + y j α j = k = 1 , k = ̸ i , k = ̸ j m y k α k \xi=y_i\alpha_i+y_j\alpha_j = -\sum\limits_{k=1,k=\not i,k=\not j}^m y_k\alpha_k
定义 w w w = ξ y i w=\xi y_i
定义 η \eta η = K i i + K j j 2 K i j \eta=K_{ii}+K_{jj}-2K_{ij}
定义 E i E_i E i = u i y i E_i=u_i-y_i

3-2-3-2 KKT条件的作用

再回忆KKT条件:
{ α i > 0 y i ( w T x ( i ) + b ) = 1 α i = 0 y i ( w T x ( i ) + b ) 1 \begin{cases} \alpha_i>0 & y_i(w^Tx^{(i)}+b)=1\\ \alpha_i=0 & y_i(w^Tx^{(i)}+b)\geqslant1 \end{cases}

之前讲到,KKT条件用于选择优化变量,判定迭代是否终止

  1. 选择优化变量:
    KKT条件帮助我们选择每次哪两个变量来优化,怎么挑呢?只要这个变量违反KKT条件,我们就把它挑出来。
    所以如果不满足kkt条件,就一定不是极值点,所以我们要把它挑出来,调整 α \alpha 使得满足KKT条件

  2. 判定迭代的依据:
    如果alphai都满足,说明找到了极值点。

所以大体上SMO算法的流程图为:
在这里插入图片描述
根据SMO算法的流程图,可以看出我们需要解决的几个小问题,分别是如何初始化,如何选出优化变量,如何优化选出的变量。先就其中最繁琐的如何优化选出的变量说起。

3-2-3-3 子问题的推导->如何优化选出的变量

3-2-3-3-1 转化为二元二次函数问题

假如我们已经通过KKT条件,从m个 α \alpha 中已经选出了需要优化的2个变量 α i , α j \alpha_i,\alpha_j

这时对于对偶问题 f ( α ) = 1 2 i = 1 m j = 1 m α i α j y i y j x ( i ) x ( j ) i = 1 m α i f(\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 来说,只有 α i \alpha_i α j \alpha_j 是变量,其他的都是常量,这时我们的目标函数就转化成了二元二次函数,再根据等式约束,可以进一步转化为一元二次求极值的问题。

我们将上式整理下,写成 系数 α i 2 + 系数 α j 2 + 系数 α i α j + 系数 α i + 系数 α j + 系数 \boxed{\text{系数}}\alpha_i^2+\boxed{\text{系数}}\alpha_j^2+\boxed{\text{系数}}\alpha_i\alpha_j+\boxed{\text{系数}}\alpha_i+\boxed{\text{系数}}\alpha_j+\boxed{\text{系数}} 这样的形式
g ( α i , α j ) = 1 2 K i i α i 2 + 1 2 K j j α j 2 + s K i j α i α j + y i v i α i + y j v j α j α i α j g(\alpha_i,\alpha_j)=\frac{1}{2}K_{ii}\alpha_i^2+\frac{1}{2}K_{jj}\alpha_j^2+sK_{ij}\alpha_i\alpha_j+y_iv_i\alpha_i+y_jv_j\alpha_j-\alpha_i-\alpha_j

其中
s = y 1 y 2 s=y_1y_2
v i = k = 1 , k = ̸ i , k = ̸ j m y k α k K i k v_i=\sum\limits_{k=1,k=\not i,k=\not j}^m y_k\alpha_kK_{ik}

约束条件为
α i 0 \alpha_i\geqslant0
α j 0 \alpha_j\geqslant0

k = 1 m y k α k = 0 \sum\limits_{k=1}^my_k\alpha_k=0 由此可以推出
y i α i + y j α j = k = 1 , k = ̸ i , k = ̸ j m y k α k = ξ y_i\alpha_i+y_j\alpha_j = -\sum\limits_{k=1,k=\not i,k=\not j}^m y_k\alpha_k=\xi

接下来的目标就是计算 f ( α i , α j ) f(\alpha_i,\alpha_j) 的极值

3-2-3-3-2 确定 α j \alpha_j 的可行域

因为
y i α i + y j α j = k = 1 , k = ̸ i , k = ̸ j m y k α k = ξ y_i\alpha_i+y_j\alpha_j = -\sum\limits_{k=1,k=\not i,k=\not j}^m y_k\alpha_k=\xi

所以
α i + y i y j α j = y i ξ \alpha_i+y_iy_j\alpha_j=y_i\xi
由于 y i y j y_iy_j 的正负号不知,所以一共对应四种情形,同时我们还可以尝试确定下 ξ \xi 的正负

序号 y i y_i y j y_j α i + y i y j α j = y i ξ \alpha_i+y_iy_j\alpha_j=y_i\xi ξ \xi
1 + + α i + α j = ξ \alpha_i+\alpha_j=\xi +
2 - - α i + α j = ξ \alpha_i+\alpha_j=-\xi -
3 + - α i α j = ξ \alpha_i-\alpha_j=\xi 不知
4 - + α i α j = ξ \alpha_i-\alpha_j=-\xi 不知

对应这四种情况,我们可以通过图像,分别确定出 α j \alpha_j 的取值范围

序号 y i y_i y j y_j α i + y i y j α j = y i ξ \alpha_i+y_iy_j\alpha_j=y_i\xi ξ \xi
1 + + α i + α j = ξ \alpha_i+\alpha_j=\xi + 在这里插入图片描述
Low boundary = 0 0
High boundary= α i + α j \alpha_i+\alpha_j
2 - - α i + α j = ξ \alpha_i+\alpha_j=-\xi - 在这里插入图片描述
Low boundary = 0 0
High boundary= α i + α j \alpha_i+\alpha_j
3 + - α i α j = ξ \alpha_i-\alpha_j=\xi 不知 在这里插入图片描述
Low boundary = max { 0 , α i α j } \max\{0,\alpha_i-\alpha_j\}
High boundary= + +\infin
4 - + α i α j = ξ \alpha_i-\alpha_j=-\xi 不知 在这里插入图片描述
Low boundary = max { 0 , α i α j } \max\{0,\alpha_i-\alpha_j\}
High boundary= + +\infin

最终总结下 α j \alpha_j 的取值范围
{ α j [ 0 , α i + α j ] y i y j = 1 α j [ max { 0 , α i α j } , + ) y i y j = 1 \begin{cases} \alpha_j \in [0,\alpha_i+\alpha_j] & y_iy_j=1\\ \alpha_j\in [\max\{0,\alpha_i - \alpha_j\},+\infin)& y_iy_j=-1 \end{cases}

3-2-3-3-2 确定 α j \alpha_j 的值

由于 α i \alpha_i α j \alpha_j 存在等式关系,即 y i α i + y j α j = ξ y_i\alpha_i+y_j\alpha_j=\xi
左右同时乘以 y i y_i
α i + y i y j α j = ξ y i \alpha_i+y_iy_j\alpha_j=\xi y_i ,即
α i + s α j = ξ y i \alpha_i+s\alpha_j=\xi y_i
w = ξ y i w=\xi y_i
α i = w s α j \alpha_i=w-s\alpha_j

所以我们将上式带入
g ( α i , α j ) = 1 2 K i i α i 2 + 1 2 K j j α j 2 + s K i j α i α j + y i v i α i + y j v j α j α i α j g(\alpha_i,\alpha_j)=\frac{1}{2}K_{ii}\alpha_i^2+\frac{1}{2}K_{jj}\alpha_j^2+sK_{ij}\alpha_i\alpha_j+y_iv_i\alpha_i+y_jv_j\alpha_j-\alpha_i-\alpha_j
就可以得到关于 α j \alpha_j 的一元二次函数,接下来就是这个带入过程。

g ( α j ) = 1 2 K i i ( w s α j ) 2 + 1 2 K j j α j 2 + s K i j ( w s α j ) α j + y i v i ( w s α j ) + y j v j α j ( w s α j ) α j g(\alpha_j)=\frac{1}{2}K_{ii}(w-s\alpha_j)^2+\frac{1}{2}K_{jj}\alpha_j^2+sK_{ij}(w-s\alpha_j)\alpha_j+y_iv_i(w-s\alpha_j)+y_jv_j\alpha_j-(w-s\alpha_j)-\alpha_j

我们可以通过对 g ( α j ) g(\alpha_j) 求导=0,得到极值点的位置

g ( α j ) = K i i ( w s α j ) ( s ) + K j j α j + s K i j w 2 s 2 K i j α j s y i v i + y j v j + s 1 = 0 g'(\alpha_j)=K_{ii}(w-s\alpha_j)(-s)+K_{jj}\alpha_j+sK_{ij}w-2s^2K_{ij}\alpha_j-sy_iv_i + y_jv_j+s-1=0

在整理过程中,我们使用一个小技巧
s y i v i = y i y j y i v i = y j v i sy_iv_i=y_iy_jy_iv_i=y_jv_i

带入目标函数中得到
( K i i + K j j 2 K i j ) α j = s w ( K i i K i j ) + y j v i y j v j s + 1 \big(K_{ii}+K_{jj}-2K_{ij}\big)\alpha_j=sw\big(K_{ii}-K_{ij}\big)+y_jv_i-y_jv_j-s+1

等号的右边可以进一步简化成和左边相似的结构。
用到一些小技巧比如
s w = y i y j y i ξ = y j ξ sw=y_iy_jy_i\xi=y_j\xi
其中 ξ = α i y i + α j y j \xi=\alpha_i^*y_i+\alpha_j^*y_j
α i \alpha_i* α j \alpha_j^* 表示未迭代的值

所以 s w = y j ( α i y i + α j y j ) sw=y_j(\alpha_i^*y_i+\alpha_j^*y_j)

s w = y j ( α i y i + α j y j ) sw=y_j(\alpha_i^*y_i+\alpha_j^*y_j) 带入右式,同时让 s = y i y j s=y_iy_j 1 = y j y j 1=y_jy_j
s w ( K i i K i j ) + y j v i y j v j s + 1 = y j ( α i y i + α j y j ) ( K i i K i j ) + y j v i y j v j y i y j + y j y j = y i y j α i K i i + α j K i i y i y j α i K i j α j K i j + y j ( v i v j + y j y i ) \begin{aligned} &sw\big(K_{ii}-K_{ij}\big)+y_jv_i-y_jv_j-s+1 \\ &=y_j(\alpha_i^*y_i+\alpha_j^*y_j)\big(K_{ii}-K_{ij}\big)+y_jv_i-y_jv_j-y_iy_j+y_jy_j\\ &=y_iy_j\alpha_i^*K_{ii}+\alpha_j^*K_{ii}-y_iy_j\alpha_i^*K_{ij}-\alpha_j^*K_{ij}+y_j\big(v_i-v_j+y_j-y_i\big)\\ \end{aligned}

接下来的化简要将 v i v_i u i u_i 表示

回忆
v i = k = 1 , k = ̸ i , k = ̸ j m y k α k K i k = X i k = 1 , k = ̸ i , k = ̸ j m y k α k X k v_i=\sum\limits_{k=1,k=\not i,k=\not j}^m y_k\alpha_kK_{ik}=X_i\cdot\sum\limits_{k=1,k=\not i,k=\not j}^m y_k\alpha_kX_k
u i = j = 1 m y j α j K i j + b = X i j = 1 m y j α j X j + b = v i + y i α i X i X i + y j α j X j X i + b u_i=\sum\limits_{j=1}^my_j\alpha_jK_{ij}+b=X_i\cdot\sum\limits_{j=1}^my_j\alpha_jX_{j}+b=v_i+\textcolor{blue}{y_i\alpha_i^*X_iX_i+y_j\alpha_j^*X_jX_i+b}

也就是说
v i v j = u i u j + y j α j X j X j + y i α i X i X j y i α i X i X i y j α j X j X i v_i-v_j=u_i-u_j+y_j\alpha_jX_jX_j+y_i\alpha_iX_iX_j-y_i\alpha_iX_iX_i-y_j\alpha_jX_jX_i
= u i u j + y j α j K j j + y i α i K i j y i α i K i i y j α j K i j =u_i-u_j+y_j\alpha_j^*K_{jj}+y_i\alpha_i^*K_{ij}-y_i\alpha_i^*K_{ii}-y_j\alpha_j^*K_{ij}

所以等号右边可以继续化简
= y i y j α i K i i + α j K i i y i y j α i K i j α j K i j + y j ( v i v j + y j y i ) =y_iy_j\alpha_i^*K_{ii}+\alpha_j^*K_{ii}-y_iy_j\alpha_i^*K_{ij}-\alpha_j^*K_{ij}+y_j\big(v_i-v_j+y_j-y_i\big)
= y i y j α i K i i + α j K i i y i y j α i K i j α j K i j + y j ( u i u j + y j α j K j j + y i α i K i j y i α i K i i y j α j K i j + y j y i ) =y_iy_j\alpha_i^*K_{ii}+\alpha_j^*K_{ii}-y_iy_j\alpha_i^*K_{ij}-\alpha_j^*K_{ij}+y_j\big(u_i-u_j+y_j\alpha_j^*K_{jj}+y_i\alpha_i^*K_{ij}-y_i\alpha_i^*K_{ii}-y_j\alpha_j^*K_{ij}+y_j-y_i\big)
= y i y j α i K i i + α j K i i y i y j α i K i j α j K i j + α j K j j + s α i K i j s α i K i i α j K i j + y j ( ( u i u j ) ( y i y j ) ) =y_iy_j\alpha_i^*K_{ii}+\alpha_j^*K_{ii}-y_iy_j\alpha_i^*K_{ij}-\alpha_j^*K_{ij}+\alpha_j^*K_{jj}+s\alpha_i^*K_{ij}-s\alpha_i^*K_{ii}-\alpha_j^*K_{ij}+y_j\big((u_i-u_j)-(y_i-y_j)\big)
= α j ( K i i + K j j 2 K i j ) + y j ( ( u i u j ) ( y i y j ) ) =\alpha_j^*\big(K_{ii}+K_{jj}-2K_{ij}\big)+y_j\big((u_i-u_j)-(y_i-y_j)\big)

这时,等号的左右边都有 ( K i i + K j j 2 K i j ) \big(K_{ii}+K_{jj}-2K_{ij}\big) ,对于取得极值点的 α j \alpha_j 可以进一步化简

η = K i i + K j j 2 K i j \eta=K_{ii}+K_{jj}-2K_{ij}
E i = u i y i E_i=u_i-y_i

η α j = α j η + y j ( E i E j ) \eta\alpha_j=\alpha_j^*\eta+y_j(E_i-E_j)
所以 α j = α j + y j ( E i E j ) η \alpha_j=\alpha_j^*+\frac{y_j(E_i-E_j)}{\eta}

这是在无约束时,使得 g ( α i , α j ) g(\alpha_i,\alpha_j) 最小的点,我们令其为 α j b e s t \alpha_j^{best} 但由于 α j \alpha_j 还存在不等式约束
{ α j [ 0 , α i + α j ] y i y j = 1 α j [ max { 0 , α i α j } , + ) y i y j = 1 \begin{cases} \alpha_j \in [0,\alpha_i+\alpha_j] & y_iy_j=1\\ \alpha_j\in [\max\{0,\alpha_i - \alpha_j\},+\infin)& y_iy_j=-1 \end{cases}

所以再根据约束,进一步考虑最终迭代后 α i \alpha_i的值
对应的一共有三种情况

情况一 情况二 情况三
在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

最终迭代后 α j n e w \alpha_j^{new} 的值为
α j n e w = { L if  α j b e s t < L α j b e s t if  L α j b e s t H H if  α j b e s t > H \alpha_j^{new}=\left\{ \begin{aligned} &L & \quad\text{if }\alpha_j^{best}<L\\ &\alpha_j^{best} &\quad\text{if }L\leqslant\alpha_j^{best}\leqslant H \\ &H &\quad\text{if }\alpha_j^{best}>H \end{aligned} \right.

3-2-3-3-3 确定 α i \alpha_i 的值

因为 α i n e w y i + α j n e w y j = α i y i + α j y j \alpha_i^{new}y_i+\alpha_j^{new}y_j=\alpha_i^*y_i+\alpha_j^*y_j
所以迭代后
α i n e w = α i + s ( α j α j n e w ) \alpha_i^{new}=\alpha_i^*+s(\alpha_j^*-\alpha_j^{new})

3-2-3-3-4 更新b

如果 α 1 > 0 \alpha_1>0
k = 1 m y k α k X k X 1 + b 1 n e w = y 1 \sum\limits_{k=1}^my_k\alpha_kX_kX_1+b_1^{new}=y_1
k = 3 m y k α k X k X 1 + α 1 n e w y 1 K 11 + α 2 n e w y 2 K 21 + b 1 n e w = y 1 \sum\limits_{k=3}^my_k\alpha_kX_kX_1+\alpha_1^{new}y_1K_{11}+\alpha_2^{new}y_2K_{21}+b_1^{new}=y_1
所以 b 1 n e w = y 1 k = 3 m y k α k X k X 1 α 1 n e w y 1 K 11 α 2 n e w y 2 K 21 b_1^{new}=y_1-\sum\limits_{k=3}^my_k\alpha_kX_kX_1-\alpha_1^{new}y_1K_{11}-\alpha_2^{new}y_2K_{21}

未更新的 E 1 = k = 3 m y k α k K k 1 + α 1 y 1 K 11 + α 2 y 2 K 21 + b y 1 E_1=\sum\limits_{k=3}^my_k\alpha_kK_{k1}+\alpha_1^{*}y_1K_{11}+\alpha_2^{*}y_2K_{21}+b^{*}-y_1
所以可得 y 1 k = 3 m y k α k K k 1 = E 1 + α 1 y 1 K 11 + α 2 y 2 K 21 + b y_1-\sum\limits_{k=3}^my_k\alpha_kK_{k1}=-E_1+\alpha_1^{*}y_1K_{11}+\alpha_2^{*}y_2K_{21}+b^*


b 1 n e w = E 1 + α 1 y 1 K 11 + α 2 y 2 K 21 + b α 1 n e w y 1 K 11 α 2 n e w y 2 K 21 b_1^{new}=-E_1+\alpha_1^{*}y_1K_{11}+\alpha_2^{*}y_2K_{21}+b^*-\alpha_1^{new}y_1K_{11}-\alpha_2^{new}y_2K_{21}
= b E 1 + y 1 K 11 ( α 1 α 1 n e w ) + y 2 K 21 ( α 2 α 2 n e w ) =b^*-E_1+y_1K_{11}(\alpha_1^*-\alpha_1^{new})+y_2K_{21}(\alpha_2^*-\alpha_2^{new})

同理可得
b 2 n e w = b E 2 + y 1 K 12 ( α 1 α 1 n e w ) + y 2 K 22 ( α 2 α 2 n e w ) b_2^{new}=b^*-E_2+y_1K_{12}(\alpha_1^*-\alpha_1^{new})+y_2K_{22}(\alpha_2^*-\alpha_2^{new})

最终 b n e w b^{new} 的取值为
b n e w = b 1 n e w + b 2 n e w 2 b^{new}=\frac{b_1^{new}+b_2^{new}}{2}
对b的更新还不是十分确定,先暂时按这样的方式实现下代码

3-2-3-3-5 更新 E k E_k

每次完成两个变量的优化之后,还必须更新对应的 E k E_k ,并将他们保存在列表中, E k E_k 值的更新要用到 b n e w b_{new}
E k n e w = i = 1 m y i α i K i k + b n e w y k E_k^{new}=\sum\limits_{i=1}^my_i\alpha_iK_{ik}+b^{new}-y_k

3-2-3-4 一些证明细节

3-2-3-4-1 SVM对偶问题的任意一个子问题都是凸优化问题(抛物线开口向上)

用到的方法利用是Hessian矩阵判断

子问题的Hessian矩阵为
[ Q i i Q i j Q j i Q j j ] \begin{bmatrix} Q_{ii} & Q_{ij}\\ Q_{ji} & Q_{jj} \end{bmatrix}
可以写成如下矩阵乘积的形式
[ y i X i T y i X j T ] [ y i X i y j X j ] = A T A \begin{bmatrix} y_iX_i^T \\ y_iX_j^T \end{bmatrix} \begin{bmatrix} y_iX_i & y_jX_j \end{bmatrix}=A^TA
任意的向量x
x T A T A x = ( A x ) T ( A x ) 0 x^TA^TAx=(Ax)^T(Ax)\geqslant0
所以Hessian矩阵半正定,因此目标函数一定为凸函数

3-2-3-4-2 SVM算法收敛性的证明

因为无论迭代时,两个变量的初始值时多少,通过上面的子问题求解算法得到的是在可行域内的最小值,因此每次更新完这两个变量后,都能保证目标函数的值小于或者等于初始值,即函数值下降。同时SVM要求解的对偶问题是凸优化问题,有全局最小解,所以SMO算法能保证收敛。

3-2-3-5 优化变量的选择

使用KKT条件,挑选出违反KKT条件的样本,进行优化。

根据前面的推导,在最优点处必须满足
{ α i > 0 y i ( w T x ( i ) + b ) = 1 α i = 0 y i ( w T x ( i ) + b ) 1 \begin{cases} \alpha_i>0 & y_i(w^Tx^{(i)}+b)=1\\ \alpha_i=0 & y_i(w^Tx^{(i)}+b)\geqslant1 \end{cases}

其中 w w α \alpha 来表示

u i = j = 1 m y j α j X j X i + b u_i=\sum\limits_{j=1}^my_j\alpha_jX_j\cdot X_i+b
所以在最优点处必须满足

{ α i > 0 y i u i = 1 α i = 0 y i u i 1 \begin{cases} \alpha_i>0 & y_iu_i=1\\ \alpha_i=0 & y_iu_i\geqslant1 \end{cases}

根据上式,依此检查所有样本,如果违反了上面的条件,则需要优化。
优先优化 α i > 0 \alpha_i>0

第二个变量的选择,选择使 E i E j |E_i-E_j| 最大化的值。
其中 E i = u i y i E_i=u_i-y_i

为什么选 E i E j |E_i-E_j| 最大的呢?因为这样选出来的值,通过调整后,使得目标函数下降最快

3-2-4 总结SMO算法

操作过程:

  1. α i \alpha_i 设置初始值,让 α i = 0 \alpha_i=0
    目的在于让初始的 α \alpha 满足等式约束和不等式约束
  2. 外层循环:
    根据KKT条件选择两个优化变量
    求解子问题
    如果已经收敛,则退出,否则继续循环
  3. 结束循环

3-3 总结

终于把KKT条件和SMO算法整理好啦,发现这些理论推导,多试着推一推,也没有想象中那么恐怖。
接下来打算在下一篇文章中,整理下整个Hard Margin SVM的计算过程,并用python实现下。

发布了38 篇原创文章 · 获赞 9 · 访问量 2442

猜你喜欢

转载自blog.csdn.net/weixin_44264662/article/details/97673000
今日推荐