深度学习训练和测试误差之间的差异:偏差-方差权衡和模型选择

数据挖掘 机器学习 神经网络 过拟合 卷积神经网络
2021-09-28 17:40:02

我正在开发一个卷积神经网络,并拥有一个包含 13,000 个数据点的数据集,这些数据点分为 80%/10%/10% 训练/验证/测试。在调整模型架构时,在使用不同的随机种子对多次运行的结果进行平均后,我发现了以下内容:

3 conv layers: training MAE = 0.255, val MAE = 0.340
4 conv layers: training MAE = 0.232, val MAE = 0.337
5 conv layers: training MAE = 0.172, val MAE = 0.328.

通常,我会选择具有最佳验证 MAE 的模型(测试 MAE 的趋势是相同的,因为它的价值)。然而,具有最佳验证 MAE 的架构在训练和验证 MAE 之间的差异也最大。为什么我通常认为过拟合会产生更好的结果?您是否也会在这里使用 5 个卷积层,还是担心训练和验证/测试性能存在很大差异?

在我想象的相关注释中,我熟悉PNAS中的文章“协调现代机器学习实践和经典的偏差-方差权衡”下面这张发人深省的图片。这是在实践中实际观察到的——您可以有最小的训练错误,但具有良好的样本外、可概括的性能,如子面板 B 所示?

在此处输入图像描述

3个回答

您的问题是,在看起来更过度拟合(train 和 eval set 之间的差异较大)但它也有更高分数的模型之间,或者在 train 和 eval set 之间差异较小但同时结果最差的模型之间,哪种模型更好。一切都假设您已经进行了正确的训练测试拆分并且没有数据泄漏并且在每次拆分中分布保持相同(这很重要检查)。

前段时间讨论过这个问题。答案似乎有点主观,因为已经进行了定量分析

通常有以下取舍:

  • 复杂性:Occams razor 和复杂性与可解释性。在您的情况下,两个模型几乎具有相同的复杂性(它不是针对 DL 的线性回归,只是多了几层)并且可解释性保持不变,

  • 泛化您希望您的模型在生产中以最佳方式运行,训练中的过度拟合模型似乎更有可能由于生产中分布的变化而失败。

你只有 3 个数据点,所以很难说哪个是最好的。我的建议是:

  • 添加更多层(6,7,8)只是为了查看您的测试结果何时开始下降(您仍然可以过度拟合更多),然后可视化数据并在为您的模型选择最佳架构之前定义两个概念

  • 用更多的参数进行调查(多加一层似乎是一个高差异的超参数),比如学习率、层大小、激活函数等等......

  • 考虑使用一种著名的架构来解决您的问题,它们是在每个框架中开发的,并经过很多人的测试,它们在那里是因为它们似乎是他们任务中最好的,请在之前给它们。深度学习超参数调优已经浪费了很多电力。

在应用机器学习中,通常具有最低泛化误差的模型(通过验证数据的分数来衡量)也与训练数据的分数有最大的差异。

过度拟合本身并没有错,它取决于项目的目标。应用机器学习的典型目标是对未知数据的高预测能力,即低泛化误差。如果模型“记住”更多的训练数据,如果这有助于模型提高泛化能力,那也没关系。

鉴于随着层数增加泛化误差减小的趋势,如果层数继续增加,模型的性能可能会提高。

我看了看报纸,似乎很有趣。看看从模式识别到数据插值的这种相变是否真的像作者声称的那样成立,这将是真正令人着迷的,尽管我有点怀疑。

但是,我认为您离插值数据还很远。你的模型还不是很复杂。因此,对于您的情况,我们应该能够应用模型选择的经典原则。

如果您查看您提供的图像,图 A 有一个箭头,上面写着“sweet spot”

您会看到在此之前泛化误差和训练误差之间的差距是如何增加的,但泛化误差仍然会减小。你在那个地方附近。

可能你还在那个位置之前。所以我建议仍然增加模型的复杂性并添加层。

一旦发现真正的过拟合,最好添加一些 dropout 和 pooling 层。通常神经网络越深入越强大,因为这使它们能够学习更丰富的数据表示。池化有助于降低模型的复杂性,因此允许您将复杂性花费在模型的深度上。Dropout 有助于泛化,因为它具有正则化特性,因为它迫使网络依赖多个神经元连接进行决策。这使得它不太容易受到输入数据的单一模式的刺激。您可以将 dropout 解释为融合为一个的多个神经网络,因此它的行为类似于神经网络的集合。

就我个人而言,我依赖于模型选择的经典理论,它对我很有帮助。由于您的数据集不是那么大,您可能应该使用五折交叉验证之类的方法来确定您的结果。

希望我能提供一些见解。