支持向量机(五)——SMO算法

〇、说明

支持向量机(Support Vector Machine,SVM)是监督学习中非常经典的算法。笔者主要参考学习的是李航老师《统计学习方法(第二版)》[1]和周志华老师的西瓜书《机器学习》[2]。

如有错误疏漏,烦请指正。如要转载,请联系笔者,[email protected]

关于这个算法,读者可以参考算法发明者Platt的原始论文[3][4]。知乎文章《支持向量机原理详解(六): 序列最小最优化(SMO)算法》[5][6]系列也是关于SMO算法不错的文章,读者可一并参考阅读。

一、SMO算法简介

1.1 为什么

支持向量机的学习是一个凸二次规划问题,凸二次规划问题问题具有全局最优解,有许多最优化算法可以用于这一问题。但当训练样本容量很大时,这些算法往往变得比较低效。目前有很多支持向量机的快速实现算法,序列最小最优化(Sequential Minimal Optimization,SMO)算法就是其中一个。[1]

1.2 SMO算法思路

1. 在支持向量机的对偶问题优化中,每一轮迭代,将其它变量看作常数,只优化其中两个变量。

2. 每一轮迭代,启发式地选择优化量最大的两个变量进行优化。

二、SMO算法详述

支持向量机的对偶优化问题如下

优化问题一:

\begin{split}&\mathop{min}\limits_{\alpha} \ &\frac{1}{2} \sum_{i=1}^N\sum_{j=1}^N \alpha_{i} \alpha_{j} y_{i} y_{j}K(x_{i} ,x_{j}) - \sum_{i=1}^N \alpha_{i} \\& s.t. & \sum_{i=1}^N \alpha_{i} y_{i}=0 \\&& 0\leq \alpha_{i} \leq C \ \ i=1,2,\dots,N\end{split} \tag{1}

优化目标是找到使目标函数最小的拉格朗日乘子向量。

2.1 两个变量的优化方法

每一轮迭代中,假设已选择的两个变量是和,其它变量是固定的。则式表示的优化问题可以写成

优化问题二:

\begin{split}& \mathop{min}\limits_{\alpha_{1},\alpha_{2}} \ \  & W(\alpha_{1},\alpha_{2})= \frac{1}{2} K_{11} \alpha^2_{1} + \frac{1}{2} K_{22} \alpha^2_{2} + y_{1}y_{2}K_{12}\alpha_{1} \alpha_{2} \\&& \qquad - (\alpha_{1} + \alpha_{2}) + y_{1}\alpha_{1} \sum_{i=3}^N y_{i} \alpha_{i}K_{i1} + y_{2}\alpha_{2} \sum_{i=3}^N y_{i}     \alpha_{i}K_{i2}   \\& s.t. & \alpha_{1} y_{1} + \alpha_{2} y_{2} = - \sum_{i=3}^N \alpha_{i} y_{i}=\varsigma  \\&& 0\leq \alpha_{i} \leq C \ \ i=1,2 \end{split} \tag{2}

其中,,是常数,优化目标函数省略了不含和的常数项。

等式约束决定了这个优化问题是一个单变量优化问题,这里考虑为变量的优化问题。

第一步,求解未经剪辑的最优解

定义

 

则目标函数可写为

\begin{split}W(\alpha_{1},\alpha_{2})= & \frac{1}{2}K_{11} \alpha^2_{1}+\frac{1}{2}K_{22}\alpha^2_{2}+y_{1}y_{2}K_{12}\alpha_{1}\alpha_{2}\\ &-(\alpha_{1}+\alpha_{2})+y_{1}v_{1}\alpha_{1}+y_{2}v_{2}\alpha_{2} \end{split} \tag{6}

由可得,代入上式,目标函数可表示为单变量的目标函数

\begin{split}W(\alpha_{2})= & \frac{1}{2}K_{11} (\varsigma -\alpha_{2 } y_{2})^2+\frac{1}{2}K_{22}\alpha^2_{2}+y_{2}K_{12}(\varsigma -\alpha_{2} y_{2})\alpha_{2}\\ &-(y_{1}(\varsigma -\alpha_{2}y_{2})+\alpha_{2})+v_{1}(\varsigma -\alpha_{2}y_{2})+y_{2}v_{2}\alpha_{2} \end{split} \tag{7}

对求导

