【深度学习】防止过拟合

【深度学习】防止过拟合

2023年7月17日发(作者:)

【深度学习】防⽌过拟合⼀、什么是过拟合过拟合(overfitting)指在模型参数拟合过程中的问题,由于训练数据包含抽样误差,训练时,复杂的模型将抽样误差也考虑在内,将抽样误差也进⾏了很好的拟合。具体表现就是最终模型在训练集上效果好;在测试集上效果差。模型泛化能⼒弱。⼆、为什么会过拟合发⽣过拟合的主要原因可以有以下三点:(1)噪声数据占⽐过⼤,样本集噪⾳数据占⽐⼤导致模型过分记住噪⾳特征,反⽽对真实输⼊输出关系描绘很差。(2)建模样本抽取错误,包括(但不限于)样本集太少,抽样⽅法错误,抽样时没有⾜够正确考虑所有样本特点,等等导致即训练数据⽆法对整个数据的分布进⾏合理估计的时候。(3)训练模型过度导致模型⾮常复杂,这与第⼀点原因结合起来其实⾮常好理解,当我们在训练数据训练的时候,如果训练过度,导致完全拟合了训练数据的话,得到的模型不⼀定是可靠的。⽐如说,在有噪声的训练数据中,我们要是训练过度,会让模型学习到噪声的特征,⽆疑是会造成在没有噪声的真实测试集上准确率下降!三、怎么解决过拟合(1)获取更多数据在上李飞飞课程的时候⽼师有提过,“有时候往往拥有更多的数据胜过⼀个好的模型”。因为我们在使⽤训练数据训练模型,通过这个模型对将来的数据进⾏拟合,⽽在这之间⼜⼀个假设便是,训练数据与将来的数据是独⽴同分布的。即使⽤当前的训练数据来对将来的数据进⾏估计与模拟,⽽更多的数据往往估计与模拟地更准确。因此,更多的数据有时候更优秀。但是往往条件有限,如⼈⼒物⼒财⼒的不⾜,⽽不能收集到更多的数据,如在进⾏分类的任务中,需要对数据进⾏打标,并且很多情况下都是⼈⼯得进⾏打标,因此⼀旦需要打标的数据量过多,就会导致效率低下以及可能出错的情况。所以,往往在这时候,需要采取⼀些计算的⽅式与策略在已有的数据集上进⾏⼿脚,以得到更多的数据。

  通俗得讲,数据机扩增即需要得到更多的符合要求的数据,即和已有的数据是独⽴同分布的,或者近似独⽴同分布的。⼀般有以下⽅法:从数据源头获取更多数据:这个是容易想到的,例如物体分类,我就再多拍⼏张照⽚好了;但是,在很多情况下,⼤幅增加数据本⾝就不容易;另外,我们不清楚获取多少数据才算够;数据增强(Data Augmentation):通过⼀定规则扩充数据。如在物体分类问题⾥,物体在图像中的位置、姿态、尺度,整体图⽚明暗度等都不会影响分类结果。我们就可以通过图像平移、翻转、缩放、切割等⼿段将数据库成倍扩充;根据当前数据集估计数据分布参数,使⽤该分布产⽣更多数据:这个⼀般不⽤,因为估计分布参数的过程也会代⼊抽样误差。(2)Early stopping对模型进⾏训练的过程即是对模型的参数进⾏学习更新的过程,这个参数学习的过程往往会⽤到⼀些迭代⽅法,如梯度下降(Gradientdescent)学习算法。Early stopping便是⼀种迭代次数截断的⽅法来防⽌过拟合的⽅法,即在模型对训练数据集迭代收敛之前停⽌迭代来防⽌过拟合。

  Early stopping⽅法的具体做法是,在每⼀个Epoch结束时(⼀个Epoch集为对所有的训练数据的⼀轮遍历)计算validation data的accuracy,当accuracy不再提⾼时,就停⽌训练。这种做法很符合直观感受,因为accurary都不再提⾼了,在继续训练也是⽆益的,只会提⾼训练的时间。那么该做法的⼀个重点便是怎样才认为validation accurary不再提⾼了呢?并不是说validation accuracy⼀降下来便认为不再提⾼了,因为可能经过这个Epoch后,accuracy降低了,但是随后的Epoch⼜让accuracy⼜上去了,所以不能根据⼀两次的连续降低就判断不再提⾼。⼀般的做法是,在训练的过程中,记录到⽬前为⽌最好的validation accuracy,当连续10次Epoch(或者更多次)没达到最佳accuracy时,则可以认为accuracy不再提⾼了。此时便可以停⽌迭代了(Early Stopping)。这种策略也称为“No-improvement-in-n”,n即Epoch的次数,可以根据实际情况取,如10、20、30……(3)正则化⽅法  正则化⽅法是指在进⾏⽬标函数或代价函数优化时,在⽬标函数或代价函数后⾯加上⼀个正则项,⼀般有L1正则与L2正则等。L1正则

  L1正则是基于L1范数,即在⽬标函数后⾯加上参数的L1范数和项,即参数绝对值和与参数的积项,即:

其中C0C0代表原始的代价函数,nn是样本的个数,λλ就是正则项系数,权衡正则项与C0C0项的⽐重。后⾯那⼀项即为L1正则项。

  在计算梯度时,ww的梯度变为:其中,sgnsgn是符号函数,那么便使⽤下式对参数进⾏更新:

对于有些模型,如线性回归中(L1正则线性回归即为Lasso回归),常数项bb的更新⽅程不包括正则项,即:

其中,梯度下降算法中,α<0,β<0α<0,β<0,⽽在梯度上升算法中则相反。

  从上式可以看出,当ww为正时,更新后ww会变⼩;当ww为负时,更新后ww会变⼤;因此L1正则项是为了使得那些原先处于零(即|w|≈0|w|≈0)附近的参数ww往零移动,使得部分参数为零,从⽽降低模型的复杂度(模型的复杂度由参数决定),从⽽防⽌过拟合,提⾼模型的泛化能⼒。

  其中,L1正则中有个问题,便是L1范数在0处不可导,即|w||w|在0处不可导,因此在ww为0时,使⽤原来的未经正则化的更新⽅程来对ww进⾏更新,即令sgn(0)=0sgn(0)=0,这样即:

L2正则

  L2正则是基于L2范数,即在⽬标函数后⾯加上参数的L2范数和项,即参数的平⽅和与参数的积项,即:

其中C0C0代表原始的代价函数,nn是样本的个数,与L1正则化项前⾯的参数不同的是,L2项的参数乘了1212,是为了便于计算以及公式的美感性,因为平⽅项求导有个2,λλ就是正则项系数,权衡正则项与C0C0项的⽐重。后⾯那⼀项即为L2正则项。

  L2正则化中则使⽤下式对模型参数进⾏更新:

对于有些模型,如线性回归中(L2正则线性回归即为Ridge回归,岭回归),常数项bb的更新⽅程不包括正则项,即:

其中,梯度下降算法中,α<0,β<0α<0,β<0,⽽在梯度上升算法中则相反。

  从上式可以看出,L2正则项起到使得参数ww变⼩加剧的效果,但是为什么可以防⽌过拟合呢?⼀个通俗的理解便是:更⼩的参数值ww意味着模型的复杂度更低,对训练数据的拟合刚刚好(奥卡姆剃⼑),不会过分拟合训练数据,从⽽使得不会过拟合,以提⾼模型的泛化能⼒。

  在这⾥需要提到的是,在对模型参数进⾏更新学习的时候,有两种更新⽅式,mini-batch (部分增量更新)与 full-batch(全增量更新),即在每⼀次更新学习的过程中(⼀次迭代,即⼀次epoch),在mini-batch中进⾏分批处理,先使⽤⼀部分样本进⾏更新,然后再使⽤⼀部分样本进⾏更新。直到所有样本都使⽤了,这次epoch的损失函数值则为所有mini batch的平均损失值。设每次minibatch中样本个数为mm,那么参数的更新⽅程中的正则项要改成:

⽽full-batch即每⼀次epoch中,使⽤全部的训练样本进⾏更新,那么每次的损失函数值即为全部样本的误差之和。更新⽅程不变。总结

  正则项是为了降低模型的复杂度,从⽽避免模型区过分拟合训练数据,包括噪声与异常点(outliers)。从另⼀个⾓度上来讲,正则化即是假设模型参数服从先验概率,即为模型参数添加先验,只是不同的正则化⽅式的先验分布是不⼀样的。这样就规定了参数的分布,使得模型的复杂度降低(试想⼀下,限定条件多了,是不是模型的复杂度降低了呢),这样模型对于噪声与异常点的抗⼲扰性的能⼒增强,从⽽提⾼模型的泛化能⼒。还有个解释便是,从贝叶斯学派来看:加了先验,在数据少的时候,先验知识可以防⽌过拟合;从频率学派来看:正则项限定了参数的取值,从⽽提⾼了模型的稳定性,⽽稳定性强的模型不会过拟合,即控制模型空间。

  另外⼀个⾓度,过拟合从直观上理解便是,在对训练数据进⾏拟合时,需要照顾到每个点,从⽽使得拟合函数波动性⾮常⼤,即⽅差⼤。在某些⼩区间⾥,函数值的变化性很剧烈,意味着函数在某些⼩区间⾥的导数值的绝对值⾮常⼤,由于⾃变量的值在给定的训练数据集中的⼀定的,因此只有系数⾜够⼤,才能保证导数的绝对值⾜够⼤。如下图(引⽤知乎):

  另外⼀个解释,规则化项的引⼊,在训练(最⼩化cost)的过程中,当某⼀维的特征所对应的权重过⼤时,⽽此时模型的预测和真实数据之间距离很⼩,通过规则化项就可以使整体的cost取较⼤的值,从⽽,在训练的过程中避免了去选择那些某⼀维(或⼏维)特征的权重过⼤的情况,即过分依赖某⼀维(或⼏维)的特征(引⽤知乎)。

  L2与L1的区别在于,L1正则是拉普拉斯先验,⽽L2正则则是⾼斯先验。它们都是服从均值为0,协⽅差为1λ1λ。当λ=0λ=0时,即没有先验)没有正则项,则相当于先验分布具有⽆穷⼤的协⽅差,那么这个先验约束则会⾮常弱,模型为了拟合所有的训练集数据, 参数ww可以变得任意⼤从⽽使得模型不稳定,即⽅差⼤⽽偏差⼩。λλ越⼤,标明先验分布协⽅差越⼩,偏差越⼤,模型越稳定。即,加⼊正则项是在偏差bias与⽅差variance之间做平衡tradeoff(来⾃知乎)。下图即为L2与L1正则的区别:

上图中的模型是线性回归,有两个特征,要优化的参数分别是w1和w2,左图的正则化是L2,右图是L1。蓝⾊线就是优化过程中遇到的等⾼线,⼀圈代表⼀个⽬标函数值,圆⼼就是样本观测值(假设⼀个样本),半径就是误差值,受限条件就是红⾊边界(就是正则化那部分),⼆者相交处,才是最优参数。可见右边的最优参数只可能在坐标轴上,所以就会出现0权重参数,使得模型稀疏。

  其实拉普拉斯分布与⾼斯分布是数学家从实验中误差服从什么分布研究中得来的。⼀般直观上的认识是服从应该服从均值为0的对称分布,并且误差⼤的频率低,误差⼩的频率⾼,因此拉普拉斯使⽤拉普拉斯分布对误差的分布进⾏拟合,如下图:

⽽拉普拉斯在最⾼点,即⾃变量为0处不可导,因为不便于计算,于是⾼斯在这基础上使⽤⾼斯分布对其进⾏拟合,如下图:

