我在某处发现不能将测试集用作验证集。为什么?
当模型参数固定时,验证集就会起作用,而学习只能通过训练批次的反向传播来进行。
那么,为什么我不能使用测试数据作为验证数据呢?
我在某处发现不能将测试集用作验证集。为什么?
当模型参数固定时,验证集就会起作用,而学习只能通过训练批次的反向传播来进行。
那么,为什么我不能使用测试数据作为验证数据呢?
我想你已经明白为什么训练集的性能不能代表训练模型的实际性能:过度拟合。您在训练期间学习的参数针对训练集进行了优化。如果您不小心,您可能会过度优化参数,从而导致模型在训练集上非常非常好,但不能推广到完全看不见的真实数据。
问题是,在实践中,训练方法的“参数”并不是您需要为学习示例指定的唯一内容。你也有超参数。现在,这些超参数可能是模型拟合的显式部分(如学习率),但您也可以将其他选择视为“超参数”:您选择 SVM 还是神经网络?如果您实施提前停止,您会在什么时候停止?
就像训练集上的参数过拟合一样,您可以将超参数过拟合到验证集。一旦您在验证集上使用该方法的结果来告知您如何进行建模,您现在就有机会过度拟合训练+验证集的组合。也许这个特定的验证集在使用 SVM 时比一般情况下做得更好。
这就是人们将验证集和测试集分开的主要原因。如果您在模型拟合期间使用一组 - 即使在“嗯,该方法效果不佳,也许我应该尝试......”级别 - 您在该组上获得的结果将不能完全指示一般情况您将获得全新数据的结果。这就是为什么您将一小部分数据保留到最后,直到您决定要做什么。
我会坚持神经网络。请注意,有些人会交换验证和测试集。
在神经网络中,你训练直到你在验证集上的表现开始变差(“停止训练”)。因此,权重受到验证集的影响(只是不是通过反向传播)。
现在,您使用完全没有在模型构建过程中使用过的全新数据(测试集)来测试您的网络。同样的方法也适用于选择超参数,例如 dropout level/L2 正则化参数等。