线性支持向量机:一个名字奇怪但思想简单的算法

原文链接:https://mp.weixin.qq.com/s/K1xjEaBMA2INQcRNwaz0jw

本文是《机器学习宝典》第 9 篇,读完本文你能够掌握机器学习中线性支持向量机模型。

在前一篇 逻辑回归 中已经知道逻辑回归能够完成二分类,这篇文章介绍另外一个能够实现二分类的模型:支持向量机(support vector machine,SVM)。这个名字会让初学者有很大的困惑,不理解到底什么是所谓的"支持向量"。相信通过这篇文章后,你会明白这个名称的含义。

从逻辑回归到支持向量机

我们已经知道,将一个样本中的各个特征进行线性组合的结果是 $ \boldsymbol{\omega}^{T} \boldsymbol{x} + b$ ,它的取值范围是 (,+)(- \infty, +\infty) ,逻辑回归通过 sigmoid 函数 g(z)=11+ezg(z) = \frac{1}{1 + e^{-z}} 将线性组合的结果映射到 (0,1)(0, 1) ,映射后的结果认为是 y=1y=1 (正样本)的概率。仔细观察下逻辑回归的完整公式: fω,b(x)=g(ωTx+b)=11+e(ωTx+b)f_{\boldsymbol{\omega}, b}(\boldsymbol{x}) = g(\boldsymbol{\omega}^{T} \boldsymbol{x} + b) = \frac{1}{1 + e^{-(\boldsymbol{\omega}^{T} \boldsymbol{x} + b)}},我们能够发现,其实 fω,bf_{\boldsymbol{\omega}, b} 的结果只是与 $ \boldsymbol{\omega}^{T} \boldsymbol{x} + b$ 有关,sigmoid 函数 g(z)g(z) 的作用只是映射,如果 $ \boldsymbol{\omega}^{T} \boldsymbol{x} + b > 0$,则 fω,b(x)&gt;0.5f_{\boldsymbol{\omega}, b}(\boldsymbol{x}) &gt; 0.5,那么就认为该样本目标 y=1y=1;如果 $ \boldsymbol{\omega}^{T} \boldsymbol{x} + b < 0$,则 fω,b(x)&lt;0.5f_{\boldsymbol{\omega}, b}(\boldsymbol{x}) &lt; 0.5,那么就认为该样本目标 y=0y=0

回过头仔细想下,逻辑回归其实是使用全部训练样本去学习参数 ω,b\boldsymbol{\omega}, b,尽可能使得学到的参数 ω,b\boldsymbol{\omega}, b 能够将正样本的特征的线性组合 $ \boldsymbol{\omega}^{T} \boldsymbol{x} + b$ 大于0,将负样本的特征的线性组合 $ \boldsymbol{\omega}^{T} \boldsymbol{x} + b$ 小于0。这么做的原因是因为逻辑回归借助了 sigmoid 函数 g(z)g(z),这样在它的的眼中,$ \boldsymbol{\omega}^{T} \boldsymbol{x} + b$ 越大于 0,属于正样本的概率就越高;越小于 0,属于负样本的概率就越高。

进一步,如果我们将标签 y=0y = 0y=1y = 1 替换成 y=1y = -1y=1y = 1 ,同时映射函数 g(z)g(z) 不是 sigmoid 函数,而是下面这个函数:

