机器学习入门笔记:(4.3)SMO算法

前言

之前的博客中,已经介绍了SVM的原理:

机器学习入门学习笔记:(4.1)SVM算法

机器学习入门学习笔记:(4.2)核函数和软间隔

最后我们得到的优化问题如下:

maxαi=1mαi12i=1mj=1mαiαjyiyjxixj,s.t.i=1mαiyi=00αiC,i=1,2,...,m

这个问题的解就是一系列的 α ,这些 α 会使得上面的式子有最大值。

这个式子是引入了软间隔后的支持向量机的问题,再进一步,用上核函数,就可以表示为:

maxαi=1mαi12i=1mj=1mαiαjyiyjK(xi,xj),s.t.i=1mαiyi=00αiC,i=1,2,...,m

一般来说,我们都不是很喜欢求最大值的问题,而是求最小值,所以将上面的问题换成求最小值的形式:
minα12i=1mj=1mαiαjyiyjK(xi,xj)i=1mαi,s.t.i=1mαiyi=00αiC,i=1,2,...,m

我们之后的讨论都会围绕着这个问题进行。

SMO算法

为了解决二次规划问题,人们提出许多高效的算法。其中比较典型的一个就是SMO(Sequential Minimal Optimization)算法。SMO算法由Microsoft Research的John C. Platt在1998年提出,并成为最快的二次规划优化算法,特别针对线性SVM和数据稀疏时性能更优。关于SMO最好的资料就是他本人写的《Sequential Minimal Optimization A Fast Algorithm for Training Support Vector Machines》了。