\begin{split}\frac{\partial}{\partial \alpha_{2}} W(\alpha_{2})= & y_{2} K_{11} (\alpha_{2} y_{2} -\varsigma )+K_{22} \alpha_{2} + y_{2} K_{12} (\varsigma -\alpha_{2} y_{2}) \\& + y_{2} K_{12} (-y_{2}) \alpha_{2} + y_{1} y_{2} -1 - v_{1} y_{2} + y_{2} v_{2} \\= & (K_{11}+K_{22}-2K_{12}) \alpha_{2} +y_{2} \varsigma(K_{12} - K_{11}) \\& + y_{1} y_{2} -1 - v_{1} y_{2} + y_{2} v_{2} \\\end{split} \tag{8}

令其为0,得到

将等号左边用代替,等号右边代入和,并令,则有

\begin{split}\alpha^{new,unc}_{2} = & \frac{1}{\eta} y_{2}[y_{2} - y_{1} + K_{11} \alpha^{old}_{1} y_{1} + K_{11} \alpha^{old}_{2} y_{2} - K_{12} \alpha^{old}_{1} y_{1} - K_{12} \alpha^{old}_{2} y_{2}  \\ & + (g(x_{1})-K_{11} \alpha^{old}_{1} y_{1} - K_{12} \alpha^{old}_{2} y_{2} - b) \\& - (g(x_{2}) - K_{12} \alpha^{old}_{1} y_{1} - K_{22} \alpha^{old}_{2} y_{2} - b)] \\= & \frac{1}{\eta} y_{2}[(K_{11} + K_{22} - 2K_{12}) y_{2} \alpha^{old}_{2} + (g(x_{1}) - y_{1}) - (g(x_{2}) - y_{2})] \\= & \alpha^{old}_{2} + \frac{1}{\eta} y_{2}(E_{1} - E_{2})\end{split} \tag{10}

这里需要注意,。

第二步,确定剪辑边界

两个变量的约束,如下图所示

图1[4]

式不等式约束使得和正方形内,等式约束使得它们在平行于正方形对角线的直线上。

如上所述,优化问题二(式)实质上是一个但变量优化问题,同样,我们为考虑的优化问题。由于需要满足不等式约束,所以有

由式的等式约束,当时,(是一个常数,满足),则有

当时,,则有

第三步,剪辑优化结果

综上所述,经剪辑后的为

根据式的等式约束,求解

2.2 第一个待优化变量选择

SMO算法称选择第一个优化变量的过程为外层循环。每次只选择两个变量进行优化,那如何选择呢?

支持向量机是凸优化问题,满足KKT条件的点是支持向量机优化问题的解[7]。

线性支持向量机的符合KKT条件如下

\begin{align}& y_{i}(w^*\cdot x_{i}+b^*)\geq 1-\xi^* _{i},\ i=1,2,\dots,N \tag{17a}\\& \xi^*_{i} \geq 0, \ i=1,2,\dots,N \tag{17b} \\& \alpha^*_{i} \geq 0, \ i=1,2,\dots,N \tag{17c} \\& \alpha^*_{i}(y_{i}(w^*\cdot x_{i}+b^*)-1+\xi^*_{i})=0,\ i=1,2,\dots,N \tag{17d} \\& \mu^*_{i}\xi^*_{i}=0, \ i=1,2,\dots,N  \tag{17e}\\& \frac{\partial}{\partial w} L(w^*,b^*,\xi^*;\alpha^*,\mu^*)=w^*-\sum_{i=1}^N \alpha^*_{i}y_{i}x_{i}=0 \tag{17f} \\& \frac{\partial}{\partial b} L(w^*,b^*,\xi^*;\alpha^*,\mu^*)=-\sum_{i=1}^N \alpha^*_{i}y_{i}=0 \tag{17g} \\& \frac{\partial}{\partial \xi_{i}} L(w^*,b^*,\xi^*;\alpha^*,\mu^*)=C-\alpha^*_{i}-\mu^*_{i}=0 , \ i=1,2,\dots,N\tag{17h} \end{align}

将式、、和单独拿出来,如下

\begin{align}& \alpha^*_{i}(y_{i}(w^*\cdot x_{i}+b^*)-1+\xi^*_{i})=0,\ i=1,2,\dots,N \\& \mu^*_{i}\xi^*_{i}=0, \ i=1,2,\dots,N \\& \frac{\partial}{\partial w} L(w^*,b^*,\xi^*;\alpha^*,\mu^*)=w^*-\sum_{i=1}^N \alpha^*_{i}y_{i}x_{i}=0 \\& \frac{\partial}{\partial \xi_{i}} L(w^*,b^*,\xi^*;\alpha^*,\mu^*)=C-\alpha^*_{i}-\mu^*_{i}=0 , \ i=1,2,\dots,N \end{align} \tag{18}

由上式可推导出

\begin{align} \alpha^*_{i}=0 & \Rightarrow y_{i}(\sum_{j=1}^N\alpha^*_{j}y_{j}(x_{i} \cdot x_{j})+b^*) \geq1 \\ 0< \alpha^*_{i} <1 & \Rightarrow y_{i}(\sum_{j=1}^N\alpha^*_{j}y_{j}(x_{i} \cdot x_{j})+b^*) =1 \\ \alpha^*_{i}=C & \Rightarrow y_{i}(\sum_{j=1}^N\alpha^*_{j}y_{j}(x_{i} \cdot x_{j})+b^*) \leq1\end{align} \tag{19}

这里需要注意,上式中,“”在李航老师《统计学习方法(第二版)》中,使用的是“”,这个是不严谨的。替换成核函数版本,如下

\begin{align} \alpha^*_{i}=0 & \Rightarrow y_{i}(\sum_{j=1}^N\alpha^*_{j}y_{j}K(x_{i} , x_{j})+b^*) \geq1 \\ 0< \alpha^*_{i} <1 & \Rightarrow y_{i}(\sum_{j=1}^N\alpha^*_{j}y_{j}K(x_{i} , x_{j})+b^*) =1 \\ \alpha^*_{i}=C & \Rightarrow y_{i}(\sum_{j=1}^N\alpha^*_{j}y_{j}K(x_{i} , x_{j})+b^*) \leq1\end{align} \tag{20}

代入的定义,在优化过程中,不是最优解,所以,验证条件应表述为

这就是SMO算法选择第一个优化变量的条件,也是停机条件。

第一个优化变量的选择方法:首先遍历满足的样本点,检验它们是否满足式;如果这些样本点都不满足约束,则遍历和的样本点,检验是否符合式和的约束。

这里需要注意,在下面选择第二个优化变量时,有可能会抛弃一选择的第一个变量,重新选择第一个变量,详见下文。

2.3 第二个优化变量选择

SMO算法称选择第二个优化变量的过程为内层循环。假设已经找到了第一个优化变量。第二个优化变量的选择标准是希望这个变量有足够大的变化。

第一种方式

由式可知,是依赖于的,为了加快计算速度,可以选择使之最大的,一般来讲就是选择与符号相反,绝对值最大对应的作为第二个优化变量。

通常,为了加快速度,保存在一个列表里。

第二种方式

特殊情况下,如果内层循环找到的不能使目标函数有足够的下降,则采用另一种启发方式继续选择:遍历在间隔边界上的支持向量点(满足的样本),依次试用,直到目标函数有足够的下降。

如果还找不到合适的,遍历所有数据集;如果仍然找不到,则放弃这个,重新选择。

2.4 更新

为什么要更新,因为后面更新时要用到。在前面几篇笔记所述的支持向量机[b][c]理论中,参数是根据最优拉格朗日乘子来计算的。但是在SMO算法中,是跟随优化的变量。

如何优化参数呢,KKT条件就是优化的方向(符合KKT条件的解是最优解[5])。因为是局部优化,需要先分别求解和,然后再求出,先求,根据式,当时,

\begin{split}b^{new}_{1} & = y_{1} - \sum_{i=1}^N \alpha_{i} y_{i} K_{i1} \\ &= y_{1} - \sum_{i=3}^N \alpha_{i} y_{i}K_{i1} - \alpha^{new}_{1} y_{1}K_{11} - \alpha^{new}_{2} y_{2} K_{12}\end{split}\tag{22}

因为已经保存在列表里,可以利用其来计算,减少计算量。由定义可知

\begin{split}E_{1} &= \sum_{i=1}^N \alpha_{i} y_{i}K_{i1} + b^{old} - y_{1} \\&= \sum_{i=3}^N \alpha_{i} y_{i} k_{i1} + \alpha^{old}_{1} y_{1} K_{11} + \alpha^{old}_{2} y_{2} K_{12} + b^{old} - y_{1}\end{split} \tag{23}

可得

代入式,可得

同理,当时,有

通过和计算,分两种情况:

第一种情况

当时,,证明如下

将式的变形代入式和,计算

