全面理解SVM
感知机
感知机是一个二分类的线性分类模型,其输入为样本的特征向量,输出为样本的类别(+1 或 -1)。对于某特征向量x,有广义线性模型
在感知机中,符号函数为阶跃函数
它的几何解释是,f(x) 是一个超平面,其中权值w是超平面的法向量,偏置b是超平面的截距。超平面把特征空间划分为两部分,位于超平面两端的特征向量分别被划分为正负两类。
所以感知机模型是要求数据集线性可分的。
训练感知机模型,首先需要一个衡量预测值与真实值的损失函数。感知机的损失函数定义的是误分类点到超平面的距离,训练的目的是最小化损失函数,即最小化这个距离。
样本点(特征向量)与超平面的距离可定义为
对于误分类的样本点,其预测值与真实值显然是异号的,即
所以,假设有M个误分类点,它们到超平面距离的总和为
是一个常数,可以省略。最终得到感知机的损失函数
显然,这个损失函数的最小值是0,也就是没有误分类点。感知机学习就是在假设空间中选取合适的w和b,使损失函数最小化。
优化方法是随机梯度下降法。将损失函数分别对w和b求梯度
选取一个误分类点,对w和b执行更新
循环进行,直到损失函数收敛或训练达到设定的轮次。可以证明,在线性可分数据集里,感知机是可以经过有限次迭代而最终收敛的。
硬间隔支持向量机
感知机模型简单易懂,但它的训练是一种启发式方法。要将两组数据样本线性分开,其实存在很多解,而从感知机的损失函数就可以看出来,它的优化仅仅是能将两组样本分开,使误分类点为0,而不管分开的方法是不是最优解。
比如在上面的情形中,明显第二种分开方法是更好的,因为它更加健壮,对未见样本的泛化能力更强。硬间隔支持向量机的目的,就是在线性可分数据集中,找到这样一个最好的超平面。
和感知机算法一样,我们定义一个广义线性模型。
在数据集中,各点离超平面的远近,可以表明该点分类预测的确信程度。离超平面越远,可以说这个点更“确切”地分类到对应的一类。假如超平面确定, 可以相对地表示点x和超平面之间的远近,而其与标签是否同号,则可表示分类是否正确。由此可以定义函数间隔
这其实在感知机里已经出现了,但之前并没有点明。
一组数据集的函数间隔,可以用这组样本里离超平面最近的样本点的函数间隔来表示,这个样本点称为支持向量,即
在决定分离超平面时,只有支持向量起作用,其他样本点并不起作用。
如果成比例地缩放w和b,超平面并没有改变,但是函数间隔却会发生变化。因此需要给函数间隔加上约束,使其变为几何间隔。其中 是w的 L2 范数。
和函数间隔一样,数据集T的几何间隔为
几何间隔可以视作实例点到超平面的带符号距离。支持向量机的基本思想就是求解能够正确划分数据集并且几何间隔最大的分离超平面。对于线性可分的数据集而言,这个最大间隔分离超平面是唯一的,这里的几何间隔最大化称为硬间隔最大化。
于是得到如下的约束最优化问题:
相当于
函数间隔的取值并不影响最优化问题的解,也就是说这是一个等价的最优化问题,于是我们可以将整个模型缩放到函数间隔为1的程度。另外注意到最大化 等价于最小化 ,于是得到最终的最优化问题
这是一个凸二次规划问题。对于这种有约束最优化问题,可以构建拉格朗日函数
其中α为拉格朗日乘子向量。
假设有定义在 Rn 上的连续可微函数,存在有约束最优化问题
其中 和 都是定义在实数集上连续可微的凸函数, 是定义在实数集上的仿射函数。则可构造广义拉格朗日函数
其中 αi 和 βj 为拉格朗日乘子,αi ≥0。将原始最优化问题记为P,则有
假设有某个x违反约束条件(即在拉格朗日函数的可行解区域外),使得 或 ,则上式的最大化会使结果趋向于正无穷。因为某个 ,函数最大化这可令其权重 ,而 则可令 ,而将其他项的α、β取为0。而当满足约束条件,即, 时,上式的第三项消失,第二项当 时取得最大值0,所以有
综上所述,有
这种构造方法的本质是,先构造一个在可行解区域与原目标函数完全一致,且在可行解区域外的数值非常大,甚至无限大的新目标函数,来将有约束优化问题转化为无约束优化问题。所以对于原始问题的最小化,可等价于
接下来利用拉格朗日函数的另一个性质,即对偶性,可将上面的问题转化为
这一步也就是将原始问题转化为对偶问题,拉格朗日函数对偶性的详述在此省略。分别记上式左边和右边的最优解为 和 ,可以证明
意思就是,对偶问题的最优解是原始问题最优解的下界。当主问题为凸优化问题,且可行域中至少有一点使不等式约束严格成立时, 对偶问题等价于原问题,也就是上式等号成立(强对偶关系成立)。这个条件称为Slater条件。而在SVM里,这个条件是符合的。
于是,我们可以将原始问题写成拉格朗日函数形式,再将其转化为对偶问题。而且原始问题和对偶问题的最优解,由于满足Slater条件,所以是一致的。
首先写出原始问题的对偶问题
要求解这个对偶问题,需要先对 L(w,b,α) 对w和b求极小,再对α求极大。
首先求解极小问题。由于是凸函数且有闭式解,可以直接用费马大定理解。分别求拉格朗日函数对w和b的偏导,并令其等于0。
解得
将其代入拉格朗日函数原公式,得到
接着求解极大问题。根据上面的推导,这个极大问题就是对偶问题
等价于求解极小化问题
求解这个问题需要用到SMO算法,由于它的推导非常繁琐,我们在下文再继续叙述。SMO算法通过迭代求解,求得α的最优解 ,我们根据这个最优解,就能求得w和b的最优解 和 。
我们利用KKT条件继续推导。
KKT条件是强对偶关系成立的充要条件,包括(以下的符号沿用之前论述拉格朗日函数时所用的符号,其中 、、 分别表示x、α、β的最优解)
还有上文提到的
利用KKT条件的第一条,可以求得w的最优解
KKT条件的第二条称为KKT的对偶互补条件。由它可知,当 时,αi 可在其限制范围内自由选取,而当 时,αi 只能取0。
这是什么意思呢?我们假设有一个样本点 ,使得 ,即
可化为
两边同乘
由于y只取1或-1,所以 ,可将式子左边的 舍去,于是可以如此求b的最优解
所以我们分别得到了w和b的最优解
进一步来考察样本点 。它使得 ,那么根据上面的推导, 的取值也只有+1和-1两种,且与y同号。
而在推导的一开始,我们就通过放缩,将函数间隔 放缩到1的程度。
也就是说, 就是一开始我们提到的支持向量!上面的推导,也是从数学上证明了,超平面的确定(即确定 和 )只依赖于支持向量,也就是数据中对应于 的样本点,而其他样本点并不会产生影响。
于是得到了最终的分类决策函数
符号函数和感知机一样,同样是阶跃函数。
软间隔支持向量机
硬间隔支持向量机是一个严格的线性模型,即用一个超平面将数据分隔为两部分。但数据一般情况下很少是严格线性可分的,难以找到一个超平面可以完美地隔开这些数据,即使在训练模型的时候隔开了,当训练集或实际数据落入特征空间后,也很难说会被正确隔开(过拟合)。而且,如果模型把一些噪声当成了支持向量,那也会得到错误的结果。
缓解这个问题的一个方法是允许模型在一些样本上出错,由此可引出软间隔支持向量机的概念。
我们允许部分样本不满足约束
当然,在最大化间隔的同时,还是要让不满足约束的样本尽可能少。所以可以把优化目标写成
C是一个常数,C>0。而 L0/1 代表 0/1 损失函数,如果括号里的值小于1,则损失函数输出1(代表有一个样本出错了),否则输出0。
所以C值控制了间隔有多“软”,当C无穷大时,优化目标会迫使所有样本都满足约束,而C越小,则可以允许越多样本不满足约束。在SVM的实际使用中,C是一个相当重要的超参数。
而 0/1 损失函数由于不连续且非凸,所以在实际应用中经常用hinge损失函数(也被称为合页函数)代替,即
当样本正确分类时,hinge损失输出0;而当样本被错误分类时,hinge损失可以输出它和正确值之间的绝对值距离。
于是优化目标变成
引入松弛变量 且令 ξi≥0,就能将上式改写为
这就是软间隔支持向量机。
从约束条件可以看出,松弛变量使得 不一定非要为1,也就是不一定要处在支持向量之外,也算正确分类,如下图所示。
这也可以被看成是一种正则化技巧。我们可以把上面优化目标里的第一项称为结构风险,第二项称为经验风险,即正则化项,而C是用来调和这两者的正则化常数。
非线性支持向量机(核方法)
无论是硬间隔或者软间隔支持向量机,都属于线性支持向量机,只能应用于训练样本线性可分的模型。可在很多情况下,线性可分是可望不可即的,有如异或问题一样,根本找不到一个超平面可以将样本分隔开。
对于这种问题,一种解决方法是将样本从原始空间映射到一个更高维的特征空间,而样本在这个高维的特征空间里线性可分。
关于这一点,有两个定理
- Cover Theorem:高维空间比低维空间更易线性可分。
- 如果原始空间是有限维,即属性数有限,那么一定存在一个高维特征空间使样本线性可分。