(摘自支持向量机(五)SMO算法

SMO 概念

SMO的基本思路就是:先固定 αi 之外的所有参数,然后求 αi 的极值。但是问题中存在约束条件: mi=1αiyi=0 。如果固定了 αi 之外的其他变量,则 αi 也会被固定,可以由其他的变量导出。于是,一次只留一个参数,固定其余参数的方法在这里是不适用的,但是这个思想却给了我们不错的启发。那么,SMO可以每次选择两个变量 αi αj ,并固定其他参数。这样,在参数初始化之后,SMO不断迭代重复下面的步骤,直至收敛:

  • 选取一对新的 αi αj ;
  • 固定 αi αj 之外的参数,求解前面的优化问题,获取更新后的 αi αj

假设选取的两个变量为 α1 α2 ,那么由于其余参数均被固定,目标函数最后也只与 α1 α2 有关。

由约束条件 mi=1αiyi=0 有: α1y1+α2y2=C ,其中 C 为常数。

为简化表示,我们用Kij表示 K(xi,xj)

对原始问题进行化简:

minα12i=1mj=1mαiαjyiyjK(xi,xj)i=1mαi

=minαi=1m[αiα1yiy1K(xi,x1)+αiα2yiy2K(xi,x2)+j=3mαiαjyiyjK(xi,xj)]α1α2i=3mαi

=minα12[α21y21K(x1,x1)+α1α2y1y2K(x1,x2)+j=3mα1αjy1yjK(x1,xj)]+12[α2α1y2y1K(x2,x1)+α22y22K(x2,x2)+j=3mα2αjy2yjK(x2,xj)]+12i=3m[αiα1yiy1K(xi,x1)+αiα2yiy2K(xi,x2)+j=3mαiαjyiyjK(xi,xj)]α1α2i=3mαi

=minα12[α21y21K11+α22y22K22+2α1α2y1y2k12+i=3mj=3mαiαjyiyjK(xi,xj)+2α1y1v1+2α2y2v2]α1α2i=3mαi

(其中,因为核函数满足 K12=K21 ,所以直接合在一起了;为了便于表示,令 vi=mj=3yjαjkij

由于除了 α1 α2 之外的 αi,i=3,4,...,m 都被固定了,所以都是常数。

=minα12[α21y21K11+α22y22K22+2α1α2y1y2k12+2α1y1v1+2α2y2v2]α1α2+C

其中 C 是任意常数。

解的范围

现在的结果是有关α1 α2 的表达式,为了进一步化简我们还可以将 α1 α2 表示。但是在此之前,还有一个问题,那就是 α1 α2 的取值范围是多少?尽管有了约束条件 mi=1αiyi=0 ,但是在 y1 y2 取不同值时,也会有不同的约束关系产生。

这里写图片描述

(摘自John C. Platt的论文)

前面推出的 α1 α2 的约束关系为: α1y1+α2y2=C

我们还有些已知的条件:

0αC

y1 y2 都是输出的标签,为 ±1 ,显然: y21=y22=1

如上图所示,分两种情况讨论:

  1. 如果 y1y2 ,则 y1 y2 一定异号,那么约束关系变为: α1α2=k k 是任意常数。k具体是多少我们并不关心,但是我们知道 α1 α2 的取值都落在途中的直线上。 k 无非就是一个截距,随着k的变化,这根直线在方框内会上下移动,交点也变,但是一定要在方框范围内,所以边界一定会落在方框与直线的交点上。假设几种可能的情况就不难推算出 α 的范围了假设只考虑 α2 的范围,设 L α2可能的最小取值, H α2可能的最大取值。

    L=max(0,k),H=min(C,Ck)L=max(0,α2α1),H=min(C,C+α2α1)

  2. 如果 y1=y2 ,则 y1 y2 一定同号,那么约束关系变为: α1+α2=k k 是任意常数。与前面同样分析。只考虑α2的范围,设 L α2可能的最小取值, H α2可能的最大取值。根据图中所示,可以得到如下关系:

    L=max(0,kC),H=min(C,k)L=max(0,α1+α2C),H=min(C,α1+α2)

通过上面的讨论,我们得到了 α2 的可能取值范围: Lα2H

  1. y1y2 时, L=max(0,α2α1),H=min(C,C+α2α1)
  2. y1=y2 时, L=max(0,α1+α2C),H=min(C,α1+α2)

同理, α1 的范围与 α2 是一样的。这个范围先保留,后面再用。

求解优化问题

转化为一元函数求极值点

接下来,将 α1 α2 表示。将约束关系: α1y1+α2y2=C 左右同时乘上 y1 得到:

α1=(ζα2y2)y1
,这里的 ζ 是常数,为了不跟原式子中的 C 混淆,换成ζ表示这个常数。

好了,我们已经将 α1 α2 表示出来了,可以代回到前面的问题中了:

minα12[α21y21K11+α22y22K22+2α1α2y1y2k12+2α1y1v1+2α2y2v2]α1α2+Cvi=j=3myjαjkij

我们有 y21=y22=1 ,以及 α1=(ζα2y2)y1 ,代入化简得到:

minα12[(ζα2y2)2k11+k22α22+2(ζα2y2)α2y2k12+2(ζα2y2)v1+2α2y2v2](ζα2y2)y1α2+C

常数可以去掉,不影响结果:

minα12[(ζα2y2)2k11+k22α22+2(ζα2y2)α2y2k12+2(ζα2y2)v1+2α2y2v2](ζα2y2)y1α2

上面的问题已经化成了单变量的优化问题了,使用常规套路,求偏导取0,即可解出 α2 的值。

对目标函数求偏导数:

Φα2=α2(K11+K222K12)K11ζy2+K12ζy2y2v1+y2v2+y1y21

令这个偏导数为0可以求出新的 α2 ,利用

α1=(ζα2y2)y1
这个关系,又可以求出新的 α1 ,这两新求出的值即为我们使用SMO算法优化之后的结果。为了与原始的 α1 α2 值区分,我们将这两个新的值标记为 α1 α2

修改后的几个条件如下:

Φα2=α2(K11+K222K12)K11ζy2+K12ζy2y2v1+y2v2+y1y21=0

ζ=α1y1+α2y2=α1y1+α2y2

vi=j=3myjαjkij

为了后面表示简便,还要给出几个关系:

如果把 vi 直接代入,结果太复杂了。还需要对 vi 做一些变换:

前面的博客中,我们已经推导过SVM的数学模型的最终结果: f(xi)=ωTx+b=mj=1αjyjK(xi,xj)+b

展开 f(x) 看看:

f(x1)=α1y1K11+α2y2K12+j=3mαjyjK1j+b=α1y1K11+α2y2K12+v1+b

f(x2)=α1y1K12+α2y2K22+j=3mαjyjK2j+b=α1y1K12+α2y2K22+v2+b

所以:

v1=f(x1)α1y1K11α2y2K12b

v2=f(x2)α1y1K12α2y2K22b

好了,条件基本都得到了,再列一下我们要用的条件:

Φα2=α2(K11+K222K12)K11ζy2+K12ζy2y2v1+y2v2+y1y21=0

ζ=α1y1+α2y2(=α1y1+α2y2)

v1=f(x1)α1y1K11α2y2K12b

v2=f(x2)α1y1K12α2y2K22b

联立,化简得:(注: ζ=α1y1+α2y2 ,用旧的 α1 α2 ,因为我们最后要表示出新的 α2

α2(K11+K222K12)=(K11+K222K12)α2+y2[y2y1+f(x1)f(x2)]

设预测值与真实值之差为 Ei Ei=f(xi)yi

继续化简:

α2=α2+y2E1E2(K11+K222K12)

再记 η=(K11+K222K12)

α2=α2+y2E1E2η,η=(K11+K222K12)

注意, α2 是经过优化后求出的解, α2 是之前的值。

当然还有 α2 的范围约束,前面我们已经推导了:

α2 的可能取值范围: Lα2H

  1. y1y2 时, L=max(0,α2α1),H=min(C,C+α2α1)
  2. y1=y2 时, L=max(0,α1+α2C),H=min(C,C+α1+α2)

所以求出了优化后的 α2 后,还需要经过一个范围的约束:

αnew2=H,α2>Hα2,Lα2HL,α2<L

求解 α1

知道了 α2 α1 就很容易了:

由约束条件: α1y1+α2y2=αnew1y1+αnew2y2=ζ 得到:

αnew1=α1+y1y2(α2αnew2)

取临界情况

前面推导的结果:

α2=α2+y2E1E2η,η=(K11+K222K12)

大部分情况下,都有 η=(K11+K222K12)>0 ,但是在不满足这个条件时, α2 需要取临界值。

  1. η<0,当核函数K不满足Mercer定理时,矩阵K非正定;
  2. η=0,样本x1与x2输入特征相同;

也可以换个方式来理解:

原问题:

minα12[(ζα2y2)2k11+k22α22+2(ζα2y2)α2y2k12+2(ζα2y2)v1+2α2y2v2](ζα2y2)y1α2+C

其一阶偏导数为:

Φα2=α2(K11+K222K12)K11ζy2+K12ζy2y2v1+y2v2+y1y21

二阶偏导数为:

2Φα22=η=(K11+K222K12)

这个 η 就是原问题的二阶偏导数,根据函数的性质来看:

  1. η<0 时,目标函数为凸函数,没有极小值,最小值会在边界取得;
  2. η=0 时,目标函数为单调函数,很明显,最小值或者最大值都会在边界上取得。

所以,当 η0 时,把 α2=L α2=H 分别代入 α1y1+α2y2=αnew1y1+αnew2y2=ζ 解出 α1=L1 α1=H1 ,其中令 s=y1y2

L1=α1+s(α2L)

H1=α1+s(α2H)

代回到目标函数中可以求出对应的两个可能值 ΨL ΨH ,最后取两者中更小的那个就是最小值了。

代入之前先看看目标函数:

Ψ=12[α21K11+α22K22+2α1α2y1y2k12+2α1y1v1+2α2y2v2]α1α2

因为 v1 v2 的存在,展开后还是有些不太好看的。 vi=mj=3yjαjkij 这东西不好化简,所以使用 vi 的另一种表示形式:

vi=f(xi)α1y1Ki1α2y2Ki2b

代入 Ψ 中:(注: y21=y22=1 )

Ψ=12α21K11+12α22K22+α1α2y1y2K12+α1y1(f(x1)α1y1K11α2y2K12b)+α2y2(f(x2)α1y1K12α2y2K22b)α1y21α2y22

Ψ=12α21K11+12α22K22+α1α2y1y2K12+α1(y1f(x1)α1K11α2y1y2K12y1by21)+α2(y2f(x2)α1y1y2K12α2K22by2y22)

下面令 Ψ=12α21K11+12α22K22+α1α2y1y2k12+α1f1+α2f2 ,则:

f1=y1f(x1)α1K11α2y1y2K12y1by21=y1(E1b)α1K11α2y1y2K12

f2=y2f(x2)α1y1y2K12α2K22by2y22=y2(E2b)α1y1y2K12α2K22

使用上面的这些式子,将 L1=α1+s(α2L) H1=α1+s(α2H) 以及 s=y1y2 代入可以得到如下结果:

这里写图片描述

这里是论文中的结果,我就偷懒不写步骤了。前面推导的式子联立就可以得到上面的6个式子。

计算 ω 和b

首先看 ω ,前面我们可以解出 α ,根据公式: ω=mi=1αiyixi 就可以求出来 ω

因为除了 α1 α2 之外的 αi 都被固定了,所以优化前后都会有如下关系:

ω=α1y1x1+α2y2x2+i=3mαiyixi

ωnew=αnew1y1x1+αnew2y2x2+i=3mαiyixi

两式做差即可求出新的 ω

ωnew=ω+y1x1(αnew1α1)+y2x2(αnew2α2)

然后是 b ,我们没有直接的公式来计算,只能通过KKT条件间接求出来。

这里写图片描述

(摘自Platt的论文)

这是原优化问题的KKT条件:

  1. αi=0时,分类是正确的;

    • 0αiC 时,这时的样本点是支持向量,处在边界上;
    • αi=C 时,位于边界之间。
    • 参考上面的KKT条件进行分类讨论:

      1. 如果 0<α1<C ,则 (x1,y1) 为支持向量,满足 yi(mi=1αiyiKi1+b1)=1

        αnew1y1K11+αnew2y2K21+i=3mαiyiKi1+bnew1=y1

        因为: y1mi=3αiyiKi1=y1f(x1)+α1y1K11+α2y2K21+b

        所以:

        bnew1=y1f(x1)+α1y1K11+α2y2K21+bαnew1y1K11αnew2y2K21

        bnew1=E1y1K11(αnew1α1)y2K21(αnew2α2)+b

        其中 α1,α2,b 为旧的值, αnew1,αnew2,bnew 为优化后的值。

      2. 如果 0<α2<C ,则 (x2,y2) 为支持向量,同理可以得到:

        bnew2=E2y1K12(αnew1α1)y2K22(αnew2α2)+b

      3. 如果同时有 0<α1<C0<α2<C ,那么 bnew1=bnew2

      4. 如果均不满足 0<αi<C ,这时选择他们的中点: bnew=bnew1+bnew22

      启发式选择变量

      由Osuna定理知道,只要选取的 αi αj 中有一个不满足KKT条件的,那么最初的那个目标函数就会在迭代之后减小。直观来看,如果KKT条件违背的越厉害,那么变量更新后可能导致目标函数减小的更厉害。于是,SMO可以首先取违背KKT条件程度最大的向量,第二个变量选取一个使目标函数减小最快的变量。

      (摘自【机器学习详解】SMO算法剖析

      选取第一个变量

      第一个变量的选择称为外循环.

      首先遍历整个样本集,选择违反KKT条件的 αi 作为第一个变量,接着依据相关规则选择第二个变量(见下面分析),对这两个变量采用上述方法进行优化。

      当遍历完整个样本集后,遍历非边界样本集 (0<αi<C) 中违反KKT的 αi 作为第一个变量,同样依据相关规则选择第二个变量,对此两个变量进行优化。

      当遍历完非边界样本集后,再次回去,遍历整个样本集寻找,即在整个样本集与非边界样本集上来回切换,寻找违反KKT条件的 αi 作为第一个变量。直到遍历完整个样本集后,没有违反KKT条件 αi ,然后退出。
      边界上的样本对应的 ααi=0 或者 αi=C ,在优化过程中很难变化,然而非边界样本 0<αi<C 会随着对其他变量的优化有大的变化。

      第二个变量的选择

      SMO称第二个变量的选择过程为内循环.

      假设在外循环中找到的第一个变量记为 α1 ,那么第二个变量的选择我希望能使 α2 有较大的变化。由于 α2 是依赖于 |E1E2| ,当 Ei 为正时,那么选择最小的 Ei 作为 E2 ,如果 Ei 为负,选择最大 Ei 作为 E2 ,通常为每个样本的 Ei 保存在一个列表中,选择最大的 |E1E2| 来近似最大化步长。
      有时按照上述的启发式选择第二个变量,不能够使得函数值有足够的下降,这时按下述步骤:

      首先在非边界集上选择能够使函数值足够下降的样本作为第二个变量,
      如果非边界集上没有,则在整个样本集上选择第二个变量,
      如果整个样本集依然不存在,则重新选择第一个变量。

      后记

      SVM从头到尾推一边,发现许多概念都更熟悉了。许多推导步骤,我也尽可能写在博客中了,工作量的确挺大的。下次再把SVM的代码仔细研究研究。

      参考资料:

      《机器学习》周志华

      【机器学习详解】SMO算法剖析

      [支持向量机(五)SMO算法](http://www.cnblogs.com/jerrylead/archive/2011/03/18/1988419.html)

      解密SVM系列(三):SMO算法原理与实战求解

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值