g(z)={1z01z&lt;0 g(z)= \begin{cases} 1&amp; z \geq 0 \\ -1&amp; z &lt; 0 \end{cases}

那么我们可以认为,只要 fω,b(x)=ωTx+b0f_{\boldsymbol{\omega},b}(\boldsymbol{x}) = \boldsymbol{\omega}^{T} \boldsymbol{x} + b \geq 0,标签 y=1y = 1fω,b(x)=ωTx+b&lt;0f_{\boldsymbol{\omega},b}(\boldsymbol{x}) = \boldsymbol{\omega}^{T} \boldsymbol{x} + b &lt; 0,标签 y=1y = -1。由于一个超平面可以通过 ωTx+b=0\boldsymbol{\omega}^T \boldsymbol{x} + b = 0 来表示,所以可以认为我们找到了一个划分超平面,这个超平面能够将正负样本区分开。为了直观理解,下图是在二维空间中线性可分的情况下超平面划分样本的示意图(二维空间中,超平面会是一条直线)。

线性支持向量机:一个名字奇怪但思想简单的算法

在超平面 ωTx+b=0\boldsymbol{\omega}^T \boldsymbol{x} + b = 0 中,ω=(ω1,ω2,...,ωd)\boldsymbol{\omega} = (\omega_{1}, \omega_{2}, ..., \omega_{d}) 表示法向量,决定超平面的方向,bb 表示位移项,决定超平面与原点之间的距离。也就是说,参数 ω\boldsymbol{\omega}bb 共同决定了这个超平面。

这里有个小问题:ω\boldsymbol{\omega} 为什么是超平面的法向量呢?可以这样证明,假设 x1,x2\boldsymbol{x}_{1}, \boldsymbol{x}_{2} 是该超平面上的两个点,则向量 ωT\boldsymbol{\omega}^T 和向量 x1x2\boldsymbol{x}_{1} - \boldsymbol{x}_{2} 的点积为:

ωT(x1x2)=ωTx1ωTx2=(b)(b)=0 \boldsymbol{\omega}^T (\boldsymbol{x}_{1} - \boldsymbol{x}_{2}) = \boldsymbol{\omega}^T \boldsymbol{x}_{1} - \boldsymbol{\omega}^T \boldsymbol{x}_{2} = (-b) - (-b) = 0

ω(x1x2)\boldsymbol{\omega} \perp (\boldsymbol{x}_{1} - \boldsymbol{x}_{2}) ,由于 (x1x2)//ωTx+b(\boldsymbol{x}_{1} - \boldsymbol{x}_{2}) // \boldsymbol{\omega}^T \boldsymbol{x} + b,所以 ω(ωTx+b)\boldsymbol{\omega} \perp (\boldsymbol{\omega}^T \boldsymbol{x} + b)

支持向量机其实要做的就是找到这样一个划分超平面 (ω,b)(\boldsymbol{\omega}, b),能够在特征空间将两类样本分开,并且该超平面距离各样本最远。此外,相比于距离超平面较远的一些样本,我们更关心距离超平面较近的一些样本是否能被正确划分,这些距离焦平面较近的样本就是支持向量。也就是说,**支持向量机只是使用少量的训练样本(支持向量)来学习超平面参数 ω\boldsymbol{\omega}bb **。这是支持向量机与逻辑回归不一样的一个地方,因为逻辑回归是使用全部的训练样本学习参数 ω\boldsymbol{\omega}bb 。可以看出,支持向量机的思想是非常简单的。

函数间隔与几何间隔

我们已经知道,支持向量机要找的超平面需要在特征空间中距离各样本最远,那如何衡量远近呢?我们可以使用间隔来衡量。说到间隔,存在函数间隔几何间隔两种。

我们先来说下函数间隔,当我们的超平面 ωTx+b=0\boldsymbol{\omega}^T \boldsymbol{x} + b = 0 确定后,我们定义一个样本的函数间隔为:

γ^(i)=y(i)(ωTx(i)+b) \hat{\gamma}^{(i)} = y^{(i)}(\boldsymbol{\omega}^T \boldsymbol{x}^{(i)} + b)

想一想,函数间隔 γ^\hat{\gamma} 有什么含义呢?其实我们可以通过它的正负性来判断分类是否正确。γ^\hat{\gamma} 如果大于等于 0 的话,说明分类正确;反之分类错误。

如果特征空间线性可分,一定存在一个超平面将样本完全分类正确,那么这时候函数间隔 γ^\hat{ \gamma } 一定是大于等于 0 的。
γ^(i)=ωTx(i)+b \hat{\gamma}^{(i)} = |\boldsymbol{\omega}^T \boldsymbol{x}^{(i)} + b|
得到了一个样本的函数间隔,现在定义下在训练数据上的函数间隔:
γ^=minγ^(i),i=1,2,&ThinSpace;,m \hat{\gamma} = \min \hat{\gamma}^{(i)}, \quad i=1,2, \cdots, m

也就是说训练数据上的函数间隔就是训练数据中最小的一个训练样本的函数间隔。

不过函数间隔有这样一个问题:**如果等比例的改变参数 ω\boldsymbol{\omega}bb,这时候超平面并没有发生改变,但是函数间隔却会发生改变。**比如将参数 ω\boldsymbol{\omega}bb 同时乘以 2,函数间隔也会变为之前的 2 倍。

为了解决上面的问题,我们引入了几何间隔的概念。一个样本的几何间隔的表示如下:

γ~(i)=ωTx(i)+bω \tilde{\gamma}^{(i)} = \frac{|\boldsymbol{\omega}^T \boldsymbol{x}^{(i)} + b|}{\Vert \boldsymbol{\omega} \Vert}

可以看到,几何间隔表示的就是空间中的点 x\boldsymbol{x} 到超平面的距离。如何证明呢?其实 x\boldsymbol{x} 到超平面的距离其实等于 x\boldsymbol{x} 与超平面上某点 x0\boldsymbol{x}_{0} 连线向法向量 ω\boldsymbol{\omega} 的投影:

KaTeX parse error: No such environment: align* at position 8: \begin{̲a̲l̲i̲g̲n̲*̲}̲ proj_{\boldsym…

由于 γ^(i)=y(i)(ωTx(i)+b)\hat{\gamma}^{(i)} = y^{(i)}(\boldsymbol{\omega}^T \boldsymbol{x}^{(i)} + b) ,所以:
γ~(i)=γ^(i)ω \tilde{\gamma}^{(i)} = \frac{\hat{\gamma}^{(i)}}{\Vert \boldsymbol{\omega} \Vert}

也就是说,几何间隔就是将函数间隔对 ω\boldsymbol{\omega} 做了归一化。类似的,所有训练数据上的几何间隔就是训练数据中最小的一个训练样本的几何间隔:
γ~=minγ~(i),i=1,2,&ThinSpace;,m \tilde{\gamma} = \min\tilde{\gamma}^{(i)}, \quad i=1,2, \cdots, m

最大间隔分类器

了解了间隔之后,SVM 要做的就是找到一个划分超平面,使得距离超平面最近的样本能有更大的间隔。间隔表示距离划分超平面最近的样本到划分超平面几何间隔的两倍。即间隔 γ\gamma 定义如下:
γ=2γ~=2γ~ω \gamma = 2\tilde{\gamma} = 2\frac{\tilde{\gamma}}{\Vert \boldsymbol{\omega} \Vert}
想要找到具有最大间隔的划分超平面,也就是找到满足下面公式中约束的参数 ω\boldsymbol{\omega}bb ,使得 γ\gamma 最大,即
KaTeX parse error: No such environment: align* at position 8: \begin{̲a̲l̲i̲g̲n̲*̲}̲ & \max_{\bolds…

为了求解方便,我们将全局函数间隔 γ^=1\hat{\gamma} = 1 (稍后解释下为什么可以这样做),这样目标函数就变为了:
KaTeX parse error: No such environment: align* at position 8: \begin{̲a̲l̲i̲g̲n̲*̲}̲ & \max_{\bolds…

从下图可以直观的看到间隔的含义,也就是两条虚线间隔边界之间的距离,虚线间隔边界的满足 y(ωTx+b)=1y(\boldsymbol{\omega}^T \boldsymbol{x} + b) = 1 , 在虚线间隔边界上的样本点就是支持向量支持向量的含义是说超平面的参数 ω\boldsymbol{\omega}bb 仅由支持向量决定,与其他样本无关。

线性支持向量机:一个名字奇怪但思想简单的算法

由于求 2ω\frac{2}{\Vert \boldsymbol{\omega}\Vert} 最大值等价于求 12ω2\frac{1}{2} \Vert \boldsymbol{\omega} \Vert ^{2} 最小值,因此目标函数可以进一步改写:
KaTeX parse error: No such environment: align* at position 8: \begin{̲a̲l̲i̲g̲n̲*̲}̲ & \min_{\bolds…

得到目标函数之后,回过头来解释下前面令全局函数间隔 γ^=1\hat{\gamma} = 1 的可行性。假设全局的函数间隔是在样本点 xjx^{j} 处取得的,即 γ^=yj(ωTxj+b)\hat{\gamma} = y^{j}(\boldsymbol{\omega}^T \boldsymbol{x}^{j} + b) ,那么目标函数为:
KaTeX parse error: No such environment: align* at position 8: \begin{̲a̲l̲i̲g̲n̲*̲}̲ & \max_{\bolds…
如果将超平面的参数 ω\boldsymbol{\omega}bb 乘以一个大于 0 的系数 kk,超平面没有发生变化,只是函数表示形式变为了 (kωTx+kb)=0(k \boldsymbol{\omega}^T \boldsymbol{x} + k b) = 0,这时候全局的函数间隔依然是在样本点 xjx^{j} 处取得,只是变为了原来的 kk 倍数,即 γ^=yj(kωTxj+kb)\hat{\gamma} = y^{j}(k \boldsymbol{\omega}^T \boldsymbol{x}^{j} + k b),那么这时候的目标函数为:
KaTeX parse error: No such environment: align* at position 8: \begin{̲a̲l̲i̲g̲n̲*̲}̲ & \max_{\bolds…
化简后与上面的目标函数是等价的,也就是说收缩函数间隔,对目标函数求解没有影响。

原始问题与对偶问题

前面已经得到了最大间隔分类器的目标函数,这是一个典型的带不等式约束的二次规划求解问题。这时我们可以通过一些优化的计算包来求解,不过借助拉格朗日 (Lagrange) 函数和对偶问题(dual problem), 我们可以将问题更加简化。

首先,可以将目标函数进行变形,得到:
KaTeX parse error: No such environment: align* at position 8: \begin{̲a̲l̲i̲g̲n̲*̲}̲ & \min_{\bolds…

根据拉格朗日乘子法,对不等式的约束条件增加拉格朗日乘子 α\boldsymbol{\alpha} ,则该问题的拉格朗日函数为:
L(ω,b,α)=12ω2+i=1mαi(1y(i)(ωTx(i)+b)) L(\boldsymbol{\omega}, b, \boldsymbol{\alpha}) = \frac{1}{2} \Vert \boldsymbol{\omega} \Vert^{2} + \sum_{i=1}^{m} \alpha_{i} (1 - y^{(i)}(\boldsymbol{\omega}^T \boldsymbol{x}^{(i)} + b))
其中 $\alpha_{i} \ge 0 $。

这样上面的目标函数(原始问题)的优化就等价于:
KaTeX parse error: No such environment: align* at position 8: \begin{̲a̲l̲i̲g̲n̲*̲}̲ & \min_{\bolds…
为什么能够等价呢?当原始问题的约束条件不满足时,即 1y(i)(ωTx(i)+b)&gt;01 - y^{(i)}(\boldsymbol{\omega}^T \boldsymbol{x}^{(i)} + b) &gt; 0 ,我们令 $\alpha_{i} = +\infty $,使得 $ \alpha_{i} (1 - y{(i)}(\boldsymbol{\omega}T \boldsymbol{x}^{(i)} + b) = +\infty $ ,这时 minω,bmaxαL(ω,b,α)\min\limits_{\boldsymbol{\omega}, b} \max\limits_{\boldsymbol{\alpha}} L(\boldsymbol{\omega}, b, \boldsymbol{\alpha}) 无解;当原始问题的约束条件满足时,即 1y(i)(ωTx(i)+b)01 - y^{(i)}(\boldsymbol{\omega}^T \boldsymbol{x}^{(i)} + b) \le 0, 由于 αi0\alpha_{i} \ge 0,则 $ \alpha_{i} (1 - y{(i)}(\boldsymbol{\omega}T \boldsymbol{x}^{(i)} + b) \le 0 $ ,这时 minω,bmaxαL(ω,b,α)=minω,b12ω2\min\limits_{\boldsymbol{\omega}, b} \max\limits_{\boldsymbol{\alpha}} L(\boldsymbol{\omega}, b, \boldsymbol{\alpha}) = \min\limits_{\boldsymbol{\omega}, b} \frac{1}{2} \Vert \boldsymbol{\omega} \Vert ^{2}

进一步,我们可以得到原始问题的对偶问题:
KaTeX parse error: No such environment: align* at position 8: \begin{̲a̲l̲i̲g̲n̲*̲}̲ & \max\limits_…
默认情况下,对偶问题的最优解是原始问题的最优解的下界,即:
maxαminω,bL(ω,b,α)minω,bmaxαL(ω,b,α) \max\limits_{\boldsymbol{\alpha}} \min_{\boldsymbol{\omega}, b} L(\boldsymbol{\omega}, b, \boldsymbol{\alpha}) \le \min\limits_{\boldsymbol{\omega}, b} \max_{\boldsymbol{\alpha}} L(\boldsymbol{\omega}, b, \boldsymbol{\alpha})

这个性质叫做弱对偶性(weak duality),对于所有优化问题都成立,即使原始问题非凸。与弱对偶性相对应的有一个强对偶性(strong duality) ,如果满足强对偶性,对偶问题的最优解与原始问题的最优解相同。也就是说,在强对偶性成立的前提下,可以通过求解对偶问题的解来得到原始问题的解。

那么什么条件下满足强对偶性呢?一种情况是如果满足 Slater 条件,对偶问题等价于原始问题。Slater 条件是说如果原始问题是凸优化问题, 且可行域中至少有一
点使不等式约束严格成立
(不等式约束严格成立是说要将不等式严格到不能取等号,在这里就是只能取小于号)。由于原始问题中 12ω2\frac{1}{2} \Vert \boldsymbol{\omega} \Vert^{2} 为凸函数,并且存在一些样本点使得 1y(i)(ωTx(i)+b)&lt;01 - y^{(i)}(\boldsymbol{\omega}^T \boldsymbol{x}^{(i)} + b) &lt; 0 ,所以满足强对偶性。需要说明的是,Slater 条件成立只是满足强对偶性的一种情况,并非是唯一的情况。

在强对偶性满足的情况下,会有以下性质(KKT条件):
KaTeX parse error: No such environment: align* at position 8: \begin{̲a̲l̲i̲g̲n̲*̲}̲ & 1. \quad 主问题…
由于对偶问题公式中的内层对 ω\boldsymbol{\omega}bb 的优化属于无约束优化问题,所以可以通过令偏导等于 0 来求出 ω\boldsymbol{\omega}bb 的最优值。
L(ω,b,α)ω=0ω=i=1mαiy(i)x(i)L(ω,b,α)b=0i=1mαiy(i)=0 \frac{\partial L(\boldsymbol{\omega}, b, \boldsymbol{\alpha})}{\partial \boldsymbol{\omega}} = 0 \Rightarrow \boldsymbol{\omega} = \sum_{i=1}^{m} \alpha_{i}y^{(i)}\boldsymbol{x}^{(i)} \\ \frac{\partial L(\boldsymbol{\omega}, b, \boldsymbol{\alpha})}{\partial b} = 0 \Rightarrow \sum_{i=1}^{m} \alpha_{i}y^{(i)} = 0

这样,将上面的两个式子带入到 L(ω,b,α)L(\boldsymbol{\omega}, b, \boldsymbol{\alpha})
L(ω,b,α)=i=1mαi12i=1mj=1mαiαjy(i)y(j)(x(i))Tx(j) L(\boldsymbol{\omega}, b, \boldsymbol{\alpha}) = \sum_{i=1}^{m} \alpha_{i} - \frac{1}{2}\sum_{i=1}^{m}\sum_{j=1}^{m} \alpha_{i}\alpha_{j}y^{(i)}y^{(j)}(\boldsymbol{x}^{(i)})^{T}\boldsymbol{x}^{(j)}

对偶问题最后可以转为:
KaTeX parse error: No such environment: alignat at position 8: \begin{̲a̲l̲i̲g̲n̲a̲t̲}̲{2} \max_{\…

求解出 α\boldsymbol{\alpha} 之后,即可求出最优的 ω\boldsymbol{\omega}bb 即可得到线性支持向量机的表达形式:
KaTeX parse error: No such environment: align* at position 8: \begin{̲a̲l̲i̲g̲n̲*̲}̲ f_{\boldsymbol…
那如何求解最优的 bb 呢?我们可以根据距离超平面最近的正样本的函数间隔等于距离超平面最近的负样本的函数间隔来求出截距 bb
b=maxi:y(i)=1wTx(i)+mini:y(i)=1wTx(i)2 b^{\ast} = - \frac{\max_{i:y^{(i)}=-1} {w^{\ast}}^T x^{(i)} + \min_{i:y^{(i)}=1} {w^{\ast}}^T x^{(i)}} {2}

根据上面的两个式子以及 KKT 中的互补松弛条件可知,如果 αi=0\alpha_{i} = 0,则该样本不会对 $f_{\boldsymbol{\omega},b}(\boldsymbol{x}) $ 有任何影响;如果 αi&gt;0\alpha_{i} &gt; 0,那么 1y(i)(ωTx(i)+b)=01 - y^{(i)}(\boldsymbol{\omega}^T \boldsymbol{x}^{(i)} + b) = 0,即 y(i)(ωTx(i)+b)=1y^{(i)}(\boldsymbol{\omega}^T \boldsymbol{x}^{(i)} + b) = 1也就是说线性支持向量机中, αi&gt;0\alpha_{i} &gt; 0 的样本是支持向量,这些支持向量都落在了最大间隔边界上。

从前面可以看到,只要从对偶问题中求解出 α\boldsymbol{\alpha} ,就能够求出我们需要的超平面,关于 α\boldsymbol{\alpha} 的求解可以有很多种算法,针对该问题有一种高效求解的算法:序列最小优化算法(Sequential minimal optimization, SMO)。关于该算法的细节,有兴趣的同学可以自己学习下。

参考:

  1. 周志华.机器学习.第六章(支持向量机)
  2. 深入浅出ML之Kernel-Based家族
  3. 从零推导支持向量机(SVM)
  4. 支持向量机通俗导论(理解SVM的三层境界)
  5. 拉格朗日对偶性