支持向量机 Support Vector Machine

ML

难度提醒

这一节内容非常复杂。需要你有足够的耐心和一定的数学功底。第一遍阅读可以略读或跳过这一节。

支持向量机(Support Vector Machine, SVM)是一种二分类模型,其基本模型是定义在特征空间上的间隔最大的线性分类器,其学习策略便是间隔最大化。SVM 通过间隔最大化,可以使得模型对噪声更加鲁棒,从而提高模型的泛化能力。

和逻辑回归一样,支持向量机是一个二分类模型,且其也是个线性模型,即其分割超平面为 。我们可以将数据集分为两类,一类为正类,一类为负类。

什么是线性可分?

线性可分是指存在一个(超)平面可以将数据集完全分割开,即正类在(超)平面的一侧,负类在(超)平面的另一侧。

在下面我们将首先讨论线性可分情况下的支持向量机。再介绍线性不可分的情况。

基础想法

我们考虑分类算法,我们只是关注是否所有的数据点被正确分类了,而并不在乎我们到底选择了哪一个(超)平面用于用于分隔数据点。但是支持向量机不仅仅关注分类是否正确,还关注分类的边界。我们希望分类的边界尽可能远离数据点,这样可以使得模型对噪声更加鲁棒,从而提高模型的泛化能力。

