SVM的梯度下降解释及其算法比较

SVM之前就做过总结(支持向量机),其中详细说明了SVM的推导过程和实现,也就是主流的解释,数学推导过程比较严谨。但是总有一种感觉,与其他机器学习算法相比,SVM好像是一个不一样的存在,最近看了李宏毅老师对SVM的解释,了解SVM与其他机器学习算法的一致性。

本文不会涉及到SVM原理的推导,而是从另一个角度来分析SVM,并且引入了两个最核心的概念就是hinge losskernel trick,最后说明SVM与其他机器学习算法内在的一致性(这个是最最重要的)。

1. Hinge Loss

首先,参考李宏毅老师的讲解,按照机器学习算法的三个步骤来初步展示SVM:
在这里插入图片描述

对上图的说明:

  • SVM的function set写成一个式子就是: g ( x ) = s i g n ( ∑ i w i x i + b ) g(x) = sign(\sum_i w_ix_i + b) g(x)=sign(iwixi+b),二分类的标签写做+1和-1(其它二分类写做0和1,这里不同是为了后序过程更顺畅);
  • 我们知道 δ ( g ( x n ) = ̸ y ^ n ) ) \delta(g(x^n) = \not \hat y^n)) δ(g(xn)≠y^n))是不可微分的,无法使用梯度下降法训练,因此我们希望定义一个可以微分的损失函数 l ( f ( x n ) , y ^ n ) l(f(x^n), \hat y^n) l(f(xn),y^n)

下面我们就来看一下如何选择损失函数

首先,我们希望分类正确的点损失很小,分类错误的点损失很大。这样,我们定义一个坐标系,横轴为 y ^ n f ( x ) \hat y^n f(x) y^nf(x),纵轴为损失函数。当分类正确时,即 y ^ n f ( x ) &gt; 0 \hat y^n f(x) &gt; 0 y^nf(x)>0,损失很小;当分类错误时,即 y ^ n f ( x ) &lt; 0 \hat y^n f(x) &lt; 0 y^nf(x)<0,损失很大。

那么我们先看一下上面定义的理想损失函数 δ ( g ( x n ) = ̸ y ^ n ) ) \delta(g(x^n) = \not \hat y^n)) δ(g(xn)≠y^n)),如下图黑色线段(Ideal loss),绘制出来类似于阶跃函数,很明显这样的函数是不可微分的。
在这里插入图片描述
既然理想的损失函数不可微分,那么,最直观的,我们可以考虑像线性回归一样,定义损失函数为square loss,如下图红色曲线。但是我们发现square loss是不合理的,因为当 y ^ n f ( x ) \hat y^n f(x) y^nf(x)很大,即分类很正确的时候,square loss也很大。
在这里插入图片描述
既然这样,那我们考虑对 f ( x ) f(x) f(x)取sigmoid函数,然后再求square loss,得到sigmoid + square loss如下图蓝色曲线。这就跟逻辑回归中使用 square loss 一样,当 y ^ n f ( x ) \hat y^n f(x) y^nf(x)很小,即分类结果严重错误时,梯度却很小,更新缓慢。于是参考逻辑回归,我们考虑使用cross entropy看一下。
在这里插入图片描述
sigmoid + cross entropy如下图绿色曲线。相比于square loss,我们发现,当分类很错误的时候,cross entropy可以提供很大的梯度,能够快速降低损失函数。
在这里插入图片描述
如下图紫色曲线,使用一种对cross entropy的一种近似,即损失函数为 l ( f ( x n ) , y ^ n ) = m a x ( 0 , 1 − y ^ n f ( x ) ) l(f(x^n), \hat y^n) = max(0, 1 - \hat y^n f(x)) l(f(xn),y^n)=max(0,1y^nf(x)),称作hinge loss
在这里插入图片描述
比较hinge loss和cross entropy,我们发现他们最大的不同,在于对待分类好的点的态度。使用cross entropy分类时,迭代过程中它会分类的好还要更好,不断降低损失函数;但是hinge loss不一样,只要某个点的分类距离大于一定的margin,其损失函数就变为0,不再考虑(使用hinge loss就引入margin的概念)。hinge loss有一个好处就是不怕离群点。

引入hinge loss,我们得到Linear SVM,如下:
在这里插入图片描述

由于很多convex function叠加起来也是convex function,所以SVM的损失函数是convex。

我们定义了一个可微的损失函数,接下来就可以使用梯度下降来训练。

