如何正确使用提早停止训练深度神经网络?


19

我有一个深层的神经网络模型,需要在包含约100,000个示例的数据集上进行训练,我的验证数据包含约1000个示例。因为训练每个示例都需要时间(每个示例大约需要0.5s),并且为了避免过拟合,我希望尽早停止以防止不必要的计算。但是我不确定如何通过提前停止来正确地训练我的神经网络,这是我现在不太了解的几件事:

  • 好的验证频率是多少?我应该在每个时期结束时在验证数据上检查我的模型吗?(我的批次大小为1)

  • 是否存在前几个时期可能会在开始收敛到更好的价值之前产生更差结果的情况?在这种情况下,在检查是否提前停止之前,我们应该在几个时期内训练我们的网络吗?

  • 当验证损失可能会上升或下降时,该如何处理?在这种情况下,提前停止可能会阻止我的模型进一步学习,对吗?

先感谢您。


我强烈建议批次大小大于一个。通常大小为32,64和128
ComputerScientist

Answers:


20

好的验证频率是多少?我应该在每个时期结束时在验证数据上检查我的模型吗?(我的批次大小为1)

没有黄金法则,在每个时期之后计算验证错误是很常见的。由于您的验证集比训练集小得多,因此不会大大减慢训练的速度。

是否存在前几个时期可能会在开始收敛到更好的价值之前产生更差结果的情况?

在这种情况下,在检查是否提前停止之前,我们应该在几个时期内训练我们的网络吗?

您可以,但是问题是您应该跳过几个纪元。因此在实践中,大多数时候人们不会跳过任何时代。

当验证损失可能会上升或下降时,该如何处理?在这种情况下,提前停止可能会阻止我的模型进一步学习,对吗?

人们通常定义耐心,即,如果验证集没有进展,则在提前停止之前要等待的时期数。耐心通常设置在10到100之间(更常见的是10或20),但这实际上取决于您的数据集和网络。

耐心= 10的示例:

在此处输入图片说明


一个人应该在停止时使用模型还是patience在停止之前使用模型(“最佳” 模型,没有进一步的改进)?
stackunderflow

2
@displayname耐心
历时


3

要添加其他出色的答案,您还可以-不停止。我通常:

  • 我本以为明智的做法是让NN运行更长的时间,
  • 每N个时间段保存一次模型权重,并且
  • 当我看到训练损失已稳定下来时,我只是选择验证损失最小的模型。

当然,只有当您不按分钟付款(或费用足够小)并且可以手动停止培训时,这才有意义。好处是,事后确定最低验证错误要容易得多。


1
我也是 虽然像您一样,我知道这是一种奢侈。当模型开始占用大量空间时,我发现使用以前的损失和f分数数字,我也可以通过编程方式确定何时删除以前的模型-因此您最终得到了一个候选最佳模型的移动窗口,其消耗量大致为可能值得的硬盘空间。
QA集体
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.