具体参见:(4)Dropout  正则是通过在代价函数后⾯加上正则项来防⽌模型过拟合的。⽽在神经⽹络中,有⼀种⽅法是通过修改神经⽹络本⾝结构来实现的,其名为Dropout。该⽅法是在对⽹络进⾏训练时⽤⼀种技巧(trick),对于如下所⽰的三层⼈⼯神经⽹络:

对于上图所⽰的⽹络,在训练开始时,随机得删除⼀些(可以设定为⼀半,也可以为1/3,1/4等)隐藏层神经元,即认为这些神经元不存在,同时保持输⼊层与输出层神经元的个数不变,这样便得到如下的ANN:

然后按照BP学习算法对ANN中的参数进⾏学习更新(虚线连接的单元不更新,因为认为这些神经元被临时删除了)。这样⼀次迭代更新便完成了。下⼀次迭代中,同样随机删除⼀些神经元,与上次不⼀样,做随机选择。这样⼀直进⾏瑕疵,直⾄训练结束。

Dropout⽅法是通过修改ANN中隐藏层的神经元个数来防⽌ANN的过拟合。具体可参见。(5)结合多种模型模型的bias和Variance会影响过拟合、⽋拟合,即bias越⼤,模型越⽋拟合、Variance越⼤,模型越过拟合。这⾥多说⼀点,Variance和bias是trade off, 我为了让模型处处更准(⼩的bias),往往会导致模型过拟合(⼤的Variance,即每次判定不稳定)

bagging. (bootstrap aggregation), 采⽤多次对样本的采样,并⾏进⾏多个模型的训练,最终对分类结果进⾏投票获得最终结果。这中⽅法可以减⼩模型的Variance。因为bagging是多个强分类器的组合,每个强分类器的Variance⾼。 数学上,由于bagging的模型不是完全独⽴的,因此var(avg(x))/n < bagging < var(avg(x)), 所以可以起到降低Variance的作⽤。boosting。串⾏地进⾏采样的模型训练,即⽐如每次取上个模型的错分样本。它是多个弱分类器的组合,每个弱分类器的bias⾼,组成强分类器后,bias就变低了。由于boosting 是迭代地进⾏损失最⼩化,越往后,模型的bias越⼩。(6)选择合适的模型这主要是解决数据量与模型参数之间的⽭盾,即固定数据量只能⽀撑对应的参数量的模型的拟合(通俗的说,⼏⼗个⼏百个数据就不要使⽤深度⽹络了)。该⽅法主要可以从四个⽅⾯⼊⼿:1.简化⽹络结构,如层数,单层神经元个数2.增加噪声:a、在输⼊中增加噪声噪声会随着⽹络传播,按照权值的平⽅放⼤,并传播到输出层,对误差 Cost 产⽣影响。推导直接看 Hinton 的 PPT 吧: 在输⼊中加⾼斯噪声,会在输出中⽣成 的⼲扰项。训练时,减⼩误差,同时也会对噪声产⽣的⼲扰项进⾏惩罚,达到减⼩权值的平⽅的⽬的,达到与 L2 regularization 类似的效果(对⽐公式)。b、在权值上加噪声在初始化⽹络的时候,⽤0均值的⾼斯分布作为初始化。Alex Graves 的⼿写识别 RNN 就是⽤了这个⽅法:"A novel connectionistsystem for unconstrained handwriting recognition."

IEEE transactions on pattern analysis and machine intelligence 31.5(2009): 855-868.c、对⽹络的响应加噪声如在前向传播过程中,让默写神经元的输出变为 binary 或 random。显然,这种有点乱来的做法会打乱⽹络的训练过程,让训练更慢,但据 Hinton 说,在测试集上效果会有显著提升 (But it does significantly better on the test set!)。

发布者:admin,转转请注明出处:http://www.yc00.com/news/1689561029a266304.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信