虽然我们常用的SVM都是使用序列最小最优化算法,但是Linear SVM是可以有Gradient Descent的版本的,参数更新公式的推导如下:
在这里插入图片描述
上面的解释同我们常见的数学推导过程不太一样,但是能够更好的和其它机器学习算法统一起来。其实这里的结果和对偶算法是一致的,由下图可知:
在这里插入图片描述

一般情况下,上面红框内的两个式子不是等价的,但是当对损失函数取最小的时候,这两个式子就等价了。解释如下:
&ThickSpace; \;
因为 M i n i m i z i n g &ThickSpace; L ( f ) Minimizing \;L(f) MinimizingL(f),也就是 M i n i m i z i n g &ThickSpace; ϵ n Minimizing \;\epsilon^n Minimizingϵn,对于下面红框的两个不等式,使其最小也就是取 0 和 1 − y ^ n f ( x ) 1-\hat y^n f(x) 1y^nf(x)中最大的,于是就等价于hinge loss。

2. Kernel Trick

首先,先说一个结论,也就是SVM学习到的参数就是数据点的线性组合,即:
在这里插入图片描述

注:
统计学习方法上的公式为
w ∗ = ∑ i α i ∗ y i x i w^* = \sum_i \alpha^*_i y_i x_i w=iαiyixi这里的 α n ∗ \alpha^*_n αn其实相当于前面的梯度下降公式里的 c n ( w ) c^n(w) cn(w),里面包含了 y y y,所以两个公式是一致的,后文中的 α n ∗ \alpha^*_n αn默认是包含 y y y的。

这个结论是如何得到的呢?

如果是采用对偶算法来证明的话,可以用KKT条件得到 w ∗ w^* w。但是这里我们不考虑KKT条件,我们从上面得到的梯度下降的迭代公式出发,来说明这个结论:
在这里插入图片描述
对于左边的这些 w i w_i wi,我们写成向量的形式就得到右边的迭代公式。如果我们将 w w w的初始值设为0,那么就可以看到w就是数据点的线性组合。

其中 c n ( w ) = ∂ l ( f ( x n ) , y ^ n ) ∂ f ( x n ) c^n(w) = {\partial l(f(x^n), \hat y^n) \over \partial f(x^n)} cn(w)=f(xn)l(f(xn),y^n),当损失函数是hinge loss,很多分类足够好的点导数都是0,即这些点 c n ( w ) = 0 c^n(w)=0 cn(w)=0,所以 α n ∗ \alpha^*_n αn是稀疏的。对应于 α n ∗ = ̸ 0 \alpha^*_n = \not 0 αn≠0的点 x n x^n xn就是支持向量,这个性质使得SVM对于离群点是鲁棒的。

基于这个结论,我们先将 w w w写成向量的形式,然后代入 f ( x ) f(x) f(x)中,如下:
在这里插入图片描述
得到分类决策函数:
f ( x ) = ∑ n α n ( x n ⋅ x ) f(x) = \sum_n \alpha_n(x^n·x) f(x)=nαn(xnx)
输入实例与实例之间的内积可以用核函数 K ( x n , n ) K(x^n, n) K(xn,n)来代替,得到:
f ( x ) = ∑ n α n K ( x n , x ) f(x) = \sum_n \alpha_nK(x^n, x) f(x)=nαnK(xn,x)
其中 K ( x n , x ) = ϕ ( x n ) ϕ ( x ) K(x^n, x) = \phi(x^n)\phi(x) K(xn,x)=ϕ(xn)ϕ(x),经过映射函数 ϕ \phi ϕ将原来的输入空间变换到一个新的特征空间,将输入空间中的内积 x i ⋅ x j x_i·x_j xixj变换为特征空间中的内积 ϕ ( x i ) ⋅ ϕ ( x j ) \phi(x_i)·\phi(x_j) ϕ(xi)ϕ(xj)在新的特征空间里从训练样本中学习线性支持向量机。当映射函数是非线性函数时,学习到的含有核函数的支持向量机是非线性分类模型。

核函数 K ( x , z ) K(x,z) K(x,z)给定的条件下,可以利用解线性分类问题的方法求解非线性分类问题的支持向量机。学习是隐式地在特征空间进行的,不需要显式地定义特征空间和映射函数。这样的技巧称为核技巧,它是巧妙地利用线性分类学习方法与核函数解决非线性问题的技术。

