正则化

 ̄綄美尐妖づ 提交于 2020-02-03 01:45:31

文章来源

本文是作者摘抄 且行且安~ 的文章,
当时由于不懂w变化,故留用于以后随时查看,【侵删】

目录

一、Why & What 正则化

1 概念

2、先讨论几个问题:

二、一般正则项

三、深入理解

一、Why & What 正则化

我们总会在各种地方遇到正则化这个看起来很难理解的名词,其实它并没有那么高冷,是很好理解的

首先,从使用正则化解决了一个什么问题的角度来看:正则化是为了防止过拟合, 进而增强泛化能力。用白话文转义,泛化误差(generalization error)= 测试误差(test error),其实就是使用训练数据训练的模型在测试集上的表现(或说性能 performance)好不好

过拟合

如上图,红色这条“想象力”过于丰富上下横跳的曲线就是过拟合情形。结合上图和正则化的英文 Regularizaiton-Regular-Regularize,直译应该是:规则化(加个“化”字变动词,自豪一下中文还是强)。什么是规则?你妈喊你6点前回家吃饭,这就是规则,一个限制。同理,在这里,规则化就是说给需要训练的目标函数加上一些规则(限制),让他们不要自我膨胀。正则化,看起来,挺不好理解的,追其根源,还是“正则”这两字在中文中实在没有一个直观的对应,如果能翻译成规则化,更好理解。但我们一定要明白,搞学术,概念名词的准确是十分重要,对于一个重要唯一确定的概念,为它安上一个不会产生歧义的名词是必须的,正则化的名称没毛病,只是从如何理解的角度,要灵活和类比。

1 概念
L_{0}正则化的值是模型参数中非零参数的个数。
L_{1}正则化表示各个参数绝对值之和。
L_{2}正则化标识各个参数的平方的和的开方值。
2、先讨论几个问题:
1)实现参数的稀疏有什么好处吗?

一个好处是可以简化模型,避免过拟合。因为一个模型中真正重要的参数可能并不多,如果考虑所有的参数起作用,那么可以对训练数据可以预测的很好,但是对测试数据表现性能极差。另一个好处是参数变少可以使整个模型获得更好的可解释性。

2)参数值越小代表模型越简单吗?

是的。为什么参数越小,说明模型越简单呢,这是因为越复杂的模型,越是会尝试对所有的样本进行拟合,甚至包括一些异常样本点,这就容易造成在较小的区间里预测值产生较大的波动,这种较大的波动也反映了在这个区间里的导数很大,而只有较大的参数值才能产生较大的导数。因此复杂的模型,其参数值会比较大。

3)L_{0}正则化

根据上面的讨论,稀疏的参数可以防止过拟合,因此用L_{0}范数(非零参数的个数)来做正则化项是可以防止过拟合的。

从直观上看,利用非零参数的个数,可以很好的来选择特征,实现特征稀疏的效果,具体操作时选择参数非零的特征即可。但因为L_{0}正则化很难求解,是个NP难问题,因此一般采用L_{1}正则化。L_{1}正则化是L_{0}正则化的最优凸近似,比L_{0}容易求解,并且也可以实现稀疏的效果。

  1. L_{2}正则化

L2正则化就是在代价函数后面再加上一个正则化项:

C0代表原始的代价函数,后面那一项就是L_{2}正则化项,它是这样来的:所有参数w的平方的和,除以训练集的样本大小n。λ就是正则项系数,权衡正则项与C0项的比重。另外还有一个系数1/2,1/2经常会看到,主要是为了后面求导的结果方便,后面那一项求导会产生一个2,与1/2相乘刚好凑整。

L2正则化项是怎么避免overfitting的呢?我们推导一下看看,先求导:

