https://zhuanlan.zhihu.com/p/77750026
SVM原理 - 图3

SVM 是一个非常优雅的算法,具有完善的数学理论,虽然如今工业界用到的不多,但还是决定花点时间去写篇文章整理一下。

1. 支持向量

1.1 线性可分

首先我们先来了解下什么是线性可分。

SVM原理 - 图4

在二维空间上,两类点被一条直线完全分开叫做线性可分。
严格的数学定义是:
SVM原理 - 图5SVM原理 - 图6 是 n 维欧氏空间中的两个点集。如果存在 n 维向量 w 和实数 b,使得所有属于 SVM原理 - 图7 的点 SVM原理 - 图8 都有 SVM原理 - 图9 ,而对于所有属于 SVM原理 - 图10 的点 SVM原理 - 图11 则有 SVM原理 - 图12 ,则我们称 SVM原理 - 图13SVM原理 - 图14 线性可分。

1.2 最大间隔超平面

从二维扩展到多维空间中时,将 SVM原理 - 图15SVM原理 - 图16 完全正确地划分开的 SVM原理 - 图17 就成了一个超平面。
为了使这个超平面更具鲁棒性,我们会去找最佳超平面,以最大间隔把两类样本分开的超平面,也称之为最大间隔超平面。

  • 两类样本分别分割在该超平面的两侧;
  • 两侧距离超平面最近的样本点到超平面的距离被最大化了。

    1.3 支持向量

    SVM原理 - 图18
    样本中距离超平面最近的一些点,这些点叫做支持向量。

    1.4 SVM 最优化问题

    SVM 想要的就是找到各类样本点到超平面的距离最远,也就是找到最大间隔超平面。任意超平面可以用下面这个线性方程来描述:
    SVM原理 - 图19
    二维空间点 SVM原理 - 图20 到直线 SVM原理 - 图21 的距离公式是:
    SVM原理 - 图22
    扩展到 n 维空间后,点 SVM原理 - 图23 到直线 SVM原理 - 图24 的距离为:
    SVM原理 - 图25
    其中 SVM原理 - 图26
    如图所示,根据支持向量的定义我们知道,支持向量到超平面的距离为 d,其他点到超平面的距离大于 d。
    SVM原理 - 图27
    于是我们有这样的一个公式:
    SVM原理 - 图28
    稍作转化可以得到:
    SVM原理 - 图29
    SVM原理 - 图30 是正数,我们暂且令它为 1(之所以令它等于 1,是为了方便推导和优化,且这样做对目标函数的优化没有影响),故:
    SVM原理 - 图31
    将两个方程合并,我们可以简写为:
    SVM原理 - 图32
    至此我们就可以得到最大间隔超平面的上下两个超平面:
    SVM原理 - 图33
    每个支持向量到超平面的距离可以写为:
    SVM原理 - 图34
    由上述 SVM原理 - 图35 可以得到 SVM原理 - 图36 ,所以我们得到:
    SVM原理 - 图37
    最大化这个距离:
    SVM原理 - 图38
    这里乘上 2 倍也是为了后面推导,对目标函数没有影响。刚刚我们得到支持向量 SVM原理 - 图39 ,所以我们得到:
    SVM原理 - 图40
    再做一个转换:
    SVM原理 - 图41
    为了方便计算(去除 SVM原理 - 图42 的根号),我们有:
    SVM原理 - 图43
    所以得到的最优化问题是:
    SVM原理 - 图44

    2. 对偶问题

    2.1 拉格朗日乘数法

    2.1.1 等式约束优化问题

    本科高等数学学的拉格朗日程数法是等式约束优化问题:
    SVM原理 - 图45
    我们令 SVM原理 - 图46 ,函数 SVM原理 - 图47 称为 Lagrange 函数,参数 SVM原理 - 图48 称为 Lagrange 乘子没有非负要求
    利用必要条件找到可能的极值点:
    SVM原理 - 图49
    具体是否为极值点需根据问题本身的具体情况检验。这个方程组称为等式约束的极值必要条件。
    等式约束下的 Lagrange 乘数法引入了 SVM原理 - 图50 个 Lagrange 乘子,我们将 SVM原理 - 图51SVM原理 - 图52 一视同仁,把 SVM原理 - 图53 也看作优化变量,共有 SVM原理 - 图54 个优化变量。

    2.1.2 不等式约束优化问题

    而我们现在面对的是不等式优化问题,针对这种情况其主要思想是将不等式约束条件转变为等式约束条件,引入松弛变量,将松弛变量也是为优化变量。
    SVM原理 - 图55
    以我们的例子为例:
    SVM原理 - 图56
    我们引入松弛变量 SVM原理 - 图57 得到 SVM原理 - 图58 。这里加平方主要为了不再引入新的约束条件,如果只引入 SVM原理 - 图59 那我们必须要保证 SVM原理 - 图60 才能保证 SVM原理 - 图61 ,这不符合我们的意愿。
    由此我们将不等式约束转化为了等式约束,并得到 Lagrange 函数:
    SVM原理 - 图62
    由等式约束优化问题极值的必要条件对其求解,联立方程:
    SVM原理 - 图63
    (为什么取 SVM原理 - 图64 ,可以通过几何性质来解释,有兴趣的同学可以查下 KKT 的证明)。
    针对 SVM原理 - 图65 我们有两种情况:

    情形一SVM原理 - 图66
    由于 SVM原理 - 图67 ,因此约束条件 SVM原理 - 图68 不起作用,且 SVM原理 - 图69

    情形二SVM原理 - 图70
    此时 SVM原理 - 图71SVM原理 - 图72 ,可以理解为约束条件 SVM原理 - 图73 起作用了,且 SVM原理 - 图74
    综合可得: SVM原理 - 图75 ,且在约束条件起作用时 SVM原理 - 图76 ;约束不起作用时 SVM原理 - 图77
    由此方程组转换为:
    SVM原理 - 图78
    以上便是不等式约束优化优化问题的 KKT(Karush-Kuhn-Tucker) 条件SVM原理 - 图79 称为 KKT 乘子。
    这个式子告诉了我们什么事情呢?
    直观来讲就是,支持向量 SVM原理 - 图80 ,所以 SVM原理 - 图81 即可。而其他向量 SVM原理 - 图82
    我们原本问题时要求: SVM原理 - 图83 ,即求 SVM原理 - 图84
    SVM原理 - 图85
    由于 SVM原理 - 图86 ,故我们将问题转换为: SVM原理 - 图87
    SVM原理 - 图88
    假设找到了最佳参数是的目标函数取得了最小值 p。即 SVM原理 - 图89 。而根据 SVM原理 - 图90 ,可知 SVM原理 - 图91 ,因此 SVM原理 - 图92 ,为了找到最优的参数 SVM原理 - 图93 ,使得 SVM原理 - 图94 接近 p,故问题转换为出 SVM原理 - 图95
    故我们的最优化问题转换为:
    SVM原理 - 图96
    出了上面的理解方式,我们还可以有另一种理解方式: 由于 SVM原理 - 图97
    SVM原理 - 图98
    所以 SVM原理 - 图99 ,所以转化后的式子和原来的式子也是一样的。

    2.2 强对偶性

    对偶问题其实就是将:
    SVM原理 - 图100
    变成了:
    SVM原理 - 图101
    假设有个函数 SVM原理 - 图102 我们有:
    SVM原理 - 图103
    也就是说,最大的里面挑出来的最小的也要比最小的里面挑出来的最大的要大。这关系实际上就是弱对偶关系,而强对偶关系是当等号成立时,即:
    SVM原理 - 图104
    如果 SVM原理 - 图105 是凸优化问题,强对偶性成立。而我们之前求的 KKT 条件是强对偶性的充要条件

3. SVM 优化

我们已知 SVM 优化的主问题是:
SVM原理 - 图106
那么求解线性可分的 SVM 的步骤为:
步骤 1
构造拉格朗日函数:
SVM原理 - 图107
步骤 2
利用强对偶性转化:
SVM原理 - 图108
现对参数 w 和 b 求偏导数:
SVM原理 - 图109
得到:
SVM原理 - 图110
我们将这个结果带回到函数中可得:
SVM原理 - 图111
也就是说:
SVM原理 - 图112
步骤 3
由步骤 2 得:
SVM原理 - 图113
我们可以看出来这是一个二次规划问题,问题规模正比于训练样本数,我们常用 SMO(Sequential Minimal Optimization) 算法求解。
SMO(Sequential Minimal Optimization),序列最小优化算法,其核心思想非常简单:每次只优化一个参数,其他参数先固定住,仅求当前这个优化参数的极值。我们来看一下 SMO 算法在 SVM 中的应用。
我们刚说了 SMO 算法每次只优化一个参数,但我们的优化目标有约束条件: SVM原理 - 图114 ,没法一次只变动一个参数。所以我们选择了一次选择两个参数。具体步骤为:

  1. 选择两个需要更新的参数 SVM原理 - 图115SVM原理 - 图116 ,固定其他参数。于是我们有以下约束:

