如果学习曲线显示的验证误差低于训练误差,那么可以相信预测吗?

时间:2019-01-29 09:48:44

标签: tensorflow machine-learning keras neural-network

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

我当前的任务是使用NN近似热力学模型,即非线性回归问题。它接收13个输入参数,并输出450个参数的速度曲线(速度与深度)。我的数据由100,000个综合示例组成(即不存在噪音),分为训练(80k),验证(10k)和测试(10k)。

我已经针对多种不同的体系结构测试了我的网络:较宽(5-800个神经元)和更深(多达10层),不同的学习速率和批处理大小,甚至还有许多时期(5000个)。基本上是交易的所有标准技巧...

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

enter image description here

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

总结一下:如果验证错误小于或非常接近训练错误,是否一定是一个不好的信号?如果使用上述网络做出的预测是正确的,该怎么办?

是否有可能我的问题和数据根本无法过度拟合?

3 个答案:

答案 0 :(得分:1)

除了尝试更高的k倍和其他测试保留样本外,还可能在从原始数据集中进行采样时将其混合:在划分训练和验证/测试集时,请选择分层样本。然后对验证和测试集进行分区,而无需分层抽样。

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

答案 1 :(得分:0)

通过对不同数据重复实验,可以获得更可信赖的结果。高倍使用交叉验证(例如k = 10)以获得对解决方案性能的更好信心。通常,如果您的解决方案在验证和测试设置上有相似的结果,那么神经网络很容易过拟合。

答案 2 :(得分:0)

要知道何时不知道设置实验的确切方式,并不是那么容易:

  • 您使用了哪种交叉验证方法?
  • 您是如何拆分数据的?

正如您提到的,观察到的验证错误低于训练的事实可能是由于训练数据集包含许多要学习的“困难”案例或验证集包含了许多要预测的“容易”案例的结果。

但是,由于一般来说训练损失预计会低估验证,对我而言,特定模型似乎具有不可预测/未知的拟合度(在预测未知的过程中表现更好,已知已知的感觉确实很奇怪)。

为了克服这个问题,我将通过重新考虑数据拆分策略,在可能的情况下添加更多数据甚至更改性能指标来开始实验。