深度学习中的训练测试

2022-02-21 04:48:03

机器学习的黄金法则之一是将数据集分为训练集、验证集和测试集。了解如何绕过最常见的警告!

我们这样做的原因很简单。如果我们不将数据分成不同的集合,模型将根据训练期间看到的相同数据进行评估。因此,我们可能会遇到一些问题,比如在不知不觉中过度装修。

我们将数据集随机分成三个子集,称为训练集、验证集和测试集。拆分可以是60/20/20或70/20/10或任何其他您想要的比率。

如果我们对结果不满意,我们可以更改超参数或选择另一个模型,然后再次转到步骤2

最后,一旦我们对验证集的结果满意,我们就可以在测试集上评估我们的模型。

如果我们对结果感到满意,我们现在可以再次在训练集和验证集上训练我们的模型,并使用我们最后导出的超参数。

我们可以在测试集上再次评估模型的准确性,如果我们愿意,可以部署模型。

大多数ML框架为数据集的随机训练/测试分割提供了内置方法。最著名的例子是scikit learn的train_test_split函数。

是的,这可能是个问题。对于非常小的数据集,测试集将非常小,因此单个错误预测对测试精度有很大影响。幸运的是,有一种方法可以解决这个问题。

这个问题的解决方案称为交叉验证。我们基本上创建了数据集的分区,如下图所示。我们总是拿出一套测试数据,并使用所有其他数据进行培训。最后,我们收集并平均测试集的所有结果。我们基本上训练了k个模型,并使用这个技巧获得了在完整数据集上评估模型的统计数据(因为每个样本都是k个测试集的一部分)。

这种方法在最近的深度学习方法中几乎没有使用,因为训练一个k型的时间非常昂贵。

随着深度学习的兴起和数据集规模的大幅增加,对交叉验证或单独验证集等技术的需求已经减少。其中一个原因是实验非常昂贵,而且需要很长时间。另一个原因是,由于大数据集和大多数深度学习方法的性质,模型受过度拟合的影响较小。

过度拟合仍然是深度学习中的一个问题。但是,对10个特征的50个样本进行过拟合比对百万像素的100k图像进行过拟合要快

有人可能会说,研究人员和从业者变得懒惰/邋遢。如果能看到最近的任何一篇论文再次研究这种效应,那将是一件有趣的事情。例如,可能是过去几年,研究人员在ImageNet的测试集上过度拟合了他们的模型,因为一直在努力改进它,使之成为最先进的技术。

天真的是,可以手动将数据集分成三个块。这种方法的问题是,我们人类是非常有偏见的,这种偏见会被引入到三个集合中。

在学术界,我们知道我们应该随机挑选它们。随机分成三组可以保证所有三组遵循相同的统计分布。这就是我们想要的,因为ML是关于统计的。

从完全不同的分布中导出这三个集合会产生一些不想要的结果。如果我们想用猫的图片训练一个模型来对花进行分类,那么它没有多大价值。

然而,随机分割的基本假设是,初始数据集已经与我们想要解决的问题的统计分布相匹配。这意味着,对于自动驾驶等问题,假设我们的数据集涵盖了各种城市、天气条件、车辆、一年四季、特殊情况等。

正如你可能认为的那样,这个假设实际上并不适用于大多数实际的深度学习应用。每当我们在一个不受控制的环境中使用传感器收集数据时,我们可能无法获得所需的数据分布。

但这很糟糕。如果我无法收集我试图解决的问题的代表性数据集,我该怎么办?

你要寻找的是关于发现和处理领域差距、分布变化或数据漂移的研究领域。所有这些术语都有自己的具体定义。我在这里列出了它们,这样你就可以轻松地搜索相关问题。

对于域,我们指的是数据域,即我们使用的数据的来源和类型。有三种前进的方式:

在机器学习中,当我们的模型必须在新输入数据来自与训练数据不同的分布的情况下表现良好时,我们指的是分布外。回到我们之前的自动驾驶示例,我们可以说,对于一个只在加利福尼亚晴朗天气下训练的模型,在欧洲进行预测是不合理的。

由于我们使用不同的传感器收集数据,我们还可能有关于每个样本来源的附加信息(样本可以是图像、激光雷达帧、视频等)。

您很可能过度拟合了验证集的模型,或者验证集和测试集非常不同。但是怎么做呢?

您可能多次反复调整参数,以挤出模型在验证集上可以产生的最后一点精度。验证集不再满足其目的。此时,您应该放松一些超参数或引入正则化方法。

在导出最终的超参数后,我想在发货前在完整的数据集(训练+验证+测试)上重新训练我的模型

不,不要这样做。hyperparameters已经针对train(或者train+验证)集进行了调整,当用于完整数据集时,可能会产生不同的结果。此外,由于测试集不再存在,您将无法再回答模型的实际性能有多好的问题。

我有一个视频数据集,想把帧随机分成训练集、验证集和测试集

由于视频帧很可能高度相关(例如,相邻的两帧看起来几乎相同),这是一个坏主意。这与我们根据训练数据评估模型几乎是一样的。相反,您应该将数据集拆分为多个视频(例如,视频1、3、5用于培训,视频2、4用于验证)。您可以再次使用随机列车测试拆分,但这次是在视频级别而不是帧级别。