可以发现L_{2}正则化项对b的更新没有影响,但是对于w的更新有影响:

   在不使用L_{2}正则化时,求导结果中w前系数为1,现在w前面系数为 (1-\frac{\eta \lambda }{n}) ,因为η、λ、n都是正的,所以 1-ηλ/n小于1,它的效果是减小w,这也就是权重衰减(weight decay)的由来。当然考虑到后面的导数项,w最终的值可能增大也可能减小。

   到目前为止,我们只是解释了L_{2}正则化项有让w“变小”的效果,但是还没解释为什么w“变小”可以防止overfitting?人们普遍认为:更小的权值w,从某种意义上说,表示网络的复杂度更低,对数据的拟合刚刚好(这个法则也叫做奥卡姆剃刀)。而在实际应用中,也验证了这一点,L_{2}正则化的效果往往好于未经正则化的效果。
  1. L1 regularization

    在原始的代价函数后面加上一个L1正则化项,即所有权重w的绝对值的和,乘以λ/n(这里不像L2正则化项那样,需要再乘以1/2)
    

同样先计算导数:

上式中sgn(w)表示w的符号。那么权重w的更新规则为:比原始的更新规则多出了η * λ * sgn(w)/n这一项。当w为正时,更新后的w变小。当w为负时,更新后的w变大——因此它的效果就是让w往0靠,使网络中的权重尽可能为0,也就相当于减小了网络复杂度,防止过拟合。

二、一般正则项

直观的详解为什么要选择二次正则项。首先,需要从一般推特例,然后分析特例情况的互相优劣条件,可洞若观火。一般正则项是以下公式的形式

M是模型的阶次(表现形式是数据的维度),比如M=2,就是一个平面(二维)内的点

若q=2就是二次正则项。高维度没有图像表征非常难以理解,那就使用二维作为特例来理解。这里令M=2,即 x={x1,x2} w={w1,w2}x={x1,x2}w={w1,w2} ,令q=0.5 q=1 q=2 q=4 有

正则项的边缘直观表示

下方的三维图像能给你一个直观的领悟(与绿线图一一对应)

正则项的边缘直观表示

q=2是一个圆非常好理解,考虑 z=w21+w22z=w12+w22 就是抛物面,俯视图是一个圆。其他几项同理(必须强调俯视图和等高线的概念,z轴表示的是正则项项的值)

正则项的边缘直观表示

蓝色的圆圈表示没有经过限制的损失函数在寻找最小值过程中,w的不断迭代(随最小二乘法,最终目的还是使损失函数最小)变化情况,表示的方法是等高线,z轴的值就是 E(w)
w∗ 最小值取到的点

可以直观的理解为(帮助理解正则化),我们的目标函数(误差函数)就是求蓝圈+红圈的和的最小值(回想等高线的概念并参照式),而这个值通在很多情况下是两个曲面相交的地方

可以看到二次正则项的优势,处处可导,方便计算,限制模型的复杂度,即 w中M的大小,M是模型的阶次,M越大意味着需要决定的权重越多,所以模型越复杂。在多项式模型多,直观理解是每一个不同幂次的 x前的系数,0(或很小的值)越多,模型越简单。这就从数学角度解释了,为什么正则化(规则化)可以限制模型的复杂度,进而避免过拟合

不知道有没有人发现一次正则项的优势,w∗ 的位置恰好是 w1=0的位置,意味着从另一种角度来说,使用一次正则项可以降低维度(降低模型复杂度,防止过拟合)二次正则项也做到了这一点,但是一次正则项做的更加彻底,更稀疏。不幸的是,一次正则项有拐点,不是处处可微,给计算带来了难度,很多厉害的论文都是巧妙的使用了一次正则项写出来的,效果十分强大

三、深入理解
为了使得模型能够充分拟合训练样本点,我们希望上述目标函数C0=L(W)的值尽可能小,即:

                                                                                             (1)                                                                                 但是由于实际中的训练数据量往往并不大,如果让模型完美拟合训练数据的话,很可能造成模型过拟合,从而使得模型的泛化能力较差。这一点可以从得到的模型参数向量w的各个分量中看出,其中大部分分量的绝对值都非常大,这种现象直观表现在图上就是曲线(曲面)不光滑,凹凸不平,很复杂;相反,如果w的各个分量的绝对值都很小,在0附近,那么曲线(曲面)就会显得很平滑。很显然,在机器学习中,我们更希望拟合出的曲线(曲面)更为平滑,因为这样的曲线(曲面)是具有较好的泛化能力的。那么如何将w各个分量的绝对值降低呢?这就要用到正则化技术了。在用正则化技术估计参数w时,引入了我们对参数的先验认知,即我们认为参数的绝对值应该很小。

正则化技术就是使得式(1)的值尽可能小,与此同时,要保证||w||的值也尽可能小,即:

                                                                                              (2) 

在上式中,优化函数的目标变成了两个,w的取值不仅要使得L(w)的值最小,也要使得||w||的值最小。从上式我们可以看出,一方面要使得L(w)的取值最小,必然w的绝对值会取到很大,这样模型才能完美拟合训练样本点;另一方面,当w的绝对值很大时,||w||的值又会变得很大,因此为了权衡,只有使得w取值适当,才能保证式(2)的值取到最优。这样得到的曲线(曲面)比式(1)得到的曲线(曲面)平滑很多,因此具有泛化能力。值得注意的是,式中的t是L(w)与||w||之间的一个trade-off,如果t过大,那么表明对模型参数w的惩罚越狠,这样就会导致更多的W取0(当t很大时,由于目标函数是min,逼得只有W取0,才会使目标函数不至于太大),这样得到的模型处于欠拟合状态,如果t过小,那么表明对模型参数w的惩罚越小(理解的思路相同),这样得到的模型处于过拟合状态,只有选择合适的t,才能使得到的模型具有很好地泛化能力。关于如何选择t的值,工程上一般采取交叉验证的方式来确定一个较合理的t。

我们先来看L2正则化。

                                                                                   (3)

式中,||w||2为w的2范式,平方是为了求解的方便。

我们来看看L2正则化的性质。

1.从式(3)中可以看出,L2正则化对于绝对值较大的权重予以很重的惩罚,对于绝对值很小的权重予以非常非常小的惩罚,当权重绝对值趋近于0时,基本不惩罚。这个性质与L2的平方项有关系,即越大的数,其平方越大,越小的数,比如小于1的数,其平方反而越小。

2.从贝叶斯推导的角度看,我们可以认为式(3)中的第二项为参数w的一个均值为0的高斯先验分布,即,w~N(0, b^{2})。这也符合我们对于参数w的先验认知:w的绝对值不是很大。

3.从性质2可知,既然w的先验分布服从高斯分布,那么L2正则化的作用实际上就是使得参数向量w的大部分分量的值趋近于0,而不是等于0。这一点在处理具有共线性特征的特征集时非常重要,也是L2在这种情况下胜过L1的原因。

4.由于式(3)是个凸函数,并且函数可微,因此w的值具有解析解:

从解的解析表达式可以看出,w的求解不需要对X-1是否存在作任何假设,因为I为单位矩阵,因此解析式中的逆始终存在。

接下来我们看看L1正则化。

随着海量数据处理的兴起,工程上对于模型稀疏化的要求也随之出现了。这时候,L2正则化已经不能满足需求,因为它只是使得模型的参数值趋近于0,而不是等于0,这样就无法丢掉模型里的任何一个特征,因此无法做到稀疏化。这时,L1的作用随之显现。L1正则化的作用是使得大部分模型参数的值等于0,这样一来,当模型训练好后,这些权值等于0的特征可以省去,从而达到稀疏化的目的,也节省了存储的空间,因为在计算时,值为0的特征都可以不用存储了。

                                                                                    (4)

(4)式中||w||1为w的1范式,即

同样,我们来看看L1正则化的性质。

  1. 从式(4)中可以看出,L1正则化对于所有权重予以同样的惩罚,也就是说,不管模型参数的大小,对它们都施加同等力度的惩罚,因此,较小的权重在被惩罚后,就会变成0。因此,在经过L1正则化后,大量模型参数的值变为0或趋近于0,当然也有一部分参数的值飙得很高(这一点在性质2解释)。由于大量模型参数变为0,这些参数就不会出现在最终的模型中,因此达到了稀疏化的作用,这也说明了L1正则化自带特征选择的功能,这一点十分有用。