\begin{split}b^{new}_{1} - b^{new}_{2} &= -(E_{1} - E_{2}) + y_{2} (K_{11} + K_{22} - 2K_{12})(\alpha^{new}_{2} - \alpha^{old}_{2}) \\&=y_{2}\eta (-\frac{y_{2}(E_{1} - E_{2})}{\eta} - \alpha^{old}_{2} + \alpha^{new}_{2}) \\&= y_{2}\eta (\alpha^{new}_{2} - \alpha^{new,unc}_{2})\end{split} \tag{27}

上式中,。当时,在约束边界内,剪辑前后相同,所以有

此时,

第二种情况

当在边界上,且时,第一种情况求得的值还可以继续使用。和以及它们之间的数都符合KKT条件(因为证明较复杂,且用到后面的知识,证明放在附录),选择他们的中点作为,也即

这里需要注意,这里有一个的条件。为什么有这样一个条件?如下图,当时,直线或在约束范围内退化成一个点(读者可自己证明),没有优化的空间,这样的需要重新选择。

图2

2.5 更新

如前所述,挑选和计算时,都会用到。每次迭代都需要更新,以备下一轮迭代使用。

根据的定义(式),有

变换式和式可得

可以证明(读者可自行证明),当时,

原始论文中[4],作者表示式用来更新没有参与优化且不在边界上的支持向量对应的,也即更新除和以外且对应的。

但我认为,当在边界上,不符合式,此时至少有一个参与优化的变量对应的也需要更新。

三、SMO算法总结

第一步,给定精度参数,初始化,。

第二步,按照2.2节和2.3节选择优化变量,按照2.1节解析求解优化问题,更新这两个变量。

第三步,按照2.4节和2.5节更新和。

第四步,在精度范围内检查是否满足KKT条件(式):若满足,则转第五步;不满足,则转第二步。

第五步,得到最优解。

这里,精度内检查读者可参看参考资料[6]。

四、附录

A、在边界上时符合KKT条件的证明

重复正文2.4节的结论:当在边界上,且时,和以及它们之间的数都符合KKT条件。

这里参考[8]予以证明。

如正文2.5节所述,当时,。但当在剪辑边界上时,也即和至少有一个为0或。当某一个变量为0或C时,不一定为0。更一般的,我们暂时认为它们不为0。由正文式,有

当变量在边界时,经过剪辑,由正文式,有

其中,,。又由正文式,有

将式代入式,可得

将式和式代入正文式,有

\begin{split}b^{new}_{1} &= -E^{old}_{1} - y_{1} K_{11}(\alpha^{new}_{1} - \alpha^{old}_{1}) - y_{2} K_{12} (\alpha^{new}_{2} - \alpha^{old}_{2}) + b^{old}  \\&= - E^{old}_{1} + \frac{1}{\eta} \lambda K_{11} (E^{old}_{1} - E^{old}_{2}) - \frac{1}{\eta} \lambda K_{12} (E^{old}_{1} - E^{old}_{2}) + b^{old}\\&=-E^{old}_{1} + \frac{1}{\eta} \lambda (K_{11} - K_{12})(E^{old}_{1} - E^{old}_{2}) + b^{old}\end{split} \tag{a6}

同理有

构造如下,其中,使得在和之间

将式和式代入式,构造,有

\begin{split}\Delta b &= & b^{new} - b^{old} \\&= & tb^{new}_{1} + (1 - t) b^{new}_{2} - b^{old} \\&= & t(-E^{old}_{1} + \frac{1}{\eta} \lambda (K_{11} - K_{12})(E^{old}_{1} - E^{old}_{2}) + b^{old}) \\&& + (1 - t)(-E^{old}_{2} + \frac{1}{\eta} \lambda (K_{12} - K_{22})(E^{old}_{1} - E^{old}_{2}) + b^{old}) - b^{old} \\&= & t(-E^{old}_{1} + \frac{1}{\eta} \lambda (K_{11} - K_{12})(E^{old}_{1} - E^{old}_{2}) ) \\&& + (1 - t)(-E^{old}_{2} + \frac{1}{\eta} \lambda (K_{12} - K_{22})(E^{old}_{1} - E^{old}_{2}) ) \end{split} \tag{a9}

将式、式和式代入式,可得

