深度学习模型过拟合问题解决办法

模型过拟合

深度学习模型过拟合问题解决办法_第1张图片
如上图所示拟合曲线
(1)图一的拟合较为简单,不能很好的反应出变化关系 ,欠拟合
(2)图二的拟合较好,可以很好的表达变化关系
(3)图三的拟合较为复杂,常用不能很好的预测以后的变化趋势),为过拟合情况

产生过拟合的原因:

  1. 观察值与真实值存在偏差
    训练样本的获取,本身就是一种抽样。抽样操作就会存在误差, 也就是你的训练样本 取值 X, X = x(真值) + u(随机误差),机器学习的 优化函数 多为 min Cost函数,自然就是尽可能的拟合 X,而不是真实的x,所以 就称为过拟合了,实际上是学习到了真实规律以外的 随机误差。举个例子说,你想做人脸识别,人脸里有背景吧,要是你这批人脸背景A都相似,学出来的模型,见到背景A,就会认为是人脸。这个背景A就是你样本引入的误差。
  2. 数据太少,导致无法描述问题的真实分布
      举个例子,投硬币问题 是一个 二项分布,但是如果 你碰巧投了10次,都是正面。那么你根据这个数据学习,是无法揭示这个规律的,根据统计学的大数定律(通俗地说,这个定理就是,在试验不变的条件下,重复试验多次,随机事件的频率近似于它的概率),当样本多了,这个真实规律是必然出现的。
      为什么说 数据量大了以后 就能防止过拟合?
    答:数据量大了之后,过拟合原因1,在求解的时候因为数据量大了, 求解min Cost函数时候, 模型为了求解到最小值过程中,需要兼顾真实数据拟合 和 随机误差拟合,所有样本的真实分布是相同的(都是人脸),而随机误差会一定程度上抵消(背景),过拟合原因2不再存在。
      (1)数据有噪声。
      我们可以理解地简单些:有噪音时,更复杂的模型会尽量去覆盖噪音点,即对数据过拟合。
      即噪音严重误导了我们的假设。还有一种情况,如果数据是由我们不知道的某个非常非常复杂的模型产生的,实际上有限的数据很难去“代表”这个复杂模型曲线。我们采用不恰当的假设去尽量拟合这些数据,效果一样会很差,因为部分数据对于我们不恰当的复杂假设就像是“噪音”,误导我们进行过拟合。
      (2)训练数据不足,有限的训练数据。
      (3)训练模型过度,导致模型非常复杂。

减少过拟合的方法:

  • 获取更多数据 :从数据源头获取更多数据;数据增强(Data Augmentation)
  • 使用合适的模型:减少网络的层数、神经元个数等均可以限制网络的拟合能力
  • dropout ,丢弃一些数据
  • 正则化,在训练的时候限制权值变大
  • 限制训练时间,early stop training
  • 增加噪声 Noise,例如高斯模糊
  • 数据清洗(data ckeaning/Pruning):将错误的label 纠正或者删除错误的数据
  • 结合多种模型: 用不同的模型拟合不同部分的训练集

数据增强:

1、Color Jittering:对颜色的数据增强:图像亮度、饱和度、对比度变化
2、PCA Jittering:首先按照RGB三个颜色通道计算均值和标准差,再在整个训练集上计算协方差矩阵,进行特征分解,得到特征向量和特征值,用来做PCA Jittering
3、Random Scale:尺度变换
4、Random Crop:采用随机图像差值方式,对图像进行裁剪、缩放;包括Scale Jittering方法(VGG及ResNet模型使用)或者尺度和长宽比增强变换;
5、Horizontal/Vertical Flip:水平/垂直翻转;
6、Shift:平移变换;
7、Rotation/Reflection:旋转/仿射变换;
8、Noise:高斯噪声、模糊处理;

正则化:

特征数量过多(对应上例中就是多项式项数过多,即θ参数数量过多);训练样本过少
都会导致过拟合的问题。因此,对应的,可以从两个方面下手来解决过拟合的问题:
1、减少特征数量(reduce number of features)
2、增加样本数量,或样本增强
但有时我们的样本数量有限,同时我们也不想减少特征数量(因为可能每个特征都会对结果一些贡献),用正则化方法。正则化就是在特征数量不变的情况下,减少某些θ参数的值,使其对预测结果(y,上例中就是Price)的贡献较小。
当训练量较少时,一些随机、错误因素也会占有较高的比重,从而导致错误的变化趋势预估。那么减少这些值也具有较大的意义,可以将这些随机、错误因素理解图中为高阶的元素(θ3θ3,θ4θ4)。
可使用l1/l2_regularizer优化权重w=(θ1,θ2,θ3,….,θn)
w值越小,或者w中非零的元素越少,越不会发生过拟合。

Early stop training:

在每一个Epoch结束时(一个Epoch集为对所有的训练数据的一轮遍历)计算validation data的accuracy,当accuracy不再提高时,就停止训练。在训练的过程中,记录到目前为止最好的validation accuracy,当连续10次Epoch(或者更多次)没达到最佳accuracy时,则可以认为accuracy不再提高了。此时便可以停止迭代了(Early Stopping)。这种策略也称为“No-improvement-in-n”,n即Epoch的次数,可以根据实际情况取,如10、20、30……Early stopping便是一种迭代次数截断的方法来防止过拟合的方法,即在模型对训练数据集迭代收敛之前停止迭代来防止过拟合。

Dropout:

正则是通过在代价函数后面加上正则项来防止模型过拟合的。而在神经网络中,有一种方法是通过修改神经网络本身结构来实现的,其名为Dropout。该方法是在对网络进行训练时用一种技巧(trick)。例如:在训练开始时,随机得删除一些(可以设定为一半,也可以为1/3,1/4等)隐藏层神经元,即认为这些神经元不存在,同时保持输入层与输出层神经元的个数不变。

你可能感兴趣的:(深度学习模型过拟合问题解决办法)