深度学习中的过拟合

https://www.toutiao.com/a6678456488438006275/

深度学习中的过拟合

这篇⽂章主要是介绍⼀下神经⽹络中的过拟合问题,并总结⼀下⽬前都有哪些有效的⽅法来缓解过拟合问题。

过拟合表现

在深度学习任务中,过拟合最直观的表现就是,模型在测试集的表现远远差于训练集,也就是模型的泛化性能太差。

直观分析为什么在测试集上的表现差于训练集?最简单的回答,因为模型就是在训练集上训练出来的,它对训练集接触

的⽐较多,好!那为什么测试集和训练集是同⼀类数据(训练集和测试集同⼀分布),表现就这么差了呢?难

道模型从训练集学错东西了?没有去学习数据内在真实的规律(分布)?

我们都知道设计模型是为了让模型⾃⼰归纳出数据的内在规律,那么我们现在有理由怀疑⽹络⾃⼰"学坏了",没有按照我们的期望去学习。

那更正式的解释呢?我们所有的训练集都是对真实样本的抽样,不管是图⽚数据,还是语⾳等,获得的样本是 X =x(真实值)+u(随机误差) ,⽽我们的神经⽹络优化的损失函数是模型的输出与 X 之间的误差,所以模型拟合的是X的分布,⽽我们期望的是⽹络尽可能的找到 x(真实值) 的分布,所以当⽹络错误的过分拟合 X 时(即也强⾏拟合了u(随机误差)),当使⽤测试集时,就算对于同⼀类图⽚,当随机误差不⼀样时,模型也认为它们是不同类的。

其次,我们还可以想到,也有可能是训练数据太少了,不具有代表性,为什么呢?周所周知,机器学习或者深度学习任务中,⼀个前提是训练集在待解决问题上必须有⾜够的代表性,当数据太少时,

⽹络往往只学习到了⼀部分,⼤数定理也告诉我们,当样本⾜够多时,我们可以近似认为样本分布就是真实分布。

神经⽹络中导致过拟合的操作

训练集⼤⼩相对于⽹络规模偏⼩。

怎么定义这个⼩?⽬前我是不清楚有什么公式或者量化的⽅式在训练前知道是否会过拟合,通常我的做法就是设计⽹

络结构时根据经验,先从⼩⽹络开始,毕竟⼩⽹络训练快,⼀步⼀步增加⽹络规模,直到发现训练集误差⽐上个模型⼩,但是测试集误差却变⼤,这⾥就可以初步知道对于该问题,神经⽹络的⼤致规模。

缓解过拟合的⽅法

获取更多、质量更⾼的数据。

直接采集新的数据,对于图⽚数据,上⽹爬,⾃⼰去拍等。

数据增强(要根据实际问题选取其中的⼀部分操作,不能⽆脑⽤):标准化、随机旋转、随机裁剪、随机亮度、随机噪声、随机平移,随机缩放,mixup等。⽣成式数据:利⽤ GAN来根据已有的数据⽣成新的数据,没⽤过,听说效果不太好。

减⼩模型的规模,上⾯也说了,模型规模太⼤,导致模型完美地拟合了训练集,包括噪声。

正则化L1、L2范数,对权重施加惩罚项,⼀般使⽤L2范数,求导容易,⽅便优化dropout

BN

early stopping

集成学习⽅法

bagging:每次有放回的从训练集抽取⼀个⼦集训练模型,经过N次抽取,会训练出N个模型,测试时分别使⽤N个模型,最后再综合决策出结果。

boosting:同样也是训练N个分类器,不过是根据样本的权重,依次递进的训练,它训练出的分类器成为弱分类器,最后将弱分类器按照各⾃的"性能得分"组合成⼀个强分类器。

猜你喜欢

转载自blog.csdn.net/weixin_42137700/article/details/89224928
今日推荐