一、核
回到线性回归的话题(预测房屋价格),有输入变量
x
代表房屋的面积,我们需要考虑利用输入特征
我们会用
在支持向量机中我们不会使用原始的输入属性
x
,而是使用输入特征
因为算法可以完全用内积
而且,给定一个特征映射 ϕ ,我们可以定义相应的核:
现在,给定 ϕ ,我们可以通过得到 ϕ(x) 与 ϕ(z) 的内积结果来计算核 K(x,z) 。但是更常见的也是更有趣的情况是,即使 ϕ(x) 本身的计算成本可能会非常高(可能因为本身的高维度向量),核 K(x,z) 的计算成本可能会非常低。根据这一情况,通过在算法中应用更高效的核 K(x,z) 来进行计算,我们可以让支持向量机应用到高维度的特征空间。
举个例子,假设 x,z∈Rn ,且有:
同样也可以写成如下形式:
因此可以得出 K(x,z)=ϕ(x)Tϕ(z) ,其中特征映射 ϕ 的值如下:
我们需要知道计算高维度的 ϕ(x) 的时间复杂度为 O(n2) ,而计算核 K(x,z) 的时间复杂度为 O(n) ——与输入属性的维度成线性关系。
对于核,同时也有如下的形式:
上述等式中对应的特征映射的值(n = 3)如下:
参数
c
控制着
更广泛的说,核 K(x,z)=(xTz+c)d 对应的特征映射,映射到特征空间 ⟮n+dd⟯ ,对应的所有单项式的形式为 xi1,xi2...xik 。然而,即使基于这 O(nd) 个维度空间,计算核 K(x,z) 的时间复杂度仍为 O(n) ,且因此我们不需要在这样高维度的特征空间中表示特征向量。
现在,我们来从另一个角度谈论核。直觉上,如果
ϕ(x)
与
ϕ(z)
非常接近,那么最终核
K(x,z)=ϕ(x)Tϕ(z)
的值会很大。相反的,如果
ϕ(x)
与
ϕ(z)
相距很远(近似互相垂直),那么核
K(x,z)=ϕ(x)Tϕ(z)
的值会很小。所以,我们可以认为核
K(x,z)
是测量
ϕ(x)
与
ϕ(z)
的相似度的一种方式,或者可以说测量
x
与
鉴于这种直觉,我们可以利用核来测量
x
与
这是一种合理的测量方式,如果
x
与
但更进一步说,给定一些
K
,我们如何可知这是一个合格的核呢?例如,我们能否说出是否存在一些特征映射
假设现在
K
是一个合格的核,对应一些特征映射
现在,如果
K
是一个合格的核函数,那么有
上述等式中倒数第二步利用了之前核函数的推导。因此
因此,正如我们上述展示的那样,如果
K
是一个合格的核函数,那么对应的核矩阵
定理(Mercer)
给定
给定一个核函数
K
,除了找到对应的特征映射
同样的,我们简单的讲述一些关于核函数的其他例子。举个例子,考虑数字识别问题。给定一个手写数字(0-9)的图片(16*16的像素),我们需要辨别出手写的数字是什么。通过使用多项式核 K(x,z)=(xTz)d 或高斯核,针对这一问题支持向量机会得到非常棒的效果。这着实令我们震惊,因为输入属性 x 只是一个256维的向量的图像像素灰度值,系统没有关于视觉的先验知识,或者甚至不知道哪两个像素点相邻。
另一个例子是,我们尝试分类的对象是字符串(输入属性
然而,考虑让
ϕ(x)
成为一个计算每个长度为k的子字符串在
x
中出现的的次数,如果字符串有英文字母构成,那么一共有
现在我们已经了解了核在支持向量机中的应用,所以不需要再多赘述。而且我们要知道核的应用比支持向量机要广泛的多。尤其是,如果你有任何学习算法可以用输入特征间的内积 x,z 表示,那么可以将内积用核 K(x,z) 代替,可以使你的算法在高维度特征空间中有良好的表现。
举个例子,可以将核应用到感知器算法中推导出核感知器算法。很多我们之后将要看到的算法都可以以这种方式在高维度特征空间中使用,被称作核方法。
二、正则化与不可分离的情况
之前对支持向量机的推导中我们假设数据是线性可分的。然而通过 ϕ 将数据映射到高维度特征空间提高了数据可分性的可能,但我们也不能保证这种方法一直都是可分的。同时,在一些情况下很难找到一个分离超平面,因为存在离群异常值。
举个例子,左侧图片中有一个优化的间隔分类器,当存在一个离群异常值出现在左上方的区域时(如右图),这导致决策边界在剧烈摆动,而结果的分类器有更小的间隔。
为了让算法在非线性可分的数据集对离群值敏感度减小,我们再次更改优化问题的格式:
因此,允许训练样本的函数间隔小于1,而且如果训练样本的函数间隔为
1−ξi
(
ξ
> 0),我们将添加惩罚函数项
Cξi
,参数
C
控制“使得
与之前一样,我们可以对拉格朗日函数进行格式化:
上述等式中, αi 与 ri 是拉格朗日算子(约束为 ≥0 )。关于对偶问题的推导过程此处略过,但是与之前的一样,要分别对 w,b 求偏导并设为0,并将等式带回原来的等式中,然后简化,我们就得到了如下的对偶问题的等式:
同样,我们得到了用
α
表示的
w
等式(9),所以为了解决对偶问题我们可以继续使用等式(13)进行预测。令人惊讶的是,在添加
而且,KKT对偶互补条件变为(在对SMO算法测试时非常有用):
现在,剩下的就是给出一个实际解决对偶问题的算法,这一点我们将在下一节中讲。
三、SMO算法
因为John Platt(写出关于SMO算法的论文),SMO算法为解决对偶问题(从支持向量机的推导中得到的问题)提供了一个高效的方式。现在我们先岔开话题,先讲述一下坐标上升算法。
1.坐标上升算法
思考去尝试解决一个没有约束的优化问题:
此处,
W
只是以
因此,在该算法的最内侧循环中,我们将所有参数固定除了
αi
,然后只根据参数
αi
重新优化
W
。在这一版本的方法中,内部循环优化的变量顺序为
当函数 W 在内测循环中碰巧以“arg max”这样的形式有良好的表现效果,那么坐标上升算法可以算是表现非常好的算法了。这里的图片显示了坐标上升算法的每一步动作:
图中的弧线是我们想要优化的二次函数的轮廓。坐标上升在点(2,-2)处初始化,图中还绘制了到达全局最大值的路径。在每一步中,坐标上升算法都会取与坐标平行的路径,因为每次优化的过程中只有一个变量。
2.SMO算法
关于支持向量机算法的话题到此结束,下面我们将讨论SMO算法。一些细节问题会留在课后的作业。
这里有一个我们想要解决的对偶优化问题:
现在我们有一组
答案是不可能,因为限制(19)保证如下等式成立:
或者,通过等式两端各自乘以 y(1) ,我们会得到如下等式:
(这一步利用了 y(1)∈{−1,1} ,因此 (y(1))2=1 )。因此, α1 是完全由其他 αi 决定的,如果我们保持 α2,...,αm 保持不变,那么我们无法在保持约束(19)的前提下对 α1 做任何改变。
因此,如果我们想针对 αi 进行更新,我们在满足约束的前提下必须至少同时更改两个变量。这一核心思想就是SMO算法,大致的步骤如下:
迭代循环直到收敛{
1.选择一对要更新的变量
αi
与
αj
(选择的这两个变量尽量让我们达到全局最优值)
2.针对
αi
与
αj
,对
W(α)
进行再次优化,在此期间保持其他参数
αk(k≠i,j)
不变。
}
为了测试该算法的收敛性,我们可以检测在一些tol中是否满足KKT条件。tol在这里意味着convergence tolerance parameter(收敛容差参数),值设置在0.01到0.001之间。
SMO是一个高效率的函数的关键原因在于计算 αi,αj 的效率很高。现在我们简单的推导一下更新的核心思想。
我们现在有几组 αi 满足约束(18-19),假设我们决定保持 α3,...αm 不变,针对 α1,α2 对 W(α1,α2,...,αm) 进行再次更新,根据约束(19),必须满足如下等式:
因此等式右侧的变量是固定的,可以用约束 ξ 来表示:
因此,我们可以在图中显示在 α1,α2 上的约束:
从约束(18)中,我们了解到
α1,α2
必须在方形区域[0,C][0,C]内。同样图中显示直线
α1y(1)+α2y(2)=ξ
,我们知道
α1,α2
必须在直线上。从这些约束中,我们知道
L≤α2≤H
;其他情况下,
(α1,α2)
必须满足既在方形区域内又在直线上这两条约束。在这一例子中,
L=0
。但是根据直线
α1y(1)+α2y(2)=ξ
的情况,这并不是总是如此;但是更一般的情况,针对
α2
会存在下限
L
和上限
通过使用等式(20),我们也可以把 α1 写成 α2 的函数:
因此, W(α) 可以写成如下形式:
我们把
α3,...,αm
当作常量,可以看出这是关于
α2
的二次函数。举个例子,这里表示成
aα22+bα2+c
,其中a,b,c为适当的参数。如果我们忽视方形区域的约束(18),那么我们通过求其偏导并设为0,可以很容易的最大化这个二次函数。我们让
αnew,unclipped2
代表
α2
的结果。我们需要相信如果我们想针对参数
α2
最大化
W
但满足方形区域的约束,那么我们可以通过将
最后,我们找到 αnew2 ,我们可以将等式(20)带回然后找到关于 αnew2 的最优值。
这期间有很多细节并没有介绍但是都很简单,这些问题都留给你在阅读Platt的论文:其中一篇是关于选择启发式算法来选择下一对需要更新的 αi,αj ;另一篇是关于在SMO算法执行过程中如何更新 b <script type="math/tex" id="MathJax-Element-8208">b</script>。