训练误差在波动,交叉验证误差在不断下降

数据挖掘 Python 神经网络 深度学习 喀拉斯 交叉验证
2022-02-24 09:16:30

我创建了一个两层全连接神经网络作为推荐引擎的一部分(在我为产品和用户使用嵌入层之后)。在过去的几周里,我一直在尝试调整超参数。此外,我使用 5 折交叉验证和“mse”作为错误度量。下面是我在 GPU 上进行 10 个 epoch 的训练后得到的训练和交叉验证误差曲线。

在此处输入图像描述

从根本上说,我不确定到底该怎么做。该模型不会过拟合或欠拟合数据。更令人困惑的是,验证错误跨越了五倍。这是数据中固有的偏差,并暗示数据的结构使得弱模型在看不见的数据上表现良好?

任何指示或评论都会非常有帮助。谢谢 !

1个回答

根据定义,训练误差应该始终以适当的学习率降低,直到达到他的平台期,然后开始振荡,因为它正向前和向后穿过损失函数的最小值。

相反,您对验证错误的期望是它随着训练错误而减少,并且在某个时候它开始增加,这是过度拟合的迹象。

在训练开始时,您发现验证误差低于训练误差并不罕见。

从你的情节我会说:

  1. 训练误差和验证误差简单互换:红线实际上是训练误差,蓝线是验证误差;

  2. 在交叉点后停止训练。这是因为验证集只是您调整参数的集合,而不是“揭示真相”的集合,因此它也容易过度拟合。

如果您制作第三个数据集(“测试”数据集),并尝试检查您的指标(准确性?),我敢打赌,经过两个 epoch 训练的模型比经过 10 个 epoch 训练的模型表现更好。