为什么我们需要验证集和测试集?

人工智能 神经网络 机器学习 人工智能设计 数据集 超参数优化
2021-10-18 05:19:41

我知道这已经被问过一百次了,但是,我无法找到一个问题(和一个答案)分别真正回答了我想知道的内容,并以我能够理解的方式解释了它。所以,我试图重新表述这个问题......

使用神经网络时,您通常将数据集分为三个部分:

  • 训练集
  • 验证集
  • 测试集

我知道您使用训练集来训练网络,并且使用测试集来验证它的学习效果:通过测量网络在测试集上的表现,您知道实际情况时会发生什么稍后使用它。到现在为止还挺好。

现在,模型具有超参数,除了权重之外,还需要对其进行调整。如果你改变这些,当然,你会得到不同的结果。这是验证集在所有解释中发挥作用的地方:

  • 使用训练集进行训练
  • 使用验证集验证模型的执行情况
  • 对许多超参数不同的变体重复此操作(或从一开始就并行执行)
  • 最后,选择一个并使用测试集验证其性能

现在,我的问题是:为什么我需要步骤 2 和 3?我也可以并行训练我的模型的多个版本,然后针对测试集运行所有版本,看看哪个表现最好,然后使用这个。

所以,换句话说:如果我可以直接使用测试集来比较模型变体,我为什么要使用验证集呢?我的意思是,无论哪种方式,我都需要训练多个版本。这样做有什么好处?

可能,它有一些含义,可能我错了,但我不知道是什么。有什么提示吗?

2个回答

我认为验证集和测试集的区别应该这样解释:

  • 验证集旨在多次使用。
  • 测试集只能使用一次。

我认为这里出现了误解,因为机器学习的教学大多只关注大型管道的特定部分,即模型训练。在每个教程中都使用了标准数据集,这样您就不必担心数据收集、数据标记(看到很多人不知道注释器间协议是什么真的很遗憾)、数据预处理和特别是关于模型实际应用的所有部分几乎从未提及。

如果您专注于后续部署你训练的模型。没有人期望模型在训练和应用于某些未知数据时具有相同的性能分数。关键在于,模型在验证集上的表现并不能代表具有未知数据的模型的行为,因为相同的验证数据已被用于微调模型!因此,这就是为什么拥有一组对模型全新的数据很重要的原因,因为它可以让您对真实用例场景中的模型性能有更公正的看法。

简单地说,您使用您的验证集来规范您的模型以获取看不见的数据。测试数据是完全看不见的数据,您可以在这些数据上评估您的模型。

各种验证策略用于改进您的模型以处理看不见的数据。因此使用了诸如 k 折交叉验证之类的策略。此外,验证集可帮助您调整超参数,例如学习率、批量大小、隐藏单元、层数等。

训练、验证、测试集可帮助您确定您是欠拟合还是过拟合。

例如,如果任务中的人为错误为 1%,训练错误为 8%,验证错误为 10%,测试集错误为 12%,那么,

之间的区别,

  1. 人类水平和训练集错误告诉你“可避免的偏差”
  2. 训练集错误和验证集错误告诉你“方差和数据不匹配”
  3. 验证集错误和测试错误告诉您验证集的“过度拟合程度”。

基于这些指标,您可以应用适当的策略来提高验证集或测试集的性能。