深度学习背景下的交叉验证 |物体检测
Cross validation in the context of deep learning | Object Detection
我正在对来自对象检测的数据集进行建模。我对深度学习比较陌生。我很难在深度学习的背景下扩展交叉验证的想法。通常,深度网络的训练时间很长,k-fold CV 不是一个合理的方法。因此,可能 1 折交叉验证更有意义(我见过人们在实践中使用它)。我试图解释这个选择并思考交叉验证背后的想法:超参数调整,或者在建模开始过度拟合时量化。我的问题如下:
1 倍 CV 的随机抽样误差如何?我的想法:对于 k-fold CV,当 k>1 时,这个错误被平均掉了。此外,当 k=1 时,超参数对我来说似乎也不合理:我们最终找到的值可以与我们称为验证集的(随机)样本相结合。那么,1 倍 CV 有什么意义?
我正在处理的数据中已经有大量数据点。我有大约 4k 张图像,2 个类别(对象+背景),每个图像的边界框。我认为深度网络用更多的数据学得更好是常识。为什么我要通过在这种情况下保留验证集来减少我的训练集?我没有看到任何明显的优势。相反,似乎使用整个数据集进行训练可以产生更好的目标检测模型。如果这是真的,那么人们怎么知道什么时候停止,即我可以继续训练,而没有任何关于模型是否开始过度拟合的反馈?
生产模型是如何部署的?我想我在上课的时候从来没有想过这个。该方法非常清楚,您始终拥有训练集、验证集和测试集。在实际场景中,如何利用整个数据来创建生产模型? (可能与#2 相关,即处理实际问题,例如训练多少等)
- Public 对象检测领域的计算机视觉数据集通常足够大,这不是问题。验证集和测试集之间的性能差距可以显示您的场景中有多少问题。 n = 1 的交叉验证本质上意味着具有固定的验证集。
- 您想保留验证集以调整模型的参数。增加权重的数量肯定会提高训练集的性能,但您想检查它在看不见的数据上的表现如何,例如验证集。也就是说,许多人会根据验证集上的性能调整参数,然后再进行一次训练,将训练数据和验证数据结合起来,最后在测试集上进行测试。
- 我认为这已经在 2 中得到了回答。您可以通过对所有 3 组进行训练来扩展它,但是无论您在这方面取得的成绩如何,都不具有代表性。因此,应在合并数据之前确定要训练的 epochs/iterations 个数。
您必须决定要针对什么进行优化。大多数论文都针对测试集的性能进行了优化,这就是为什么它永远不应该用于训练或验证参数选择的原因。实际上,您可能经常通过将验证和测试数据包含到训练中来支持“更好”的模型。在找到另一个测试集之前,您永远不会知道这个模型有多“好”。您还冒着在包含测试数据时会发生“奇怪”的事情的风险。你实际上是在闭着眼睛训练。
我正在对来自对象检测的数据集进行建模。我对深度学习比较陌生。我很难在深度学习的背景下扩展交叉验证的想法。通常,深度网络的训练时间很长,k-fold CV 不是一个合理的方法。因此,可能 1 折交叉验证更有意义(我见过人们在实践中使用它)。我试图解释这个选择并思考交叉验证背后的想法:超参数调整,或者在建模开始过度拟合时量化。我的问题如下:
1 倍 CV 的随机抽样误差如何?我的想法:对于 k-fold CV,当 k>1 时,这个错误被平均掉了。此外,当 k=1 时,超参数对我来说似乎也不合理:我们最终找到的值可以与我们称为验证集的(随机)样本相结合。那么,1 倍 CV 有什么意义?
我正在处理的数据中已经有大量数据点。我有大约 4k 张图像,2 个类别(对象+背景),每个图像的边界框。我认为深度网络用更多的数据学得更好是常识。为什么我要通过在这种情况下保留验证集来减少我的训练集?我没有看到任何明显的优势。相反,似乎使用整个数据集进行训练可以产生更好的目标检测模型。如果这是真的,那么人们怎么知道什么时候停止,即我可以继续训练,而没有任何关于模型是否开始过度拟合的反馈?
生产模型是如何部署的?我想我在上课的时候从来没有想过这个。该方法非常清楚,您始终拥有训练集、验证集和测试集。在实际场景中,如何利用整个数据来创建生产模型? (可能与#2 相关,即处理实际问题,例如训练多少等)
- Public 对象检测领域的计算机视觉数据集通常足够大,这不是问题。验证集和测试集之间的性能差距可以显示您的场景中有多少问题。 n = 1 的交叉验证本质上意味着具有固定的验证集。
- 您想保留验证集以调整模型的参数。增加权重的数量肯定会提高训练集的性能,但您想检查它在看不见的数据上的表现如何,例如验证集。也就是说,许多人会根据验证集上的性能调整参数,然后再进行一次训练,将训练数据和验证数据结合起来,最后在测试集上进行测试。
- 我认为这已经在 2 中得到了回答。您可以通过对所有 3 组进行训练来扩展它,但是无论您在这方面取得的成绩如何,都不具有代表性。因此,应在合并数据之前确定要训练的 epochs/iterations 个数。
您必须决定要针对什么进行优化。大多数论文都针对测试集的性能进行了优化,这就是为什么它永远不应该用于训练或验证参数选择的原因。实际上,您可能经常通过将验证和测试数据包含到训练中来支持“更好”的模型。在找到另一个测试集之前,您永远不会知道这个模型有多“好”。您还冒着在包含测试数据时会发生“奇怪”的事情的风险。你实际上是在闭着眼睛训练。