浅谈机器学习中的规则化范数(转)

1、监督学习简介

  监督机器学习问题无非就是“minimizeyour error while regularizing your parameters”,也就是在规则化参数的同时最小化偏差。最小化偏差是为了让咱们的模型拟合咱们的训练数据,而规则化参数是防止咱们的模型过度拟合咱们的训练数据。多么简约的哲学啊!由于参数太多,会致使咱们的模型复杂度上升,容易过拟合,也就是咱们的训练偏差会很小。但训练偏差小并非咱们的最终目标,咱们的目标是但愿模型的测试偏差小,也就是能准确的预测新的样本。因此,咱们须要保证模型“简单”的基础上最小化训练偏差,这样获得的参数才具备好的泛化性能(也就是测试偏差也小),而模型“简单”就是经过规则函数来实现的。另外,规则项的使用还能够约束咱们的模型的特性。这样就能够将人对这个模型的先验知识融入到模型的学习当中,强行地让学习到的模型具备人想要的特性,例如稀疏、低秩、平滑等等。要知道,有时候人的先验是很是重要的。前人的经验会让你少走不少弯路,这就是为何咱们平时学习最好找个大牛带带的缘由。一句点拨能够为咱们拨开眼前乌云,还咱们一片晴空万里,醍醐灌顶。对机器学习也是同样,若是被咱们人稍微点拨一下,它确定能更快的学习相应的任务。只是因为人和机器的交流目前尚未那么直接的方法,目前这个媒介只能由规则项来担当了。html

1.1 规则化

  还有几种角度来看待规则化的。规则化符合奥卡姆剃刀(Occam's razor)原理。这名字好霸气,razor!不过它的思想很平易近人:在全部可能选择的模型中,咱们应该选择可以很好地解释已知数据而且十分简单的模型。从贝叶斯估计的角度来看,规则化项对应于模型的先验几率。民间还有个说法就是,规则化是结构风险最小化策略的实现,是在经验风险上加一个正则化项(regularizer)或惩罚项(penalty term)。算法

1.2 监督学习的通常形式

       通常来讲,监督学习能够看作最小化下面的目标函数:数据库

  其中,第一项L(yi,f(xi;w)) 衡量咱们的模型(分类或者回归)对第i个样本的预测值f(xi;w)和真实的标签yi以前的偏差。由于咱们的模型是要拟合咱们的训练样本的嘛,因此咱们要求这一项最小,也就是要求咱们的模型尽可能的拟合咱们的训练数据。但正如上面说言,咱们不只要保证训练偏差最小,咱们更但愿咱们的模型测试偏差小,因此咱们须要加上第二项,也就是对参数w的规则化函数Ω(w)去约束咱们的模型尽可能的简单。机器学习

1.3 正则化函数的选择

  规则化函数Ω(w)也有不少种选择,通常是模型复杂度的单调递增函数,模型越复杂,规则化值就越大。好比,规则化项能够是模型参数向量的范数。然而,不一样的选择对参数w的约束不一样,取得的效果也不一样,但咱们在论文中常见的都汇集在:零范数、一范数、二范数、迹范数、Frobenius范数和核范数等等。这么多范数,到底它们表达啥意思?具备啥能力?何时才能用?何时须要用呢?不急不急,下面咱们挑几个常见的娓娓道来。ide

2、L0和L1范数

2.1 L0范数

  L0范数是指向量中非0的元素的个数。若是咱们用L0范数来规则化一个参数矩阵W的话,就是但愿W的大部分元素都是0。这太直观了,太露骨了吧,换句话说,让参数W是稀疏的。OK,看到了“稀疏”二字,你们都应该从当下风风火火的“压缩感知”和“稀疏编码”中醒悟过来,原来用的漫山遍野的“稀疏”就是经过这玩意来实现的。但你又开始怀疑了,是这样吗?看到的papers世界中,稀疏不是都经过L1范数来实现吗?脑海里是否是处处都是||W||1影子呀!几乎是抬头不见低头见。没错,这就是这节的题目把L0和L1放在一块儿的缘由,由于他们有着某种不寻常的关系。那咱们再来看看L1范数是什么?它为何能够实现稀疏?为何你们都用L1范数去实现稀疏,而不是L0范数呢?函数

2.2 L1范数

  L1范数是指向量中各个元素绝对值之和,也有个美称叫“稀疏规则算子”(Lasso regularization)。如今咱们来分析下这个价值一个亿的问题:为何L1范数会使权值稀疏?有人可能会这样给你回答“它是L0范数的最优凸近似”。实际上,还存在一个更美的回答:任何的规则化算子,若是他在Wi=0的地方不可微,而且能够分解为一个“求和”的形式,那么这个规则化算子就能够实现稀疏。这说是这么说,W的L1范数是绝对值,|w|在w=0处是不可微,但这仍是不够直观。这里由于咱们须要和L2范数进行对比分析。因此关于L1范数的直观理解,请待会看看第二节。性能

  对了,上面还有一个问题:既然L0能够实现稀疏,为何不用L0,而要用L1呢?我的理解一是由于L0范数很难优化求解(NP难问题),二是L1范数是L0范数的最优凸近似,并且它比L0范数要容易优化求解。因此你们才把目光和万千宠爱转于L1范数。学习

  OK,来个一句话总结:L1范数和L0范数能够实现稀疏,L1因具备比L0更好的优化求解特性而被普遍应用。测试

  好,到这里,咱们大概知道了L1能够实现稀疏,但咱们会想呀,为何要稀疏?让咱们的参数稀疏有什么好处呢?这里扯两点:大数据

2.3 稀疏的好处

  1)特征选择(Feature Selection):

  你们对稀疏规则化趋之若鹜的一个关键缘由在于它能实现特征的自动选择。通常来讲,xi的大部分元素(也就是特征)都是和最终的输出yi没有关系或者不提供任何信息的,在最小化目标函数的时候考虑xi这些额外的特征,虽然能够得到更小的训练偏差,但在预测新的样本时,这些没用的信息反而会被考虑,从而干扰了对正确yi的预测。稀疏规则化算子的引入就是为了完成特征自动选择的光荣使命,它会学习地去掉这些没有信息的特征,也就是把这些特征对应的权重置为0。

  2)可解释性(Interpretability):

  另外一个青睐于稀疏的理由是,模型更容易解释。例如患某种病的几率是y,而后咱们收集到的数据x是1000维的,也就是咱们须要寻找这1000种因素究竟是怎么影响患上这种病的几率的。假设咱们这个是个回归模型:y=w1*x1+w2*x2+…+w1000*x1000+b(固然了,为了让y限定在[0,1]的范围,通常还得加个Logistic函数)。经过学习,若是最后学习到的w*就只有不多的非零元素,例如只有5个非零的wi,那么咱们就有理由相信,这些对应的特征在患病分析上面提供的信息是巨大的,决策性的。也就是说,患不患这种病只和这5个因素有关,那医生就好分析多了。但若是1000个wi都非0,医生面对这1000种因素,累觉不爱。

