支持向量机原理详解(七): 序列最小最优化(SMO)演算法(Part II)
接前文序列最小最优化(SMO)演算法(Part I),本文继续介绍SMO演算法,内容如下:
- 阈值 的更新
- 差值 的更新,Error Cache
- SMO演算法流程总结
10.5 阈值 的更新
前文提到,通过求解两变数QP子问题得到的最优解 未必满足KKT条件:
为此,在每一步优化完两个变数 (得到 )后,都要更新 中的阈值 ,目的是使刚才这一步优化的两个样本 满足KKT条件。
关于 的更新,需要根据 的取值分情况讨论,具体如下:
(一)若
则根据KKT条件 来更新 ,此时有
又因为 ,代入上式得
按(1)式更新 后, 满足KKT条件;此时另一个样本 也是满足KKT条件的。这一点可结合下面第(三)种情况的 来说明:若 ,则根据 的KKT条件,应有 或 ,也就是说 也能使 对应的样本满足KKT条件。所以当 时,按(1)式更新 即可,不需要再根据 的值进一步讨论。
(二)若
则根据 来更新 ,和(一)类似,有
(三)若
则(1)和(2)计算出的 。
关于 为何相等,参考文献[1-4]均省略了推导。这里我们来证明一下。
首先, 均不在边界上,说明 未经过修剪, ;因为如果修剪过,则 至少有一个在边界上。
然后,由两变数QP子问题的等式约束(见前文)有:
将上式代入(1)和(2),同时结合前文的(6)式,有
(3)式成立,所以 得证。
(四)若
则 之间的值都能使两个样本满足KKT条件,取 。
至于为什么 之间的值都能使两个样本满足KKT条件,参考文献也都没有解释。这里我们来推导一下。
(实际上,Platt1998, 1999里给出的这个条件 非常重要,但文献[3][4]中似乎省略了。)
前文已推导,若 ,则 ;
若 ,则 。
所以分以下四种情况讨论:
- 当 时,若 ,则有
所以如果 ,只能是 , 异号。由KKT条件
因为 异号,所以上面两个不等式会形成一个在 之间的闭区间,这个区间内的值都能使两个样本满足KKT条件。在SMO中,这种情况取 。
- 同理,当 时,若 ,则 ,
所以 , 异号,KKT条件 同样形成一个闭区间。
- 当 时,若 ,则
所以如果 ,只能是 , 同号。KKT条件 形成一个在 之间的闭区间,这个区间内的值都能使两个样本满足KKT条件。
- 当 时,若 ,则 ;
所以 , 同号,KKT条件 形成一个闭区间。
至于为什么采用 这个奇怪的条件,可能是因为这样程序更简洁吧。。。
<关于 的情况>
这种情况Platt1998, 1999并没有提及,但其给出的伪代码的takeStep()函数中有语句
说明计算 后,先判断两者是否相等,如果相等就直接return了,没有对这两个变数的QP子问题进行解析求解。
个人猜测:和前面类似可推导,这种情况下两个样本的KKT条件形成一个单侧无界区间,需根据具体情况比较 的大小,程序上更新 略显繁琐。所以在Platt的伪代码中,如果 则跳过这一步的子问题。
10.6 差值 的更新,Error Cache
在根据启发式规则选择第二个优化变数时,需要用到样本的差值 。差值的更新(或者说计算)发生在每一步优化完两个变数 并更新阈值 之后。
由定义 ,有
(4)式就是文献[3][4]中给出的公式。
Platt1999中给出了更新(non-bound样本的)差值的另一公式,下面进行推导。因为
又
所以由(5)(6)两式得,
文献[3][4]提到,保存所有样本的 可以节省计算时间,按这个意思应该采用(7)式。。。
不过根据Platt1998, 1999,只保存non-bound样本 的 ,而不保存bound样本的 ;当需要用到 时,如果是non-bound样本,就到error cache(误差缓存)里查找;如果是bound样本,就用决策函数和当前的 来计算(具体公式未给出,推测应该是(4)式)。
在每一步优化之后的两个变数,如果是non-bound,则将其保存的差值 设置为0,因为 。而对于未参与这一步优化的其他non-bound样本,根据(7)式更新其 。
个人理解:Platt1998, 1999中,只保存non-bound样本的 是为了节省存储空间,因为最终non-bound样本只占训练集的一小部分;而bound的样本,尤其是 的样本(非支持向量)占大部分。此外,在一次交替遍历中,non-bound子集会多次遍历直至收敛,而bound子集只遍历一次。
10.7 SMO演算法流程总结
根据参考文献[1-4],将SMO演算法流程简单总结如下:
(1)初始化 ;给定精度 ,一般可取 ~ ;
- 初值 满足停机条件中的等式约束,所以接下来每一步优化都会满足这个等式约束;
- 关于 的初始化,文献里没有具体提到,Platt1999的伪代码中是赋初值为0;
- 个人认为阈值 的初值影响不大,因为 是无约束的,第一步优化后 就根据KKT条件更新了。
(2)按启发式规则选取一对优化变数,记为 ;解析求解两变数QP子问题,得到最优解并更新 ;然后更新 , ;
(3)在精度 内检查是否满足停机条件;
- 若满足,则转(4);
- 若不满足,则回到(2),继续按启发式规则选择变数进行优化。
(4)得到问题的最优解 ,SVM训练完成,退出程序。
To be continued...
参考文献
[1] John C. Platt. Sequential minimal optimization: A fast algorithm for training support vector machines. Technical Report MSR-TR-98-14, Microsoft Research, 1998.
[2] John C. Platt. Fast training of support vector machines using sequential minimal optimization. In Advances in Kernel Methods - Support Vector Learning. B. Scholkopf, C. J. C. Burges, and A. J. Smola, Eds. MIT Press, Cambridge, MA, 1999: 185-208.
[3] 李航,统计学习方法,清华大学出版社,北京,2012年。第7章。
[4] 邓乃扬,田英杰,数据挖掘中的新方法——支持向量机,科学出版社,北京,2004年。
[5] Osuna, E., Freund, R., Girosi, F., An improved training algorithm for support vector machines. Proc. IEEE NNSP 』97, 1997.
推荐阅读: