转载:https://blog.csdn.net/u012162613/article/details/44261657
本文是《Neural networks and deep learning》概览 中第三章的一部分,讲机器学习/深度学习算法中常用的正则化方法。(本文会不断补充)
正则化方法:防止过拟合,提高泛化能力
在训练数据不够多时,或者overtraining时,常常会导致overfitting(过拟合)。其直观的表现如下图所示,随着训练过程的进行,模型复杂度增加,在training data上的error渐渐减小,但是在验证集上的error却反而渐渐增大——因为训练出来的网络过拟合了训练集,对训练集外的数据却不work。
为了防止overfitting,可以用的方法有很多,下文就将以此展开。有一个概念需要先说明,在机器学习算法中,我们常常将原始数据集分为三部分:training data、validation data,testing data。这个validation data是什么?它其实就是用来避免过拟合的,在训练过程中,我们通常用它来确定一些超参数(比如根据validation data上的accuracy来确定early stopping的epoch大小、根据validation data确定learning rate等等)。那为啥不直接在testing data上做这些呢?因为如果在testing data做这些,那么随着训练的进行,我们的网络实际上就是在一点一点地overfitting我们的testing data,导致最后得到的testing accuracy没有任何参考意义。因此,training data的作用是计算梯度更新权重,validation data如上所述,testing data则给出一个accuracy以判断网络的好坏。
避免过拟合的方法有很多:early stopping、数据集扩增(Data augmentation)、正则化(Regularization)包括L1、L2(L2 regularization也叫weight decay),dropout。
L2 regularization(权重衰减)
L2正则化就是在代价函数后面再加上一个正则化项:
C0代表原始的代价函数,后面那一项就是L2正则化项,它是这样来的:所有参数w的平方的和,除以训练集的样本大小n。λ就是正则项系数,权衡正则项与C0项的比重。另外还有一个系数1/2,1/2经常会看到,主要是为了后面求导的结果方便,后面那一项求导会产生一个2,与1/2相乘刚好凑整。
L2正则化项是怎么避免overfitting的呢?我们推导一下看看,先求导:
可以发现L2正则化项对b的更新没有影响,但是对于w的更新有影响:
在不使用L2正则化时,求导结果中w前系数为1,现在w前面系数为 1−ηλ/n ,因为η、λ、n都是正的,所以 1−ηλ/n小于1,它的效果是减小w,这也就是权重衰减(weight decay)的由来。当然考虑到后面的导数项,w最终的值可能增大也可能减小。
另外,需要提一下,对于基于mini-batch的随机梯度下降,w和b更新的公式跟上面给出的有点不同:
对比上面w的更新公式,可以发现后面那一项变了,变成所有导数加和,乘以η再除以m,m是一个mini-batch中样本的个数。
到目前为止,我们只是解释了L2正则化项有让w“变小”的效果,但是还没解释为什么w“变小”可以防止overfitting?一个所谓“显而易见”的解释就是:更小的权值w,从某种意义上说,表示网络的复杂度更低,对数据的拟合刚刚好(这个法则也叫做奥卡姆剃刀),而在实际应用中,也验证了这一点,L2正则化的效果往往好于未经正则化的效果。当然,对于很多人(包括我)来说,这个解释似乎不那么显而易见,所以这里添加一个稍微数学一点的解释(引自知乎):
过拟合的时候,拟合函数的系数往往非常大,为什么?如下图所示,过拟合,就是拟合函数需要顾忌每一个点,最终形成的拟合函数波动很大。在某些很小的区间里,函数值的变化很剧烈。这就意味着函数在某些小区间里的导数值(绝对值)非常大,由于自变量值可大可小,所以只有系数足够大,才能保证导数值很大。
而正则化是通过约束参数的范数使其不要太大,所以可以在一定程度上减少过拟合情况。
L1 regularization
在原始的代价函数后面加上一个L1正则化项,即所有权重w的绝对值的和,乘以λ/n(这里不像L2正则化项那样,需要再乘以1/2,具体原因上面已经说过。)
同样先计算导数:
上式中sgn(w)表示w的符号。那么权重w的更新规则为:
比原始的更新规则多出了η * λ * sgn(w)/n这一项。当w为正时,更新后的w变小。当w为负时,更新后的w变大——因此它的效果就是让w往0靠,使网络中的权重尽可能为0,也就相当于减小了网络复杂度,防止过拟合。
另外,上面没有提到一个问题,当w为0时怎么办?当w等于0时,|W|是不可导的,所以我们只能按照原始的未经正则化的方法去更新w,这就相当于去掉η*λ*sgn(w)/n这一项,所以我们可以规定sgn(0)=0,这样就把w=0的情况也统一进来了。(在编程的时候,令sgn(0)=0,sgn(w>0)=1,sgn(w<0)=-1)
Dropout
L1、L2正则化是通过修改代价函数来实现的,而Dropout则是通过修改神经网络本身来实现的,它是在训练网络时用的一种技巧(trike)。它的流程如下:
假设我们要训练上图这个网络,在训练开始时,我们随机地“删除”一半的隐层单元,视它们为不存在,得到如下的网络:
保持输入输出层不变,按照BP算法更新上图神经网络中的权值(虚线连接的单元不更新,因为它们被“临时删除”了)。
以上就是一次迭代的过程,在第二次迭代中,也用同样的方法,只不过这次删除的那一半隐层单元,跟上一次删除掉的肯定是不一样的,因为我们每一次迭代都是“随机”地去删掉一半。第三次、第四次……都是这样,直至训练结束。
以上就是Dropout,它为什么有助于防止过拟合呢?可以简单地这样解释,运用了dropout的训练过程,相当于训练了很多个只有半数隐层单元的神经网络(后面简称为“半数网络”),每一个这样的半数网络,都可以给出一个分类结果,这些结果有的是正确的,有的是错误的。随着训练的进行,大部分半数网络都可以给出正确的分类结果,那么少数的错误分类结果就不会对最终结果造成大的影响。
更加深入地理解,可以看看Hinton和Alex两牛2012的论文《ImageNet Classification with Deep Convolutional Neural Networks》
数据集扩增(data augmentation)
“有时候不是因为算法好赢了,而是因为拥有更多的数据才赢了。”
不记得原话是哪位大牛说的了,hinton?从中可见训练数据有多么重要,特别是在深度学习方法中,更多的训练数据,意味着可以用更深的网络,训练出更好的模型。
既然这样,收集更多的数据不就行啦?如果能够收集更多可以用的数据,当然好。但是很多时候,收集更多的数据意味着需要耗费更多的人力物力,有弄过人工标注的同学就知道,效率特别低,简直是粗活。
所以,可以在原始数据上做些改动,得到更多的数据,以图片数据集举例,可以做各种变换,如:
将原始图片旋转一个小角度
添加随机噪声
一些有弹性的畸变(elastic distortions),论文《Best practices for convolutional neural networks applied to visual document analysis》对MNIST做了各种变种扩增。
-
截取(crop)原始图片的一部分。比如DeepID中,从一副人脸图中,截取出了100个小patch作为训练数据,极大地增加了数据集。感兴趣的可以看《Deep learning face representation from predicting 10,000 classes》.
更多数据意味着什么?
用50000个MNIST的样本训练SVM得出的accuracy94.48%,用5000个MNIST的样本训练NN得出accuracy为93.24%,所以更多的数据可以使算法表现得更好。在机器学习中,算法本身并不能决出胜负,不能武断地说这些算法谁优谁劣,因为数据对算法性能的影响很大。
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
转载:https://blog.csdn.net/w5688414/article/details/78046960
感受
范数(norm)
数学上,范数是一个向量空间或矩阵上所有向量的长度和大小的求和。简单一点,我们可以说范数越大,矩阵或者向量就越大。范数有许多种形式和名字,包括最常见的:欧几里得距离(Euclideandistance),最小均方误差(Mean-squared Error)等等。
大多数时间,你会在等式中看见范数像下面那样:||x||,x可以是一个向量或者矩阵。
例如一个向量
即向量a的模的大小。上面的例子展示了怎样计算欧几里得范数,或者叫做l2-norm.
X的Lp-norm的规范定义如下:
严格的说,L0-norm不是一个真正的范数。它是一个基数函数(cardinalityfunction),有lp-norm的定义形式,这个式子有点特别,因为式子中有0的幂(zeroth-power)和0个根号(zeroth-root),显然,任何x>0,将会变为1.但是0的幂和0的开根号的定义很混乱。所以实际上,大多数数学家和工程师使用下面的l0-norm的定义:
即向量中非零元素的总个数。
由于它是非零元素的总数,因此有很多应用使用l0-norm。随后,由于压缩传感计划(Compressive Sensing scheme)的发展,变得越来越重要。压缩传感计划试图找到欠定线性系统(under-determinedlinear system)最稀疏的解(sparsest solution)。最稀疏的解意味着解有最少的非零元素。即最少的l0-norm。这个问题通常被当做一个l0-norm优化问题许多应用,包括压缩感知,试图最小化一个向量的l0-norm,这个向量有一些限制条件。因此叫做l0-minimisation.一个标准的最小化问题的定义为:
可是,优化上式不是一件容易的事。因为缺乏l0-norm的数学表示,l0-minimisation被计算机科学家认为是一个NP难问题(NP-hard problem),简单的说,它太复杂了,目前数学上没有求解办法。
在多数情况下,l0-minimisation问题都转换为高阶范数问题(higher-order norm problem),例如l1-minimisation和l2-minimisation.
L1-norm
X的l1-norm的定义为:
这个范数在范数家族中相当常见,它有很多名字和许多种形式,它的昵称是曼哈顿范数(Manhattannorm)。两个向量或矩阵的l1-norm为
在计算机视觉科学家眼中,它叫做绝对偏差和(Sum of AbsoluteDifference,SAD)。
在一般情况下,它可以用于一个单元的偏差计算:
它叫做均方绝对误差(Mean-Absolute Error,MAE).
L2-norm
所有范数中最流行的是l2-norm。总体上,它用于工程和科学领域的方方面面。基本定义如下,l2-norm:
它的平方形式,在计算机视觉领域为平方差的和(Sumof Squared Difference,SSD)
它最出名的应用是在信号处理领域,为均方误差(Mean-SquaredError,MSE),它被用来计算两个信号的相似度,质量(quality)和关系。MSE为:
L2-optimisation
和l0-optimisation一样,最小化l2-norm的问题格式化定义为
假设限制矩阵A是全秩的,这个问题现在就是有无穷解的欠定系统(underderterminedsystem)。我们的目标是求出最优解,例如,求有最小l2-norm的解,如果直接计算的话,这会很麻烦。幸运的是它有一个数学技巧可以帮助我们求解。通过使用拉格朗日乘数(Lagrangemultipliers),我们可以定义一个拉格朗日乘子。
λ是引入的拉格朗日乘数。求导,然后等式等于0,我们可以找到一个最优解,因此得到
把解带入限定式中得到
最终
通过使用这个式子,我们可以立即求出l2-optimisation问题的最优解。这个等式因Moore-Penrose Pseudoinverse(读者自行百度,我也不知道,对不住了)而闻名,这个问题通常称为最小均方问题,最小均方回归或者最小均方优化。
可是,即使最小均方的方法很容易计算,但是计算的往往不是最好的解,这是因为l2-norm本身的平滑(曲线,处处可导)性质,很难找倒单个,适应问题的最佳解。
相反,l1-optimisation可以提供比这个解更好的结果。
L1-optimisation
L1-optimisation问题的格式化定义为
由于l1-norm不像l2-norm那样光滑,问题的解就会比l2-optimisation更好更唯一.
了。留下来的唯一方式是直接搜索,寻找解意味着我们的计算每一个我们找到的可能解,以找到找到最佳的那个解。
因为在数学上我们不能找到一个解决方法,l1-optimisation的实用性在过去几十年里是相当有限的。直到最近,具有高效计算能力的电脑可以使得我们找到每一个解。通过使用许多实用的算法,称为凸优化(ConvexOptimisation)算法,例如线性规划(linear programming)或者非线性规划(non-linear programming)等等。
现在有许多关于l1-optimisation的toolboxes,这些toolboxes通常视同不同的方法或算法来解决同一个问题,toolboxes的样例为l1-magic,SparseLab,ISAL1.
L-infinity norm
l∞-norm的定义为
考虑向量x,如果xj是向量x中最高的条目,因为其无穷的属性,我们可以说
现在我们可以简单的说l∞-norm
这是向量最大条目的刻度。这显然不满足l∞-norm的意义
比较分析
当我们在做机器学习实践的时候,我们会迷茫是选择L1正则还是选择L2正则,因此我做了一下比较分析。
L1-norm(范数),也叫作最小绝对偏差(leastabsolute deviations, LAD),最小绝对误差(least absolute errors,LAE).它是最小化目标值yi和估计值f(xi)绝对差值的求和:
L2-norm(范数)也称为最小均方(least squares),它是最小化目标值yi和估计值f(xi)平方和。
L1-norm和L2-norm的区别如下表格
鲁棒性(Robustness):最小绝对值偏差的方法应用领域很广,相比最小均方的方法,它的鲁棒性更好,LAD能对数据中的异常点有很好的抗干扰能力,异常点可以安全的和高效的忽略,这对研究帮助很大。如果异常值对研究很重要,最小均方误差则是更好的选择。
对于L2-norm,由于是均方误差,如果误差>1的话,那么平方后,相比L-norm而言,误差就会被放大很多。因此模型会对样例更敏感。如果样例是一个异常值,模型会调整最小化异常值的情况,以牺牲其它更一般样例为代价,因为相比单个异常样例,那些一般的样例会得到更小的损失误差。
稳定性:LAD方法的不稳定属性意思是,对于一个书评调整的数据集,回归线可能会跳跃很大。这个方法对一些数据配置有连续的解决方法;可是,通过把数据集变小,LAD可以跳过一个有多个求解拓展区域的布局(one could “jump past” a configurationwhich has multiple solutions that span a region,这句翻译挺麻烦的,大家自己领会吧,我尽力了),再通过这个解决方案的区域后,LAD线有一个斜坡,可能和之前的线完全不同。相比较之下,最小均方解决方法是稳定的,对于任何晓得数据点的调整,回归线仅仅只稍微移动一下,回归参数就是数据的连续函数(continuousfunctions of the data)。
上图的上面代表的是L1-norm,底部代表的是L2-norm。第一列代表一个回归线怎样适应这三个点的。
假设我们把绿色的点视屏享有移动一点,L2-norm维持了和原回归线一样的形状,但是形成了更陡的抛物线(steeper parabolic curve)。可是在L1-norm的样例中,回归线的斜率更陡了,并且影响到了其它点的预测值,因此,与L2-norm相比,所有的未来的预测都会都会受到影响。
假设我们把绿色的点水平向右移动得更远,L2-norm变化了一点,但是L1-norm变化更大了,l1-norm的斜率完全改变了。这种变化会使得所有以前的结果都不再合法(invalidate all previous results)。
数据点的稍稍调整,回归线就会变化很多,这就是L1-norm的不稳定性的表现之处。
解决方案唯一性:这需要一点想象力。首先,看下图:
绿色的点(L2-norm)是唯一的最短路径。而红色,绿色,黄色(L1-norm)的线都是长度相同的路径。我们把它泛化到n维中,结果跟这里的二维一样。
内置的特征选择(Built-in feature selection):这是L1-norm经常被提及的一个优点,而L2-norm没有。这实际上是L1-norm的一个结果,L1-norm往往会使系数变得稀疏(sparse coefficients)。假设模型有100个系数,但是有10个非零的系数,这就是说,其它90个预测器在预测目标值上是没有用的。L2-norm往往会有非稀疏的系数(non-sparse coefficients),没有这个特点。
稀疏性(Sparsity):这主要是一个向量或矩阵中只有很少的非零(non-zero)条目(entries)。L1-norm有能产生许多零值或非常小的值的系数的属性,很少有大的系数。
计算效率(Computational efficiency):L1-norm没有一个解析解(analytical solution),但是L2-nom有,这使得L2-norm可以被高效的计算。可是,L1-norm的解有稀疏的属性,它可以和稀疏算法一起用,这可以是计算更加高效。
参考文献
[1]. Differences between the L1-norm andthe L2-norm (Least Absolute Deviations and Least Squares). http://www.chioka.in/differences-between-the-l1-norm-and-the-l2-norm-least-absolute-deviations-and-least-squares/
[2]. l0-Norm, l1-Norm, l2-Norm, … ,l-infinity Norm.
https://rorasa.wordpress.com/2012/05/13/l0-norm-l1-norm-l2-norm-l-infinity-norm/