防止过拟合的方法

过拟合(overfitting)是指在模型参数拟合过程中的问题,由于训练数据包含抽样误差,训练时,复杂的模型将抽样误差也考虑在内,将抽样误差也进行了很好的拟合。具体表现就是最终模型在训练集上效果好,在测试集上效果差,模型泛化能力弱。

算法为了满足尽可能复杂的任务,其模型的拟合能力一般远远高于问题复杂度,也就是说,算法有拟合出正确规则的前提下,进一步拟合噪声的能力。

那么如何防止过拟合呢?

1. 更多的数据

如何获取更多数据,可以有以下几个方法:

  • 从数据源头获取更多数据:这个是容易想到的,但是,在很多情况下,大幅增加数据本身就不容易;另外,我们不清楚获取多少数据才算够;

  • 根据当前数据集估计数据分布参数,使用该分布产生更多数据:这个一般不用,因为估计分布参数的过程也会代入抽样误差。

  • 数据增强(Data Augmentation):通过一定规则扩充数据。如在物体分类问题里,物体在图像中的位置、姿态、尺度,整体图片明暗度等都不会影响分类结果。我们就可以通过图像平移、翻转、缩放、切割等手段将数据库成倍扩充;

2. 选择合适的模型

过拟合的两个原因:数据太少/模型太复杂

所以可以选择合适大小的模型来拟合问题。

限制模型能力:

  • 网络结构:减少网络的层数,限制神经元的个数。
  • 训练时间:早停    一般训练集和测试集上的准确率满足下图的关系,所以选择一个合适的位置停止训练,也可以达到一个好的效果。
  • 限制防止过拟合的方法
  • 限制权值(正则化)
     比如L1,L2正则化,限制权值大小来防止过拟合。
  • 增加噪声
可以分为三种,一个是对输入增加噪声,噪声会随着网络放大传到输出,可以达到与L2正则化相同的效果,另一个是对权值增加噪声(比如权重初始化为零均值高斯分布),还有在输出响应中增加噪声,如在前向传播过程中,让默写神经元的输出变为 binary 或 random,这样可能会影响训练,但是在测试数据集上的效果会更好。
  • 多种模型
训练多个模型,将多个模型的输出合并起来,
  • 1  Bagging

    简单理解,就是分段函数的概念:用不同的模型拟合不同部分的训练集。以随机森林(Rand Forests)为例,就是训练了一堆互不关联的决策树。但由于训练神经网络本身就需要耗费较多*,所以一般不单独使用神经网络做 Bagging。

  • 2 Boosting

    既然训练复杂神经网络比较慢,那我们就可以只使用简单的神经网络(层数、神经元数限制等)。通过训练一系列简单的神经网络,加权平均其输出。

  • 3 Dropout
    在训练时,每次随机(如 50% 概率)忽略隐层的某些节点;这样,我们相当于随机从 2^H 个模型中采样选择模型