SVM-SMO

SMO是SVM寻找最优解的一种效果很好的方法,它先候场等待,紧接SVM最后的问题:

    约束条件:

第一步:转化问题函数

通过KKT将约束条件转化为等式函数可得:

函数看起来比较高大上,我们整理下思路:

①参数较多,最小值需我们逐个求偏导为0,再代入该函数进行简化

②避免使用特征向量w求解问题(特定样本下,1000维数据中需要确定1000个值),通过系数αi求解问题(只和样本数量有关)

对参数求偏导并使其为0:w、b、ui、ti

将①-④代入原式:

根据KKT可得约束条件:

①u消除条件:

②b消除条件:

③w消除条件:

④KKT不等式无约束或梯度相反条件:

⑤KKT原不等式约束条件:

⑥KKT不等式无约束或最优解位于不等式边界:

小插曲:

①根据KKT理论可知代表该样本未受条件约束:,其意为该样本在支持向量外侧;此时,则正常样本不会贡献误差

②同理代表样本受约束,此时则,由⑥的一式得,其意为该样本刚好处于支持向量上,此时将通过⑥式中得解

③时同上,此时则落在支持向量与超平面内,则落在超平面或另一侧,相当于分类错误;落在支持向量上

④松弛变量巧妙地利用KKT特性在L函数中加入,而该误差又只作用于离群点

回到原函数,可视为w与α的函数:

为使L有最小值,则|w|越小越好、α越大越好。我们现在已经将问题转化为关于α的函数,那么剩下的就是求

由于KKT是建立在求最小值基础上,因此我们把上述函数加个负号改成相反的问题,趁机加入核函数并结合KKT条件得出转化后的问题:

  并约束于:

注:引入核函数虽然对样本特征升维了,但特征向量w无需升维,是因为我们将问题转化为min(α),借助核函数求得α最小值后,由于升维前后特征是等效的,我们在利用最小的α求得原特征向量即可

第二步:寻找α最小值

公式场面看起来有些失控,我们现在的目标是使α获得最小值以致L函数具有最小值

突破口在,我们先拿出两个α:α1、α2,固定其他α。则问题相当于是求2个α的最小值(其他则视为常数)→更新这2个α→选择下两项α:

运算牢记,将两个α代入问题函数min(L)中可得:

=\frac{1}{2} \sum_{i=1,2}(\sum_{j=1,2}α_iα_jy_iy_jK(x_i,x_j)+\sum_{j≥3}α_iα_jy_iy_jK(x_i,x_j))+\frac{1}{2} \sum_{i≥3}(\sum_{j=1,2}α_iα_jy_iy_jK(x_i,x_j)+\sum_{j≥3}α_iα_jy_iy_jK(x_i,x_j))-(α_1+α_2+\sum_{i≥3}α_i)

令O=α_iα_jy_iy_jK(x_i,x_j):\frac{1}{2} \sum_{i=1,2}\sum_{j=1,2}O+\frac{1}{2}\sum_{i=1,2}\sum_{j=≥3}O+\frac{1}{2} \sum_{i≥3}\sum_{j=1,2}O+\frac{1}{2} \sum_{i≥3}\sum_{j≥3}O-(α_1+α_2+\sum_{i≥3}α_i)

上式看起来又快失控了,由于目标是通过对α求导来寻找最小值,因此常数项可以直接被干掉(其导数值为0)

由于式子太长,简记,原L函数等效于l函数,继续化简:

令,同时,代入上式可消掉α1。并对α2求导

导数等于0时α2获得最小值,还需要简化B1、B2计算量:迭代时它每次都会计算除这2个样本以外所有样本的数据,其实可以只计算这2样本值:

重点来了!这里的α1、α2还未更新,而上文求导式中的α2是将要求解的值。因此将Bm代入导式便建立了新老参数替代的关系,下文将以αm表示待更新参数、αm-old表示老参数,代入得:

对于右侧函数,我们从右到左逐渐瓦解它,定义:

右式与中式相加得

f(x)-y可理解为某样本真实与预测的误差,定义为E,则上式等效于

我们用老参数消掉A:,代入得:

我们把左中右式加起来,即上述①、②:

至此,我们便获得了α2的更新函数:

第三步:寻找α定义域

第一种情况:

相当于原函数是开口向上的二次函数,最小值可能在边界上,也有可能在定义域之间,需进一步分析

最小值可能落在区间内,也可能没有

求出α更新函数后,α还要考虑约束条件,设上限为H、下限为L,可得:

易知

因此

第二种情况:

此时代表两样本相等,数据去重工作没做好?

等效于求导后是常数项,类似,此时L为线性函数

根据斜率方向最小值位于某一边界

最小值根据其线性斜率正负在定义域边界取得:,哪边的函数值小就取哪边

第三种情况:

理论上核函数使特征升维后,向量的大体方向是不会变化的(小于90°);但某些核函数会导致其方向发生变化的同时也能保证一一映射。

类似第一种情况,此时L函数是开口向下的二次函数,它没有极小值。因此同②一样在定义域边界取得最小值

没有极小值,在某一边界取得最小值

第四步:各项参数求解

第二、三步详述了的求解过程,可谓道路坎坷。得到两组样本下的后也即将可以拨开云雾求解所有参数

由可得:

由于计算定义域时已经代入了的函数关系,因此无需再考虑其定义域。下面我们开始求w与b,w比较简单,上文已求出关系,将调整后的代入KKT条件③得

再来看b,参考上文提到的小插曲,我们基于KKT条件得出了样本落点情况。自然地,修改的b依然要满足这个条件,不然后续迭代就没有意义了:

将2个样本分别带入f(x)化简得:

 

注:因为我们将x进行核函数升维,因此计算b时也保持使用

因此

同理

若两个α均为,则 注:因为方程一路求解下来我们用的关系式消掉了,此时又要保证,那么你用来解这个一元一次方程式是没有区别的

若至少有一个α不满足上述条件式,此时会产生一个开放解,SMO提出者使用两者的平均值作为此次b的修改值

因此

第五步:SMO收拾残局

我们通过上文只得出了一对乘子α的优化过程,现在我们通过循环将所有乘子都进行一次优化,而这个过程就是SMO,上面的求解思想也正是SMO的核心思想。我们现在利用SMO强势走一波:

①初始化超平面参数b=0、所有乘子α=0 (w可通过乘子的关系函数直接赋值)

②选择使得每次迭代有最大优化效果

选择第一个α:

优先寻找中的乘子,揪出第一个索引i对应的样本不满足条件的作为

若上述过程中都很老实,没有被揪出,则寻找边界上不满足对应条件的

注:优先找区间内的是因为多轮迭代后,处于边界的大多已被条件约束,调整效果不及区间内的

选择第二个α:

由可知为使改变最大,则要有最大值。寻找满足α与超平面关系条件中能产生最大值的样本,其对应索引的乘子作为需要优化的

③计算相关参数,更新本次w、b

计算及其相应条件下的上下限(Z>0)或值(Z≤0)

求解,并据此解出

④继续遍历,若某次选择没有可选的后停止迭代或连续X次迭代后min(L)减小率小于某个阈值(数量较多时越贴近最优值会多增加收敛过程,但预测效果上差不多满足要求其实就可以提前停止了)

个人看法

从SMO的过程可见,发明者为了让SVM满足可用性,嫁接了一堆数学知识使问题有求解方法,但这样却导致算法本身十分复杂。从机器学习大家推崇的奥卡姆剃刀定理来讲,我个人认为它虽从数学理论上解决了分类问题,但实际面临的运算复杂度却在如今的商业场景中十分受限,实际上原发明者的设计文章也提到尽量不要超过10000样本,放在上个世纪的数据量下可能说得过去,不过时至今日新模型、TB、PB数据量级的情况下,还是黯然失色

你可能感兴趣的:(SVM-SMO)