3、L2范数

  除了L1范数,还有一种更受宠幸的规则化范数是L2范数: ||W||2。它也不逊于L1范数,它有两个美称,在回归里面,有人把有它的回归叫“岭回归”(Ridge Regression),有人也叫它“权值衰减weight decay”。这用的不少吧,由于它的强大功效是改善机器学习里面一个很是重要的问题:过拟合。至于过拟合是什么,上面也解释了,就是模型训练时候的偏差很小,但在测试的时候偏差很大,也就是咱们的模型复杂到能够拟合到咱们的全部训练样本了,但在实际预测新的样本的时候,糟糕的一塌糊涂。通俗的讲就是应试能力很强,实际应用能力不好。擅长背诵知识,却不懂得灵活利用知识。例以下图所示(来自Ng的course):

  1)学习理论的角度:

  从学习理论的角度来讲,L2范数能够防止过拟合,提高模型的泛化能力。

  2)优化计算的角度:

  从优化或者数值计算的角度来讲,L2范数有助于处理 condition number很差的状况下矩阵求逆很困难的问题。哎,等等,这condition number是啥?我先google一下哈。

  这里咱们也故做高雅的来聊聊优化问题。优化有两大难题,一是:局部最小值,二是:ill-condition病态问题。前者俺就不说了,你们都懂吧,咱们要找的是全局最小值,若是局部最小值太多,那咱们的优化算法就很容易陷入局部最小而不能自拔,这很明显不是观众愿意看到的剧情。那下面咱们来聊聊ill-condition。ill-condition对应的是well-condition。那他们分别表明什么?假设咱们有个方程组AX=b,咱们须要求解X。若是A或者b稍微的改变,会使得X的解发生很大的改变,那么这个方程组系统就是ill-condition的,反之就是well-condition的。咱们具体举个例子吧:

  我们先看左边的那个。第一行假设是咱们的AX=b,第二行咱们稍微改变下b,获得的x和没改变前的差异很大,看到吧。第三行咱们稍微改变下系数矩阵A,能够看到结果的变化也很大。换句话来讲,这个系统的解对系数矩阵A或者b太敏感了。又由于通常咱们的系数矩阵A和b是从实验数据里面估计获得的,因此它是存在偏差的,若是咱们的系统对这个偏差是能够容忍的就还好,但系统对这个偏差太敏感了,以致于咱们的解的偏差更大,那这个解就太不靠谱了。因此这个方程组系统就是ill-conditioned病态的,不正常的,不稳定的,有问题的,哈哈。这清楚了吧。右边那个就叫well-condition的系统了。

  仍是再啰嗦一下吧,对于一个ill-condition的系统,个人输入稍微改变下,输出就发生很大的改变,这很差啊,这代表咱们的系统不能实用啊。你想一想看,例如对于一个回归问题y=f(x),咱们是用训练样本x去训练模型f,使得y尽可能输出咱们期待的值,例如0。那假如咱们遇到一个样本x’,这个样本和训练样本x差异很小,面对他,系统本应该输出和上面的y差很少的值的,例如0.00001,最后却给我输出了一个0.9999,这很明显不对呀。就好像,你很熟悉的一我的脸上长了个青春痘,你就不认识他了,那你大脑就太差劲了,哈哈。因此若是一个系统是ill-conditioned病态的,咱们就会对它的结果产生怀疑。那到底要相信它多少呢?咱们得找个标准来衡量吧,由于有些系统的病没那么重,它的结果仍是能够相信的,不能一刀切吧。终于回来了,上面的condition number就是拿来衡量ill-condition系统的可信度的。condition number衡量的是输入发生微小变化的时候,输出会发生多大的变化。也就是系统对微小变化的敏感度。condition number值小的就是well-conditioned的,大的就是ill-conditioned的。

  若是方阵A是非奇异的,那么A的conditionnumber定义为:

  也就是矩阵A的norm乘以它的逆的norm。因此具体的值是多少,就要看你选择的norm是什么了。若是方阵A是奇异的,那么A的condition number就是正无穷大了。实际上,每个可逆方阵都存在一个condition number。但若是要计算它,咱们须要先知道这个方阵的norm(范数)和Machine Epsilon(机器的精度)。为何要范数?范数就至关于衡量一个矩阵的大小,咱们知道矩阵是没有大小的,当上面不是要衡量一个矩阵A或者向量b变化的时候,咱们的解x变化的大小吗?因此确定得要有一个东西来度量矩阵和向量的大小吧?对了,他就是范数,表示矩阵大小或者向量长度。OK,通过比较简单的证实,对于AX=b,咱们能够获得如下的结论:

  也就是咱们的解x的相对变化和A或者b的相对变化是有像上面那样的关系的,其中k(A)的值就至关于倍率,看到了吗?至关于x变化的界。

  对condition number来个一句话总结:conditionnumber是一个矩阵(或者它所描述的线性系统)的稳定性或者敏感度的度量,若是一个矩阵的condition number在1附近,那么它就是well-conditioned的,若是远大于1,那么它就是ill-conditioned的,若是一个系统是ill-conditioned的,它的输出结果就不要太相信了。

  好了,对这么一个东西,已经说了好多了。对了,咱们为何聊到这个的了?回到第一句话:从优化或者数值计算的角度来讲,L2范数有助于处理 condition number很差的状况下矩阵求逆很困难的问题。由于目标函数若是是二次的,对于线性回归来讲,那其实是有解析解的,求导并令导数等于零便可获得最优解为:

                           (我的理解这是解析解,xw=y,不过用到了广义逆)

  然而,若是当咱们的样本X的数目比每一个样本的维度还要小的时候,矩阵XTX将会不是满秩的,也就是XTX会变得不可逆,因此w*就没办法直接计算出来了。或者更确切地说,将会有无穷多个解(由于咱们方程组的个数小于未知数的个数)。也就是说,咱们的数据不足以肯定一个解,若是咱们从全部可行解里随机选一个的话,极可能并非真正好的解,总而言之,咱们过拟合了。

  但若是加上L2规则项,就变成了下面这种状况,就能够直接求逆了:

   这里面,专业点的描述是:要获得这个解,咱们一般并不直接求矩阵的逆,而是经过解线性方程组的方式(例如高斯消元法)来计算。考虑没有规则项的时候,也就是λ=0的状况,若是矩阵XTX的 condition number 很大的话,解线性方程组就会在数值上至关不稳定,而这个规则项的引入则能够改善condition number。

    另外,若是使用迭代优化的算法,condition number 太大仍然会致使问题:它会拖慢迭代的收敛速度,而规则项从优化的角度来看,其实是将目标函数变成λ-strongly convex(λ强凸)的了。哎哟哟,这里又出现个λ强凸,啥叫λ强凸呢?

  当f知足:

  时,咱们称f为λ-stronglyconvex函数,其中参数λ>0。当λ=0时退回到普通convex 函数的定义。

  在直观的说明强凸以前,咱们先看看普通的凸是怎样的。假设咱们让f在x的地方作一阶泰勒近似(一阶泰勒展开忘了吗?f(x)=f(a)+f'(a)(x-a)+o(||x-a||).):

  直观来说,convex 性质是指函数曲线位于该点处的切线,也就是线性近似之上,而 strongly convex 则进一步要求位于该处的一个二次函数上方,也就是说要求函数不要太“平坦”而是能够保证有必定的“向上弯曲”的趋势。专业点说,就是convex 能够保证函数在任意一点都处于它的一阶泰勒函数之上,而strongly convex能够保证函数在任意一点都存在一个很是漂亮的二次下界quadratic lower bound。固然这是一个很强的假设,可是同时也是很是重要的假设。可能还很差理解,那咱们画个图来形象的理解下。

  你们一看到上面这个图就全明白了吧。不用我啰嗦了吧。仍是啰嗦一下吧。咱们取咱们的最优解w*的地方。若是咱们的函数f(w),见左图,也就是红色那个函数,都会位于蓝色虚线的那根二次函数之上,这样就算wt和w*离的比较近的时候,f(wt)和f(w*)的值差异仍是挺大的,也就是会保证在咱们的最优解w*附近的时候,还存在较大的梯度值,这样咱们才能够在比较少的迭代次数内达到w*。但对于右图,红色的函数f(w)只约束在一个线性的蓝色虚线之上,假设是如右图的很不幸的状况(很是平坦),那在wt还离咱们的最优势w*很远的时候,咱们的近似梯度(f(wt)-f(w*))/(wt-w*)就已经很是小了,在wt处的近似梯度∂f/∂w就更小了,这样经过梯度降低wt+1=wt-α*(∂f/∂w),咱们获得的结果就是w的变化很是缓慢,像蜗牛同样,很是缓慢的向咱们的最优势w*爬动,那在有限的迭代时间内,它离咱们的最优势仍是很远。

    因此仅仅靠convex 性质并不能保证在梯度降低和有限的迭代次数的状况下获得的点w会是一个比较好的全局最小点w*的近似点(插个话,有地方说,实际上让迭代在接近最优的地方中止,也是一种规则化或者提升泛化性能的方法)。正如上面分析的那样,若是f(w)在全局最小点w*周围是很是平坦的状况的话,咱们有可能会找到一个很远的点。但若是咱们有“强凸”的话,就能对状况作一些控制,咱们就能够获得一个更好的近似解。至于有多好嘛,这里面有一个bound,这个 bound 的好坏也要取决于strongly convex性质中的常数α的大小。看到这里,不知道你们学聪明了没有。若是要得到strongly convex怎么作?最简单的就是往里面加入一项(α/2)*||w||2

       呃,讲个strongly convex花了那么多的篇幅。实际上,在梯度降低中,目标函数收敛速率的上界其实是和矩阵XTX的 condition number有关,XTX的 condition number 越小,上界就越小,也就是收敛速度会越快。

  这一个优化说了那么多的东西。仍是来个一句话总结吧:L2范数不但能够防止过拟合,还可让咱们的优化求解变得稳定和快速。

       好了,这里兑现上面的承诺,来直观的聊聊L1和L2的差异,为何一个让绝对值最小,一个让平方最小,会有那么大的差异呢?我看到的有两种几何上直观的解析:

  1)降低速度:

       咱们知道,L1和L2都是规则化的方式,咱们将权值参数以L1或者L2的方式放到代价函数里面去。而后模型就会尝试去最小化这些权值参数。而这个最小化就像一个下坡的过程,L1和L2的差异就在于这个“坡”不一样,以下图:L1就是按绝对值函数的“坡”降低的,而L2是按二次函数的“坡”降低。因此实际上在0附近,L1的降低速度比L2的降低速度要快。因此会很是快得降到0。不过我以为这里解释的不太中肯,固然了也不知道是否是本身理解的问题。

  2)模型空间的限制:

       实际上,对于L1和L2规则化的代价函数来讲,咱们能够写成如下形式:

       也就是说,咱们将模型空间限制在w的一个L1-ball 中。为了便于可视化,咱们考虑两维的状况,在(w1, w2)平面上能够画出目标函数的等高线,而约束条件则成为平面上半径为C的一个 norm ball 。等高线与 norm ball 首次相交的地方就是最优解:

       能够看到,L1-ball 与L2-ball 的不一样就在于L1在和每一个坐标轴相交的地方都有“角”出现,而目标函数的测地线除非位置摆得很是好,大部分时候都会在角的地方相交。注意到在角的位置就会产生稀疏性,例如图中的相交点就有w1=0,而更高维的时候(想象一下三维的L1-ball 是什么样的?)除了角点之外,还有不少边的轮廓也是既有很大的几率成为第一次相交的地方,又会产生稀疏性。

       相比之下,L2-ball 就没有这样的性质,由于没有角,因此第一次相交的地方出如今具备稀疏性的位置的几率就变得很是小了。这就从直观上来解释了为何L1-regularization 能产生稀疏性,而L2-regularization 不行的缘由了。

       所以,一句话总结就是:L1会趋向于产生少许的特征,而其余的特征都是0,而L2会选择更多的特征,这些特征都会接近于0。Lasso在特征选择时候很是有用,而Ridge就只是一种规则化而已。

4、核范数

  核范数||W||*是指矩阵奇异值的和,英文称呼叫Nuclear Norm。这个相对于上面火热的L1和L2来讲,可能你们就会陌生点。那它是干吗用的呢?霸气登场:约束Low-Rank(低秩)。OK,OK,那咱们得知道Low-Rank是啥?用来干啥的?

  对上面的线性方程组,第一个方程和第二个方程有不一样的解,而第2个方程和第3个方程的解彻底相同。从这个意义上说,第3个方程是“多余”的,由于它没有带来任何的信息量,把它去掉,所得的方程组与原来的方程组同解。为了从方程组中去掉多余的方程,天然就导出了“矩阵的秩”这一律念。

   还记得咱们怎么手工求矩阵的秩吗?为了求矩阵A的秩,咱们是经过矩阵初等变换把A化为阶梯型矩阵,若该阶梯型矩阵有r个非零行,那A的秩rank(A)就等于r。从物理意义上讲,矩阵的秩度量的就是矩阵的行列之间的相关性。若是矩阵的各行或列是线性无关的,矩阵就是满秩的,也就是秩等于行数。回到上面线性方程组来讲吧,由于线性方程组能够用矩阵描述嘛。秩就表示了有多少个有用的方程了。上面的方程组有3个方程,实际上只有2个是有用的,一个是多余的,因此对应的矩阵的秩就是2了。

   OK。既然秩能够度量相关性,而矩阵的相关性实际上有带有了矩阵的结构信息。若是矩阵之间各行的相关性很强,那么就表示这个矩阵实际能够投影到更低维的线性子空间,也就是用几个向量就能够彻底表达了,它就是低秩的。因此咱们总结的一点就是:若是矩阵表达的是结构性信息,例如图像、用户-推荐表等等,那么这个矩阵各行之间存在这必定的相关性,那这个矩阵通常就是低秩的。

  若是X是一个m行n列的数值矩阵,rank(X)是X的秩,假如rank (X)远小于m和n,则咱们称X是低秩矩阵。低秩矩阵每行或每列均可以用其余的行或列线性表出,可见它包含大量的冗余信息。利用这种冗余信息,能够对缺失数据进行恢复,也能够对数据进行特征提取。

好了,低秩有了,那约束低秩只是约束rank(w)呀,和咱们这节的核范数有什么关系呢?他们的关系和L0与L1的关系同样。由于rank()是非凸的,在优化问题里面很难求解,那么就须要寻找它的凸近似来近似它了。对,你没猜错,rank(w)的凸近似就是核范数||W||*

       好了,到这里,我也没什么好说的了,由于我也是稍微翻看了下这个东西,因此也尚未深刻去看它。但我发现了这玩意还有不少颇有意思的应用,下面咱们举几个典型的吧。

  1)矩阵填充(Matrix Completion):

       咱们首先说说矩阵填充用在哪。一个主流的应用是在推荐系统里面。咱们知道,推荐系统有一种方法是经过分析用户的历史记录来给用户推荐的。例如咱们在看一部电影的时候,若是喜欢看,就会给它打个分,例如3颗星。而后系统,例如Netflix等知名网站就会分析这些数据,看看到底每部影片的题材究竟是怎样的?针对每一个人,喜欢怎样的电影,而后会给对应的用户推荐类似题材的电影。但有一个问题是:咱们的网站上面有很是多的用户,也有很是多的影片,不是全部的用户都看过说有的电影,不是全部看过某电影的用户都会给它评分。假设咱们用一个“用户-影片”的矩阵来描述这些记录,例以下图,能够看到,会有不少空白的地方。若是这些空白的地方存在,咱们是很难对这个矩阵进行分析的,因此在分析以前,通常须要先对其进行补全。也叫矩阵填充。

       那到底怎么填呢?如何才能无中生有呢?每一个空白的地方的信息是否蕴含在其余已有的信息之上了呢?若是有,怎么提取出来呢?Yeah,这就是低秩生效的地方了。这叫低秩矩阵重构问题,它能够用以下的模型表述:已知数据是一个给定的m*n矩阵A,若是其中一些元素由于某种缘由丢失了,咱们可否根据其余行和列的元素,将这些元素恢复?固然,若是没有其余的参考条件,想要肯定这些数据很困难。但若是咱们已知A的秩rank(A)<<m且rank(A)<<n,那么咱们能够经过矩阵各行(列)之间的线性相关将丢失的元素求出。你会问,这种假定咱们要恢复的矩阵是低秩的,合理吗?其实是十分合理的,好比一个用户对某电影评分是其余用户对这部电影评分的线性组合。因此,经过低秩重构就能够预测用户对其未评价过的视频的喜爱程度。从而对矩阵进行填充。

  2)鲁棒PCA:

       主成分分析,这种方法能够有效的找出数据中最“主要"的元素和结构,去除噪音和冗余,将原有的复杂数据降维,揭示隐藏在复杂数据背后的简单结构。咱们知道,最简单的主成分分析方法就是PCA了。从线性代数的角度看,PCA的目标就是使用另外一组基去从新描述获得的数据空间。但愿在这组新的基下,能尽可能揭示原有的数据间的关系。这个维度即最重要的“主元"。PCA的目标就是找到这样的“主元”,最大程度的去除冗余和噪音的干扰。

       鲁棒主成分分析(Robust PCA)考虑的是这样一个问题:通常咱们的数据矩阵X会包含结构信息,也包含噪声。那么咱们能够将这个矩阵分解为两个矩阵相加,一个是低秩的(因为内部有必定的结构信息,形成各行或列间是线性相关的),另外一个是稀疏的(因为含有噪声,而噪声是稀疏的),则鲁棒主成分分析能够写成如下的优化问题:

       与经典PCA问题同样,鲁棒PCA本质上也是寻找数据在低维空间上的最佳投影问题。对于低秩数据观测矩阵X,假如X受到随机(稀疏)噪声的影响,则X的低秩性就会破坏,使X变成满秩的。因此咱们就须要将X分解成包含其真实结构的低秩矩阵和稀疏噪声矩阵之和。找到了低秩矩阵,实际上就找到了数据的本质低维空间。那有了PCA,为何还有这个Robust PCA呢?Robust在哪?由于PCA假设咱们的数据的噪声是高斯的,对于大的噪声或者严重的离群点,PCA会被它影响,致使没法正常工做。而Robust PCA则不存在这个假设。它只是假设它的噪声是稀疏的,而无论噪声的强弱如何。

  因为rank和L0范数在优化上存在非凸和非光滑特性,因此咱们通常将它转换成求解如下一个松弛的凸优化问题:

       说个应用吧。考虑同一副人脸的多幅图像,若是将每一副人脸图像当作是一个行向量,并将这些向量组成一个矩阵的话,那么能够确定,理论上,这个矩阵应当是低秩的。可是,因为在实际操做中,每幅图像会受到必定程度的影响,例如遮挡,噪声,光照变化,平移等。这些干扰因素的做用能够看作是一个噪声矩阵的做用。因此咱们能够把咱们的同一我的脸的多个不一样状况下的图片各自拉长一列,而后摆成一个矩阵,对这个矩阵进行低秩和稀疏的分解,就能够获得干净的人脸图像(低秩矩阵)和噪声的矩阵了(稀疏矩阵),例如光照,遮挡等等。至于这个的用途,你懂得。

  3)背景建模:

       背景建模的最简单情形是从固定摄相机拍摄的视频中分离背景和前景。咱们将视频图像序列的每一帧图像像素值拉成一个列向量,那么多个帧也就是多个列向量就组成了一个观测矩阵。因为背景比较稳定,图像序列帧与帧之间具备极大的类似性,因此仅由背景像素组成的矩阵具备低秩特性;同时因为前景是移动的物体,占据像素比例较低,故前景像素组成的矩阵具备稀疏特性。视频观测矩阵就是这两种特性矩阵的叠加,所以,能够说视频背景建模实现的过程就是低秩矩阵恢复的过程。

  4)变换不变低秩纹理(TILT):

       以上章节所介绍的针对图像的低秩逼近算法,仅仅考虑图像样本之间像素的类似性,却没有考虑到图像做为二维的像素集合,其自己所具备的规律性。事实上,对于未加旋转的图像,因为图像的对称性与自类似性,咱们能够将其看作是一个带噪声的低秩矩阵。当图像由端正发生旋转时,图像的对称性和规律性就会被破坏,也就是说各行像素间的线性相关性被破坏,所以矩阵的秩就会增长。

       低秩纹理映射算法(TransformInvariant Low-rank Textures,TILT)是一种用低秩性与噪声的稀疏性进行低秩纹理恢复的算法。它的思想是经过几何变换τ把D所表明的图像区域校订成正则的区域,如具备横平竖直、对称等特性,这些特性能够经过低秩性来进行刻画。

       低秩的应用很是多,你们有兴趣的能够去找些资料深刻了解下。

5、规则化参数的选择

       如今咱们回过头来看看咱们的目标函数:

       里面除了loss和规则项两块外,还有一个参数λ。它也有个霸气的名字,叫hyper-parameters(超参)。你不要看它势单力薄的,它很是重要。它的取值很大时候会决定咱们的模型的性能,事关模型生死。它主要是平衡loss和规则项这两项的,λ越大,就表示规则项要比模型训练偏差更重要,也就是相比于要模型拟合咱们的数据,咱们更但愿咱们的模型能知足咱们约束的Ω(w)的特性。反之亦然。举个极端状况,例如λ=0时,就没有后面那一项,代价函数的最小化所有取决于第一项,也就是集全力使得输出和期待输出差异最小,那何时差异最小啊,固然是咱们的函数或者曲线能够通过全部的点了,这时候偏差就接近0,也就是过拟合了。它能够复杂的表明或者记忆全部这些样本,但对于一个新来的样本泛化能力就不行了。毕竟新的样本会和训练样本有差异的嘛。

       那咱们真正须要什么呢?咱们但愿咱们的模型既能够拟合咱们的数据,又具备咱们约束它的特性。只有它们二者的完美结合,才能让咱们的模型在咱们的任务上发挥强大的性能。因此如何讨好它,是很是重要。在这点上,你们可能深有体会。还记得你复现了不少论文,而后复现出来的代码跑出来的准确率没有论文说的那么高,甚至还差之万里。这时候,你就会怀疑,究竟是论文的问题,仍是你实现的问题?实际上,除了这两个问题,咱们还须要深刻思考另外一个问题:论文提出的模型是否具备hyper-parameters?论文给出了它们的实验取值了吗?经验取值仍是通过交叉验证的取值?这个问题是逃不掉的,由于几乎任何一个问题或者模型都会具备hyper-parameters,只是有时候它是隐藏着的,你看不到而已,但一旦你发现了,证实你俩有缘,那请试着去修改下它吧,有可能有“奇迹”发生哦。

       OK,回到问题自己。咱们选择参数λ的目标是什么?咱们但愿模型的训练偏差和泛化能力都很强。这时候,你有可能还反映过来,这不是说咱们的泛化性能是咱们的参数λ的函数吗?那咱们为何按优化那一套,选择能最大化泛化性能的λ呢?Oh,sorry to tell you that,由于泛化性能并非λ的简单的函数!它具备不少的局部最大值!并且它的搜索空间很大。因此你们肯定参数的时候,一是尝试不少的经验值,这和那些在这个领域摸爬打滚的大师是没得比的。固然了,对于某些模型,大师们也整理了些调参经验给咱们。例如Hinton大哥的那篇A Practical Guide to Training RestrictedBoltzmann Machines等等。还有一种方法是经过分析咱们的模型来选择。怎么作呢?就是在训练以前,咱们大概计算下这时候的loss项的值是多少?Ω(w)的值是多少?而后针对他们的比例来肯定咱们的λ,这种启发式的方法会缩小咱们的搜索空间。另一种最多见的方法就是交叉验证Cross validation了。先把咱们的训练数据库分红几份,而后取一部分作训练集,一部分作测试集,而后选择不一样的λ用这个训练集来训练N个模型,而后用这个测试集来测试咱们的模型,取N模型里面的测试偏差最小对应的λ来做为咱们最终的λ。若是咱们的模型一次训练时间就很长了,那么很明显在有限的时间内,咱们只能测试很是少的λ。例如假设咱们的模型须要训练1天,这在深度学习里面是屡见不鲜了,而后咱们有一个星期,那咱们只能测试7个不一样的λ。这就让你遇到最好的λ那是上辈子积下来的福气了。那有什么方法呢?两种:一是尽可能测试7个比较靠谱的λ,或者说λ的搜索空间咱们尽可能广点,因此通常对λ的搜索空间的选择通常就是2的多少次方了,从-10到10啊什么的。但这种方法仍是不大靠谱,最好的方法仍是尽可能让咱们的模型训练的时间减小。例如假设咱们优化了咱们的模型训练,使得咱们的训练时间减小到2个小时。那么一个星期咱们就能够对模型训练7*24/2=84次,也就是说,咱们能够在84个λ里面寻找最好的λ。这让你碰见最好的λ的几率就大多了吧。这就是为何咱们要选择优化也就是收敛速度快的算法,为何要用GPU、多核、集群等来进行模型训练、为何具备强大计算机资源的工业界能作不少学术界也作不了的事情(固然了,大数据也是一个缘由)的缘由了。

       努力作个“调参”高手吧!祝愿你们都能“调得一手好参”!

