前言
先说我对线性SVM的整体理解吧:
其实就是一个最优间隔的二分类器(如下图)
目标就是找到中间那个最优的分类超平面,而如图在虚线上的点,就是所谓的支持向量(support vectors) 。在求解这一问题的时候用到了对偶问题来帮助解决(为什么要用对偶问题?)而想要这样的话,我们定义了一个满足KKT条件的原问题,这里很巧妙的一点在于,KKT 的总体思想是认为极值会在可行域边界上取得,我觉得这一点是线性SVM的核心思想。
在总结下来这些的时候,我主要是根据
- Andrew Ng的机器学习公开课(Stanford cs229 2003)
- 当年课程的学习讲义
- JerryLead 的中文笔记
- Matrix cookbook
其实很多问题,很多人都阐述的非常清楚透彻,自己写下来只是理一下自己的思路,确认是否真正的理解;
我在看讲义和听课的过程中,经常暂停下来提一些奇怪的问题,有些能够解决,有些却不能,我也会在下面写出,供大家思考,这部分我用引用格式表示,如:
为什么最优间隔?
最优间隔,就是这个分类器(超平面)要尽可能的离两边的样本数据都很远才好;
我们知道,分类器是根据已有样本数据来训练得到,以便预测测试数据的,在这一点上,我们考虑到,最优间隔的分类器,在未来的测试数据上,更保险,更不容易出错。
问题的数学表示
我们有很多样本点:
其中 x(i)=[x(i)1,x(i)2,...,x(i)n] 是一个向量, y(i)∈{1,−1} 是类别标签;
既然还是一个线性的分类器,那么我们可以将这个分类超平面定义为:
其中 w,b 就是我们需要学习到的分类器的参数
这里我想说一下这个 g(z) ,我们知道:
在LR里面,这个 g(z) 就是 sigmoid 函数
在softmax里面,这个 g(z) 就是softmax函数
那么在这里,写到这的时候还没有一个 g(z) 的显式表出;
我们考虑一个特殊情况,因为我上面说到,KKT条件的整体思想,引发了我的思考,也就是SVM的核心思想就是边界值,那么,我们索性假设有一个边界值点 (x(j),y(j)),y(j)=0 :那也就是说 g(z)=0
当然,这个边界值点在被分类数据中不会存在,但是我们先继续, g(z)=0 的唯一取到的可能就是 z=0 , 那此时,也就是说 wTx+b=0 ;
既然对于一个合法的分类器来说,这个点不会存在于被分类数据中,那么在这个空间内,它唯一存在的地方就是在这个分类超平面上,也就是说,这个超平面的性质就是:
wTx+b=0
函数间隔(functional margin) & 几何间隔(geometric margin)
函数间隔
对于一个样本点
(x(i),y(i))
,函数间隔为:
γ^(i)=y(i)(wTx(i)+b)
考虑到
y
的正负性,则有:
γ^(i)=|wTx(i)+b|
下面这点我觉得讲的很好:
如果
y(i)>0
,
wTx(i)+b
应该是一个大正数,反之是个大负数
因此函数间隔代表了我们认为特征是正例还是反例的确信度
这里,函数间隔还没有什么具体的实际数值意义,因为随着参数 w,b 的改变,函数间隔可以随意变化
几何间隔
简单来说,几何间隔就是归一化的函数间隔
归一化之后,几何间隔就是某个样本点到分类平面的距离
上图中, B 点位于
这里我又瞎想了一下, w 为啥是梯度呢?
首先这个问题是一个线性的问题,也就是wTx+b=0 是一个 x 的线性组合,那么我们先从二维着手,
假设x 就是一个一维变量,那么 wTx+b=0 就是一条分类直线, w 就是斜率
那么二维空间的梯度,不就是斜率吗?
换句话讲,梯度就是函数的走势方向,因为想想梯度下降,不就是选择函数下降最快的方向作为梯度吗?
或者你也可以这么理解,梯度是怎样得到的?求导得到的
你在二维空间,将wx+b 对 x 求导就是w
或者直接在高维将 wTx+b=0 对 x 求导, 得到的就是w
这里可以参考matrix cookbook, 有一系列的求导规则,这里用到了:
回归正题:所以如果 A 是
(x(i),y(i))
, B 就是
(x(i)−γ^(i)w||w||,0)
。 这里我一度将这个运算和上面的示意图混淆,不知道为什么这样计算 B, 但是,当我意识到,
y
并不是示意图的一个维度,知识一个类别标签,把这个运算单纯作为向量运算,就很明了了。
把 B 代入
当 ||w||=1 时, 几何间隔就是函数间隔了,所以说几何间隔就是归一化的函数间隔;
最优间隔分类器
我们的目标是寻找一个超平面,使得离超平面比较近的点能有更大的间距。也就是我们不考虑所有的点都必须远离超平面,我们关心求得的超平面能够让所有点中离它最近的点具有最大间距。将问题形式化表示:
这里约束了 ||w||=1 , wTx+b 就是几何间隔,也就是点到分类平面的距离
,至此我们定义出的问题,借助这个优化目标,如果求出了 w,b 就可以借助之前定义的 h(x),g(z) 来判别 y 的类别了。
其实我觉得这部分是精髓,转化的思想也可以应用到其他地方
我们虽然有了这个
第一步:
考虑到几何间隔和函数间隔的关系
γ=γ^||w||
, 先将问题转化成:
这里,把 ||w||=1 这个约束条件转化到优化目标问题里,我们就不用单独去考虑这个非凸优化的条件,但是优化目标还不是凸函数,那就继续
第二步:
之前简略提过,分类面的确立只与那些离分类面最近的那些点有关;
我们在上图中,考虑这些离分类面最近的那些点,把他们的函数间隔设为1,
γ^=1
;(这里只是对
w,b
进行了缩放,因为本身函数间隔的大小就是可以改变的)
那么他们的几何间隔
γ=γ^||w||=1||w||
也即他们到分类面的距离。
那么问题就转化成:
由于 ||w|| 是二范数,本质还是一个数值,我们求 1||w|| 的最大值,也就是求 12||w||2 的最小值
所以问题转化为:
这就成了一个带有不等式约束的二次规划问题,带条件的优化问题,我们可以用拉格朗日乘子法来解决;
拉格朗日乘数法, 对偶问题, KKT 条件
先看一下一般形式的拉格朗日乘数法:
假设有问题:
为了解决有两个约束(一个等式约束
hi(w)=0
, 一个不等式约束
gi(w)≤0
)的优化问题,引入拉格朗日乘数法,先定义拉格朗日公式:
其中 αi,βi 是拉格朗日算子,然后联立如下方程组,就可以解出可能的极值点:
(这部分我自己理解的时候也有点乱,条理可能不太清晰,如果看一次没看懂,再看一遍可能会有帮助)
至于为什么能够这样的条件约束下的优化问题能够用拉格朗日乘数法求解,
首先,我看到了这样一篇博客 拉格朗日乘数法,第二部分中数学实例的例子不错,提出了拉格朗日乘数法的思想:
通过引入拉格朗日乘子将原来的约束优化问题转化为无约束的方程组问题
其次这个 维基百科 的图,觉得对自己理解很有帮助
![]()
简单来说,虽然还是寻找极值点,但是约束条件的存在使得这个寻找的轨迹只能由上图绿线所决定;绿线就是问题的可行域。那么我们沿着绿线的方向走,向着 f(x,y) 下降(或上升,取决于问题求极大还是极小)的方向走,走到 g(x,y) 的变化率为0的时候,我们就找到了极值点, 这里的图中就表现为与 f(x,y) 的等高线相切。
此时:从图上理解,曲面相切,法向量共线,曲面的法向量就是偏导(偏导是各个分量的变化率,法向量是各个方向变化率叠加的结果,如果不太明白,推荐一篇博客:小谈导数、梯度和极值
或者也可以从一元函数来理解,两个曲线相切,意味着此刻在切点,斜率相同,曲线法向量共线;
Anyway, 我们定义一个只有一个不等约束的拉格朗日问题方便理解,这里再从解析的角度去理解:
minwf(w)s.t.g(w)≤0
先看求解过程:
L(w,α)=f(w)+αg(w)
联立方程组:
∂L(w,α)∂w=0(1)∂L(w,α)∂α=0(2)
我们先看 (1) , 进一步: ∂L(w,α)∂w=∂f(w)∂w+α∂g(w)∂w=0
回想我们刚刚说的法向量共线,是不是这个公式就是对于法向量共线的解释呢?
我们继续看 (2) : ∂L(w,α)∂α=g(w)=0 ,这说明了什么? L(w,α)=f(w)+αg(w) , 现在 g(w)=0 ,那说明在极值点: L(w,α)=f(w)
现在再回来看 (1) , 相当于是在求 ∂L(w,α)∂α 的极值点,是不是就是原问题 f(w) 的极值点了呢? 这样这种解法就能解释得通了吧。
不过有点不严谨的地方是,记得我们在学的时候,是有一条:就是原问题 f(w) 的极值是 ∂L(w,α) 的极值的子集,之后还需继续验证
扩展到高维不难,如果有多个约束条件无非就是多个条件的线性组合,相信在理解的过程中是一样的。
回到正题,但是我们不能直接求解,有
gi(w)≤0
,求极小值可以发散到负无穷,这样我们先定义一个这样的函数:
作为我们的原问题。由于有 gi(w)≤0 , 为了求极大值,我们这里约束 αi≥0
讲义上这里直接说
![]()
但是我觉得这个式子只有在提出KKT条件再提比较合适,因为在不满足KKT条件的情况下, αigi(w)=0 是不一定能成立的。但是为了方便表述,这里暂且先默认满足
当
w
满足所有约束时,我们就可以将问题转化如下:
我们使用
p∗
来表示
minwθP(w)
原问题
p∗
是先求最大,再求最小,那么我们定义一个它的对偶问题
d∗
,即先求最小,再求最大;
首先:
那么:
就有:
这一点,我们有这样一个事实:
maxminf(x)≤minmaxf(x)
那么,再什么时候两者会等价呢?
首先,是三个假设:
- f,g 是凸函数
-
h
是仿射函数:
∃ai,bi,s.t.hi(w)=aTiw+bi - 存在
w
, 使对于所有
i
,
gi(w)<0
满足上述假设,就是一个凸优化问题
满足之后,一定存在 w∗,α∗,β∗ :
- w∗ 是原问题的解
- α∗,β∗ 是对偶问题的解
- p∗=d∗=L(w∗,α∗,β∗)
同时 w∗,α∗,β∗ 满足K.K.T.条件:
- ∂∂wiL(w∗,α∗,β∗)=0,i=1,...,n
- ∂∂βiL(w∗,α∗,β∗)=0,i=1,...,l
- α∗igi(w∗)=0,i=1,...,k
- gi(w∗)≤0,i=1,...,k
- α∗≥0,i=1,...,k
我们看后三条:
如果我们限定
αi>0
那么
gi(w)=0
就一定成立。
由于
gi(w)
是限定条件,
gi(w)=0
意味着,
w
处于可行域的边界上
这也就是我之前提到过的 (其实是别人提到过,我只是印象深刻),K.K.T.条件是在可行域边界上取得极值;至于在可行域内部的点
gi(w∗)<0 的约束是不起作用的,我总觉得这里和支持向量的思想很像;最优间隔分类器
讲了一大堆,回到刚刚的优化问题:
minγ,w,b12||w||2s.t.y(i)(wTx(i)+b)≥1,i=1,...,m
现在将约束条件改为: gi(w)=−y(i)(wTx(i)+b)+1≤0
现在原问题是凸函数,不等式约束是一个线性函数,也是一个广义的凸函数
所以满足了K.K.T.条件的假设前提。约束条件表明了,函数间隔为1是边界上的点
由K.K.T条件得知,(通常来说,在边界上的点, gi(w)=0 时, αi>0 , 而在其余的点上,当, gi(w)>0 时, αi=0 )现在可以构造拉格朗日函数如下:
L(w,b,α)=12||w||2−∑i=1mαi[y(i)(wTx(i)+b)−1],αi≥0
注意参数不同了,是 w,b,α ;
和上面一样,我们构造一个 p∗ ,然后找到对偶问题 d∗ :
d∗=maxα:αi≥0minw,bL(w,b,α)≤minw,bmaxα:αi≥0L(w,b,α)=p∗先求解 minw,bL(w,b,α) , 对 w ,
b 求偏导:
∂∂wL(w,b,α)=w−∑i=1mαiy(i)x(i)=0∂∂bL(w,b,α)=∑i=1mαiy(i)=0
得到 w=∑mi=1αiy(i)x(i) , 代回原拉格朗日函数:
(省略计算过程)
L(w,b,α)=∑i=1mαi−12∑i,j=1my(i)y(j)αiαj(x(i))Tx(j)−b∑i=1mαiy(i)
由于如上: ∂∂bL(w,b,α)=∑mi=1αiy(i)=0 ,最后一项为0,得:
L(w,b,α)=∑i=1mαi−12∑i,j=1my(i)y(j)αiαj(x(i))Tx(j)现在用 W(α) 表示 minw,bL(w,b,α) , 再来求最大值:
d∗=maxα:αi≥0minw,bL(w,b,α)=maxα:αi≥0W(α)maxαW(α)=∑i=1mαi−12∑i,j=1my(i)y(j)αiαj(x(i))Tx(j)s.t.αi≥0,i=1,...,m∑i=1mαiy(i)=0
这个问题,留给之后解决,假设我们解决了这个问题,找到了 α , 又有样本点数据,我们很容易由 w=∑mi=1αiy(i)x(i) 得出 w , 但是我们没有直接求出b , 但是我们知道离超平面最近的正的函数间隔要等于离超平面最近的负的函数间隔,据此,可以用其他变量将 b 表出:
b=−maxi:y(i)=−1wTx(i)+mini:y(i)=1wTx(i)2 这里我将 α∗,w∗,b∗ 都用 α,w,b 表示,因为原问题的解和对偶问题相同
这样,问题就解决了,我们只要找到那些函数间隔为1的样本点,代入上面的公式求出 w , 和
b ,就能确定目标超平面 wTx+b 了所以,起到作用的只有那些“支持向量”,也就是,只有边界值决定了分类面。
That’s all for now.