1、线性可分SVM与硬间隔最大化
《统计学习方法》关于SVM的第一节标题如上,其实这个标题的意思是Hard-Margin SVM只能处理线性可分的情况。
SVM的动机之前在撸西瓜书的时候已经记录过了,这里就不再赘述,大体思想就是在所有满足条件的超平面中找到间隔(Margin)最大的(后面我们会说明这样的超平面是存在且唯一的)。
关于间隔的定义,书上给出了函数间隔和几何间隔两种定义,我个人认为函数间隔的介绍没有太大必要,反而会引起初学者的误解。就直观的看图,计算各个点到超平面的垂直距离(几何距离)就好了,这符合我们多年以来数学上的习惯。
另外需要注意的是这里的间隔最大是指最小间隔最大。
记超平面方程为,最小间隔为,则规划问题如下:
因为同时进行缩放并不会改变超平面,所以为了简化问题我们索性让满足,从而上述规划变成:
再做一下简单的变形:
这个规划是一个凸二次规划问题,可以直接求解。下面我们说明这个解存在且唯一,即可将训练数据中样本点完全正确分开的最大间隔分离超平面存在且唯一。
证明:
(1)存在性
由于训练数据线性可分,所以上述最优化问题必有可行解。
由于目标函数有下界(0),所以最优化问题必有解。
由于训练样本中有正点有负点,所以不是最优化的可行解。
因此最优解满足,由此可知分离超平面的存在性。
(2)唯一性
假设存在两个最优解和,显然两者得到的目标值相等:
令
容易验证也是原规划问题的可行解。从而:
从而上述不等号都可以取等,即:
若,不是原问题可行解,矛盾,因此:
从而两个最优解可写成和,下面我们证。设和是正点中对应于和使得问题中不等号取等的点,和是负点中对应于和使得问题中不等号取等的点。即有:
从而:
又因为:
因此:
同理:
所以:
因此两个最优解和相同的,唯一性得证。
2、学习的对偶算法
这部分内容《统计学习方法》中的推导是很清楚的,但美中不足的在于略过了动机说明的部分,即我们为什么需要对偶算法,直接解我们列出的凸二次规划会面临什么问题?其实在运筹学中,我们使用对偶的原因很简单,对偶规划比原规划更加容易求解!这里也是出于同样的原因吗?
我们重新看一下我们的规划:
假设共有个样本,每个样本有个特征。则我们的规划有个变量和个约束,从QP求解器的角度来看,主要的计算代价与有关,当很大的时候这个规划的求解将变得困难。如果我们考虑对偶规划呢?实际上我们的对偶规划有个变量和个约束,而一般情况下都是远大于的,也就是说相比原规划我们的对偶规划显得更复杂了……所以我们到底为什么要用对偶算法……
我个人的理解是,对偶算法是用来应对很大的情况的,但是很大的时候也很大啊……按我目前的理解,对于线性可分的情况,对偶算法求解的效率相比求解原规划没什么优势……但互补松弛条件可以帮助我们方便地确定支持向量,这是一个好处。而对偶算法真正发挥作用的地方,应该是在非线性SVM中,尤其是引入核函数以后,此外对SMO算法也有重要作用。这一点后面我们会看到。
总之我们先来推导一下对偶规划看看吧。
首先构建拉格朗日函数:
由原规划约束可知:
所以:
从而:
与原规划等价。
这就是拉格朗日对偶的魔力,把约束都放进优化目标中去了,看起来形式干净整洁。下一步我们要求对偶,拉格朗日对偶的形式很简单,只需要将上式中的和调换位置即可:
原始最优化问题和对偶最优化问题的解是否相同呢?《统计学习方法》中给出的一个结论是对于如下凸优化问题:
对偶最优化问题为:
若函数和是凸函数,是仿射函数,并且是严格可行的,即存在,对所有有,则存在,使得是原始问题的解,是对偶问题的解,且原问题和对偶问题最优解相同:
现在我们看一下原始的规划:
ok,满足上述条件,所以在我们的规划中,原始最优解和对偶最优解是相同的,因此为了得到原始最优解,我们只需计算对偶最优解即可。
为得到对偶问题的解,我们需要先求对的极小,再求对的极大。
(1)求
将拉格朗日函数分别对求偏导并令其等于0:
得:
将以上两式带入的表达式中得到:
即:
(2)求对的极大,即:
至此我们已经悄咪咪地把整没了……接下来我们只需要解上述规划就ok了,在此之前我们把目标函数由极大转换成极小:
由上述规划求解出最优的后,如何利用求和呢?这里要用到KKT条件,KKT条件对于一般的规划问题来说是必要条件,对于凸优化问题则是充要条件。这里我们用很简明的方式列出KKT条件:
(1)primal feasible(即原规划可行,满足约束)
(2)dual feasible(即对偶规划可行,满足约束)
(3)primal-inner optimal(原始规划内层的达到最优)
(4)dual_inner optimal(对偶规划内层的达到最优)
由此看出,可直接由求得:
则可由上面的条件(3)求得,但需要先找到某个(这样的必存在否则所有得到,并不是原始问题可行解,矛盾),对此有:
两边同乘可得:
将表达式代入即得:
由此可知分离超平面方程为:
至此我们的对偶算法就求得了原始规划的最优解。进一步看对偶规划为我们提供的信息,我们发现,由对偶互补性(即上面的KKT条件(3))我们可以得出结论,若某个,则相应的有:
而这个式子的含义是样本恰在我们的边界上(即Margin的边缘上),而当时,其对和均无影响。
也就是说,最优解只由那些处于边界上的样本点决定。这部分样本点就是我们所谓的支持向量(直观上看是这些向量将边界“撑”了起来)。
3、线性支持向量机与软间隔最大化
之前我们讨论的是线性可分情况下的硬分隔SVM,是最简单的情形。但在实际应用中,样本往往并不是线性可分的,这时候我们如何找到一个效果较好的超平面呢?其实思路和线性可分SVM是相同的,只是引入了松弛变量,使得样本点可以突破Margin的限制,但突破的程度越大,罚项越大,通过这样的方式我们可以得到一个效果较好的超平面。写出规划如下:
不难看到,软间隔的原始规划和硬间隔的原始规划很类似,只是放宽了边界限制并加上了罚项。按照完全类似于硬分隔的处理步骤,我们得到对偶规划如下:
可以看到,相比硬分隔的对偶规划,这里只是多了一个的约束。
由对偶规划求得最优解,然后我们可以由KKT条件得到原始规划的最优解:
选择一个分量满足条件,计算
从而我们就得到了原始规划的最优解。
这里需要注意的是,软间隔SVM的支持向量和硬间隔SVM的支持向量略有差别,硬间隔SVM的支持向量是位于边界上的向量,而软间隔SVM的支持向量或在间隔边界上,或在间隔边界与分离超平面之间,或在分离超平面误分一侧。
具体说来:
(1)若,则,支持向量落在边界上。
(2)若,且,则分类正确,支持向量在间隔边界与分离超平面之间。
(3)若,且,则支持向量在分离超平面上。
(4)若,且,则支持向量在分离超平面误分一侧。
4、合页损失函数(Hinge Loss)
我们可以以另一种视角来看待软间隔SVM,先写出其原始优化问题:
不难证明这个问题等价于(取即推得原规划):
其中,从而我们可以将第一项看成损失函数,第二项看成正则项。这个损失函数称为合页函数(因为其形状像正在合起的书页),画出图像如下:
可以看到Hinge Loss是0-1 Loss的上界,因此比0-1 Loss更加严格。
5、非线性支持向量机与核函数
前面我们讨论的都是线性分类问题,现在我们要拓展到非线性分类问题,和线性回归拓展到非线性回归的套路相同,这里我们不改变基本的学习方法,而是对特征进行处理,例如将特征映射到多项式特征或其它形式的高维特征,然后用线性支持向量机的方法进行学习即可。
也就是说,我们处理非线性分类问题分为两步:
(1)将特征映射到另一个特征空间
(2)使用作为特征训练SVM
这样得到的结果具有以下形式:
不难看出,使用这样的超平面进行分类时计算量是比较大的,因为和的内积计算量较大(因为维数较高),当然关键问题还不在这里,而在对偶规划的求解中:
这里我们在求解规划的时候需要多次计算和的内积,这样的计算量是非常大的,因此我们希望有一种方式简便地计算这个内积,幸运的是,核函数可以做到这一点。我们看如下核函数的例子:
上述例子中核函数大大简化了二次多项式特征的内积运算,可以看到核函数直接将运算的复杂度从二次降到了一次,这是非常magic的。当然我们对于特定的高维特征去寻找核函数似乎并不是简单的事,但我们可以不显示的定义特征如何映射到高维空间,而是直接选取恰当的核函数,这个映射到高维空间的操作就自动包含在核函数当中了,这就是Kernel trick。
也就是说,我们将之前的分两步走战略调整成一步到位了,问题的难度大大下降。更好的是,我们有一系列经典的核函数可以使用,比如多项式核函数,还有能够处理无限维特征的强大武器——高斯核函数。
定义核函数为对于任意都有的函数,则对偶规划变成:
求解难度大大下降,最终结果形式也简单了很多:
6、SMO(Sequential Minimal Optimization)
SMO即序列最小最优化算法,是用于快速求解支持向量机问题的。
看到这里的时候我有点奇怪,我们不是已经把SVM的最优化问题利用对偶和核函数处理得很好了吗?我们再来看一下最后得到的对偶规划:
一共个变量,个约束,当很大即样本数很多的时候,求解上述规划是非常费时的,这时候我们希望有一种启发式的算法可以高效地解决问题,SMO就是为此而生的。
SMO算法是一种启发式算法,其基本思路是:如果所有变量的解都满足此最优化问题的KKT条件(Karush-Kuhn-Tucker conditions),那么这个最优化问题的解就得到了。因为KKT条件是该最优化问题的充分必要条件。否则,选择两个变量,固定其他变量,针对这两个变量构建一个二次规划问题。这个二次规划问题关于这两个变量的解应该更接近原始二次规划问题的解,因为这会使得原始二次规划问题的目标函数值变得更小。重要的是,这时子问题可以通过解析方法求解,这样就可以大大提高整个算法的计算速度。子问题有两个变量,一个是违反KKT条件最严重的那一个,另一个由约束条件自动确定。如此,SMO算法将原问题不断分解为子问题并对子问题求解,进而达到求解原问题的目的。