支持向量机(二)——深入理解最优间隔分类器
1. 最优间隔分类器理论
之前我们提到在支持向量机中,我们的目标是寻找一个超平面,使得离超平面比较近的点能有更大的间距,也就是说我们不必考虑所有的点都必须远离超平面,我们关心求得的超平面能够让所有点中离它最近的点有最大间距。
因此,注意最优间隔分类器我们的任务是什么,就是使最近的点的几何间距最大。先上公式:
解释一下: Max的γ,w,b$参数,右边的γ为最优化的目标函数,其实就是几何间隔,s.t后面的两个式子表示约束条件。(注意第一个式子中的γ已经是全局的几何间隔中最近的那个样本的几何间隔)
首先我们的目标是几何间距最大,但不能任意的大,因此加的第一个约束条件就是要求找到一个,使所有样本的几何间隔都要大于等于,但是这个可能有很多个,假设为,因此我们要找到一组最大的w,b,使是中最大的那个值,这就是max里面的三个参数。
其次为什么我们可以直接设置第二个约束条件,首先加上||w||=1这个条件,第一个约束条件就可以从函数间隔变成几何间隔,而几何间隔就是我们的目标,这是一个很好的思路,其次我们记得几何间隔的优势就是同时扩大w和b,对几何间隔没有影响,所以||w||=1这个条件可以直接通过对w和b的缩放实现,但对结果又不影响。
缺点:由于我们的要求解的参数w在一个球体表面,如果想得到一个凸优化问题,必须保证如梯度下降算法这种局部最优值搜索算法不会找到局部最优值,而非凸性约束不能满足这个条件,所以需要改变优化问题。因此我们需要将上面的式子转换一下:
我们继续分析一下:max后面的参数不是(几何间隔)而应该是(函数间隔),公式中没有修正过来(同样表示已经是全局的函数间隔中最小的那个样本的函数间隔)但是注意我们最优化的目标是,这个目标其实还是几何间隔,因为。
由于这里||w||不等于1了,所以第一个约束条件其实是变成了函数间隔,翻译一下,我们的目标不变依然是使几何间隔最大,但是约束条件变为,找到一个,使所有样本的函数间隔都要大于等于,但是这个可能有很多个,假设为,因此我们要找到一组最大的w,b,使是中最大的那个值,这就是max里面的三个参数。
注意这一步只是一个转换,虽然约束条件变为了函数间隔,但我们的目标还是求几何间隔最大。
缺点:目标函数不是一个凸函数,因此仍然需要改进。这里为函数间隔之前讲过,随着w和b的扩大,函数间隔也会对应扩大,为了保证w和b唯一而不是一组倍数解。因此我们将做一些限制,保证解唯一,这里为了简化,我们将=1,意义是将全局的函数间隔定义为1,也就是说离超平面最近的点的几何距离为。那么求的最大值就可以转化成求最小值。改写后的结果如图:
解释一下:首先为什么我们可以设置函数间隔为1,个人理解是,因为我们要求的是函数间隔,由于之前说的缩放问题,无论w和b怎么变,函数间隔会相应的变化,但是几何间隔不会变,所以即使我将函数间隔缩放到1,几何间隔依然不会变。
所以,这么倒腾了几下之后,我们发现最后变成了线性约束,这是一个凸优化问题,且没有局部最优值,可以通过梯度下降找到全局最优值。而且是典型的二次规划问题了。
2. 拉格朗日对偶
上面说了,我们将最优线性分隔器变化为了二次规划问题,那么我们来看看这种带有不等式约束的极值问题怎么求,举一个例子:
根据高数里面的知识(不细说),我们定义的一般化拉格朗日算子为:
在这里,拉格朗日用了一个很巧妙的函数,我们先看公式,再来看它的奇妙之处。
因此我们可以将这个函数换一种写法:
与对偶的另外一个问题
将α和β先看做常量,将问题转化为先求拉格朗日关于w的最小值。之后再求的最大值:
这个问题就是原问题的对偶问题,定义为,然后根据一般事实,我们有以下结论:
关键的问题就是什么时候原始问题和对偶问题的解相等了。假设是凸函数,假设为仿射函数,即。假设是严格可执行的,即存在w,使得对于所有i,,在上述条件下,一定存在,其中w*是原始问题的解,是对偶问题的解,并且:
注意,KKT的总体思想是认为极值会在可行域的边界上取得,对于可行域边界内的点,对最优解不起作用,因此前面系数为0。我们来看公式5,这个条件隐含了如果α*>0,则g函数等于0,也就是说g函数等于0,w处于可行域的边界上,这才是起作用的约束,其他内部的点(g<0)都不起约束条件。
3. 最优间隔分隔器计算
重新回到我们之前的优化问题上:
图中的圈和叉即正负样本,实线即w,b确定的分隔线,虚线即函数间隔为1的点所构成的线。看出有三个样本的函数间隔为1,其他样本的函数间隔大于1。
通过KKT条件,这些函数间隔为1的样本对应的拉格朗日乘数一般不等于0,即。这个函数间隔为1的样本称为支持向量。支持向量数量很少,所以多数的,那么反推可得,,对应的样本不是支持向量。
构造拉格朗日函数为:
由于这个问题只有不等式约束,所以没有β。下面我们就用到第二节讲到的按照对偶问题来一步步求解:
求得:
将上式表示为,极大化的过程为:
如果求出,根据之前求偏导的公式可求出,然后
最后有一个引出话题,由于通篇考虑的是,根据求解得到的,代入之前的式子:
表示为新输入的x和训练样本x的内积的和。这个好处在于之前都是将新来的样本根据做一次线性运算来判断是正还是负,现在有了,我们不需要求出w,可以直接将新来的样本和训练数据的样本做内积,而且根据KKT条件,只有支持向量,其他的,因此计算很高效