cs229笔记三 支持向量机
支持向量机(Support Vector Machine ,SVM )
SVMs通常被认为是最好的现成的学习算法。在叙述SVM之前我们先讨论一下边界和通过一个很大的间隙将数据进行分隔。接下来,我们讨论一下最优化间隔分类器,这将让我们看到拉格朗日对偶。同时我们将学习到核(kernels),核将让SVM能在高维特征空间更加有效,最后我们将介绍一下SMO算法。
间隔:直觉
这节我们将对边界给出一个直观的感受以及预测结果的置信度。考虑逻辑回归通过建模得到概率.当且仅当时也就是当时,一个输入的预测结果为”1”。对于一个正例训练数据,越大也越大,同时训练样本标签为“1”的可信度也越大。因此,我们可以大致认为当时,的置信度是很高的。相反,当时,我们认为的置信度是很高的。对于一个给定的训练集,我们将会得到这个训练数据的一个很好的拟合,若我们可以找到使得对于所有的样本有以及对于所有的有。这看起来是一个很不错的目标,接下来我们将其表示为边界函数的形式。
对于另外一个直观的感受,考虑一下下面的图。图中”x”表示正训练样本,”o”表示负训练样本。决策边界由方程决定,也叫做超平面。以及给出了A,B,C三个点。我们可以看到对于一个未知点,它离决策线越远,那我们更有信心给出它的预测结果。
符号
为了更方便的对SVMs进行讨论,我们先介绍一些符号。我们先考虑一个对特征为,标签为的二值分类问题进行分类的线性分类器。从现在起,而不是来表示类别的标签。同样,我们的线性分类器的参数现在也不是而是线性分类的可以写为:
这里,当时,时,。以及参数就相当于之前的,参数就相当于.
注意,从上面定义的函数,分类器的预测结果将直接给出1或-1(与感知器算法一致)。而不是先经过中间步骤估计时的概率。
函数间隔以及几何间隔
对于一个给定的训练集,我们定义函数间隔为:
注意:当,函数间隔如果要很大的话(保证预测结果正确且可信度比较高),因此,我们需要是一个比较大的正数。相反,如果,要让函数间隔比较大的话需要是一个比较大的负值。并且有,当时说明我们对这个样本的预测是正确的。因此,大的函数间隔值意味着可信度和正确的预测。
对于一个线性分类器以及函数就是我们上面选定的取值为。函数间隔的一个特性使得它不能很好的度量置信度。对于上面我们选定的函数,如果我们用代替,有:这并不会改变的值。也就是说函数或者说的值仅仅取决于符号,和自变量值()的大小是无关的。然而,将替换为将会使得函数间隔值增加一倍。因此,我们自由的将扩大任意倍,来使得函数间隔任意大,而不改变任何重要的东西。所以,我们可以利用一些归一化条件比如:也就是说我们将替换为,而不用考虑函数间隔。
对于一个给定的训练集,那么这个训练的函数间隔定义为(由单个样本扩展到一个训练集上了):
接下来我们来看一下几何间隔,首先看一下下面的图:
对应的决策边界以及向量已经在图中画出来了.注意向量与决策边界(分隔超平面)是正交的。考虑点A,它代表训训练样本中 的一个输入,标签为的训练样本。它到决策边界的距离用线段AB表示。
那么现在的问题是,我们如何求出的值?因为,是一个方向和向量一致的单位长度的向量。并且,A表示,所以我们可以通过式子来找到点B。这样找出来的点在决策边界,并且所有在决策边界的点满足,因此:
由上式解出得到:
得到的这个结果是对于正例的训练样本来说的,对于负例也可以得到一个类似的结果。最后我们定义对于训练样本关于的几何间隔为:
注意:如果的话,函数间隔和几何间隔是相等的,这将让我们将两者进行统一。同时这可以使得当同时扩大一定的倍数之后,几何间隔的值将不会变化,这将对我们之后的处理会十分方便。
最后,我们再给出对于训练集的几何间隔公式:
最优间隔分类器
对于一个给定的训练集,我们很自然的会想去找到一条决策边界来最大化(几何)间隔,因为这可以很好的分开训练样本的正例和负例。现在,假定我们有一个线性可分的训练集,也就是说,我们可以用一个超平面将训练样本中的正例和负例进行分隔。那我们如何找到使几何间隔最大的超平面呢?我们可以将这个最优化问题用下面这个式子表示:
也就是说我们希望最大化,使得对于任何一个训练样本的函数间隔至少为.通过限制使得几何间隔和函数间隔是相等的,因此,我们也可以保证,对于所有的训练样本几何距离至少也是。通过求解这个问题得到的将会最大可能的使得几何间隔尽量大。
如果我们将上面的最优化问题解决了,那我们的工作就完成了。但是的限制让我们处理很不愉快,因为它是非凸的。并且这个问题还不可以直接用标准的优化算法来对他进行求解。因此,我们需要将它转化为便于处理的形式:
这里,我们将最大化,使得函数间隔至少为,因为,几何间隔和函数间隔有关系式,所以我们将得到我们想要的结果。更重要的是,我们将可以摆脱对我们的限制。不好的一面是,我们现在得到了一个不好的项(非凸函数)。并且,我还是没有算法来解决这种类型的优化问题。
继续我们的问题,回想一下,我们之前说过,可以对增加任意的缩放限制而不会对结果造成任何影响。现在这成了我们解决问题的关键,我们将对添加一个缩放限制使得训练样本的函数间隔必须为1:
由于对通过常数将其倍增,那么函数间隔也会倍增相应的常数。将带入上式中,那么,我们现在要做的就是最大化,这就等价于最小化。我们得到下面的最优化问题:
现在我们将问题转化为了一个凸二次目标函数和一个线性限制条件的优化问题了。这个问题的解就是我们需要的最优间隔分类器。以及这个问题的求解可以使用二次规划算法(QP)。
这个问题原本可以在这里止步,但是我们希望引入拉格朗日对偶,从而给出这个优化问题的对偶形式,这将让我们在之后使用核(kernel)来让最优间隔分类器在高维特征空间有效工作。并且,对偶形式将让我们推导出更有效的算法来解决上面的额优化问题。
拉格朗日对偶
我们现在先将SVMs和最大间隔分类器抛在一边,转而来讨论一下带限制的最优化问题。考虑一下具有下列形式的问题:
我们可能会想到拉格朗日乘子法可以用于解决这个问题。在这种方法中,我们定义拉格朗日算符为:
这里,叫做拉格朗日乘子。接下来我们让的偏微分为零:
解出
在这节中,我们将问题推广到带不等式限制条件(当然等式条件也适用)的最优化问题中。但是这里只给出关键思想和我们接下来要使用的结论。
下面的等式我们叫做原始优化问题:
为了解决这个问题,我们定义广义拉格朗日算子:
这里是拉格朗日乘子。考虑下面的等式:
这里下标表示”primal”,对于一些给定的若不符合原始的限制条件(也就是或者),那么:
相反的,当满足限制条件时,有:,因此:
因此,将是同一个值,如果满足原始的限制条件,否则的话它的值就为正无穷,因此如果我们考虑最小化问题:
这与我们原来的问题的是等价的,为了方便我们之后的使用,原来的目标函数的最优化值为,我们将其称为原始问题的解。接下来定义:
这里下标表示”dual”(对偶),注意:最大化是相对于参数,而最小化是相对于参数来说的。
现在我们可以开始处理对偶最优化问题了:
这与我们原始问题是一样的,除了交换了”max”和”min”的顺序。同样我们定义对偶问题的最优值为.
我们原始问题与对偶问题的关系是什么呢?它们之间有如下关系:
(通常,对一个函数的”max min”要小于等于”min max”),然而,在一定的条件下有:,此时我们就可以用对偶问题来代替原始问题。那么现在我们就要需找这个相等的条件。
假设和都是凸函数,是仿射的(affine,等同于线性的),并且假设存在使得对于所有的有。
在我们上面的假设下,一定存在,并且就是原问题的解,,是对偶问题的解。并且.而且,满足KKT条件(Karush-Kuhn-Tucker (KKT) conditions) :
进一步,如果满足KKT条件,那么他就是原始问题和对偶问题的解。让我
们再次审视公式( 5),这个条件称作是 KKT dual complementarity 条件。这个条件隐含了如
果,那么。也就是说, 时, w 处于可行域的边界上,这时才是
起作用的约束。而其他位于可行域内部(的)点都是不起作用的约束,其。这个 KKT 双重补足条件会用来解释支持向量和 SMO 的收敛测试。
这部分内容思路比较凌乱,还需要先研究下《非线性规划》 中的约束极值问题, 再回头看看。 KKT 的总体思想是认为极值会在可行域边界上取得,也就是不等式为 0 或等式约束里取得,而最优下降方向一般是这些等式的线性组合,其中每个元素要么是不等式为 0 的约束,要么是等式约束。 对于在可行域边界内的点,对最优解不起作用,因此前面的系数为 0。
最优间隔分类器
之前,我们提出了下面的原始的最优化问题来找到最优间隔分类器:
我们可以将限制条件写为:
对于每一个训练样本都有这样一个限制条件。同时,依据KKT对偶互补条件,我们有:仅当训练样本的函数间隔恰好为1(也就是使得等号成立的点,$$g_i(w)=0)。看下下面的图像,实线是最大间隔超平面。
最小间隔点就是最靠近决策边界的点,这里有三个最小间隔点(一个负例,两个正例)正好在平行于决策面的两条虚线上。因此,只有三个’s(也就是对应的三个训练样本)是非零的(根据我们对最优化问题的最优解得到)。我们把这三个点叫做支持向量。支持向量的数目要远少于训练样本的大小这是很有用的。
我们给这个问题建立对偶形式之后,我们的关键想法是,把我们的算法写成输入的特征空间点之间的內积的形式(其实也就相当于)。将我们的算法表示成內积的形式将是之后应用核技巧的关键。
将我们的最优化问题表示成拉格朗日算子的形式为:
注意这里只有没有拉格朗日乘子,这是应为在我们这个问题中只有不等式限制,没有等式限制。
接下来我们来求解这个问题的对偶形式。首先,对于一个给定的,关于参数最小化也就得到了。接下来我们再让关于和的偏导为0。有:
这可以推导出:
对求偏导有:
把替换掉:
由的偏导为0,我们可以得到:
此时拉格朗日函数只包含了变量,然后我们求出了才能得到,接着是极大化过程,我们加上的限制条件,以及的导数为0的限制条件。得到对偶优化问题:
在我们的最优化问题中,可以证明满足KKT条件以及。因此解决这个对偶问题就等价与解决原始问题。在上面的对偶问题中,我们的最大化问题的参数是,稍晚些我们将介绍一个算法来解决这个问题,但是毫无疑问这个问题(在满足限制条件的情况下,找到使得最大)是可解决的。之后我们在通过,的关系式得到,同样截距项(b可以看做是用于调节边界线使得位于中间边界线上的点的值为0,截距相等对应的距离也相等)也可以求得:
注:对负样本取最大值是因为负样本的都是负值,而正样本的至少来说加了b之后肯定为正值,因此大部分为正值。
假定我们现在已经通过训练集得到了模型的最优参数,现在我们要预测一个未知的点。此时我们需要计算,当其值大于零时是,我们的预测值为1,否则为0.由三维偏导为0,有:
所以,如果我们求出了,在做预测的时候,我们只需要计算和训练样本内积的这么一个式子。并且,中大部分都为0除了少数的支持向量。
核(Kernels)
考虑我们最初在“线性回归”中提出的问题,特征是房子的面积 x,这里的 x 是实数,结果 y 是房子的价格。假设我们从样本点的分布中看到 x 和 y 符合 3 次曲线,那么我们希望使用 x 的三次多项式来逼近这些样本点。因此,我们会引入特征.为了区分这两类特征。我们称原始的输入为属性,新得到的我们叫做特征。从属性得到特征的过程叫做特征映射用表示。例如,在我们的这个例子中有:
如果我们想在SVMs的训练过程中使用特征而不是属性,我们只需要将我们之前的算法中的替换为。由于我们之前的算法完全用内积来表示,因此我们可以将所有的额这些内积用来代替。对于给定的特征映射,我们定义相应的核(Kenaes)为:
现在对于给定的,我们可以很容易的计算出通过找到和然后再求他们的内积。并且,通常的运算代价也很低,反而计算时,运算量会很大(因为可能是一个高维的向量)。在这种情形之下,为了使我们的算法在计算时更加高效,以及SVMs通过高维特征空间来进行训练,但是不用找到或求出.
我们先看一下下面这个例子。假定,以及:
上面的是在可以化为:
可以看到,计算高维的需要时间代价,但是计算只需要的(这两个n应该是不一致的)时间代价.
对于一个相关的kenel:
参数c用于控制一阶项和二阶项 之间的权重。
更一般的,核 对应于将特征映射到维的特征空间(这个有点不能理解)
由于计算的是内积,我们可以想到 IR 中的余弦相似度,如果 x 和 z 向量夹角越小,那么核函数值越大,反之,越小。 因此,核函数值是和的相似度。
对于上面的相度的理解,假定现在沃恩提出了一个kenel函数,我们认为这个核函数可以很好的度量和相似度,比如下面这个核函数:
这个式子能够很合理的度量和的相似度。x和z很接近时,这个式子的值接近为1.当x和z相差很远时,这个式子的值接近0.但是我们可以这个公式作为SVMs的kenel吗?对于这个例子,我们答案是yes。(这个核函数我们叫做高斯核函数,可以将特征映射到无穷维空间)。给定一个函数K,它是不是一个合法的核函数呢?也就是说能否找出一个使得对于所有的x和z,都有?
假定现在对于一个给定的特征映射确实是一个合法的核函数,考虑一个训练集,定义一个的矩阵K,K的定义为:,这个矩阵我们叫做核矩阵。
如果K是一个核函数,那么.因此K必须是对称的。令表示向量第k维属性值,那么对于任何向量z,有:
因为z是任意选择的,这表明K是半正定的()
这样我们得到一个核函数的必要条件:
K 是有效的核函数 ==> 核函数矩阵 K 是对称半正定的。
可幸的是,这个条件也是充分的,由 Mercer 定理来表达。
Mercer 定理:
如果函数 K 是上的映射(也就是从两个 n 维向量映射到实数域)。那么如果 K是一个有效核函数(也称为 Mercer 核函数),那么当且仅当对于训练样例,其相应的核函数矩阵是对称半正定的。
最后就是核函数不仅仅可以用在SVMs中,在许多学习算法中也应用可核函数技巧。
规则化以及不可分情况
现在推导出的SVMs都是假设样本是线性可分的。将样本映射到高维通常也会增加样本线性可分的可能性,但是我们不能保证任何情况都能起作用。并且,有时候找到的分割超平面并不是我们 想要的,因为可能会受到异常点的影响。比如下面这个例子,左图是一个最优间隔分类器的分类结果,当加入一个异常样本点后(如右图所示),使得决策边界有一个巨大的变化,造成间隔要小很多。
为了让这个算法对非线性可分的样本集以及对异常点具有一定的抗干扰能力,将我们的最优化问题重写为:
现在,我们允许样本的函数间隔小于1,如果对于一个样本的函数间隔是,那么我们会给目标函数增加,用于控制让尽可能小,另外保证大部分样本的的函数间隔至少为一之间的比例。
和之前一样,我们可以将拉格朗日表示为:
这里,’s以及是拉格朗日乘子(限制条件为)。这里不再详细的推导对偶形式,经过对取偏导并让其等于零,然后再带入,简化之后得到这个问题的对偶形式:
在增加了正则化之后,这个会偶问题唯一的变化就是,原来的限制条件是现在变成了,的求解式子也发生了变化。KKT对偶-互补条件变为:
接下来我们需要解决的问题是如何来求解对偶问题。
SMO算法
SMO(sequential minimal optimization)算法,由 John Platt提出,提供了一种有效的方法来解决源于SVM的对偶问题。在谈SMO算法之前,我们先来看一下坐标上升算法,一方面它引出了SMO算法,另一方面它本身也很有趣。
坐标上升法
假定我们想解决没有限制的最优化问题:
这里我们认为是的函数,以及与SVMs没有任何联系。坐标上升法如下:
在这个算法的最内层的循环,我们会固定所有的变量的值除了,然后通过参数不断的优化W的。我们这里的算法,内层循环的不断优化的顺序是:(一个更加复杂的版本可能会选择其他顺序,比方说选择可以使W在下一步中变的更大的参数做为下一步的优化参数)
当函数W恰巧是“arg max” 的形式,此时坐标上升法将十分高效,下面是坐标上升法的一个示意图:
图像中的椭圆是我们要优化的函数的等高线。坐标上升法的初始值为(2,-2),蓝色线条是收敛到全局最大值得路径,可以看到每一步的路径都是平行于坐标轴的,应为每次只对一个参数进行优化。
SMO算法
最后我们通过对SMO算法的推导来结束对SVMs的讨论,下面就是我们想解决的对偶优化问题:
现在,我们假定让固定,然后再应用坐标上升法对进行更新从而不断优化目标函数。但是这么做的话会有进展吗?答案是没有,因为限制条件使得:
这样的话为一个定值。所以如果我们要更新那么必须同时更新至少两个,这样的话才能满足限制条件。这使得SMO算法出现了: