赞
踩
过拟合:模型在训练集上表现的非常好,但在测试集的数据下表现很差。
具体观察loss函数就是,train loss一直降低,而test loss先降低,而后随着epoach的增加,而不断增加。
这张图可以清楚地帮你了解你的模型是否过拟合。
1.训练数据太少(比如只有几百组)
2.模型的复杂度太高(比如隐藏层层数设置的过多,神经元的数量设置的过大),举个简单的例子,你的模型是高射炮,结果你的数据是蚊子,这不就很扯淡了吗。
解决过拟合问题有两个方向:
降低参数空间的维度或者降低每个维度上的有效规模(effective size)。
这也是最重要的一步,为了降低模型的复杂度,我们可以减少神经元的个数,减少隐藏层的层数(网络深度),尝试将复杂的网络结构一步步更换为较简单的网络结构。
或者尝试使用传统的机器学习模型(比如随机森林,高斯过程回归,梯度提升回归树之类的模型)。
深度学习适应的场景往往就是大数据集,对于小样本,过拟合现象的产生往往是不可避免的。通过增加数据只能缓解过拟合,并不能避免。
使用数据增强可以生成多幅相似图像。这可以帮助我们增加数据集规模从而减少过拟合。因为随着数据量的增加,模型无法过拟合所有样本,因此不得不进行泛化。
计算机视觉领域通常的做法有:翻转、平移、旋转、缩放、改变亮度、添加噪声等等
音频数据增强方法有:增加噪音、增加混响、时移、改变音调和时间拉伸。
在Loss Function(损失函数)中加入一个正则化项(其实就是penalty)。常见的有L1正则化与L2正则化。
L1正则化的目的是使权重的绝对值最小化,公式如下:
L2正则化的目的是使得权重的平方最小化,公式如下:
pytorch的官方库仅支持L2正则化,即通过设置weight_decay(权重衰减系数)的值,若过拟合现象比较严重,可以设置该值为100或者1000或者更大的值。
opt_adam = torch.optim.Adam(model.parameters(), lr=LR,weight_decay=100.0)
L1正则化与L2正则化的对比如下表所示:
L1正则化 | L2正则化 |
L1惩罚权重绝对值的总和 | L2惩罚权重平方和的总和 |
L1适合简单,可解释的模型 | L2比较适合学习复杂的数据模式 |
L1受数据极端值的影响比较小 | L2受极端值的影响比较大 |
如果数据过于复杂以至于无法准确地建模,那么L2是更好的选择,因为它能够学习数据中呈现的内在模式。
而当数据足够简单,可以精确建模的话,L1更合适。对于大多数CV问题,L2正则化几乎总是可以给出更好的结果。
然而L1不容易受到离群值的影响。所以正确的正则化选项取决于我们想要解决问题的场景。
Dropout 是一种避免神经网络过拟合的正则化技术。不同于像L1和L2这样的正则化技术通过修改代价函数来减少过拟合。它使用丢弃法修改神经网络本身,在训练的每一次迭代过程中随机地丢弃神经网络中的某些神经元。
当我们丢弃不同神经元集合的时候,就等同于训练不同的神经网络。不同的神经网络会以不同的方式发生过拟合,所以丢弃的净效应将会减少过拟合的发生。
如上图所示,丢弃法被用于在训练神经网络的过程中随机丢弃神经网络中的神经元。这种技术被证明可以减少很多问题的过拟合,这些问题包括图像分类、图像切割、词嵌入、语义匹配等问题。
当我们训练深度学习神经网络的时候,通常希望能获得最好的泛化性能(generalization performance,即可以很好地拟合数据)。
但是所有的标准深度学习神经网络结构如全连接多层感知机(MLP)都很容易过拟合:当网络在训练集上表现越来越好,错误率越来越低的时候,实际上在某一刻,它在测试集的表现已经开始变差。如下图所示:
早停法(early stopping)是一种被广泛使用的方法。在很多案例上都比正则化的方法要好。图1是我们经常看到论文中出现的图,也是使用早停法出现的一个结果。
其基本含义是在训练中计算模型在测试集上的表现,当模型在测试集的表现开始下降的时候,停止训练,这样就能避免继续训练导致过拟合的问题。其主要步骤如下:
然而,在现实中,模型在验证集上的误差不会像上图那样平滑,而是可能像下图一样:
也就是说,模型很有可能在验证集上的表现可能咱短暂的变差之后有可能继续变好。
但是,并不是所有的误差曲线都像上图一样,有可能在出现第一次最低点之后,后面再也没有比当前最低点更低的情况了。所以我们看到,早停法主要是训练时间和泛化错误之间的权衡。尽管如此,也有某些停止标准也可以帮助我们寻找更好的权衡。
停止标准的选择规则:
一般情况下,“较慢”的标准会相对而言在平均水平上表现略好,可以提高泛化能力。然而,这些标准需要较长的训练时间。其实,总体而言,这些标准在系统性的区别很小。主要选择规则包括:
其中包括把数据异常值去除掉。
把多个模型集成在一起,降低单个模型的过拟合风险。
就是将卷积神经网络的每层之间,加上将神经元的权重调成标准正态分布的正则化层,这样可以让每一层的训练都从相似的起点出发。
而对权重进行拉伸,等价于对特征进行拉伸,在输入层等价于数据增强。注意正则化层是不需要训练的。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。