\begin{split}E^{new}_{1} &=& E^{old}_{1} + y_{1}K_{11}(\alpha^{new}_{1} - \alpha^{old}_{1}) + y_{2} K_{12}(\alpha^{new}_{2} - \alpha^{old}_{2}) + \Delta b \\&=& E^{old}_{1} - \frac{1}{\eta} \lambda K_{11}(E^{old}_{1} - E^{old}_{2}) + \frac{1}{\eta} \lambda K_{12}(E^{old}_{1} - E^{old}_{2}) + \Delta b \\&=& E^{old}_{1} - \frac{1}{\eta} \lambda (K_{11} - K_{12})(E^{old}_{1} - E^{old}_{2}) + \Delta b \\&=& E^{old}_{1} - \frac{1}{\eta} \lambda (K_{11} - K_{12})(E^{old}_{1} - E^{old}_{2}) \\&& + t(-E^{old}_{1} + \frac{1}{\eta} \lambda (K_{11} - K_{12})(E^{old}_{1} - E^{old}_{2})) \\&& +(1 - t)(-E^{old}_{2} + \frac{1}{\eta} \lambda (K_{12} - K_{22})(E^{old}_{1} - E^{old}_{2})) \\&=& E^{old}_{1} - E^{old}_{2} - t(E^{old}_{1} - E^{old}_{2}) \\&& - \frac{1}{\eta} \lambda (K_{11} - 2K_{12} + K_{22})(E^{old}_{1} - E^{old}_{2}) \\&& + \frac{1}{\eta} \lambda t (K_{11} - 2K_{12} + K_{22})(E^{old}_{1} - E^{old}_{2}) \\&=& (1 - t - \lambda + \lambda t)(E^{old}_{1} - E^{old}_{2}) \\&=& (1 - t)(1 - \lambda)(E^{old}_{1} - E^{old}_{2})\end{split}\tag{a10}

同理可得

当时

\begin{split} & \alpha^{new}_{2} - \alpha^{old}_{2} \leq 0 \\ \Leftrightarrow \quad &\frac{1}{\eta} \lambda y_{2} (E^{old}_{1} - E^{old}_{2}) \leq 0 \\\Leftrightarrow \quad & y_{2}(E^{old}_{1} - E^{old}_{2}) \leq 0 \\\Leftrightarrow \quad & y_{2}(-t (1 - \lambda)(E^{old}_{1} - E^{old}_{2})) \geq 0 \\\Leftrightarrow \quad & y_{2} E^{new}_{2} \geq 0 \\\Leftrightarrow \quad & y_{2}(g(x_{2}) - y_{2}) \geq 0 \\\Leftrightarrow \quad & y_{2}g(x_{2}) \geq 1\end{split} \tag{a12}

符合正文式KKT条件。

当时

\begin{split} & \alpha^{new}_{2} - \alpha^{old}_{2} \geq 0 \\ \Leftrightarrow \quad &\frac{1}{\eta} \lambda y_{2} (E^{old}_{1} - E^{old}_{2}) \geq 0 \\\Leftrightarrow \quad & y_{2}(-t (1 - \lambda)(E^{old}_{1} - E^{old}_{2})) \leq 0 \\\Leftrightarrow \quad & y_{2} E^{new}_{2} \leq 0 \\\Leftrightarrow \quad & y_{2}g(x_{2}) \leq 1\end{split} \tag{a13}

同样符合正文式KKT条件。或同理可证。

得证。

B、参考

[1]、《统计学习方法(第二版)》,李航著,清华大学出版社

[2]、《机器学习》,周志华著,清华大学出版社

[3]、Sequential Minimal Optimization: A Fast Algorithm for Training Support Vector Machines, John C. Platt, 1998

[4]、Fast Training of Support Vector Machines Using Sequential Minimal Optimization, John C. Platt, 2000

[5]、《支持向量机原理详解(六): 序列最小最优化(SMO)算法(Part I)》

[6]、《支持向量机原理详解(七): 序列最小最优化(SMO)算法(Part II)》

[7]、《凸优化(八)——Lagrange对偶问题》

[8]、Struggling to understand threshold(b) update step in SMO

C、相关目录

[a]、支持向量机(一)——线性可分支持向量机导出

[b]、支持向量机(二)——线性可分支持向量机求解

[c]、支持向量机(三)——线性支持向量机

[d]、支持向量机(四)——核方法

[e]、支持向量机(五)——SMO算法

D、时间线

2020-06-18 第一次发布

2020-06-20 添加附录A的证明

你可能感兴趣的:(支持向量机(五)——SMO算法)