Corinna Cortes和Vladimir Vapnik于1995年在《Support-vector networks》中提出了SVM(Support Vector Machine)。Cortes目前是Google的研究员,Vapnik就职于Facebook。
下面一起来看一下SVM的原理。
1、硬间隔SVM(线性可分)
百度百科对SVM的定义是:支持向量机(Support Vector Machine, SVM)是一类按监督学习(supervised learning)方式对数据进行二元分类的广义线性分类器(generalized linear classifier),其决策边界是对学习样本求解的最大边距超平面(maximum-margin hyperplane)。
考虑下面这种分类情况,即存在多个分类边界,都能正确分类正样本和负样本,这时有一个问题就是选择用哪一个分类边界
这时就引入了margin概念,即希望寻找到一个margin,能将正负样本最大程度地区分开。
设xi为第i个长度为d的样本特征向量,yi为真实样本标签,正类为1,负类为-1。
另设f(x)为预测值
我们希望,对正样本的预测值为正,负样本的预测值为负,所以
由于当预测值为0时,正样本和负样本都满足这个公式,所以将公式进行修改为
接下来进行margin的计算
margin就是两个位于决策边界(即等号成立时)的正负样本x+,x-的距离,同时x+,x-方向与w相同。解得
所以SVM的目标函数为
由于求最优化问题通常都是求最小值,所以我们做一个变换,即margin最大等价于最小
所以SVM的损失函数为
其中,乘以是为了让后续推导更加方便,不影响函数的优化问题
上述就是针对线性可分问题的SVM,而现实中可能存在线性不可分问题
这就引出了软间隔SVM
2、软间隔SVM(线性不可分)
回顾一下硬间隔SVM
对于不可分问题,无论怎样都找不到一个满足约束条件的解
这时我们希望,约束条件可以宽松一些,引入松弛变量
同时,为了避免取无限大时,任意样本都满足该约束条件这一情况,在损失函数中引入惩罚项
这体现了优化问题中常见的一种“对抗”的思想。越大,越容易实现分类,但是同时会导致损失函数越大。
同时,当C趋于无穷大时,分类错误会产生一个巨大的惩罚,相当于要求实现完美分类,就转换成了硬间隔SVM。
2.1、原始-对偶求解软间隔SVM
在这里,先提一下什么是原始-对偶
百度百科的定义为:原始-对偶方法的基本思想是为了得到原问题的基础容许解,常用的方法是首先在原问题中引入人工变量,将目标函数换成人工变量之和的负值;然后极大化目标函数,并将得到的最优基础容许解消去人工变量,此解即为原问题的基础容许解,如果对偶问题有容许解与原问题的基础容许解满足互补松弛条件,则原问题的基础容许解也就成为最优基础容许解。
对偶在优化里面指的是:
①大多数优化问题都可以从两个角度来看待,一个是原问题(primal problem),一个是对偶问题(dual problem)
②一个原问题可能有多重对偶问题
这里只考虑强对偶问题,即原问题的解等价于对偶问题的解
关于对偶问题可以参考https://www.jianshu.com/p/c3e23bf233f8
先给出原始SVM和最终推导出的对偶SVM
原始问题(primal SVM)
对偶问题
我们把原始SVM的约束写进损失函数里面,建立一个包含拉格朗日乘子的拉格朗日函数
关于使用拉格朗日乘子把约束问题转为无约束问题可以参考拉格朗日乘子法
这时就可以移除约束条件了,到这里,我们要做的就是求min-max
接下来,我们将其转换为max-min,从而得到dual SVM
这种转换成立的条件就是强对偶关系,即原始问题的最优解和对偶问题最优解相等。
对于带有不等式的约束,利用KKT(Karush-Kuhn-Tucker)条件求解最优解
①所有原变量和对偶变量的梯度是0。这意味着对抗过程中的任意一方,无论是最小化还是最大化过程,都不能通过改变变量的值得到比此时(变量梯度为0)更好的得分
②原问题中的约束要被满足
③对偶变量的约束要被满足
④松弛互补。对所有的不等式约束,要么KKT乘子为0,要么不等式约束取等号,也就是说这项约束是tight的
根据KKT条件,对于
可得
将代入
得
之前的最小化问题就转换成了最大化问题,再加上约束
得到对偶SVM的最终形式
然后得到之后,计算w和b,w根据KKT梯度为0条件可得
b则根据KKT松弛互补条件可得
2.2、SVM特征映射与核技巧
前面我们推导出最终的对偶SVM的形式为
将所有內积都使用核函数进行代替,就得到了kernel SVM
现在,思考一个问题,为什么需要映射到另一个特征空间?
考虑一维二分类问题,对于下图,我们可以很容易区分不同的样本
但是当遇到这种情况时
线性决策边界就不能解决问题了,这时考虑将特征x(1维)映射到另一个空间比如(2维),新的空间是对同样数据的不同表达,这时我们就可以得到一个非线性的决策边界
从这个例子可以看出,可以通过将特征映射到其他空间,通常是更高维的空间来解决线性不可分问题,这就是使用特征映射的原因。
接下来思考一下使用什么方法将特征映射到其他空间。
多项式核(polynomial kernel)
先来看一种最简单的表达形式
即是对任意可能的多个维度的特征的组合进行求和。映射的维度越高,特征量越大,计算量越大,这显然不是我们所希望看到的。解决这个问题的方法就是使用核技巧,这是一个在高维空间快速计算內积的方法
在dual SVM中,并没有直接出现,特征x出现的地方都是以內积的形式出现。
详细看一下內积的过程
即是xi与xj对应项的相乘相加,我们可以将其写成
这就是SVM核函数中的多项式核(polynomial kernel)。虽然这个式子展开后其中某些项的系数和內积的系数并不完全一致,但并没有影响,因为最终,每一项都会乘上一个权重w。
径向基核函数(RBF kernel)
接下来我们来看一下另外一种核函数,叫高斯径向基核函数
以之前的例子为例,考虑给每一个点上都放一个小凸起(高斯函数),然后给每一个凸起都乘以一个权重,就可以得到一个决策边界。
高斯核的形式为
接下来讲一下为什么高斯核可以表示內积
这里我们值展开了最右边一项,其他项的展开同理
到这里,內积就出现了,这样,就将特征映射到了更高维的空间。
将提到的集中多项式核总结一下
记住一点:只要一种算法使用了內积,无论是在原空间还是在映射空间,都可以使用核函数来替代,SVM就是一个例子。