〇、说明
支持向量机(Support Vector Machine,SVM)是监督学习中非常经典的算法。笔者主要参考学习的是李航老师《统计学习方法(第二版)》[1]和周志华老师的西瓜书《机器学习》[2]。
如有错误疏漏,烦请指正。如要转载,请联系笔者,hpfhepf@gmail.com。
关于这个算法,读者可以参考算法发明者Platt的原始论文[3][4]。知乎文章《支持向量机原理详解(六): 序列最小最优化(SMO)算法》[5][6]系列也是关于SMO算法不错的文章,读者可一并参考阅读。
一、SMO算法简介
1.1 为什么
支持向量机的学习是一个凸二次规划问题,凸二次规划问题问题具有全局最优解,有许多最优化算法可以用于这一问题。但当训练样本容量很大时,这些算法往往变得比较低效。目前有很多支持向量机的快速实现算法,序列最小最优化(Sequential Minimal Optimization,SMO)算法就是其中一个。[1]
1.2 SMO算法思路
1. 在支持向量机的对偶问题优化中,每一轮迭代,将其它变量看作常数,只优化其中两个变量。
2. 每一轮迭代,启发式地选择优化量最大的两个变量进行优化。
二、SMO算法详述
支持向量机的对偶优化问题如下
优化问题一:
优化目标是找到使目标函数最小的拉格朗日乘子向量。
2.1 两个变量的优化方法
每一轮迭代中,假设已选择的两个变量是和,其它变量是固定的。则式表示的优化问题可以写成
优化问题二:
其中,,是常数,优化目标函数省略了不含和的常数项。
等式约束决定了这个优化问题是一个单变量优化问题,这里考虑为变量的优化问题。
第一步,求解未经剪辑的最优解
定义
则目标函数可写为
由可得,代入上式,目标函数可表示为单变量的目标函数
对求导
令其为0,得到
将等号左边用代替,等号右边代入和,并令,则有
即
这里需要注意,。
第二步,确定剪辑边界
两个变量的约束,如下图所示
式不等式约束使得和正方形内,等式约束使得它们在平行于正方形对角线的直线上。
如上所述,优化问题二(式)实质上是一个但变量优化问题,同样,我们为考虑的优化问题。由于需要满足不等式约束,所以有
由式的等式约束,当时,(是一个常数,满足),则有
当时,,则有
第三步,剪辑优化结果
综上所述,经剪辑后的为
根据式的等式约束,求解
2.2 第一个待优化变量选择
SMO算法称选择第一个优化变量的过程为外层循环。每次只选择两个变量进行优化,那如何选择呢?
支持向量机是凸优化问题,满足KKT条件的点是支持向量机优化问题的解[7]。
线性支持向量机的符合KKT条件如下
将式、、和单独拿出来,如下
由上式可推导出
这里需要注意,上式中,“”在李航老师《统计学习方法(第二版)》中,使用的是“”,这个是不严谨的。替换成核函数版本,如下
代入的定义,在优化过程中,不是最优解,所以,验证条件应表述为
这就是SMO算法选择第一个优化变量的条件,也是停机条件。
第一个优化变量的选择方法:首先遍历满足的样本点,检验它们是否满足式;如果这些样本点都不满足约束,则遍历和的样本点,检验是否符合式和的约束。
这里需要注意,在下面选择第二个优化变量时,有可能会抛弃一选择的第一个变量,重新选择第一个变量,详见下文。
2.3 第二个优化变量选择
SMO算法称选择第二个优化变量的过程为内层循环。假设已经找到了第一个优化变量。第二个优化变量的选择标准是希望这个变量有足够大的变化。
第一种方式
由式可知,是依赖于的,为了加快计算速度,可以选择使之最大的,一般来讲就是选择与符号相反,绝对值最大对应的作为第二个优化变量。
通常,为了加快速度,保存在一个列表里。
第二种方式
特殊情况下,如果内层循环找到的不能使目标函数有足够的下降,则采用另一种启发方式继续选择:遍历在间隔边界上的支持向量点(满足的样本),依次试用,直到目标函数有足够的下降。
如果还找不到合适的,遍历所有数据集;如果仍然找不到,则放弃这个,重新选择。
2.4 更新
为什么要更新,因为后面更新时要用到。在前面几篇笔记所述的支持向量机[b][c]理论中,参数是根据最优拉格朗日乘子来计算的。但是在SMO算法中,是跟随优化的变量。
如何优化参数呢,KKT条件就是优化的方向(符合KKT条件的解是最优解[5])。因为是局部优化,需要先分别求解和,然后再求出,先求,根据式,当时,
因为已经保存在列表里,可以利用其来计算,减少计算量。由定义可知
可得
代入式,可得
同理,当时,有
通过和计算,分两种情况:
第一种情况
当时,,证明如下
将式的变形代入式和,计算
上式中,。当时,在约束边界内,剪辑前后相同,所以有
此时,
第二种情况
当在边界上,且时,第一种情况求得的值还可以继续使用。和以及它们之间的数都符合KKT条件(因为证明较复杂,且用到后面的知识,证明放在附录),选择他们的中点作为,也即
这里需要注意,这里有一个的条件。为什么有这样一个条件?如下图,当时,直线或在约束范围内退化成一个点(读者可自己证明),没有优化的空间,这样的需要重新选择。
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。由正文式,有
当变量在边界时,经过剪辑,由正文式,有
其中,,。又由正文式,有
将式代入式,可得
将式和式代入正文式,有
同理有
构造如下,其中,使得在和之间
将式和式代入式,构造,有
将式、式和式代入式,可得
同理可得
当时
符合正文式KKT条件。
当时
同样符合正文式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)》
[8]、Struggling to understand threshold(b) update step in SMO
C、相关目录
[d]、支持向量机(四)——核方法
[e]、支持向量机(五)——SMO算法
D、时间线
2020-06-18 第一次发布
2020-06-20 添加附录A的证明