是否有可能在一段时间内出现小于训练错误的验证错误,然后出现相反的行为?

数据挖掘 机器学习 深度学习 张量流 回归 交叉验证
2022-03-08 06:05:33

我正在解决回归(使用 tensorflow 的 DNNRegressor)问题。当我(随机)抽取 20% 的数据并将其进一步划分为 train-eval(90-10%,随机但互斥)时,我观察到以下图表 - train(橙色)+ eval(蓝色)对 x 轴上的步骤的损失

针对 x 轴上的步骤评估损失(蓝色)

在这里,蓝线对应于 eval set loss,橙线对应于 train loss。数据的总长度接近 480 万行,因此 20% 是接近 100 万个数据点。如何解释这种行为?

3个回答

无论机器学习算法如何,您在图表中注意到的行为总是如此。机器学习将要求您拟合一些参数,以便模型可以捕获从输入空间到所需输出的映射。

在训练开始时,这些参数将全部随机分配,因此我们应该假设随机性能,因此 50% 用于 0/1 分类。由于使用训练数据调整模型参数,该模型将倾向于减少训练和评估损失。但是,经过一些训练后,评估损失会开始增加。在这一点上,参数不再对数据进行泛化,而是过度拟合并专门识别训练数据中的点。

这不是我们想要的。这是过拟合。我们希望以评估集的最小损失停止训练。


另一种思考方式是,如果我让孩子看一些乘法示例,

3*2 = 6
4*3 = 12
...
...
10*1= 10

如果孩子学习了一些关于如何 x*y=z 的一般规则,那么他将能够回答我问他的任何新的乘法问题。但是,如果他只记住我向他们展示的几个示例的结果,那么他们将在任何新示例中出错。这是过拟合。


作为另一个例子,想象用一个 5 阶多项式拟合 2 个变量之间的 2 阶关系。这将过于具体地匹配这些点,并且不会推广到新数据。

在此处输入图像描述

您的验证错误一直停留在 2.20,但训练错误仍在减少。这可能是过度拟合的情况,因为它发生在过度学习数据时。

尝试使用L2 正则化,它通过强制权重参数尽可能小来克服过拟合问题。

另一件事,您可以尝试使用dropout 技术,这也将有助于解释模型行为。

鉴于缺乏细节,我想说一个可能的原因是使用dropoutDropout 是一种正则化技术,它在训练过程中随机消除一些元素,从而使模型在训练数据上表现更差,但对未见数据的泛化效果更好。

评估模型时不应用 Dropout。这是验证损失低于训练损失的典型原因之一。

这将在步骤 150 之前解释您有更好的验证损失。在这一步,您的模型已经对训练数据过度拟合,足以补偿正则化并保持过度拟合,因此训练损失不断改善,而验证损失则没有。