首页 > 解决方案 > 如果学习曲线显示验证误差低于训练误差,预测是否可信?

问题描述

我正在使用神经网络 (NN) 作为我的地球物理学论文的一部分,并且正在使用 TensorFlow 和 Keras 来训练我的网络。

我目前的任务是使用神经网络来近似热力学模型,即非线性回归问题。它采用 13 个输入参数并输出 450 个参数的速度剖面(速度与深度)。我的数据包含 100,000 个合成示例(即不存在噪声),分为训练(80k)、验证(10k)和测试(10k)。

我已经针对许多不同的架构测试了我的网络:更宽(5-800 个神经元)和更深(最多 10 层)、不同的学习率和批量大小,甚至针对多个 epoch(5000)。基本上所有标准的交易技巧......

但是,我对学习曲线显示的验证误差低于训练误差(对于我的所有测试)这一事实感到困惑,而且我从来没有能够过度拟合训练数据。见下图:

在此处输入图像描述

测试集上的误差相对较低,因此网络似乎能够做出不错的预测。似乎一个包含 50 个神经元的隐藏层就足够了。但是,由于学习曲线的行为,我不确定我是否可以相信这些结果。我认为这可能是由于验证集包含“容易”预测的示例,但我不知道应该如何更改它。也许更大的验证集?

总结一下:如果验证误差低于或非常接近训练误差,是否一定是一个坏信号?如果用所述网络做出的预测是不错的呢?

对于我的问题和数据,是否有可能根本不可能过度拟合?

标签: tensorflowmachine-learningkerasneural-network

解决方案


除了尝试更高的 k 倍数和额外的测试保留样本之外,可能在从原始数据集采样时将其混淆:在划分训练集和验证/测试集时选择分层样本。然后在不分层抽样的情况下划分验证集和测试集。

我的观点是,如果您在建模方法中引入更多变化(不违反任何“统计规则”),您可以对您创建的模型更有信心。


推荐阅读