这样约束就变成了:
SVM原理 - 图117
其中 SVM原理 - 图118 ,由此可以得出 SVM原理 - 图119 ,也就是说我们可以用 SVM原理 - 图120 的表达式代替 SVM原理 - 图121 。这样就相当于把目标问题转化成了仅有一个约束条件的最优化问题,仅有的约束是 SVM原理 - 图122
2. 对于仅有一个约束条件的最优化问题,我们完全可以在 SVM原理 - 图123 上对优化目标求偏导,令导数为零,从而求出变量值 SVM原理 - 图124 ,然后根据 SVM原理 - 图125 求出 SVM原理 - 图126
3. 多次迭代直至收敛。
通过 SMO 求得最优解 SVM原理 - 图127
步骤 4
我们求偏导数时得到:
SVM原理 - 图128
由上式可求得 w。
我们知道所有 SVM原理 - 图129 对应的点都是支持向量,我们可以随便找个支持向量,然后带入: SVM原理 - 图130 ,求出 b 即可,
两边同乘 SVM原理 - 图131,得 SVM原理 - 图132
因为 SVM原理 - 图133 ,所以: SVM原理 - 图134
为了更具鲁棒性,我们可以求得支持向量的均值:
SVM原理 - 图135
步骤 5: w 和 b 都求出来了,我们就能构造出最大分割超平面: SVM原理 - 图136
分类决策函数: SVM原理 - 图137
其中 SVM原理 - 图138 为阶跃函数:
SVM原理 - 图139
将新样本点导入到决策函数中既可得到样本的分类。

4. 软间隔

4.1 解决问题

在实际应用中,完全线性可分的样本是很少的,如果遇到了不能够完全线性可分的样本,我们应该怎么办?比如下面这个:

SVM原理 - 图140

于是我们就有了软间隔,相比于硬间隔的苛刻条件,我们允许个别样本点出现在间隔带里面,比如:

SVM原理 - 图141

我们允许部分样本点不满足约束条件:
SVM原理 - 图142
为了度量这个间隔软到何种程度,我们为每个样本引入一个松弛变量 SVM原理 - 图143 ,令 SVM原理 - 图144 ,且 SVM原理 - 图145 。对应如下图所示:

SVM原理 - 图146

4.2 优化目标及求解

增加软间隔后我们的优化目标变成了:
SVM原理 - 图147
其中 C 是一个大于 0 的常数,可以理解为错误样本的惩罚程度,若 C 为无穷大, SVM原理 - 图148 必然无穷小,如此一来线性 SVM 就又变成了线性可分 SVM;当 C 为有限值的时候,才会允许部分样本不遵循约束条件。
接下来我们将针对新的优化目标求解最优化问题:
步骤 1
构造拉格朗日函数:
SVM原理 - 图149
其中 SVM原理 - 图150SVM原理 - 图151 是拉格朗日乘子,w、b 和 SVM原理 - 图152 是主问题参数。
根据强对偶性,将对偶问题转换为:
SVM原理 - 图153
步骤 2
分别对主问题参数w、b 和 SVM原理 - 图154 求偏导数,并令偏导数为 0,得出如下关系:
SVM原理 - 图155
将这些关系带入拉格朗日函数中,得到:
SVM原理 - 图156
最小化结果只有 SVM原理 - 图157 而没有 SVM原理 - 图158 ,所以现在只需要最大化 SVM原理 - 图159 就好:
SVM原理 - 图160
我们可以看到这个和硬间隔的一样,只是多了个约束条件。
然后我们利用 SMO 算法求解得到拉格朗日乘子 SVM原理 - 图161
步骤 3
SVM原理 - 图162
然后我们通过上面两个式子求出 w 和 b,最终求得超平面 SVM原理 - 图163
这边要注意一个问题,在间隔内的那部分样本点是不是支持向量?
我们可以由求参数 w 的那个式子可看出,只要 SVM原理 - 图164 的点都能够影响我们的超平面,因此都是支持向量。

