支持向量机 (SVM) 是一种基于间隔最大化的线性分类器。
- 当数据线性可分时,通过硬间隔最大化,可学习硬间隔支持向量机(线性可分支持向量机);
- 当数据近似线性可分时,通过软间隔最大化,可学习软间隔支持向量机(线性支持向量机);
- 当数据线性不可分时,利用核技巧以及软间隔最大化,可学习一般的非线性支持向量机。
在本文中,记数据集为 ,其中 .
线性可分与硬间隔最大化
基本思想
当数据是线性可分时,存在无数多个超平面 都可以作为决策平面,超平面一侧是正类,另一侧是负类。朴素地想,在这些超平面中,找到间隔数据点最远的那个超平面,应该是最为稳妥的。

根据一些几何学知识可以知道,点 到平面 的距离为 . 特别地,由于正类的数据点满足 ,负类反之,所以绝对值可以通过乘上类别标签去掉: 于是,超平面与数据点的最小间隔为: 那么,最大化最小间隔就可以写为如下优化问题: 注意到同时缩放 并不改变超平面,从而也不改变优化目标的值,因此我们可以小心地缩放,让 中最小的那个正好等于 1. 这时,最小间隔简化为: 所以优化问题变成了: 又由于最大化 等价于最小化 ,所以问题继续改写作: 现在问题转化为了一个凸二次规划问题,在优化理论中人们对凸二次规划已经有着非常成熟的研究,直接调用相关算法求解即可。
对偶问题
对于上一节最终得到的优化问题,除了直接求解以外,我们也可以尝试求解其对偶问题。
首先构建 Lagrange 函数。对每个约束条件引入一个 Lagrange 乘子 ,定义 Lagrange 函数为: 其中 . 那么原问题和对偶问题分别为: 考虑 ,取 Lagrange 函数对 求导并令为零: 代入 得: 因此原问题转化为如下对偶问题: 由于支持向量机的优化问题满足 Slater's condition(优化目标是凸函数并且约束条件是仿射函数),因此具有强对偶性,即原问题与对偶问题的最优解是相同的,所以我们可以通过求解上述对偶问题来求解原问题。对比对偶问题和原问题,可以发现对偶问题的优化目标变得更复杂了,但约束条件变简单了,而且依然是一个凸二次规划问题,可以直接调用相关算法求解。
支持向量
设原问题最优解为 ,即分离超平面为 ,间隔边界为 和 ,那么样本点可以分为两类——在间隔边界上和在间隔边界以外的,如图所示:

我们称在间隔边界上的样本为支持向量,它们是距离分离超平面最近的点(距离为 )。支持向量机的解只依赖于支持向量,去掉或在间隔边界以外移动其他样本对解没有任何影响。
从对偶变量的角度来看,设对偶问题的最优解为 ,那么根据 KKT 条件的互补松弛性条件有: 因此,如果一个样本不是支持向量,那么 ,于是根据互补松弛性条件,必有 ;反过来,如果 ,那么根据互补松弛性条件,必有 ,即是支持向量。
线性不可分与软间隔最大化
基本思想
在实际应用中,我们经常会遇到噪声数据点,它们可能导致问题线性不可分。为了解决这个问题,可以对每个样本点 引入一个松弛因子 ,将约束条件放松为 . 当然,我们并不希望 任意地大,否则约束条件约束了个寂寞,因此在优化目标中加入 ,并用超参数 做一个权衡: 其中 . 这依旧是一个凸二次规划问题,所以也可以直接调用相关算法求解。
对偶问题
对于软间隔最大化,我们同样也可以考虑求解其对偶问题。
首先构建 Lagrange 函数。对约束条件引入 Lagrange 乘子 和 ,定义 Lagrange 函数为: 其中 . 那么原问题和对偶问题分别为: 对于 ,取 Lagrange 函数对 求导并令为零: 代入 得: 因此原问题转化为如下对偶问题: 注意优化目标其实与 无关,并且最后三个约束条件可以简化为 ,所以上述对偶问题可以进一步简化为: 对比硬间隔最大化的对偶问题,可以发现二者仅有一个区别:约束条件从 变成了 . 这并不改变问题是一个凸二次规划问题的形式,所以还是可以直接调用相关算法求解。
支持向量
软间隔的支持向量要比线性可分时的情况复杂一些,它们既可以在间隔边界上、也可以在间隔边界与分离超平面之间,还可以在分离超平面的误分一侧,如下图所示:

事实上,设原问题的最优解为 ,对偶问题的最优解为 ,那么根据 KKT 条件的互补松弛性条件有: 因此可以分析:
- 若 ,则 ,于是原问题的约束条件变成 ,这意味着 位于间隔边界之外,不是支持向量;
- 若 ,那么 并且 ,这意味着 位于间隔边界上;
- 若 ,那么 ,这意味着 位于间隔边界内。此时:
- 若 ,则 ,即 分类正确,在间隔边界和分离超平面之间;
- 若 ,则 ,即 正好在分离超平面上;
- 若 ,则 ,即 分类错误,在分离超平面误分的那一侧。
Hinge loss
让我们重新考察支持向量机的原问题: 注意到:
- 如果 ,那么第一个约束始终成立,于是为了最小化目标函数,必然有 ;
- 如果 ,那么第一个约束表明 ,于是为了最小化目标函数,必然有 .
综上,有: 因此原问题与下面这个优化问题是等价的: 为了形式上的需要,做一个人畜无害的变量代换 ,于是原问题等价于: 从这个角度看,支持向量机是用 hinge loss 的二分类问题,还带了个正则项。事实上,二分类问题真正的损失函数是 0-1 损失函数,但 0-1 损失函数梯度为零,直接优化比较困难,而 hinge loss 是 0-1 损失的上界,因此可以作为 0-1 损失函数的一个合适的代理损失函数,如图所示:

线性不可分与核函数
基本思想与核技巧
虽然软间隔支持向量机可以处理线性不可分的数据,但得到的依旧是一个超平面,因此只能用于处理近似线性可分的问题。如果数据本身就完全不是线性可分的,如异或问题,那么软间隔支持向量机显然也不合适。核技巧是解决非线性可分问题的常用技巧,其基本思想为将线性不可分的数据映射到高维空间中,使之线性可分,进而可以使用线性模型求解。
具体而言,设 为输入空间, 为映射后的特征空间,存在映射: 使得对任意 ,函数 满足: 则称 为核函数,其中 表示向量内积。
核技巧的思想是只设计核函数 ,而不显式定义映射函数 . 也就是说,计算特征内积时并不是先映射、再计算,而是直接用核函数计算(事实上一些核函数对应的特征空间 甚至是无穷维的,无法先映射再计算)。
既然不显式定义映射函数,那怎么获取核函数呢?怎么判断某给定函数是不是核函数呢?这涉及到了泛函分析与再生核希尔伯特空间的知识,感兴趣的读者可以继续阅读这篇文章。
常用核函数
实际应用中,我们常常用如下几种核函数:
多项式核函数:
高斯核函数:
Sigmoid (Tanh) 核函数:
核函数+软间隔支持向量机
注意到在支持向量机的对偶问题中,优化目标只需要样本之间的内积,并不需要每个样本单独的值。因此,只需要将内积替换为核函数,就相当于是在映射后的高维特征空间中做支持向量机了: 能够使用核技巧也是对偶问题相比原问题的优势之一,因为原问题需要每个样本单独的值,无法使用核技巧。然而,要找到一个合适的核函数使得映射后的数据近似线性可分并不是一件容易的事,因而也是当年的研究热点。
SMO 优化算法
我们已经看到,无论是硬间隔最大化、软间隔最大化、亦或是加入核函数的支持向量机,它们最终都建模为了一个凸二次规划问题。到这一步,我们只需要调用很多成熟的凸二次规划求解器即可。但是,当训练样本量很大时,这些算法往往会变得低效。因此,对于支持向量机而言,人们最常使用的优化方法是一种称为 SMO (Sequential Minimal Optimization) 的算法。
SMO 算法要解的是对偶问题: 其基本思想是,由于 KKT 条件是最优解的充要条件,因此在达到最优解之前,一定有变量不满足 KKT 条件。那么,每次拿出两个变量(其中至少一个不满足 KKT 条件),固定其他变量,问题就变成了针对这两个变量的凸二次规划问题。而两个变量的凸二次规划问题有解析解,因此可以提高算法的速度。
显然,SMO 算法的一个关键问题就是每步究竟选哪两个变量 最好。一种启发式的选法为:首先选择 为违反 KKT 条件最严重的那个变量,然后选择 使得这一步优化后 的变化足够大。当然,所谓启发式就意味着这种选法不一定是最好的,因此也有很多文献做这方面的研究。
参考资料