干货|详解LinearSVM

SVM(二)LinearSVM

不少人(包括我)第一次据说 SVM 时都以为它是个很是厉害的东西,但其实 SVM 自己“只是”一个线性模型。算法

只有在应用了核方法后,SVM 才会“升级”成为一个非线性模型网络

不过因为广泛提及 SVM 时咱们都默认它带核方法,因此咱们仍是随大流、称 SVM 的原始版本为 LinearSVM。ide

不过即便“只是”线性模型,这个“只是”也是要打双引号的——它依旧强大,且在许许多多的问题上甚至要比带核方法的 SVM 要好(好比文本分类)函数

1

感知机回顾

在进入正题以前,咱们先回顾一下感知机,由于 LinearSVM 往简单来讲其实就只是改了感知机的损失函数而已,并且改完以后还很像学习

感知机模型只有和这两个参数干货|详解LinearSVM,它们决定了一张超平面干货|详解LinearSVM优化

。感知机最终目的是使得干货|详解LinearSVM,其中D是训练数据集、y只能取正负一训练方法则是梯度降低,其中梯度公式为:
干货|详解LinearSVM翻译

咱们在实际实现时,采用了“极大梯度降低法”(亦即每次只选出使得损失函数最大的样本点来进行梯度降低)(注:这不是被普遍认可的称谓,只是本文的一个代称):
干货|详解LinearSVM3d

而后有理论证实,只要数据集线性可分,这样下去就必定能收敛blog

2

感知机问题与LinearSVM的解决方案

由感知机损失函数的形式可知,感知机只要求样本被正确分类,而不要求样本被“很好地正确分类”。数学

这就致使感知机弄出来的超平面(一般又称“决策面”)常常会“看上去很不舒服”:
干货|详解LinearSVM

之因此看上去很不舒服,是由于决策面离两坨样本都太近了。从直观上来讲,咱们但愿获得的是这样的决策面:
干货|详解LinearSVM
那么应该如何将这种理想的决策面的状态翻译成机器可以学习的东西呢?直观来讲,就是让决策面离正负样本点的间隔都尽量大;而这个“间隔”翻译成数学语言,其实就是简单的:
干货|详解LinearSVM

在有了样本点到决策面的间隔后,数据集到决策面的间隔也就好定义了:
干货|详解LinearSVM

因此咱们如今的目的就转化为:

  • 让全部样本点都被正确分类:干货|详解LinearSVM
  • 让决策面离正负样本点的间隔都尽量大:干货|详解LinearSVM
    注意到 干货|详解LinearSVM 的值在干货|详解LinearSVM 同时扩大 k 倍时不会改变,因此咱们彻底能够假设:
    干货|详解LinearSVM

可是这会致使另外一个问题:当数据集线性不可分时,上述优化问题是一定无解的,这就会致使模型震荡(换句话说,干货|详解LinearSVM这个约束太“硬”了)。

因此为了让模型在线性不可分的数据上仍有不错的表现,从直观来讲,咱们应该“放松”对咱们模型的限制(让咱们模型的约束“软”一点):
干货|详解LinearSVM

注意咱们感知机的损失函数为干货|详解LinearSVM,因而综上所述能够看出,LinearSVM 在形式上和感知机的差异只在于损失函数、且这两个损失函数确实长得很像

3

LinearSVM的训练

虽然比较简单,可是调优 LinearSVM 的训练这个过程是至关有启发性的事情。

仍然是那句老话:麻雀虽小,五脏俱全。咱们会先展现“极大梯度降低法”的有效性,而后会展现极大梯度降低法存在的问题,最后则会介绍如何应用 Mini-Batch 梯度降低法(MBGD)来进行训练】

为了使用梯度降低法,咱们须要先求导。咱们已知:
干货|详解LinearSVM

咱们彻底能够照搬感知机里的代码来完成实现(因为思路基本一致,这里就略去注释了):
干货|详解LinearSVM

下面这张动图是该 LinearSVM 的训练过程:
干货|详解LinearSVM

虽然看上去不错,但仍然存在着问题:

  • 训练过程其实很是不稳定
  • 从直观上来讲,因为 LinearSVM 的损失函数比感知机要更复杂,因此相应的函数形状也会更复杂。这意味着当数据集稍微差一点的时候,直接单纯地应用极大梯度降低法可能会致使一些问题——好比说模型会卡在某个很奇怪的地方没法自拔(什么鬼)
    经过将正负样本点的“中心”从原点 (0, 0)(默认值)挪到 (5, 5)(亦即破坏了必定的对称性)并将正负样本点之间的距离拉近一点,咱们能够复现这个问题:
    干货|详解LinearSVM

原理我不敢乱说,这里只提供一个牵强附会的直观解释:

  • 每次只取使得损失函数极大的一个样本进行梯度降低模型在某个地方可能来来回回都只受那么几个样本的影响死循环(什么鬼!)
    专业的理论就留待专业的观众老爷补充吧

而后解决方案的话,主要仍是从改进随机梯度降低(SGD)的思路入手(由于极大梯度降低法其实就是 SGD 的特殊形式)。

咱们知道 SGD 的“升级版”是 MBGD、亦即拿随机 Mini-Batch 代替随机抽样,咱们这里也彻底能够依样画葫芦。

如下是对应代码(只显示出了核心部分):
干货|详解LinearSVM

这样的话,一般而言会比 SGD 要好

可是问题仍然是存在的:那就是它们所运用的梯度降低法都只是朴素的 Vanilla Update,这会致使当数据的 scale 很大时模型对参数极为敏感、从而致使持续的震荡(所谓的 scale 比较大,能够理解为“规模很大”,或者直白一点——以二维数据为例的话——就是横纵坐标的数值很大)。

下面这张动图或许能提供一些直观:
干货|详解LinearSVM

Again,原理我不敢乱说,因此只提供一个有可能对(更有可能错)(喂)的直观解释:

  • scale太大梯度很大蹦跶得很欢(什么鬼!)
    专业的理论就留待专业的观众老爷补充吧

解决方案的话,一个很直接的想法就是进行数据归一化:干货|详解LinearSVM

。事实证实这样作了以后,最基本的极大梯度降低法也能解决上文出现过的全部问题了

而后一个稍微“偷懒”一点的作法就是,用更好的梯度降低算法来代替朴素的 Vanilla Update。

好比说 Adam 的训练过程将以下(这张动图被知乎弄得有点崩……将就着看吧:

干货|详解LinearSVM

4

相关数学理论

咱们还没有解决的问题有三个,但这些问题基本都挺直观的,因此大致上不深究也没问题(趴:
干货|详解LinearSVM

这三个问题有必定递进关系,咱们一个个来看

1)间隔的定义

咱们在定义点到平面(超平面)的间隔时,通常都是这样作的:

  • 将(垂直)投影到上
  • 设投影点为,则定义
    干货|详解LinearSVM
    干货|详解LinearSVM
    注意这里咱们容许(当样本被错分类时的)间隔为负数,因此间隔其实严格来讲并非通常意义上的距离

那么为了找到垂直投影,咱们得先找到垂直于超平面的方向。不难看出就是垂直于的,由于对干货|详解LinearSVM

(两式相减便可),从而垂直于向量,从而也就垂直于干货|详解LinearSVM
干货|详解LinearSVM
那么结合以前那张图,不可贵知咱们能够设干货|详解LinearSVM(这里的干货|详解LinearSVM可正可负),因而就有(注意由干货|详解LinearSVM干货|详解LinearSVM
干货|详解LinearSVM

从而
干货|详解LinearSVM

注意这么定义的间隔有一个大问题:当干货|详解LinearSVM同时增大干货|详解LinearSVM倍时,新获得的超平面干货|详解LinearSVM其实等价于原超平面干货|详解LinearSVM
干货|详解LinearSVM

但此时干货|详解LinearSVM却会直接增大干货|详解LinearSVM倍。极端的状况就是,当干货|详解LinearSVM同时增大无穷倍时,超平面没变,间隔却也跟着增大了无穷倍,这固然是不合理的

因此咱们须要把 scale 的影响给抹去,常见的作法就是作某种意义上的归一化:
干货|详解LinearSVM

(注意:因为 scale 的影响已被抹去,因此也就跟着被抹去了;同时由干货|详解LinearSVM知,咱们须要在抹去的同时、给干货|详解LinearSVM套一个绝对值)

不难看出上式可改写为:
干货|详解LinearSVM

这正是咱们想要的结果

2)优化问题的转化的合理性

咱们已知原问题为
干货|详解LinearSVM

且由 1)知,式中的干货|详解LinearSVM其实就是(没有抹去 scale 的影响的)间隔。因此想要放松对模型的限制的话,很天然的想法就是让这个间隔没必要必定要不小于 一、而是只要不小于干货|详解LinearSVM就行,其中干货|详解LinearSVM是个不小于 0 的数。

正如前文所说,只放松限制的话确定不行、还得给这个放松一些惩罚,因此就在损失函数中加一个干货|详解LinearSVM便可,其中C是个大于 0 的常数、能够理解为对放松的惩罚力度

综上所述,优化问题便可合理地转化为:
干货|详解LinearSVM

3)优化问题的等价性

为方便,称优化问题:
干货|详解LinearSVM

为问题一;称:

干货|详解LinearSVM
为问题二,则咱们须要证实问题一与问题二等价

先来看问题一怎么转为问题二。事实上不可贵知:
干货|详解LinearSVM

注意问题一是针对和进行优化的,且当和固定时,为使干货|详解LinearSVM最小,必有:

干货|详解LinearSVM
亦即干货|详解LinearSVM。此时损失函数即为干货|详解LinearSVM,换句话说,咱们就把问题一转为了问题二

再来看问题二怎么转为问题一。事实上,直接令干货|详解LinearSVM,就有:

  • 模型的损失为干货|详解LinearSVM
  • 模型的约束为干货|详解LinearSVM
    亦即转为了问题一

4)LinearSVM 的对偶问题

原始问题
干货|详解LinearSVM

的对偶问题为
干货|详解LinearSVM

经过拉格朗日乘子法能够比较简单地完成证实。不可贵知原始问题相应的拉格朗日函数为:
干货|详解LinearSVM

其中干货|详解LinearSVM,因而原始问题为

干货|详解LinearSVM
从而对偶问题为
干货|详解LinearSVM

因而咱们须要求偏导并令它们为 0:
干货|详解LinearSVM

注意这些约束中干货|详解LinearSVM除了干货|详解LinearSVM以外没有其它约束,干货|详解LinearSVM的约束能够转为干货|详解LinearSVM。而后把这些东西代入拉格朗日函数干货|详解LinearSVM、便可获得:

干货|详解LinearSVM
因而对偶问题为
干货|详解LinearSVM

亦即
干货|详解LinearSVM

能够看到在对偶形式中,样本仅之内积的形式(干货|详解LinearSVM)出现,这就使得核方法的引入变得简单而天然

5)Extra

做为结尾,我来叙述一些上文用到过的、可是没有给出具体名字的概念(假设样本为干货|详解LinearSVM,超平面为干货|详解LinearSVM

  • 样本到超平面的函数间隔为:干货|详解LinearSVM
  • 样本到超平面的几何间隔为:干货|详解LinearSVM
  • 优化问题
    干货|详解LinearSVM
    的求解过程常称为硬间隔最大化,求解出来的超平面则常称为最大硬间隔分离超平面
  • 优化问题
    干货|详解LinearSVM

的求解过程常称为软间隔最大化,求解出来的超平面则常称为最大软间隔分离超平面
而后最后的最后,请容许我不加证实地给出两个结论(由于结论直观且证实太长……):

  • 若数据集线性可分,则最大硬间隔分离超平面存在且惟一
  • 若数据集线性不可分,则最大软间隔分离超平面的解存在但不惟一,其中:
  • 法向量干货|详解LinearSVM)惟一
  • 偏置量(干货|详解LinearSVM)可能不惟一(感谢评论区@shuyu cheng 指出)
    下一篇文章咱们则会介绍核方法,并会介绍如何将它应用到感知机和 SVM 上

但愿观众老爷们可以喜欢~

推荐阅读:
精选干货|近半年干货目录汇总
天然语言处理中CNN模型几种常见的Max Pooling操做
干货|很是详细的神经网络入门解释
干货|详解LinearSVM
干货|详解LinearSVM

相关文章
相关标签/搜索