SVM

支持向量机(Support Vector Machine, SVM)

基本思想就是找两类数据的最大间隔。

 

一、目标函数

令数据集为 D,标签 y 为 +1、-1。

正确的分类可以用这个不等式描述:

当我们不希望有点落在边界时,公式改写为:

即将支持向量的函数间隔为 1,相当于对wT 、b 进行了缩放,对超平面的确定并没有影响。

假设左右边距离分界线最近的两个点是 x+ 和 x-,x+ 和 x- 的连线垂直于决策线,所以两点连线的方向是 w 乘一个缩放因子 γ。就有最下面一个公式。

 

 以上公式变形得到:

 

 

 把γ代回,得到两点的间隔公式:

 将右边的向量平方再开方计算幅度,得到2除以 w 的二范式

所以优化问题变为最大化 w 的二范式。

也就是最小化下式(最小化是因为这种形式更加符合优化问题 ),分母2是为了求导方便。

 

求解的方法有很多:

① 很多工具使用内点法求解

② 梯度下降法。hinge-loss代替约束,求导然后用步长优化。

③ 大多数时候使用对偶函数优化。把约束从目标函数中拿出,换成一个惩罚项来产生优化中的鞍点。(拉格朗日)

 

以上是两类数据线性可分的情况,对于不完全线性可分,加入松弛变量 ξ。松弛变量中每个元素对应一个样本。这也就是软间隔SVM。

 当然,我们不希望 ξ 太大,所以在目标函数中,加入一项 ξ 的惩罚项。C起到了平衡的作用。

 

二、对偶问题

大多数优化问题可以从两个角度来看,一个是原问题,一个是对偶问题。解出了对偶问题就等于解出了原问题。

接下来推导拉格朗日(KKT)对偶。

下式是拉格朗日函数,α、β是用来控制两个约束的(分类正确以及ξ 大于0)。

 此时带约束的目标函数被重写成 min-max 问题。

为了把原问题转化为对偶问题,需要转化为 max-min 问题。

 这样做不改变最后的解的原因是,这是一种强对偶关系。之后需要简化这个对偶问题。

KKT这位科学家指出了max-min问题中一定会成立的一些条件,这些被称为KKT条件:

① Stationarity。所有原变量和对偶变量的梯度为0。也就是无论最大化还是最小化的过程,都不能通过改变变量的值以得到比变量梯度为0时更好的得分。

② Primal feasibility。原问题中所有约束都要被满足。

③ Dual feasibility。要求对偶变量的约束要被满足(非负)。

④ Complementary Slackness。松弛互补。要么KKT乘子为0,要么不等式约束取等号(恰好满足)。

后面的分析会着重于①④。

然后回到拉格朗日函数,由于条件一,我们要对其中的变量进行求导,然后令他们梯度为0。

 

下图是各变量的梯度,以及梯度为0时的结论。

接下来使用这些结论推导后面的公式。

把拉格朗日里的乘积都拆开,然后把刚刚结论中的值一个一个带进去

             

          

  

 

最终得到最后一个式子,我们是要最大化它(也就消除了原问题中的最小化项)

上式还有两个约束项,是由KKT条件推导的结论得到的。因为,所以;因为而 β 非负,所以 α 小于 C。

下图是对偶SVM的最终形式:

 

 如果通过上式得到了 α,如何得到 w 和 b 。

前面推导得到了

而 b 要通过KKT条件的第4个条件来得到

 其中 xi 是 αi ∈ [0, C] 之间的样本(通常使用多个样本均值估计b)。所以 b 如下。

总结下,下图就是对偶SVM的所有内容。这就转化为一种简单的约束优化问题了。

 

三、核函数

在对偶SVM中,我们可以观察到所有带有 x 的地方都有一定规律。它的优化不需考虑向量本身,只需要考虑两个数据向量的内积。

这使得对偶SVM在对非线性决策边界的数据进行学习时,可以使用一些技巧。就是将xiT xj 这个内积替换成核函数。

接下来说明什么是核函数。核函数是内积的一个一般化形式,也可以理解为空间的另一个内积。

核函数是做什么的。假设我们想分开下图红色和蓝色星星,用一条直线是肯定不行的。

 这时候考虑把 x 映射到另一个空间,把 x 映射为 x 的平方,这样决策边界就是抛物线形状。

这就是后面要说的多项式特征映射。把输入的维度(特征)组合相乘在一起,这样把原始的一阶输入扩展到更高阶。

 这样做会导致特征非常多,需要一些方法进行计算,就是核技巧。

对于核函数的内积,就是下图的每一项对应相乘,再加起来。

 有一个技巧,就是把上图的乘积写成下面的形式,而不用展开每一项。(计算机中矩阵相乘比起计算数据向量快)

 比如 M = 2 时,上式展开就是下面的。也就是二次多项式核。

 

RBF(径向基函数)

和高斯函数非常像。

那么已知上方的内积计算方式,它的特征映射是什么样?

对 exp 做泰勒展开:

 

特征映射为:

 

综合常见的核函数来讲:

都可以计算出 gram 矩阵(所有(i, j)组合的核函数值组成的矩阵),就是图片里的每个核函数的第二个公式。这样计算量相对轻量。

只要一种算法使用了内积,都可以使用核函数代替,而没有实际计算向量的内积。

 

四、SVM的优化方法

主要有两个让SVM更快的解决方法:

1、SMO(序列最小优化)

2、梯度下降

都是启发于同样的思想,每次只考虑一个或两个样本

 

我们对原问题或对偶问题进行优化,都是在解一个二次规划问题。

前面说过 SVM 对偶问题不会出现 w 和 b,针对这个目标函数建立的优化方法就是SMO,使用的思想是一次只优化两个变量,而不是一次优化所有。专注于优化那些并非处在最优点的样本对应的变量值。

比如我们要优化 α和 αb,目标函数可拆成下式,其他常数与最小化无关就忽略了。

 

 这个是二维的,它存在一个等式约束和一个不等式约束,求解会很快,而且它存在解析解(就是把 α 设为某个公式的值就好)。

 所以 SMO 的主要思想是可以求解二维的最小化优化问题的解析解,可以遍历所有两个变量的组合或使用其他更好的办法,最后收敛到全局解。

 

下面是使用hinge loss进行梯度下降,这是从另一个角度看SVM原问题的目标函数。

之前使用了松弛变量,这里使用另一个完全等价的方式 hinge loss 来替代。

  

 hinge 函数如果输入是负得到 0,输入是正就是原值。hinge 函数的输入是间隔约束被破坏的程度。除以 n 是用来缩放正则函数。

这种方法移除了松弛变量的约束,使之可以对目标函数求梯度

 

 其中 这个函数表示样本是否分类错误,其值等于 0 或 1,如果正确就没有梯度,因为没有loss。

可以得到随机 SVM 的更新公式

 

posted @ 2020-06-28 03:36  肃木易  阅读(253)  评论(0编辑  收藏  举报