ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

深度学习之——防止过拟合的方法

2019-07-31 18:00:56  阅读:780  来源: 互联网

标签:拟合 网络 残差 正则 L2 防止 深度 data


原文链接:https://blog.csdn.net/sunflower_sara/article/details/81159155

1、过拟合定义:

在training data上的error渐渐减小,但是在验证集上的error却反而渐渐增大——因为训练出来的网络过拟合了训练集,对训练集外的数据却不work。模型越复杂,越容易过拟合。

因此,原先以最小化损失(经验风险最小化)为目标:

现在以最小化损失和模型复杂度(结构风险最小化)为目标:

通过降低复杂模型的复杂度来防止过拟合的规则称为正则化。

 

2、数据集的划分与过拟合:


有一个概念需要先说明,在机器学习算法中,我们常常将原始数据集分为三部分: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以判断网络的好坏。

 

3、防止过拟合的方法

1.添加噪声

数据原本有噪声,添加噪声可能可以抵消原本的噪声的影响

2.early stopping

观察loss的曲线变化情况,训练测试验证集曲线平滑后即可停止训练,否则可能导致test的曲线上升,发生过拟合

3.数据集扩增(Data augmentation)

通过改变图像的亮度,旋转,切分等操作,增大数据集样本量

“有时候不是因为算法好赢了,而是因为拥有更多的数据才赢了。”

4.数据均衡

negative和positive的数据量要基本保持1:1的比例。

可以通过数据集过充的过程达到这个效果。

5.正则化(Regularization)

机器学习中几乎都可以看到损失函数后面会添加一个额外项,常用的额外项一般有两种:

中文称作L1正则化L2正则化,或者L1范数L2范数

下图是Python中Lasso回归的损失函数,式中加号后面一项α||w||1α||w||1即为L1正则化项。

lasso regression

下图是Python中Ridge回归的损失函数,式中加号后面一项α||w||22α||w||22即为L2正则化项。

ridge regression

L1正则化和L2正则化的说明如下:

  • L1正则化是指权值向量ww中各个元素的绝对值之和,通常表示为||w||1||w||1
  • L2正则化是指权值向量ww中各个元素的平方和然后再求平方根(可以看到Ridge回归的L2正则化项有平方符号),通常表示为||w||2||w||2
  • L1正则化可以产生稀疏权值矩阵,即产生一个稀疏模型,可以用于特征选择
  • L2正则化可以防止模型过拟合(overfitting);一定程度上,L1也可以防止过拟合

6.Dropout

L1、L2正则化是通过修改代价函数来实现的,而Dropout则是通过修改神经网络本身来实现的

dropout其实,就一个函数,让某些神经元以某一固定的概率失活

7.Batch normalization

1、加速收敛

2、控制过拟合,可以少用或不用Dropout和正则

3、降低网络对初始化权重敏感

初始化的时候,我们的参数一般都是0均值的,因此开始的拟合y=Wx+b,基本过原点附近

4、允许使用较大的学习率

一般BN层都加在非线性层前面

8.不同的激活函数

relu 

Leaky ReLU 

maxout

等激活函数

9.残差结构

残差可以很轻松的构建几百层,一千多层的网络而不用担心梯度消失过快的问题,原因就在于残差的捷径(shortcut)部分。

残差单元如下图所示: 
这里写图片描述 
相比较于以前网络的直来直去结构,残差中有很多这样的跨层连接结构,这样的结构在反向传播中具有很大的好处

 

网络越深精读不一定越好,因为深度不好把控,所以残差网络很好的解决了这个问题,即便网络深了,也不会影响精度:

引入残差后的映射对输出变化更敏感

在深度学习的探究过程中,发现对深度的扩展远远比广度的扩展效果要达到的好的太多。理论认为,同层的不同神经元学习不同的特征,越往后层的神经元学习特征的抽象程度越高。可以这样理解,如果要识别一个汽车如下图:

è¿éåå¾çæè¿°
上面的图我画的有些粗糙,但是意思应该表达清楚了,特征的组合识别一个物体,如果特征越抽象则识别物体更加简单,也就是说网络模型越深越好了?那么在搭建一个网络模型只要不停的加深网络不就能够得到更好的分类精度吗?

其实不然,随着网络层级的不断增加,模型精度不断得到提升,而当网络层级增加到一定的数目以后,训练精度和测试精度迅速下降,这说明当网络变得很深以后,深度网络就变得更加难以训练了。在不断加神经网络的深度时,模型准确率会先上升然后达到饱和,再持续增加深度时则会导致准确率下降。

è¿éåå¾çæè¿°
观察精准度的走势,随着网络层加深,精准度先是达到一个峰值,然后持续走低。误差是普遍存在的,无论是训练集还是验证集,随着误差的传播,越往后误差越大,所以越深的网络效果可能并不会很好。

假设现有一个比较浅的网络(Shallow Net)已达到了饱和的准确率,这时在它后面再加上几个恒等映射层(Identity mapping,也即y=x,输出等于输入),这样就增加了网络的深度,并且起码误差不会增加,也即更深的网络不应该带来训练集上误差的上升。通过“shortcut connections(捷径连接)”的方式,直接把输入x传到输出作为初始结果,输出结果为H(x)=F(x)+x,当F(x)=0时,那么H(x)=x,也就是上面所提到的恒等映射。于是,ResNet相当于将学习目标改变了,不再是学习一个完整的输出,而是目标值H(X)和x的差值,也就是所谓的残差F(x) = H(x)-x,因此,后面的训练目标就是要将残差结果逼近于0,使到随着网络加深,准确率不下降。

10.LSTM

LSTM全称是长短期记忆网络(long-short term memory networks),是不那么容易发生梯度消失的,主要原因在于LSTM内部复杂的“门”(gates),如下图,LSTM通过它内部的“门”可以接下来更新的时候“记住”前几次训练的”残留记忆“,因此,经常用于生成文本中。
 

 

 

标签:拟合,网络,残差,正则,L2,防止,深度,data
来源: https://blog.csdn.net/u013203733/article/details/97931950

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有