2.从贝叶斯推导的角度看,我们可以认为式(4)中的第二项为参数w的一个均值为0的拉普拉斯先验分布。从高斯概率密度函数和拉普拉斯概率密度函数的图形中可以看出,拉普拉斯概率密度函数的截尾比高斯概率密度函数的截尾更长,也就是说L1正则化更能够接受绝对值较大的参数值。

3.从性质2可知,既然拉普拉斯分布比高斯分布有更长的截尾,那么可以推知L1正则化的鲁棒性要好于L2正则化,也就是说,L1正则化对于绝对值较大的参数没有L2正则化那么敏感,从而能够容忍一些这样的参数留下。

4.由1范式的定义可知,L1正则化在任意权值为0的时候不可导,因此式(4)不能求出w的解析解,同时,基于梯度的优化算法也无法高效地计算出w的值,因此对于L1正则化,一般可以采取坐标下降法求解。

L1正则化和L2正则化在实际应用中的比较。

L1在确实需要稀疏化模型的场景下,才能发挥很好的作用并且效果远胜于L2。在模型特征个数远大于训练样本数的情况下,如果我们事先知道模型的特征中只有少量相关特征(即参数值不为0),并且相关特征的个数少于训练样本数,那么L1的效果远好于L2。比如在文本分类中,如果我们将一篇文章的所有词语作为它的特征,那么很显然,其中绝大部分特征是无关特征,只有很少量的特征是相关特征。这时,如果我们将每篇文章作为训练样本,直接扔进L1正则化的模型,那么可以通过L1的稀疏化性质去掉无关特征,只留下相关特征。从而L1在这里起到了特征选择的作用,也就省去了特征工程这一步,因为特征工程往往还是需要人工干预的,L1的做法则直接让数据说话,避免人工干预。然而,如果模型的特征服从高斯分布,那么从贝叶斯的观点来看,即便特征数远超训练样本数,L2也要优于L1。

然而,需要注意的是,当相关特征数远大于训练样本数时,无论是L1还是L2,都无法取得很好的效果。

从上面的观点可以看出,L1似乎总是好于L2,那么L2还有什么存在的价值呢?然而在实际工程中,L1不总是像万金油一样,随处可用。对于上面文本分类的例子,结合我实际的工程经验谈谈L1的弊端。

在最开始做文本分类的时候,我也是依然毫不犹豫地选择了L1来做特征选择,以此训练出分类模型,但得到的分类模型效果却不尽如人意,训练误差和泛化误差都较高。后来经过分析得知,在进行模型训练时,没有对数据的特征作分析,而盲目地运用L1正则化,从而导致失败。在经过分析后发现,训练数据里的特征很多是共线性的,比方说,有几个特征的共线性很高,并且它们对于分类都很重要,这时L1的做法是随机选择其中一个特征,而扔掉其它的特征。试想,如果训练数据中有很多这样类似的特征,那么经过L1正则化后的模型将会失去很多有用的特征,进而导致模型误差较大。这个时候,我们不得不选择L2正则化了,但由于L2正则化在面对大量无关特征并且特征不是由高斯分布产生时,误差依然很大,因此我们需要在训练模型之前,先进行特征选择,然后再用L2正则化,L2正则化的特点是,在面对几个存在共线性的特征时,它会将权值平分给这些特征,从而使得这些有用的特征都得以留下,从而改进了文本分类的准确率。

也许读者认为,加入了特征工程的L2正则化稍显麻烦,确实是这样的。实践中也可以采取L1+L2结合的方式,即elastic net。这种方式同时兼顾特征选择(L1)和权重衰减(L2)。其公式如下

                                                        (6)                                                                                                                                                    

上式中,t为正则项与L(w)之间的trade-off系数,和之前的描述一致,p是elastic net里独有的参数,它是L1和L2之间的一个trade-off,如果p为0,那么上式退化为L2正则化,如果p为1,那么上式退化为L1正则化。所以当p取值为0到1时(不包含端点),上式兼顾了L1和L2的特点。又由于L1为1范式,L2为2范式,那么elastic net就介于1范式和2范式之间。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!