过拟合定义:模型在训练集上的表现很好,但在测试集和新数据上的表现很差。
训练集上的表现 | 测试集上的表现 | 结论 |
不好 | 不好 | 欠拟合 |
好 | 不好 | 过拟合 |
好 | 好 | 适度拟合 |
原因
训练数据集太小,过拟合出现的原因:
- 模型复杂度过高,参数过多
- 数量数据比较小
- 训练集和测试集分布不一致
- 样本里面的噪声数据干扰过大,导致模型过分记住了噪声特征,反而忽略了真实的输入输出特征
- 训练集和测试集特征分布不一样(如果训练集和测试集使用了不同类型的数据集会出现这种情况)
解决方案
1、降低模型复杂度
处理过拟合的第一步就是降低模型复杂度。为了降低复杂度,我们可以简单地移除层或者减少神经元的数量使得网络规模变小。与此同时,计算神经网络中不同层的输入和输出维度也十分重要。虽然移除层的数量或神经网络的规模并无通用的规定,但如果你的神经网络发生了过拟合,就尝试缩小它的规模。
2、增加更多数据
使用大数据集训练模型
3、数据增强
使用数据增强可以生成多幅相似图像。这可以帮助我们增加数据集规模从而减少过拟合。因为随着数据量的增加,模型无法过拟合所有样本,因此不得不进行泛化。计算机视觉领域通常的做法有:翻转、平移、旋转、缩放、改变亮度、添加噪声等等
4、正则化
在损失函数后面加一个正则化项,常见的有L1正则化和L2正则化
L1惩罚项的目的是使权重绝对值最小化。公式如下:
$$L(x, y) equiv sum_{i=1}^{n}left(y_{i}-h_{ heta}left(x_{i} ight) ight)^{2}+lambda sum_{i=1}^{n}left| heta_{i} ight|$$
L2惩罚项的目的是使权重的平方最小化。公式如下:
$$L(x, y) equiv sum_{i=1}^{n}left(y_{i}-h_{ heta}left(x_{i} ight) ight)^{2}+lambda sum_{i=1}^{n} heta_{i}^{2}$$
以下表格对两种正则化方法进行了对比:
L1正则化 | L2正则化 |
1. L1惩罚权重绝对值的总和 | 1. L2惩罚权重平方和的总和 |
2. L1生成简单、可解释的模型 | 2. L2正则化能够学习复杂数据模式 |
3. L1受极端值影响较小 | 3. L2受极端值影响较大 |
如果数据过于复杂以至于无法准确地建模,那么L2是更好的选择,因为它能够学习数据中呈现的内在模式。而当数据足够简单,可以精确建模的话,L1更合适。对于我遇到的大多数计算机视觉问题,L2正则化几乎总是可以给出更好的结果。然而L1不容易受到离群值的影响。所以正确的正则化选项取决于我们想要解决的问题。
5、dropout
dropout 是一种避免神经网络过拟合的正则化技术。像L1和L2这样的正则化技术通过修改代价函数来减少过拟合。而丢弃法修改神经网络本身。它在训练的每一次迭代过程中随机地丢弃神经网络中的神经元。当我们丢弃不同神经元集合的时候,就等同于训练不同的神经网络。不同的神经网络会以不同的方式发生过拟合,所以丢弃的净效应将会减少过拟合的发生。
如上图所示,丢弃法被用于在训练神经网络的过程中随机丢弃神经网络中的神经元。这种技术被证明可以减少很多问题的过拟合,这些问题包括图像分类、图像切割、词嵌入、语义匹配等问题。
6、早停
如上图所示,在几次迭代后,即使训练误差仍然在减少,但测验误差已经开始增加了。
7、重新清洗数据
把明显异常的数据剔除
8、使用集成学习方法
把多个模型集成在一起,降低单个模型的过拟合风险