前面我们讲到SVM的基本理论,现在就涉及到SVM的实现,这里就不得不提到SMO算法
SMO算法
1996年,John Platt 发布了一个称为SMO的强大算法,用于训练SVM,SMO表示表示序列最小优化(Sequential Minimal Optimization)。Platt的SMO算法是将大优化问题分解成为许多个小优化问题来求解。这些小优化问题往往很容易求解,并且对他们进行顺序求解的结果与将他们作为整体求解的结果完全一致,在结果完全相同的情况下,SMO算法的求解时间短很多。
目标
SMO算法的目标就是求出一些列的 α α 和 b b ,一旦求出了这些,就很容易求出权值向量 w w ,并且得到分割超平面
SMO算法的具体做法
SMO的算法原理:每次循环中选择两个进行优化。一旦找到一対合适的 α α 就增大其中一个同时减小另外一个。“合适”指的是这两个 α α 必须在间隔边界之外,并且没有进行过区间化或者不在边界上。
数学推导
前面我们得到了一个对偶问题:
我们现在要解决的问题是在参数 (a1,a2,a3....an) ( a 1 , a 2 , a 3 . . . . a n ) 上面求 W W 的最大值的问题,都是已知,而 C C 是我们预先设定的,所以也是已知数、
我们按照坐标上升的思路,一次性选择两个参数和 α2 α 2 ,将其他参数固定,这时 α2 α 2 可以用 α1 α 1 表示出来,这样代回到 W W 中,就是关于 α1 α 1 的函数,这样我们就可以求解。
主要步骤
SMO算法的主要步骤:
第一步选取一对
αi
α
i
和
αj
α
j
,选取方法使用启发式方法。第二步,固定除
αi
α
i
和
αj
α
j
之外的其他参数,确定W极值条件下的
αi
α
i
,
αj
α
j
由
αi
α
i
表示。
具体做法
假设我们选取的初始值
(α1,α2,α3....αn)
(
α
1
,
α
2
,
α
3
.
.
.
.
α
n
)
满足前面我们所提到的约束条件,我们固定
(α3,α4,α5....αn)
(
α
3
,
α
4
,
α
5
.
.
.
.
α
n
)
的值
这样
W
W
就是和
α2
α
2
的函数,并且
α1
α
1
和
α2
α
2
满足:
由于我们将其他值设定成了固定值,所以可以设等式右边为常数 ζ ζ
所以有
如果 y1和y2 y 1 和 y 2 是异号,我们设 y1=1,y2==−1 y 1 = 1 , y 2 == − 1 ,因此 a1−a2=ζ a 1 − a 2 = ζ
函数如图所示
由于 α1 α 1 和 α2 α 2 的关系被限定在矩阵里面的直线上,所以有我们设H和L分别表示 a2 a 2 的上界和下界,所以有两个变量的优化问题实际上变成了一个变量的优化问题。我们不妨假设最终是 α2 α 2 的优化问题,由于我们上一轮采用的是启发式的迭代法,我们上一轮得到的是 αold1,αold2 α 1 o l d , α 2 o l d ,假设沿着 α2 α 2 方向我们得到未剪辑的 αnew2 α 2 n e w 。本轮迭代完成之后我们的带的解为 αnew1 α 1 n e w 和 αnew2 α 2 n e w ,并且所有的 α2 α 2 满足
根据前面的公式(2)我们有:
根据上面的直线
若 ζ>0 ζ > 0 ,则有 αnew2∈[0,C−ζ] α 2 n e w ∈ [ 0 , C − ζ ]
若 ζ<0 ζ < 0 ,则有 αnew2∈[−ζ,C] α 2 n e w ∈ [ − ζ , C ]
所以
同理如果 y1与y2 y 1 与 y 2 是同号, a1+a2=ζ a 1 + a 2 = ζ ,则有:
所以我们通过求导所得到的 αnew2 α 2 n e w 的结果最终为:
接下来我们开始求 αnew2 α 2 n e w 的值,具体做法就是将目标函数对 α2 α 2 求偏导
首先整理我们的目标函数:
设 α∗={α∗1,α∗2...,α∗n} α ∗ = { α 1 ∗ , α 2 ∗ . . . , α n ∗ } 是对偶问题的最优解。
设函数
所以有误差Ei为:
我们定 Ki,j K i , j 表示为 K(xi,xj)=ϕ(xi)ϕ(xj) K ( x i , x j ) = ϕ ( x i ) ϕ ( x j )
所以原来的对偶问题又可以被我们写成关于
α1和α2
α
1
和
α
2
的函数
由于其他数都是常数:
定义一个常量 ψ ψ
所以可以将式(8)化简得:
引进标记 vi v i ,根据公式(6)
由此我们可以将式子(9)简化成:
有前面我们的假设可以得到
α1y1+α2y2=ζ
α
1
y
1
+
α
2
y
2
=
ζ
并且有
y2i=1
y
i
2
=
1
,因此我们可以得到
所以现在我们可以将函数化成与 α2 α 2 有关的函数:
W(α2)=12K11(ζ−α2y2)2+12K22α22+α2y2K12(ζ−α2y2)−y1(ζ−α2y2)−α2+(ζ−α2y2)v1+α2y2v2 W ( α 2 ) = 1 2 K 11 ( ζ − α 2 y 2 ) 2 + 1 2 K 22 α 2 2 + α 2 y 2 K 12 ( ζ − α 2 y 2 ) − y 1 ( ζ − α 2 y 2 ) − α 2 + ( ζ − α 2 y 2 ) v 1 + α 2 y 2 v 2
化简:
然后我们将函数 W W 对求偏导
将 η=K11+K22−2K12 η = K 11 + K 22 − 2 K 12 带入,则有:
此时根据迭代关系是就可以将 α1 α 1 求出来
变量选择方法
第一个变量的选择
SMO称选择第一个变量的循环为外循环。外循环再训练样本中选择违反KKT条件最严重的点,将其作为第一个样本点。检验训练样本点是否满足KKT条件:
其中 f(xi)=∑Nj=1αjyjK(xi.xj)+b f ( x i ) = ∑ j = 1 N α j y j K ( x i . x j ) + b
第二变量的选择
SMO称选择第二个变量的过称为内层循环。假设已经在外层找到一个变量
α1
α
1
,要在内层循环找到变量
α2
α
2
。第二个参数的选择标准是希望
α2
α
2
有足够大的变化。
而
α2
α
2
是依赖于
|E1−E2|
|
E
1
−
E
2
|
,所以为了加快计算速度,简单的做法是选择
α2
α
2
,使得其对应的
|E1−E2|
|
E
1
−
E
2
|
最大。在外层循环确定了
α1
α
1
的情况下,E1也是确定值,所以如果E1为正数,那么要选取最小的Ei作为E2,如果E1为负数,那么则要选择最大的Ei作为E2
计算阈值b和差值Ei
每次完成两个变量的优化,都要重新计算阈值b,
0≤anew1≤C
0
≤
a
1
n
e
w
≤
C
所以有
根据Ei的定义有
所以有
更新完b之后还有更新Ei
SVM原理大致介绍完毕,通过近10天的痛苦的学习,对于SVM里面的数学思想基本上有了一个大致的认识,不过依然存在很多不理解的地方,这一段时间的学习有点痛苦,但是好在收获也不少。分享以前看过的一句话共勉:越是觉得痛苦的时候越是成长得最快的时候。
参考资料
- 李航《统计学习方法》
- 机器学习实战
- Sequential Minimal Optimization论文
- Jerrylead的博客
- pinard的博客
- pluskid的博客