A Brief Introduction To Support Vector Machine
作 者: Wang Shuyang
a bachelor's degree candidate.
导 语:相信有很多刚入坑机器学习的小伙伴会和我一样,感觉SVM是一道劝退的坎儿,而消除恐惧的最好办法就是微笑着面对它,本篇文章中我会用朴实的“人话”帮助大家迈过这道坎!
本文成文思路如下:
1.SVM原始模型构建
2.对偶形式的推导
3.求解的方法
4.软间隔SVM及核方法
5.SVM优缺点及应用
本文旨在帮助新手理解算法,为了便于理解部分表述可能不够准确,恳请批评指正。
首先,让我们来对SVM产生一个直观的认识:支持向量机(Support Vector Machine,SVM),二类分类器,它最终能告诉你一个东西是属于A还是属于B。在由样本点构成的向量空间内,SVM通过找到一个可以将两类数据正确分隔在两侧的划分超平面,达到对数据分类及预测的效果。而这个超平面是通过支持向量确定的,机的意思呢就是算法,故支持向量机就是通过支持向量确定划分超平面,从而做到分类及预测的算法。
-什么是超平面?
-超平面是指 n 维线性空间中维度为 n-1 的子空间。它可以把线性空间分割成不相交的两部分。比如二维空间中,一条直线是一维的,它把平面分成了两块;三维空间中,一个平面是二维的,它把空间分成了两块。
在样本空间中,划分超平面可通过线性方程来描述,其中为法向量,决定超平面的方向;为位移项,决定超平面与原点之间的距离。一个划分超平面就由法向量和位移确定。
-那什么又是支持向量?
-且听我慢慢道来。
一、SVM原始模型构建
1.1 线性SVM模型
1.1.1 线性可分
SVM由线性分类开始,所以我们首先来了解一下什么是线性可分。简单来说,在二维空间上,两类点能够被一条直线完全分开则叫做线性可分。如下图左边是线性不可分的,而右边即为线性可分。
数学上我们可以表述为:对于 n 维欧氏空间中的两个点集和,若存在 n 维向量 和实数 ,使得: 满足 ,而 满足 ,则称和线性可分。
1.1.2 支持向量与最大化间隔
给定线性可分的训练样本集,,线性分类器将基于训练样本在二维空间中找到一个超平面来正确划分两类样本。显然,满足条件的超平面有很多,而我们旨在找到鲁棒性最好的。
“鲁棒”是“Robust”的音译,也就是健壮的意思。由于训练样本集的局限性或噪声因素,训练集之外的样本可能会更接近两个类的分隔界,这将导致很多划分超平面出现错误。所以我们想要找到与两类数据间隔最大的超平面,使之对训练集之外的数据或噪声有最大的“容忍”能力。
首先,我们要明确该模型中“距离”的概念。由于划分超平面并不确定,所以我们需要比较同一个点到不同超平面的距离,为了使之具有可比性,我们使用欧式几何距离。
相信大家不陌生的是,一个二维空间点到直线的距离公式为:
而扩展到 n 维空间后,点到超平面的距离公式为:,其中
既然我们要找出与两类数据间隔最大的划分超平面,很直观地就会考虑从两类数据最靠近的地方下手,因为它们各自最边缘位置的点才有可能成为最靠近划分超平面的那几个点,而其他点对确定超平面的最终位置是起不了作用的,所以我们认为是这些边缘点支持了超平面的确立。而在数学里点又可以叫向量,比如二维点 (x, y) 就可以看成是一个二维向量,同理 n 维点就是一个 n 维向量,所以我们将这些有用的边缘点称为“支持向量”(support vector)。
如图2所示,标红的点就是支持向量,它们确定出了两条虚线,我们称之为“支撑超平面”,并将它们之间的距离称为“间隔”(margin),用希腊字母 表示,而它们“正中间”的位置就是我们要找的最优划分超平面的位置。显然,间隔越大我们的划分超平面鲁棒性就越好。所以在开始推导SVM的原始公式之前,请在脑海里跟我默念三遍SVM的核心思想 —— “ 最大化间隔!”
1.2 SVM原始公式导出
假设超平面能将训练样本正确分类,那么任一数据点到该超平面的距离为:显然,否则超平面变为,失去意义。
考虑到此式中含有绝对值会对后续数学计算带来不便,所以我们利用数据点自带的标签去绝对值。结合1.1.1中讲过的线性可分的数学定义可知:
所以任一数据点到超平面的距离可表示为:则最接近超平面的距离为:调整平面位置,找到最大距离:则最大间隔为:至此,我们已经将问题用数学语言表述出来了,即要找到一组使得 最大的确立最优划分超平面,但形式上任较为复杂。
我们知道,对于二维空间中的一条直线,等比例地放缩是不影响它的位置的,比如仍代表同一条直线。
扩展到 n 维空间中,等比例地放缩也是不影响解平面位置的。又已知 (超平面外一点与之距离大于得出),所以我们不妨令 表达式中的,则问题简化为,求: 显然,最大化等价于最小化,为了便于求导,我们继续将问题转化为,求: 至此,我们便得到了SVM的基本型。
1.3 算法小结
介绍了这么多,但构建出来的模型到底能不能用呢?接下来,我们就从理论上验证它的可行性。
1.3.1 SVM最大间隔划分超平面的存在唯一性
定理:若训练数据集线性可分,则可将中的样本点完全正确分开的最大间隔划分超平面存在且唯一。
证明:
(1)存在性
由于训练数据集线性可分,又目标函数存在下界,所以必存在最优解,由此得知最大间隔划分超平面的存在性。
(2)唯一性
首先证明最优解中的唯一性。假设存在两个最优解和,由目标函数的形式可知必有,其中是一个常数。令,则必然也是一个可行解,试想两个可正确划分样本点的超平面中间夹的一个超平面必然也可以正确划分样本点。但由于不一定是最优解,则有(中间那个“”关系由 “三角形两边之和大于第三边” 拓展到 n 维得到)。
由上式可得,,从而有,(想象若强行令三角形两边之和等于第三边,则三条线段将会共线)。若,则,与是可行解相矛盾;因此必有,则,的唯一性得证。
接下来证明的唯一性。假设存在两个最优解和,不妨设和对应的值都为,且它们分别是两个最优解的支撑超平面上的点,满足与自己对应的划分超平面距离为,即满足 同时与另一个划分超平面距离大于等于,即整理得出所以带入第一对等式方程即可得,则的唯一性得证。
至此,我们得知SVM基本型的最优解存在且唯一。
1.3.2 小结
线性可分支持向量机——最大间隔法(maximum margin method)
输入:线性可分训练数据集,
其中,,;
输出:最大间隔划分超平面和分类决策函数;
(1)构造并求解约束最优化问题: 求得最优解;
(2)由此得到划分超平面: 分类决策函数:
二、对偶形式的推导
首先顺带一提,上面的基本型是一个凸二次规划问题,可以直接用现成的优化计算包求解。但若利用“对偶问题”来求解会更高效,所以我们来推导SVM的对偶形式。
-什么是凸优化问题?
-直观来说就是在定义于凸集中的凸函数上求最小值。但需要注意的是,国内关于函数凹凸性的定义和国外是相反的,这里的凸函数是指开口向上的。由凸集和凸函数的定义可得出,凸优化问题具有一个极好的性质,即局部最优值必定是全局最优值,因为它不管是局部还是全局都只有那一个最优值。(实际上这个性质叫做强对偶性,且需满足一定的条件才能具备,我这里为了方便理解讲得比较牵强,想具体了解的可点开链接)
-什么是二次规划问题?
-如果一个问题的目标函数是变量的二次函数,约束条件是变量的线性函数,我们将其称为二次规划问题。
2.1 拉格朗日函数
拉格朗日函数是拉格朗日乘子法的核心组成部分,此法思想为:将有约束优化问题从形式上转化为等价的无约束优化问题。(建议对此法陌生的同学进去看看图文并茂的讲解)
优化问题存在很多形式,比如目标函数有求最大值的,也有求最小值的;约束条件有用大于式表示的,也有用小于式的。而上面说到凸优化问题具有“局部最优值必定是全局最优值”这一良好性质,所以我们可以通过移项将SVM基本型写成凸优化问题的标准形式:SVM原始形式:只含有不等式约束,将其改写成:则其拉格朗日函数为:接下来到了关键的一步,所以我们需要再明确一遍,将问题改写成拉格朗日函数仅仅只是从形式上改变它,而实质上必须是等价的。那么接下来我要说明以下两个问题是等价的:
① 求,在 这个条件下;
② 求,在 这个条件下;
从问题②入手,当它满足自身约束条件时,拉格朗日函数表达式中的累加项内容为非负常数 和 的乘积,那么欲求其最大值必须满足 ,否则调整 可以达到无穷大,失去意义,所以我们发现问题②是自带问题①的约束条件的(这里希望读者可以从中体会原始规定不等式约束的拉格朗日乘子的巧妙);
接下来我们会注意到, 作为一个非正项,其最大值就是,所以求的值就是求的值。至此,我们发现问题②是与问题①等价的。
所以我们可以将原问题做如下转变:
这时我们再用上凸优化问题的强对偶性,即不管局部还是全局都只有同一个最优解,可将极小极大的求解顺序换成求极大极小以便于运算:
2.2 KKT条件
前面点开了朗格朗日乘子法这个链接的同学可能会发现,其中介绍的是仅含有等式约束的优化问题。实际上此法的原始形式中就只包含等式约束,而为了将其泛化到可求带有不等式约束的优化问题,我们引入KKT条件。
2.2.1 不等式约束
首先来看不等式约束优化问题最简单的形式:
其对应的拉格朗日函数为:我们利用图形来对其产生一个直观的认识:
图中画出了目标函数的等高线和约束区域,我们的可行解(相当于局部最优解,在凸优化中即必为最优解)需落在约束区域内,且最接近的 “中心”,即无约束解。至于无约束解和约束区域的相对位置,有以下两种可能:
①无约束解落在约束区域内
此时,可行解在内取到无约束解,必然满足,相当于失去这一约束,即中的拉格朗日乘子取为。
②无约束解落在约束区域外
此时,可行解必然落在约束区域的边界上,即满足。至此我们可以得到一个重要的结论(记为“结论”),即无论哪种情况下都有:接着继续考虑可行解落在边界上的位置,为了尽量靠近无约束解,直观上我们就可以看出,必然要取无约束解与约束区域中心的连线交于边界上的那一点。从函数梯度方面来考虑的话,目标函数的负梯度方向(下图中蓝色小箭头)应远离约束区域朝向无约束解,即我们要找到目标函数的负梯度方向与约束函数的梯度方向()相同的那一点:也即:
这里我想举一个例子帮助大家理解:假设山坡上有一只被圈养的小羊,它想去山顶看看,但不幸的是有一圈栅栏限制了它的活动范围。所以它只能沿着栅栏走到尽可能靠近山顶的位置,然后望着山顶咩咩叹气。这里的山顶便是目标函数的无约束解,栅栏便是约束函数的边界,此时羊头的朝向一定是指向山顶的,且与栅栏的梯度同向。
-什么是梯度?
-一个向量,指向函数值上升最快的方向。假如你是那只小羊,在山坡上朝四面八方走都可以,而每个方向你都可以判断出山坡的陡峭程度,即各个方向上你都可以求得方向导数,其中值最大的那个叫做梯度。补充一句,当偏导数连续时才有梯度的存在。
关于梯度,还有一个很直观的例子,想象一滴水沿着光滑的玻璃往下流动,其运动轨迹的反方向即是玻璃表面的梯度方向。
2.2.2 形式化的KKT条件
回到凸优化问题的标准形式:列出拉格朗日函数得到无约束优化问题:结合之前的分析,我们将可行解需满足的条件汇总,即为“KKT条件”(Karush-Kuhn-Tucker Conditions):
①
②
③
④
⑤
这一组方程看似很复杂,但其实很好理解:
①式:拉格朗日函数取得可行解的必要条件(羊爬山的例子);
②式:不等式约束对应的拉格朗日乘子的初始条件;
③~④式:优化问题的初始约束条件;
⑤式:前面得到的那个重要“结论”;
总结一下,KKT条件是“一个凸优化问题存在最优解”的充要条件,通过KKT条件我们即可求得凸优化问题的最优解。用数学语言表述一下就是:
若目标函数和不等式约束都是凸函数,而等式约束是仿射函数(即形如的线性函数),且不等式约束的等号都能成立(这一条件称为Slater条件),那么满足KKT条件的点即为全局最优解。
2.3 SVM的对偶形式
在引入KKT条件之前,我们已经将SVM转化成了如下形式:其中,我们发现,求解 是可以利用KKT条件的。
对于条件①:,我们这里的变量为和,所以有:那么接下来我们就可以进行一波愉快的数学计算了。。。(还没学过向量函数求导的小伙伴们,快进来现学一下吧~) 通过这一波求偏导我们得到: 将其带入即可得到最小值: 对于条件②~⑤,SVM不存在等式约束,其余的条件对应为前两个式子是原始约束条件,而第三个式子就是之前在2.2.1中提到的“结论”,当时为什么说它是一个重要结论呢,因为它触及到了SVM的核心,请看:
当时,则在目标函数的求和项中,表示此对应的向量不会对超平面的确定有任何影响;
当时,则必有,表示此对应的向量在支撑超平面上(图2中虚线位置),即支持向量;
这表明,划分超平面的确立只与支持向量有关。同时,如果我们要找出支持向量,只需找到非零对应的向量即可。所以说,此式揭示了的物理意义,是深入了解SVM的关键。
至此,我们得到了SVM的对偶形式: 接下来的问题是如何求解呢?
三、求解的方法
3.1 SMO算法基本思路
我们可以看到,在对偶问题中存在个参数,很难直接求得最优解。所以我们考虑使用迭代的方法每次只优化有限个参数。但由于的限制,我们不能单独对某个参数更新,所以我们每次选取两个更新变量和,而固定其余参数,通过反复的迭代求解对偶问题。
SMO算法之所以高效,就是因为固定其余参数后仅优化两个参数的过程可以做到很高效,但为了减少迭代次数,每次选取哪两个参数还是有讲究的。我们知道,只要和中有一个不满足KKT条件,目标函数就会在迭代后减小。直观来看,KKT条件违背的程度越大,则更新变量后可能导致的目标函数值减幅越大,所以我们首先选取一个违背KKT条件程度最大的变量。第二个变量应该选择一个使目标函数值减小最快的变量,但由于比较各变量对目标函数值的减幅过于复杂,所以SMO采用了一个启发式(指根据经验或直观想法设计的算法,每一步不一定最优但节省资源):使选取的两变量所对应的样本点间隔最大。因为我们直观上可以认为,比起对两个相似的变量进行更新,对两个有很大差别的变量进行更新会带给目标函数值更大的变化。
思路:①每次迭代过程仅优化两个参数,存在闭式解;
(即任意参数都必能求得优化后的值,具体过程中可得证)
②启发式寻找每次要优化的两个参数,有效减少迭代次数;
方法:①设置列表,并设其初始值为0;(每个数据点都对应一个)
②选取两个待优化变量;(为了便于讲解,这里将其记为和)
③求解两个变量的最优解和,并更新至列表中;
④检查更新后的列表是否在某个精度范围内满足KKT条件,若不满
足则返回②;(这里考虑到了计算机存在浮点数的误差)
3.2 SMO算法基本实现
我们现在的问题为: 当选定两个待优化变量和,我们将目标函数展开,去掉无关项并更新约束条件:
其中代表,是核函数(Kernel Function),目前只用知道它等价于变量在特征空间的内积即可,后面的章节会对它具体讲解。
我们现已将问题转化成一个二元二次问题,而利用约束条件我们可将其再次转化为一元二次问题,最后通过比较最值点和可行域之间的关系即可获得可行域中的最值。
记
有:
回代
得:
对求偏导:
将 代入,并设 ,有:
这里的 表示这个 还没有与可行域进行比较(unclear),不一定是最终的 。
记 ,有:接下来,我们要将可行域内的得到的最优解与可行域的边界进行比较。
的可行域: 根据的符号关系分类有:
可得:而根据有:
至此我们已经得到更新参数的方法,下面说说两个待优化变量如何选取。
思想:选取的两个变量所对应的样本之间的间隔最大,且违反KKT条件的
程度要大,以期待它们带来的差异能给目标函数值更大的变化。
方法:①选取第一个变量
便利训练样本点,检验它们是否满足KKT条件(在一定精度范围内),
选择任一违反KKT条件的变量。
②选取第二个变量
在选择了第一个变量的基础上,我们希望选取的第二个变量能够带来
足够的变化量;的更新依赖,故当时,我
们选取最小的,反之选取最小的;
若更新量不够,则选择的点;
若更新量仍不够,则遍历剩余的点;
若更新量还不够,则重新选择,并按照上述逻辑再次选取;
3.3 算法总结
当我们优化更新完所有的参数,便可以得出最优划分超平面的解了!
由之前KKT条件①求偏导那一步可得:由唯一性可知,为一确定值,我们选出任一支持向量,其满足: 得出:现实任务中我们采取一种更鲁棒的做法:使用所有支持向量求解再取平均值,
得出:
最后,我们来做一下总结:
线性可分支持向量机
输入:线性可分训练数据集,
其中,,;
输出:最优划分超平面和分类决策函数;
(1)构造并求解约束最优化问题: 求得最优解,并计算(2)由此得到划分超平面: 分类决策函数:
四、软间隔SVM及核方法
4.1 软间隔SVM
在前面的讨论中,我们假设了样本点是线性可分的,而现实中的样本往往很难达到完全线性可分。退一步说,即使可以达到完全线性可分,我们找到的超平面也不一定是最好的,很可能会因为钻了一两个数据点的牛角尖而出现过拟合的现象。缓解该问题的办法是允许支持向量机在少部分点上“出错”,为此我们引入“软间隔(Soft Margin)”的概念。
如图7所示,我们允许部分样本点不满足的条件而越过相邻的支撑超平面。那么接下来我们需要考虑两个方面的指标:一是错误样本点越界的程度,二是错误样本点的数量。所以我们引入两个新的变量:表示错误样本点超出支撑超平面的距离,对错误样本点的惩罚程度(惩罚程度越高产生的数量自然越少,由此来控制数量和距离)。
增加软间隔后,我们的优化目标变为: 其中是一个大于的常数,其值越大表示对错误的容忍性越小。可以想象当趋于无穷大时,必然趋于无穷小,即回到了线性SVM。
按照处理线性SVM的套路,我们来优化该问题:
①构造拉格朗日函数其中,是拉格朗日乘子。
②根据强对偶性,转化问题为③对极小化问题利用KKT条件,令对的偏导为可得代入拉格朗日函数可得 软间隔SVM的KKT条件还有④利用SMO算法解得拉格朗日乘子,得出最终得到最优划分超平面;
同样的,对应的数据点为支持向量,这就包括了越界的那些错误点,它们也是影响超平面的确立的。
4.2 核函数
前面讨论了线性SVM以及软间隔SVM,它们可应用于样本全部或大部分线性可分的情况,那么如果样本呈现为图1中左边的情况呢?
对于在有限维度向量空间中线性不可分的样本,我们将其映射到更高维度的向量空间里,再通过间隔最大化的方式,学习得到支持向量机,就是非线性SVM。我们用表示原来的样本点,用表示映射到新的特征空间后得到的点。那么分割超平面可以表示为:通过同样的套路,我们也可以求得非线性SVM的对偶问题: 但这时我们发现一个问题,就是该如何去求解高维特征空间中的内积呢?为了避开这个障碍,我们设想有这么一个函数:即使得与在高维特征空间的内积就等于它们在原始样本空间中通过计算得到的结果。如果有这样的函数存在,我们将其带入对偶问题中即可求得最优划分超平面为:这里的就是“核函数”(kernel function)。
那么合适的核函数是否一定存在呢?什么样的函数能做核函数呢?有哪些常用的核函数以及如何选取呢?某乎上有很多精彩的回答,感兴趣的同学可以去翻一翻,我这里就略过了。
五、SVM的优缺点及应用
5.1 SVM的优缺点
优点:
- 有严格的数学理论支持,可解释性强,不依靠统计方法,从而简化了通常的分类和回归问题;
- 能找出对任务至关重要的关键样本(即支持向量);
- 采用核技巧之后,可以处理非线性分类/回归任务;
- 最终决策函数只由少数的支持向量所确定,计算的复杂性取决于支持向量的数目,而不是样本空间的维数,这在某种意义上避免了“维数灾难”。
缺点:
- 训练时间长。当采用SMO算法时,由于每次都需要挑选一对参数,因此时间复杂度为,其中 N 为训练样本的数量;
- 当采用核技巧时,如果需要存储核矩阵,则空间复杂度为;
- 模型预测时,预测时间与支持向量的个数成正比。当支持向量的数量较大时,预测计算复杂度较高。
因此支持向量机目前只适合小批量样本的任务,无法适应百万甚至上亿样本的任务。
5.2 SVM的应用
SVM技术在解决小样本、非线性及高维度的模式识别问题中表现出明显的优势。在许多领域,如文本分类、图像识别、生物信息学等领域中得到了成功的应用。
Scikit-learn库中带有封装好的SVM,我们可以方便地应用SVM。
六、回顾
本文详细介绍了支持向量机的算法原理,全篇重要知识点如下:
后记:通过编写此文,本人自己对SVM的理解是有所加深的,其实写之前我有很多地方都没懂透。所以说当学习上遇到困难时不妨转换角色,想象自己需要将知识教授给新手,秉持这样的态度一来可以激励自己,二来可以在学习中吸收到更细微的知识。
参考:
[1]《机器学习》 周志华
[2]《统计学习方法》 李航
[3] 约束优化方法之拉格朗日乘子法与KKT条件
[4]【ML】支持向量机(SVM)从入门到放弃再到掌握
[5]【机器学习】支持向量机 SVM