深度学习防止过拟合的原因及解决方案(overfitting)
如何知道模型是否过拟合?
训练集、开发集(dev set)和测试集(test set)
在实践中,检测模型过拟合是很困难的。很多时候,模型的问题只有在训练好的模型上线后才会被意识到。事实上,只有通过新数据的建议,您才能确保一切正常运行。然而,在训练过程中,尽量表现真实的情况。因此,更好的方法是将数据集分为三部分——训练集、开发集(也称为交叉验证集)和测试集。构建的模型仅通过训练集进行学习,验证集用于跟踪训练进度并根据验证集中的结果优化模型。同时,测试集用于评估训练过程后模型的性能。使用新鲜数据可以提供算法模拟的客观视图。 图 1. 分割数据集的建议方法 确保验证集和测试集来自相同的分布并准确反映未来预期收到的数据非常重要。只有这样,才能保证学习过程中做出的决策更接近好的解决方案。那么,我们如何创建手头的一部分数据呢?最常推荐的拆分方法之一是按照60/20/20的比例进行拆分,但在大数据时代,当数据集有数百万个条目时,这种固定比例的拆分已经不再合适。简而言之,一切都取决于所使用的数据集的大小,如果有数百万个可用条目,也许最好的划分方式是按照 98/1/1 的比例。注意:开发和测试集应该足够大,以便对构建模型的性能有很高的信心。根据数据大小拆分数据集的建议方法如图 1 所示。
偏差和方差
准备好数据集后,您应该使用工具来评估模型性能。然而,在得出结论之前,我们需要了解两个新概念——偏差和方差。为了让我们更好地理解这个复杂的问题,这里举一个简单的例子。假设数据集由位于二维空间中的两类点组成,如图 2 所示。 图 2. 数据集的可视化 由于这是一个简单的演示案例,因此这次没有测试集,仅使用训练集和验证集。接下来,我们准备了三个模型:第一个是简单的线性回归,另外两个是由几个密集连接层构建的神经网络。在图 3 中,我们可以看到使用该模型定义的分类边界。右上角的第一个模型非常简单,因此具有很高的偏差,即它无法找到特征和结果之间的所有重要联系,这是因为数据集中存在大量噪声,因此无法进行简单的线性回归处理。有效地。从图中可以看到,神经网络模型表现更好,但左下角的模型与数据拟合得非常紧密,这使得它在验证集中表现更差,这意味着它有很大的方差。 - 它适合噪声而不是预期输出。在最终模型中,通过使用正则化减少了这种不良影响。
图3.创建的分类边界:右上角-线性回归;左下角——神经组织;右下角——有组织的神经网络。上面的例子很简单,只有两个特征。当我们在多维空间中操作并且必须处理包含数十个特征的数据集时,我们应该做什么?此时,您应该比较使用训练集和交叉验证集计算出的误差值。当然,最好的情况是两组的错误率都很低。主要问题是如何定义低错误率——在某些情况下可以是 1%,而在其他情况下可以是 10% 或更高。训练神经网络时,它有助于创建用于比较模型性能的基线。通常,这取决于执行任务的人员的能力水平。然后尽量保证设计的算法在训练时有接近参考水平的误差。如果这个目标已经实现,但是在验证集中验证过程中错误率显着增加,这可能意味着模型过度拟合(高方差)。另一方面,如果模型在训练和交叉验证集上表现不佳,则它可能太弱并且具有很高的偏差。当然,这个问题会更复杂,涵盖的主题也更多。这里不予讨论。有兴趣的读者可以阅读NG的新书。
如何防止过度拟合
简介
当我们的神经网络具有高方差时,有一些方法可以提供帮助。例如,获取更多数据的一种非常常见的方法通常每次都会有效。还有正则化等操作,但这种方法需要一定的经验和技巧,因为对神经网络施加太多限制会损害其有效学习的能力。现在让我们尝试看看一些最流行的减少过度拟合的方法并讨论它们的工作原理。
L1 和 L2 正则化
如果您需要减少过度拟合,您应该尝试的第一个方法是正则化。这种方法包括为损失函数添加额外的公式,这使得模型过于复杂。简而言之,在权重矩阵中使用过高的值会限制灵活性,并且还会鼓励您创建基于多个特征的解决方案。该方法的两个流行版本是L1 - 最小绝对偏差(LAD)和L2 - 最小二乘误差(LS),相应的公式如下。在大多数情况下,L2 正则化是首选,因为它将不太重要的特征的权重减少到零。但在处理具有大量异常值的数据集时,它不是首选。 现在看看偏差和方差示例中使用的两个神经网络。正如前面提到的,使用正则化来消除过度拟合。权重矩阵在三维空间的可视化以及有正则化和无正则化的模型得到的结果对比如下图所示。此外,有些模型使用正则化进行模拟,改变λ的值来验证其对权重矩阵中包含的值的影响。矩阵的行索引和列索引对应于横轴的值,权重是纵坐标的值。
图 4. 没有和有正则化的模型权重矩阵的可视化 Lambda 因子及其影响
在前面提到的两个版本 L1 和 L2 中的正则化公式中,称为介绍。正则化水平)。选择值时,尝试找到模型的简单性和训练数据的拟合度之间的最佳点。增大 λ 的值也会增强正则化效果。从图4中可以看出,未经正则化的模型以及具有非常低的λ的模型获得的平面具有“杂乱”的系数值,并且具有许多具有显着值的峰值。应用具有更高超参数值的 L2 正则化后,平面图变得平坦。最后,您可以看到将 lambda 值设置为 0.1 或 1 会导致模型中的重量减轻。
dropout
一种非常流行的神经网络正则化方法是dropout。这个想法非常简单——每个神经网络单元(属于输出层)被赋予一个概率p,在计算中暂时忽略该概率p。超参数p称为dropoutrate,默认值通常设置为0.5。然后,在每次迭代中,根据指定的概率随机选择丢弃的神经元。因此,每次训练都使用较小的神经网络。下图显示了使用中断操作的神经网络的示例。从图中可以看出,第二层和第四层的神经元在每次迭代过程中都是随机关闭的。 图 5:Dropout 可视化 这种方法的有效性非常令人惊讶。毕竟,在现实世界中,如果管理者每天随机挑选员工并让他们回家,工厂的生产力就不会提高。我们从单个神经元的角度来看这个问题。在每次迭代中,任何输入值都可以被随机删除,神经元将尝试平衡这种风险而不选择任何特征。结果,权重矩阵值的分布变得更加均匀。
提前停止
下图展示了后续学习过程中测试集中获得的准确率值以及交叉验证的演变。可以看出,最后一个模型并不是最好的模型。最终的结果比150个纪元之后的情况还要糟糕。为什么不在模型开始过度拟合之前中断学习过程呢?这一观察启发了流行的减少过度拟合的方法——早期停止。 图 6. 神经网络学习过程中下一周期准确率值的变化。在实践中,每隔几次迭代就会检查模型,看看它在验证集上的表现如何,并且每次保存时都会与所有以前的迭代进行比较。所有型号都很好。另外,还设置了最大重复次数的限制,超过该值时学习停止。虽然提前停止可以提高模型的性能,但实际上,其在模型优化过程中的应用非常复杂,并且难以与其他常规技术结合。
结论
知道如何确认模型是否过拟合对于构建神经模型非常重要,并且知道如何防止过拟合的发生也是最基本的。由于篇幅限制,本文不进行详细阐述,而是对相关内容进行总结。特种作战技能还需要在实践中得到检验。
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。