[https://en.m.wikipedia.org/wiki/File:SVM_margin.png]

上图是 SVM 的示例图。红色线是我们的假说。蓝色点为正类,绿色点为负类。黄色区域则是由离假说最近的正类和负类点组成的间隔(Margin)。间隔线(虚线)与假说平行,而在间隔线上的数据点,我们称其为支持向量(Support Vector)。我们希望寻找一个假说可以将两个类被正确分开,且能够使这个间隔最大化。

而因此,我们定义了新的假说:

即,如果这个点在超平面的上侧,我们将其分类为正类,否则分类为负类。

点到平面的距离

在一切开始前,我需要先介绍一下点到(超)平面(后简称平面)的距离。

我们定义平面 。 并定义点 到平面 的距禽为

我们想要知道怎么计算点 到平面 的距离。

取平面任意一点 ,且因为平面上的点满足 ,因此有

向量 ,其相对于平面法向量的投影为 ,其中 的夹角。考虑其投影的几何性质,我们可以得到

令法向量 ,有

因此则有:

定义间隔(Margin)

根据上一节,我们可以定义距离公式:

我们定义距离

考虑 ,因此由:

即如果分类正确,,如果分类错误,。考虑 ,即乘上它只会改变 的正负号而不会改变其绝对值,因此如果所有点都被正确分类,我们可以把边距改写为

经过此变换,我们可以得到一个更加简洁的表达式:

定义原问题 Prime Problem

我们的目标是最大化最小的间隔,即我们要先找到最小的间隔 ,然后寻找使其最大的参数 。因此我们可以定义原问题为:

由于在求最小点的时候,我们固定了 ,因此我们可以把 提出来,即

考虑如果存在 能满足超平面。则超平面可以被定义为

如果我们对 进行缩放,即 ,这样我们可以得到

如果我们考虑最小边距的点,即 ,考虑总是存在常量 使得,因此我们可以对平面进行乘 变换,因此有 。而由于最小化的边距被定义为了 ,因此约束条件被改写为

因此我们可以改写原问题为

边界 被定义为 而最大化一个数的倒数等价于最小化这个数的倒数的倒数,即

考虑我们最小化一个绝对值,也就在最小化这个绝对值的平方,因此有:

为了方便之后的求导,我们可以把最小化的平方乘上一个正系数 ,即:

我们对 进行非线性变换,即 ,这样我们可以得到

我们需要优化这个函数

改写为对偶问题 Dual Problem

考虑原问题

由于约束比较复杂,我们难以直接优化。因此我们需要改写原问题以方便优化。

我们可以定义一个惩罚函数 ,当违反约束时,这个惩罚会很大,而当满足约束时,这个惩罚会很小。因此在优化这个整体问题时,我们也在优化惩罚函数,即尽可能符合约束。即我们可以定义把原问题重新写为:

如果我们能将约束转化为上述的 函数,则我们就可以把原问题转化为一个无约束问题。因此我们需要构建惩罚函数

惩罚函数

我们首先改写约束条件:

我们可以定义惩罚函数为

在这里,我们称 为拉格朗日乘子。(因为这个方法本质上被称为拉格朗日乘子法)且其:

  1. 不是支持向量,即 ,这个点对于最终的分类没有影响
  2. 是支持向量,即 ,这个点对于最终的分类有影响

时,我们称 为支持向量。需要注意的是尽管有可能 在边界上,但是其 仍然可能为

我们希望使得所有违反约束的点的惩罚尽可能大,即我们希望最大化这些惩罚,因此我们可以改写惩罚函数为:

我们将惩罚函数带入原问题,我们可以得到:

由于内侧优化 并不会影响到 ,因此可以提出来,即:

根据一些数学推导,我们可以得到最终的优化问题为:

我们将省略上侧这一步的推导,简单来说我们可以将优化看成两部分:

  • 最小化
  • 最大化

前者可以被轻易证明是凸的(convex),因此其的极小值为全局最小值。 而后者也可以被证明为凹的(concave)。因此其的极大值为全局最大值。

由 Minimax 定理,在此情况下的 是可以进行交换优化的。

Minimax 定理

对于固定的 ,有 是 concave,且
对于固定的 ,有 是 convex。

则我们有

具体请参考 Minimax Theorem - Wikipedia

即:

改写对偶问题

我们对其进行求导,即

如果损失最小,我们可以得到:

代入 ,我们可以把优化问题改写为

定义核函数 ,可以把优化问题改写为

预测

原问题的预测是很直觉的,即:

其中 为符号函数,即如果输入为正数,则输出为 ,否则输出为

而对偶问题的预测有所不同。由于我们有 ,我们将其带入 ,我们可以得到:

软间隔 Soft Margin

但是如果遇到非线性可分情况,我们需要引入软间隔(Soft Margin)。我们可以引入一个松弛变量 ,其可以使得一些点可以在越过边界的情况下被正确分类。我们可以定义新的约束条件:

而其实我们本质期望这个松弛变量 越小越好,因此我们可以定义惩罚函数 为:

其中 为一个超参数(hyperparameter),其可以控制惩罚的大小。我们可以把原问题改写为:

什么是超参数

超参数是在开始学习过程之前设置的参数,其控制或影响学习的过程。在学习过程中,超参数是固定的,不会被学习和改变。超参数的选择是非常重要的,不同的超参数会导致不同的学习效果。

我们可以将问题逐步改写为对偶问题以方便求解:

改写为拉格朗日乘子法为:

和线性可分情况类似(即没有软间隔的情况,也被称为硬间隔),我们的优化问题因此被转化为: 上述两个问题是等价的(Minimax Theorem)。

而如果我们对此拉格朗日乘子法取最低点,即为

其中 可以改写为 ,考虑

因此则有 。我们称这一条限制为 Box Constraint

因此这个公式可以被拆成三部分:

我们对第一项进行修改

我们对第三项进行修改 将改写好的量带入: 而我们的目标为最大化 ,即 更完整地

即我们可以定义优化问题为:

而目标函数为:

SMO 算法

通过上述过程,我们获得了我们需要优化的问题:

相比于传统的直接使用梯度下降,SVM使用一个名为 SMO 算法。上述问题我们定义其为二次编程(QP)问题。SMO 是一个启发式算法,其将这个问题分解成很多子 QP 问题再逐个解决分析。其性能比直接梯度下降好很多。

我们的目标是通过选择 从而使这个问题最优化。

这个算法的核心想法是每一步,从 中选择两个 并让其他 固定,然后调整这两个参数。通过反复循环这个操作,完成整体优化。

即:

初始化 循环: 选择一对 保持其他 固定,优化

为什么不直接选择一个进行优化

考虑是如果我们抽取一个 ,而其仍需要满足约束 ,因此则有: 而考虑 ,因此有 而对于这种情况,调整 是难以完成。

因此我们最少选择两个参数。

选择 :最简单的做法是选择 ,我们将在后面讨论具体应该怎么做

优化 ​ :

由于我们固定了 以外的所有参数,因此有

如果令 ,则有:

需要注意 $\zeta$ (zeta)和 $\xi$ (xi)并不是一个字母。  
$\xi$ 表示松弛变量  
$\zeta$ 表示一个常量

我们如果在更新 ,我们可以计算其下界 :

这里我们将拆分两种情况:

情况 ,我们有 或者

因此此情况下界 ,上界

情况 ,我们有 或者

因此此情况下界 ,上界

我们可以改写 使用 表示:

我们对目标函数相对于特定 进行求导(这里使用 是为了避免和目标函数中的 重合):