zoukankan      html  css  js  c++  java
  • 顺序最小化算法

    顺序最小化算法

    1. 核方法

    考虑这样一个问题,如果输入X是房子的面积,我们要使用回归方法预测房子的价格。从样本点的分布中,我们看到三次方程(即使用xx2x3进行回归曲线拟合)能够更好的拟合数据。为了区分这两组不同的变量(前者为x,后者为(xx2x3)),我们称问题的特征x为原始特征(attribute)。当我们把原始特征扩展到一些新的变量的时候,我们称这些新生成的变量为输入特征(features,当然,不同的人对这两种变量也存在不同的命名。但英文中主要采用attributefeature进行区分)。我们使用φ 表示特征映射(feature mapping),即把原始特征映射到特征。对于刚才的例子,φ = [xx2x3]T.

    与其直接使用原始特征来构建SVM,我们可能更希望使用一些特征映射后的特征φ(x)(一方面是上面提到的为了更好的拟合,另一个重要原因是样本存在线性不可分的情况,而映射到高维空间后,往往就可分了)。因为算法中原始特征是内积形式<xz>,采用特征映射之后,即可以表示为<φ(x), φ(z)>。因此,对于给定的特征映射φ,我们定义核函数(Kernel)为:K(x,z) = <φ(x), φ(z)> = φ(x)Tφ(z) 。因此,不管我们的原始特征是什么,我们都可以简单的使用核函数K(x,z)进行替换,之后我们的算法就相当于使用了特征φ

    对于给定的特征φ,我们很容易通过计算φ(x)φ(z)的内积来得到K(x, z)。但是更多的情况是,K(x,z)的计算量很大,而φ(x) 本身就很复杂(毕竟从低维映射到了高纬,得到的是高维向量)。在算法中使用核方法的情况下,SVM是在给定特征的高维度特征空间下学习得到,并没有直接或明确的得到特征向量φ(x)

    考虑下面一个例子,x,z∈ RnK(x, z) = (xTz)2 ,对于该式,我们可以转换如下:

    因此,我们看出K(x, z) = φ(x)Tφ(z) 中,特征映射φ (这里仅展示对于n=3的情况)φ = [ x1x1, x1x2, x1x3, x2x1, x2x2, x2x3, x3x1, x3x2, x3x3 ]T

    这里注意的是,如果计算高维度φ(x)情况下的时间复杂度为O(n2),而实际K(x, z)只需要要计算原始特征的内积方法即可(上面推导的结果,时间复杂度为O(n))

    此外,考虑下面情况

    这里的特征映射φ(仍然考虑n=3的情况)为:φ(x) = [x1x1, x1x2, x1x3, x2x1, x2x2, x2x3, x3x1, x3x2, x3x3,sqrt(2c)x1, sqrt(2c)x2, sqrt (2c)x3, c]T 。这里的c控制着xi(一阶)xixj(二阶)的相对权重。

    对于更一般的情况,核函数K(x, z) = (xTz + c)d 对应的映射空间维度是C(n + d, d)。然而,对于O(nd)维空间,计算K(x, z) 仍然只需要O(n) 时间。因此,我们无需直接计算高维度的映射特征向量。

    现在,我们采用一些不同的视角来看核函数。直观上来看,如果φ(x) φ(z)越接近,那么K(x, z) = φ(x)Tφ(z) 也会越大。相反,如果φ(x) φ(z)越分开,那么K(x, z)也会越小。因此,我们可以认为从某种程度上而言,表示了φ(x) φ(z)的相似性,或者说xz的相似性。

    鉴于该直观,假设现在正在解决一个机器学习问题,我们想到了一个核方法K(x,z),而该核方法能够合理的测量xz的相似性。

    举例子而言,K(x, z)= exp(-||x-z||2 / (2σ2)) 。这是一个合理的测量xz间的相似度,当xz越相近的时候值越接近1,当xz越分开的时候值越接近于0 。那么我们可以定义这样的K作为SVM中的一个核方法吗?当然,在这里例子中答案是肯定的(该核称之为高斯核(Gaussian kernel),又称为径向基函数(Radial Basis Function 简称RBF,它能够把原始特征映射到无穷维)。更广的说,给定一个函数K,我们如何判定是否是有效的核函数?即对于特征映射φ,是否使得所有的x, z均有K(x, z) = φ(x)Tφ(z)

    假设K是一个对应于特征映射φ 的有效的核函数。现在考虑对于有限数据集,含有m个点(不一定是训练集合){x(1), . . . , x(m)}K是一个m*m的方阵且Kij = K(X(i),x(j)),该矩阵称之为核矩阵(Kernel matrix)。注意:为了方便,我们重用了K,既是核函数K(x,z),也是核矩阵K

    如果K是一个有效核,那么Kij = K(X(i),x(j)) =φ(X(i))Tφ(x(j)) =φ(,x(j))Tφ(,x(i)) = K(X(j),x(i)) = Kji 因此核矩阵K一定是对称的。此外,令φk(x) 表示向量φ(x)的第k个值,对于任意向量z,有如下:

    倒数第二步和前面证明K(x, z) = (xTz)2 用到的方法是一样的。而z是任意的,这就表明了K是半正定矩阵(K≥ 0)。因此,得到了K是有效核(对于一些特征映射φ)的必要条件是K ∈ Rm×m是半正定矩阵。此外,这不仅仅是必要条件,同时也是K是一个有效核(也被称为Mercer kernel)的充分条件。

    Mercer定理:如果函数KRn× Rn → R上的映射(也就是从两个n维向量映射到实数域)。那么如果K是一个有效核函数,那么当且仅当对于{x(1), . . . , x(m)} (m < ∞),其相应的核函数矩阵是对称半正定的。

    给定一个函数K,除了试图找到一个与之对应的特征映射φ外,该定理提供了另一种测试K是否是有效核的方法。

    这里举一些核方法的例子。比如对于手写数字识别,输入是16*16的像素的手写数字0-9的图片,我们需要一个模型来判断一个图片上的数据是多少。采用简单的线性核函数K(x, z) = (xTz)d 或者高斯核,SVM在该问题上都能得到非常好的结果。这是一个非擦汗那个令人吃惊的结果,因为输入特征x是一个256维的向量(各个像素点的值),而系统并没有任何先验知识,甚至不知道哪个像素点和哪个点连在一起。另外一个例子是,我们试图分类的对象是字符串(比如说,x是一串氨基酸列表,可以组成蛋白质),对于很多学习算法而言,很难组成一个合理的特征集,尽管不同的字符串有不同的长度。然而,我们使用特征映射φ(x)为特征向量,表示x中长度为k的子字符的出现次数。如果我们英文字母组成的字符串,那么就会有26K个这样的子字符串。因此,φ(x)就是一个26K维度的向量,即使对于中等的k,这也是非常大的(264≈ 460000) 。可是,使用字符匹配算法,有效的计算K(x,z) =φ(x)T φ(z),使得我们能够在这么高维度特征空间下实现而不用直接的在高维度下计算。

    此外,需要注意的事情是核方法不仅仅是在SVM中有着重要的地位。对于任何机器学习算法,你都可以把输入特征的内积<x,z>使用核方法改写成K(x,z),使得算法在高维度下也能很高效的工作。比如把核方法应用在感知器上得到一个核感知器算法。在以后降到的很多算法都会接受核方法。

    1. 正则化和线性不可分

    目前为止的SVM都是假设数据是线性可分的。尽管采用特征映射φ到高维空间能够增加数据可分的似然性,但是仍然不能保证一定是线性可分的。而且有些情况下我们异常值的影响而不能保证分割的超平面恰好是需要的。举个例子说,如下图:左边的图展示了一个最优的分类器,而当出现一个异常值的时候(如右图所示),引起了决策边界的转动,使得间隔变小。

    为了使算法能够更好的适应非线性数据集和减少对异常值的敏感性,我们前的最优化式子做出一些改变(使用正则化ℓ (regularization))

    因此,样本现在允许存在函数间隔小于1的情况了。如果一个样本的函数间隔1 – ξi (其中 ξ > 0,称之为松弛变量),那么我们会使得目标函数成本增加C*ξiC是离群点的权重,C越大表明离群点对目标函数影响越大,也就是越不希望看到离群点。参数C是控制着双重目标的相对权重,其一还是使得||w||2较小(也就是之前说的使得间隔最大),其次是使得更多的样本的函数间隔至少是1 。那么就像之前那样,我们也可以得到如下的拉格朗日公式:

    这里的αi ri 是拉格朗日乘子。回想我们在拉格朗日对偶中提到的求法,先写出拉格朗日公式(如上式),然后将其看作是变量wb的函数,分别对其求偏导,得到wb的表达式,然后代入公式中,求代入后公式的极大值,得到最终的结果如下:

    对比之前的公式,我们仍然有 w = ,之后解决了对偶问题之后,我们可以同样通过下式得到我们的预测结果。

    而需要注意的是,引入正则化1后对偶问题的唯一变化是原始约束0 ≤ αi 变成了0 ≤ αi ≤ C 。而b*的计算也需要修改,改变的结果在SMO算法中介绍。先看看KKT条件(SMO算法中用于测试算法是否收敛)的变化:

    第一个式子表明在两条间隔线外的样本点前面的系数为0,离群样本点前面的系数为C,而支持向量(也就是在超平面两边的最大间隔线上)的样本点前面系数在(0,C)上。通过KKT条件可知,某些在最大间隔线上的样本点也不是支持向量,相反也可能是离群点。现在剩下的问题,就是如何用算法实现该对偶问题的求解了。

    1. 坐标上升法

    SMO(sequential minimal optimization) 算法是由John Platt给出的一个求解用于由SVM衍生出的对偶问题的有效解法。在讲解SMO算法之前,我们先引入一个有趣的算法——坐标上升法(coordinate ascent algorithm)

    假如我们解决如下无约束的优化问题:

    Max W(α1, α2, . . . , αm)

    这里我们认为W只是αi 的函数,这里先不考虑这个问题和SVM有什么关系。我们目前已经掌握了两种优化算法:梯度下降法和牛顿法。这里我们使用新的算法,称之为坐标上升法。

    循环直到收敛:{

    对于每一个i = 1,..., m {

            αi = arg maxαi Max W(α1, α2, . . . , αm) }}

    在该算法最里层的循环里,我们保持其他的变量j (j !=i))不变,仅更新αi,即认为W仅受αi 影响,而不受αj (j !=i) 的影响。该循环按照α1, α2, . . . , αm, α1, α2, . . . 的顺序不断的循环优化。当然,我们也可以按照自定义顺序去循环,比如按照下一个是能够使得W(α) 增长最大的变量。

    如果函数W能够在该循环中有效的得到最优解,那么坐标上升法将是一个相当有效的算法。下图是坐标上升的一个过程:途中椭圆是指我们要优化的二次函数的等高线。坐标上升法起始点在 (2-2) ,图中的直线式迭代优化的路径,可以看到每一步都会向最优值前进一步,而且前进路线是平行于坐标轴的,因为每一步只优化一个变量。

    1. 序列最小算法(SMO)

    SMO算法由Microsoft ResearchJohn C. Platt1998年提出,并成为最快的二次规划优化算法,特别针对线性SVM和数据稀疏时性能更优。关于SMO最好的资料就是他本人写的《Sequential Minimal Optimization A Fast Algorithm for Training Support Vector Machines》了。这里我们简单的讨论SMO算法,给出SMO算法的基本流程和推导过程。

    首先,我们的优化问题如下:

    即需要解决的是在参数 { α1, α2, . . . , αm } 上求的最大值W的问题,其中xy均是已知数,而C是由我们预先设定的,也是已知。

    我们先假设αi 满足了上式优化问题的约束,根据坐标上升法,我们首先固定α2, . . . , αm 不变,然后在α1 上面求得W的极值,并更新α1 。但是,这个思路有问题,因为固定了α1以外的所有参数,那么根据 = 0 得到α1y(1) = - (这里的y(1) ∈ {−1, 1}(y(1))2= 1,因此可以直接移动到等式右边),即得到是一个α1固定值。

    因此,如果我们想要更新αi的话,必须至少选择两个参数进行更新以满足约束条件。这就促生了SMO(Sequential Minimal Optimization)算法,主要步骤如下:

    循环直到收敛{

    1. 选择一对(或一些对) αi αj准备下一步更新(采用启发式算法(后面会讲到,即选择能够使我们向全局最优解取得最大进步的两个参数))
    2. 在使得其他α不变的下,求得αi αj使得W(α)达到最优解,注意求得αi即可, αj可以用αi来表示}

    为了测试该算法是否收敛,我们可以采用是否在一定的公差τ内满足了KKT条件。τ是指收敛公差参数,一般都设定在0.010.001 SMO之所以高效就是因为在固定其他参数后,对一个参数优化过程很高效。接下来,我们讨论一下SMO是如何高效的更新参数。

    我们先认为αi满足约束条件满足为0 ≤ αi ≤C i=1, …, m = 0,这里先限制 α2…, αm固定,现在需要有重新优化W(α1, α2,…αm),其中变量仅有α1α2 根据约束条件,我们有α1y(1) + α2 y(2) = - 。该等式的右边是固定值,我们可以用 ζ 来表示,那么等式可以表示为α1y(1) + α2 y(2)。当y(1)y(2)异号时,也就是一个为1,一个为-1时,他们可以表示成一条直线,斜率为1。之后,我们可以用下图来表示在α1 α2上的约束关系。

    从约束条件看,α1α2一定在正方形[0, C]×[0, C]里面,且一定在图中直线α1y(1) + α2 y(2)上。从中我们可以得到:L ≤ α2 ≤ H;否则1, α2) 就不能同时满足正方形和直线约束。这个例子中L=0,不过这取决于直线的位置,不同的位置LH值不一样,即会存在一个较大的值H和较小的值L。我们将α1α2 表示:α1= ( ζ - α2 y(2))y(1)。因此,W(α) 可以表示如下:W (α1, α2, . . . , αm) = W ((ζ − α2y(2))y(1), α2, . . . , αm)

    固定 α3, . . . , αm不变,之后w就只是关于α2的函数,即可以表示为22+bα2+c。如果我们忽略正方形的边界约束(L ≤ α2 ≤ H),可以很容易通过导数为0求得最大化Wα2 值。我们使用α2new,unclipped 表示最终的α2结果。如果考虑了边界的话,那么结果如下:

    在得到α2new之后,可以很容易得到α1new。以下是关于Platt的论文http://research.microsoft.com/en-us/um/people/jplatt/smo-book.pdf。也可以参考斯坦福的笔记http://cs229.stanford.edu/materials/smo.pdf

  • 相关阅读:
    webSocket
    Spring中注解大全和应用
    原生js替换jQuery各种方法-中文版
    正则表达式-基础知识Review
    Swoole 4.1.0 正式版发布,支持原生 Redis/PDO/MySQLi 协程化
    Javascript 模块化指北
    精读《sqorn 源码》
    nodejs源码—初始化
    ubuntu显卡驱动安装
    iOS推断当前控制器是否在显示
  • 原文地址:https://www.cnblogs.com/kexinxin/p/9904416.html
Copyright © 2011-2022 走看看