5. 核函数

5.1 线性不可分

我们刚刚讨论的硬间隔和软间隔都是在说样本的完全线性可分或者大部分样本点的线性可分。
但我们可能会碰到的一种情况是样本点不是线性可分的,比如:

SVM原理 - 图165

这种情况的解决方法就是:将二维线性不可分样本映射到高维空间中,让样本点在高维空间线性可分,比如:
SVM原理 - 图166
对于在有限维度向量空间中线性不可分的样本,我们将其映射到更高维度的向量空间里,再通过间隔最大化的方式,学习得到支持向量机,就是非线性 SVM。
我们用 x 表示原来的样本点,用 SVM原理 - 图167 表示 x 映射到特征新的特征空间后到新向量。那么分割超平面可以表示为: SVM原理 - 图168
对于非线性 SVM 的对偶问题就变成了:
SVM原理 - 图169
可以看到与线性 SVM 唯一的不同就是:之前的 SVM原理 - 图170 变成了 SVM原理 - 图171

5.2 核函数的作用

我们不禁有个疑问:只是做个内积运算,为什么要有核函数的呢?
这是因为低维空间映射到高维空间后维度可能会很大,如果将全部样本的点乘全部计算好,这样的计算量太大了。
但如果我们有这样的一核函数 SVM原理 - 图172SVM原理 - 图173SVM原理 - 图174 在特征空间的内积等于它们在原始样本空间中通过函数 SVM原理 - 图175 计算的结果,我们就不需要计算高维甚至无穷维空间的内积了。
举个例子:假设我们有一个多项式核函数:
SVM原理 - 图176
带进样本点的后:
SVM原理 - 图177
而它的展开项是:
SVM原理 - 图178
如果没有核函数,我们则需要把向量映射成:
SVM原理 - 图179
然后在进行内积计算,才能与多项式核函数达到相同的效果。
可见核函数的引入一方面减少了我们计算量,另一方面也减少了我们存储数据的内存使用量。

5.3 常见核函数

我们常用核函数有:
线性核函数
SVM原理 - 图180
多项式核函数
SVM原理 - 图181
高斯核函数
SVM原理 - 图182
这三个常用的核函数中只有高斯核函数是需要调参的。

6. 优缺点

6.1 优点

  • 有严格的数学理论支持,可解释性强,不依靠统计方法,从而简化了通常的分类和回归问题;
  • 能找出对任务至关重要的关键样本(即:支持向量);
  • 采用核技巧之后,可以处理非线性分类/回归任务;
  • 最终决策函数只由少数的支持向量所确定,计算的复杂性取决于支持向量的数目,而不是样本空间的维数,这在某种意义上避免了“维数灾难”。

    6.2 缺点

  • 训练时间长。当采用 SMO 算法时,由于每次都需要挑选一对参数,因此时间复杂度为 SVM原理 - 图183 ,其中 N 为训练样本的数量;

  • 当采用核技巧时,如果需要存储核矩阵,则空间复杂度为 SVM原理 - 图184
  • 模型预测时,预测时间与支持向量的个数成正比。当支持向量的数量较大时,预测计算复杂度较高。

因此支持向量机目前只适合小批量样本的任务,无法适应百万甚至上亿样本的任务。

7. 参考

  1. 《机器学习》 周志华
  2. 最优化问题的KKT条件
  3. 一文理解拉格朗日对偶和KKT条件
  4. 支持向量机通俗导论(理解SVM的三层境界)