AI机动队
首发于AI机动队
支持向量机——深度学习花书第五章(五)

支持向量机——深度学习花书第五章(五)

支持向量机(Support Vector Machine, 简称SVM)是传统监督学习中一个经典的算法,Ian在花书中讲的比较简略,这里我结合CS229的内容进行补充。

直观解释

在逻辑回归(逻辑回归——深度学习花书第五章(四))中,对于二元分类问题,我们有sigmoid函数 p(y=1|x;\theta ) = \frac{1}{1+e^{-\theta ^T x}}

如果 p(y=1|x;\theta ) \geq 0.5 ,即 \theta ^T x \geq 0 则我们推测这是一个positive example,而且 \theta ^T x 越大,则y取1的概率越大。类似的,如果 \theta ^T x \ll 0 ,则我们有更大的置信度去推测这是一个negative example。

如图中所示, \theta ^T x = 0 是分割正负样本的平面,A,B,C三点均位于正样本区间,但是由于A相较于C更远离边界,对于推测A为positive example有更高的可信度。所以我们需要找到一个平面使正负样本的间距尽量大。

与逻辑回归类似而略有不同的是,为了方便讨论,对于SVM要研究的二类分类问题,我们假设 y\in \left\{ -1, 1 \right\} ,即1对应正样本,-1对应负样本,而且我们利用如下简单的函数替代sigmoid函数

h_{w,b} (x) = g(w^T x + b)

其中 z> 0 时,g(z) = 1, z<0 时,g(z)=-1。而且我们把截距项b单独写出来,对应的是逻辑回归中输入的 x_0 =1 相应的 \theta _0 项。

间隔优化

定义了分类函数,我们怎样使正负区间的间隔(margin)最大呢?

这里我们定义两种margin:functional margin和geometric margin。

对于样本 (x^{(i)},y^{(i)}) 我们定义其functional margin为 \hat \gamma ^i =y^{(i)}(w^Tx+b)

对于 y^{(i)} =1 我们希望我们的预测 h_{w,b} (x) =1 ,即 w^Tx+b > 0 ,相应的 y^{(i)} =-1 ,我们希望 w^Tx+b < 0 ,两种情况均可归纳为 \hat \gamma ^i > 0

我们还可以定义geometric margin,即几何意义上一个样本到判别边界的距离,如下图中的AB线段的长度 \gamma ^{(i)}

由于BA与矢量w同方向,B的坐标可表示为 x^{(i)}-\gamma ^{(i)} w/||w|| ,由于B在边界 w^T x + b = 0 上,代入可得 w^T (x^{(i)}-\gamma ^{(i)} \frac{w}{||w||})+b = 0 ,可得到

\gamma ^{{i}} = (\frac{w}{||w||})^Tx^{(i)} + \frac{b}{||w||}

以上是对 y^{(i)} =1 情况得到的,同理对 y^{(i)} =-1 求解并将两种情况合并可得 \gamma ^{{i}} =y^{(i)} \left( (\frac{w}{||w||})^Tx^{(i)} + \frac{b}{||w||} \right)

可以看出 \gamma ^{{i}} = \frac{\hat \gamma ^i}{||w||} ,并且当我们rescale参数w和b的情况下,geometric margin \gamma ^{(i)} 并不改变,当 ||w||=1 时, \gamma ^{{i}} = \hat \gamma ^i

对于训练集 S=\left\{ (x^{(i)},y^{(i)}); i=1,...,m \right\} 我们可得所有样本中最小的geometric margin为

相应的,对于functional margin,我们定义

假设我们的训练集可以用一个超平面线性分割成正负样本区域,我们希望找到一个使geometric margin最大从而使正负样本的预测置信度最大的参数设置,即满足如下条件

我们可以将其等价转化为对于functional margin的条件优化问题

对于之前定义的函数g(z)我们发现其最终结果只依赖于z的符号而不依赖于z的具体大小,即 g(2w^T x + 2b) = g(w^T x + b) ,所以对于w,b进行rescale并不影响最终的模型的准确度,我们总可以rescale参数w,b使得 \hat \gamma = 1 。另外,使 1/||w|| 最大化,与使 ||w|| 最小化是等价的,所以我们将问题转化为如下条件极值问题

利用梯度下降算法——深度学习花书第四章数值计算中回顾的拉格朗日乘子法可得

而且根据KKT条件有,只有对于 y^{(i)}(w^Tx+b) -1 = 0 的项,才有\alpha _i > 0 ,满足这个条件的点就被称作support vector,而其余的项 \alpha _i = 0 ,如下图中,只有最靠近分离边界的三个点是support vector,support vector的数量要远小于总样本量。

根据KKT条件,我们令L相对于w和b的导数为零,可得

w=\sum_{i=1}^{m}{\alpha _i y^{(i)}x^{(i)}}

\sum_{i=1}^{m}{\alpha _i y^{(i)}} =0

代入原拉格朗日式子可得

即我们转化为如下的极值问题

由于大部分的 \alpha _i = 0 ,只有少部分support vector对应的 \alpha _i > 0 ,对于 W(\alpha ) 有贡献,所以极大的减少了求极值的时间。

Kernel

通过上面的满足KKT条件的w我们可以得到

将其转化为了support vector与x的内积形式,我们可以定义一个kernel函数 k(x,z) = \phi(x)^T\phi(z) ,从而将其写成 z=w^Tx+b=\sum_{i=1}^{m}{\alpha _i y^{(i)}k(x,x^{(i)})}+b 的形式。

kernel函数不仅仅限于x的线性函数,  \phi(x) 对于x可以是非线性的,但是通过kernel函数我们将对于x非线性的问题转化为了可收敛的convex optimization的问题。

常见的kernel有Gaussian kernel:k(x,z) = N(x-z;0,\sigma ^2 I)

它也被称作radial basis function(RBF) kernel,因为它是随以x为原点的指向z的距离而指数衰减的。我们可以将其看做一种匹配模板:标记为y的训练样本x是y类的模板,当一个测试样本x'与x的欧几里得距离较近时,Gaussian kernel会有较大的结果,说明x'与模板x很相近,导致模型会对相应的标记y有较大的权重。

当然kernel不仅仅对于SVM适用,它也有更广泛的用途,用于将非线性问题转化为更易解的问题。


这里大致总结了SVM的基本原理与kernel方法,下一篇总结经典的无监督学习算法主成分分析。

编辑于 2018-07-16

文章被以下专栏收录