仅对训练集进行数据增强?

机器算法验证 机器学习 深度学习 正则化 数据增强
2022-01-27 17:10:55

将数据增强仅应用于训练集或同时应用于训练集和测试集是常见的做法吗?

3个回答

就扩充的概念而言,即由于某种原因使数据集更大,我们倾向于只扩充训练集。我们将在验证集上评估不同增强方法的结果。

然而,正如@Łukasz Grad 指出的那样,我们可能需要对测试集执行与训练集类似的过程。这通常是为了使来自测试集的输入数据尽可能地类似于训练集的输入数据。例如,@Łukasz Grad 指出了图像裁剪的示例,我们也需要裁剪测试图像,因此它们与训练图像的大小相同。但是,在训练图像的情况下,我们可能会多次使用每个训练图像,并在不同的位置/偏移处进行裁剪。在测试时,我们可能会做一个单一的居中裁剪,或者随机裁剪并取一个平均值。

对测试数据运行增强过程并不是为了使测试数据更大/更准确,而只是为了使测试集的输入数据与训练集的输入数据相似,因此我们可以将其输入同一个网络(例如相同的尺寸)。通过应用增强程序,我们永远不会认为测试集在某种程度上“更好”。至少,这不是我见过的。

另一方面,对于训练集,增强的目的是减少训练过程中的过拟合。然后我们通过针对我们或多或少固定的测试/验证集运行训练模型来评估增强的质量。

通常,训练卷积神经网络的数据增强只对训练集进行。我不确定增加测试数据会带来什么好处,因为测试数据的价值主要用于模型选择和评估,并且您正在为这些数量的测量添加噪声。

作为答案的补充,让我在测试时数据增强方面加 2 美分。

数据增强也可以在测试期间执行,以减少方差。它可以通过取输入图像的修改版本的预测的平均值来执行。

数据集扩充可被视为仅对训练集进行预处理的一种方式。数据集扩充是减少大多数计算机视觉模型泛化误差的绝佳方法。适用于测试时的一个相关想法是向模型展示相同输入的许多不同版本(例如,在稍微不同的位置裁剪的相同图像)并让模型的不同实例投票来确定输出。后一种想法可以解释为一种集成方法,它有助于减少泛化错误。深度学习书,第 12 章)。

应用测试时间增强是一种非常常见的做法。AlexNet 和 ResNet 使用 10-crop 技术(从原始图像的四个角和中心获取补丁并镜像它们)来做到这一点。Inception 更进一步,生成了 144 个补丁,而不是只有 10 个。如果你查看 Kaggle 和其他比赛,大多数获胜者也会应用测试时间增强。

我是一篇关于数据增强代码)的论文的作者,在该论文中,我们尝试了针对皮肤病变分类(一项低数据任务)的训练和测试增强。在某些情况下,仅在训练中使用强数据增强比不使用数据增强稍微好一点,而使用训练和测试增强可以显着提高模型的性能。