【问题标题】:Why both training and testing loss decrease as I add more training data incrementally?为什么随着我逐渐添加更多的训练数据,训练和测试损失都会减少?
【发布时间】:2017-08-24 16:26:49
【问题描述】:

我正在使用 Keras 通过 model.train_on_batch(x_batch, y_batch) 开发在线学习应用程序。我尝试逐步添加训练数据,并绘制出测试和训练的损失。结果如下,

My result

很高兴看到测试损失正在减少,但正如我在 Andrew Ng 的 ML 课程中所学到的,如果我有一个像 DNN 这样强大的模型,随着我逐步添加更多的训练数据,训练损失应该会增加,并且测试损失应该会减少。所以,我真的很困惑。下面是他幻灯片的屏幕截图。

Andrew's slide

【问题讨论】:

  • 你在什么时候测量了训练和测试的损失?我不知道你的序数轴代表什么。
  • 没有深入细节,这个想法即将提出:安德鲁可能已经绘制了总误差,而你正在绘制平均值
  • 两个数据集的准确性会发生什么变化?它也增加了吗?
  • 序数轴是我逐渐增加的训练规模。在每个训练阶段结束时测量损失。如果您愿意,可以在这里查看代码:github.com/stccenter/datadiscovery/blob/master/ranking/…
  • @ClaudeCOULOMBE 已经有一段时间了,但我认为这里的重点是,我发布的内容可以被认为是一个 SGD 过程,这与 Andrew 在讲座中讨论的不同。更具体地说,安德鲁在过度拟合训练数据后测量误差,然而,我所做的只是使用新数据更新梯度(单次更新,不是过度拟合或 Nilesh 指出的完整训练)。我知道这很棘手,但您只需要考虑这些图表背后真正发生的事情。希望它有所帮助:)

标签: machine-learning deep-learning


【解决方案1】:

正如我在 Andrew Ng 的 ML 课程中所学到的,如果我有一个像 DNN 这样强大的模型,那么随着我逐步添加更多的训练数据,训练损失应该会增加,而测试损失应该会减少。

是的,这是真的。假设您使用非常小的训练数据并使用一些强大的模型进行训练,在这种情况下,您的模型能够记住每个训练样本并且模型设置将非常特定于训练数据,模型知道每个训练样本及其输出标签,所以训练损失会很小。但是同样的设置在测试数据上失败,产生了不好的结果,这就是我们所说的模型过拟合。

解决卵形过拟合的方法是:

  • 增加训练数据:当您增加训练数据时,您的模型无法记住所有训练数据,但它会尝试找到一些适用于大多数训练数据的通用设置,以减少训练期间的损失。但同样的一般设置也可以适用于预测测试数据。因此,通过增加训练数据,训练损失会增加,但测试损失会减少,这就是预测的预期。
  • 降低模型复杂度:降低模型复杂度时同样适用,您的模型无法记住所有训练数据。因此训练损失增加,测试损失减少。

现在来解决您的问题。为什么这不适用于您的情况?

我坚信您绘制的图表是在您的训练阶段。在神经网络设置中,模型初始权重是随机设置的,因此它会在第一批中产生非常高的训练误差,并使用反向传播更新参数变量。现在,当涉及到第二批模型时,已经了解了第一批训练数据的一些知识,因此第二批的预期误差会很低。这对每个后续批次都进行。您生成的图表是在模型训练期间生成的,这就是我们在训练中看到的行为。

如果您想检验 Andrew Ng 的假设,请将您的训练数据分成 1/4、1/2、..1。不同尺寸的套装。训练每个数据集,直到你的训练损失减少。在每个数据集的最终迭代结果中,您可以观察到具有发烧训练样本的模型会产生较低的训练误差和较高的测试误差,并且随着数据量的增加,训练误差会增加,但测试误差会减少。

【讨论】:

  • 如果我理解正确,你是说 Andrew 的假设与 SGD 无关?
  • 不,这与 SGD 无关。这是关于如果您增加训练数据的大小,您的训练损失会增加,而测试损失会在完成训练后减少。
【解决方案2】:

我真的很困惑...我了解到并观察到,训练损失/错误会随着训练数据量的增加而增加,如 Andrew Ng 博士的机器学习课程中所述。

我最近遇到了同样的异常情况。随着训练数据量的增加,训练损失和验证损失曲线正在减少。在所有培训完全完成后,代码正在绘制。事实上,正如上面 Nilesh Birari 所建议的那样,我已经训练了 10 种不同的 DNN 模型,这些模型的数据量不断增加。

我怀疑 Ng 博士的绘图假设数据点的数量已经相当大了。该图未显示小型训练集的训练误差曲线。也许在那个领域,对于高容量 DNN,随着训练数据量的增加,训练损失和验证损失会一起减少。

也就是说,我已经获得了 Ng 博士所描述的小型经典机器学习模型的行为,两个实验使用相同的代码但不同的数据,我只需要替换模型即可。

【讨论】:

  • 答案在机器学习中很常见,就在数据中。检查我的数据,我发现它们是被订购的,但我确信情况并非如此。所以,关键是我们应该始终打乱数据,但保持输入和标签相关联。 37 Reasons why your Neural Network is not working的第7点
猜你喜欢
  • 1970-01-01
  • 2019-08-18
  • 1970-01-01
  • 2018-12-15
  • 2022-09-25
  • 1970-01-01
  • 2017-08-14
  • 1970-01-01
  • 2021-07-24
相关资源
最近更新 更多