同时,我也可以将核函数带入损失函数,如下:
在这里插入图片描述
我们知道linear model具有很多限制,对于不可线性划分的点,需要先做feature transform,再用linear model处理;在neural network里面也是使用多个hidden layer来做feature transform,然后再用线性模型分类。

类似于linear model和neural network,这里我们也是先用核函数对数据做feature transform,然后再使用linear SVM。

下面我们具体分析一下Kernel Trick

首先看一个简单的线性变换,利用核函数 ϕ ( x ) \phi(x) ϕ(x)来实现特征变换:
在这里插入图片描述
这里可以看出:将x和z先transform到另外一个空间再做inner product,相当于在transform之前的空间先做inner product再平方。后者通常情况下可以减少计算量,更快速。

由于这个例子比较简单,差别不明显,下面我们来看一下多项式核
在这里插入图片描述
由上式可以知道:x和z先做内积,只需要计算k个值的内积然后求平方就可以,复杂度为 O ( k ) O(k) O(k);但是先做transform数据量就变成 k 2 k^2 k2,然后再做内积,就要计算 k 2 k^2 k2个值的内积,计算量很大。

下面我们来看另外一个核函数——RBF kernel在这里插入图片描述
这里其实是计算x和z之间的距离,如果我们先做transform,就是将 x 和 z 映射到无穷维,然后在无穷维做内积(无穷维向量做内积如上图所示,就是将泰勒展开的式子拆开连接在一起)。无穷维做内积是无法计算的,但是这个过程相当于x和z先做内积再平方,从而实现低维计算达到无穷维计算的效果

下面再看一下Sigmoid Kernel
在这里插入图片描述
使用sigmoid kernel相当于只有一个hidden layer的neural network,其中每一个neuron的权重都是一些data,neuron的数量就是支持向量的数量。

  • 核技巧的想法是,我们可以直接设计核函数 K ( x , z ) K(x, z) K(x,z)而不用显示地定义映射函数 ϕ \phi ϕ。通常,直接计算 K ( x , z ) K(x, z) K(x,z)比较容易,而通过 ϕ ( x ) \phi(x) ϕ(x) ϕ ( z ) \phi(z) ϕ(z)计算 K ( x , z ) K(x, z) K(x,z)并不容易。
  • 核技巧不止用在SVM中,这是机器学习算法中的一种通用方法,可以引入到其它算法中。
  • 另外我们可以利用相似度来去定义Kernel,因为内积本身也能衡量相似性,归一化之后就是余弦相似度了。

关于余弦相似度和内积:
c o s ( θ ) = x ⋅ z ∣ ∣ x ∣ ∣ ∣ ∣ z ∣ ∣ cos (\theta) = {x · z \over ||x||||z||} cos(θ)=xzxz
我们知道余弦相似实际上就是归一化的内积。那归一化的意义是什么?如果不归一的话,这个内积的意义又是什么呢?

  • 余弦距离只考虑了角度差,内积综合考虑了角度差和长度差。
  • 比如有两个对象A和B,它们的向量表示为A(1,1,0)和B(0,1,1),那么它们余弦相似就是 1 2 1 \over 2 21。余弦相似不考虑向量的长度,所以A(1,1,0)和C(0,3,3)的相似程度和A与B是相同的。
  • 但是,如果向量的长度本身对相似有真实的影响(在理解含义的情况下),推荐使用内积。比如对商品的几个属性打分,从1到5,1表示不好,5表示很好。那么A(1,1,1),B(4,4,4),C(5,5,5)三个商品,根据内积,B与C更相似。但是余弦相似在这里就无法区分A,B,C的相似性。
3. 与其他算法的一致性

通过下图,我们比较neural network与SVM的一致性:
在这里插入图片描述
比较linear model、neural network和SVM:

  • 特征变换:对于无法线性可分的点,将原始数据经特征变换映射(transform)到另外一个空间,再进行线性划分。机器学习方法只是transform的方式不一样,linear model使用串联逻辑回归模型实现,neural network使用多个hidden layer实现,SVM使用kernel trick实现。
  • 特征交互:其实做特征变换的过程可以同时实现特征交互,只是交互的维度不一样。一般neural network可以使用多个hidden layer实现高阶特征交互;SVM使用多项式核实现二阶交互,对于稀疏数据,参数过多不好训练,提出了FM方法,可以更好地实现二阶特征交互,复杂度是只是线性的。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值