6、补充知识

  矩阵A的条件数等于A的范数与A的逆的范数的乘积,即cond(A)=‖A‖·‖A^(-1)‖,对应矩阵的3种范数,相应地能够定义3种条件数。
  函数 cond(A,1)、cond(A)或cond(A inf) 是判断矩阵病态与否的一种度量,条件数越大矩阵越病态。条件数事实上表示了矩阵计算对于偏差的敏感性。对于线性方程组Ax=b,若是A的条件数大,b的微小改变就能引发解x较大的改变,数值稳定性差。若是A的条件数小,b有微小的改变,x的改变也很微小,数值稳定性好。它也能够表示b不变,而A有微小改变时,x的变化状况。好比线性方程组

  的解是(x,y)=(0.0,0.1),
  而
的解是(x,y)=(-0.17,0.22),可见b很小的扰动就引发了x很大的变化,这就是A矩阵条件数大的表现。
  一个极端的例子,当A奇异时,条件数为无穷,这时即便不改变b,x也能够改变。奇异的本质缘由在于矩阵有0特征值,x在对应特征向量的方向上运动不改变Ax的值。若是一个特征值比其它特征值在数量级上小不少,x在对应特征向量方向上很大的移动才能产生b微小的变化,这就解释了为何这个矩阵为何会有大的条件数,事实上,正规阵在二范数下的条件数就能够表示成 abs(最大特征值/最小特征值)。

7、参考文献

  http://www.cnblogs.com/TenosDoIt/p/3708996.html?utm_source=tuicool&utm_medium=referral

  http://fastml.com/large-scale-l1-feature-selection-with-vowpal-wabbit/

  http://www.stat.purdue.edu/~vishy/introml/notes/Optimization.pdf

  http://www.stanford.edu/~boyd/cvxbook/bv_cvxbook.pdf

  http://nm.mathforcollege.com/mws/gen/04sle/mws_gen_sle_spe_adequacy.pdf

相关文章
相关标签/搜索