深度学习过拟合问题

过拟合问题

  • 欠拟合:根本原因是特征维度过少,模型过于简单,导致拟合的函数无法满足训练集,误差较大;
    解决方法:增加特征维度,增加训练数据;

  • 过拟合:根本原因是特征维度过多,模型假设过于复杂,参数过多,训练数据过少,噪声过多,导致拟合的函数完美的预测训练集,但对新数据的测试集预测结果差。 过度的拟合了训练数据,而没有考虑到泛化能力。
    解决方法:(1)减少特征维度;(2)正则化,降低参数值。

减少过拟合总结:

过拟合主要是有两个原因造成的:数据太少+模型太复杂

(1)获取更多数据 :从数据源头获取更多数据;

(2)数据增强(Data Augmentation):比如将原始图像翻转平移拉伸,从而是模型的训练数据集增大。数据增强已经是深度学习的必需步骤了,其对于模型的泛化能力增加普遍有效,但是不必做的太过,将原始数据量通过数据增加增加到2倍可以,但增加十倍百倍就只是增加了训练所需的时间,不会继续增加模型的泛化能力了。

(3)使用合适的模型:减少网络的层数、神经元个数等均可以限制网络的拟合能力;

(4)dropout ;深度学习中最常用的正则化技术是dropout,随机的丢掉一些神经元。

(5)L1和L2正则化,在训练的时候限制权值变大;都是针对模型中参数过大的问题引入惩罚项,依据是奥克姆剃刀原理。在深度学习中,L1会趋向于产生少量的特征,而其他的特征都是0增加网络稀疏性;而L2会选择更多的特征,这些特征都会接近于0,防止过拟合。神经网络需要每一层的神经元尽可能的提取出有意义的特征,而这些特征不能是无源之水,因此L2正则用的多一些。

(6)限制训练时间;通过评估测试。就是让模型在训练的差不多的时候就停下来,比如继续训练带来提升不大或者连续几轮训练都不带来提升的时候,这样可以避免只是改进了训练集的指标但降低了测试集的指标。

(7)增加噪声 Noise: 输入时+权重上(高斯初始化) ;

(8)数据清洗(data ckeaning/Pruning):将错误的label 纠正或者删除错误的数据。

(9)结合多种模型: Bagging用不同的模型拟合不同部分的训练集;Boosting只使用简单的神经网络;

(10)批量正则化(BN):就是将卷积神经网络的每层之间加上将神经元的权重调成标准正态分布的正则化层,这样可以让每一层的训练都从相似的起点出发,而对权重进行拉伸,等价于对特征进行拉伸,在输入层等价于数据增强。注意正则化层是不需要训练。

产生过拟合根本原因

观察值与真实值存在偏差(数据有噪声)

训练样本的获取,本身就是一种抽样。抽样操作就会存在误差,也就是你的训练样本取值X, X = x(真值) + u(随机误差),机器学习的优化函数多为 min Cost函数,自然就是尽可能的拟合X,而不是真实的x,所以就称为过拟合了,实际上是学习到了真实规律以外的随机误差。举个例子说,你想做人脸识别,人脸里有背景吧,要是你这批人脸背景A都相似,学出来的模型,见到背景A,就会认为是人脸。这个背景A就是你样本引入的误差。

数据太少,导致无法描述问题的真实分布

举个例子,投硬币问题是一个 二项分布,但是如果你碰巧投了10次,都是正面。那么你根据这个数据学习,是无法揭示这个规律的,根据统计学的大数定律(通俗地说,这个定理就是,在试验不变的条件下,重复试验多次,随机事件的频率近似于它的概率),当样本多了,这个真实规律是必然出现的。

训练模型过度,导致模型非常复杂

增加数据防止过拟合原理

为什么说数据量大了以后就能防止过拟合,数据量大了,

  • 问题2,不再存在,
  • 问题1,在求解的时候因为数据量大了, 求解min Cost函数时候, 模型为了求解到最小值过程中,需要兼顾真实数据拟合和随机误差拟合,所有样本的真实分布是相同的(都是人脸),而随机误差会一定程度上抵消(背景),
  • 问题3,数据量增大了。复杂点的模型更可以提取数据的共同与深度特征。
------ 本文结束------
坚持原创技术分享,您的支持将鼓励我继续创作!

欢迎关注我的其它发布渠道