如果验证集用于调整超参数,而训练集调整权重,为什么它们不是一回事,因为它们具有相似的作用,就像改进模型一样?
如果它们的角色相似,为什么不将训练集和验证集合二为一呢?
想法是在每个步骤中针对看不见的数据进行优化,以避免过度拟合和数据泄漏,从而使最终的网络对新数据具有最大的泛化性。
首先,您随机初始化网络权重。对于这些权重,训练数据是看不见的,因此网络针对使用训练数据计算的损失函数进行了优化。这是第一步。
其次,您想优化超参数,即您在第一步中用于训练网络的参数。该网络在学习权重的第一步中已经努力做到最好。如果您在此步骤中使用相同的数据集,它将具有更大的灵活性,可以更好地适应训练数据。但这会导致高方差,并且网络在看不见的数据上表现不佳。
因此,您将数据拆分为训练、开发和测试。用训练数据训练网络,用开发数据优化它,最后用测试数据进行评估,直到最后一步才接触它。
我认为这最好用一个类比来解释。此外,您还看到了不对训练数据调整超参数的误解。您希望同时提高训练集和验证集的准确性,但验证集更重要,因此您希望更多地最大化该准确性。
想象一下,你有一个蹒跚学步的孩子,你正试图教他们苹果长什么样。你有 10 张苹果的照片,45 年来你把它们放在一个房间里,给他们看这些苹果。经过这么长时间,他们会非常了解苹果,即使是照片中最细微的差异也会被注意到。当你试图看看这个蹒跚学步的孩子是如何概括的(它如何很好地利用它在训练中看到的东西来评估真实的例子),这绝对是可怕的,因为在那之后,除了它看到的 10 个苹果之外,还有什么可能是苹果呢?
因此,为了解决这个问题,您可能会考虑减少向幼儿展示训练集(10 个苹果)所花费的年数,也许这将使他们能够更好地概括(防止过度拟合)?但是您需要一种方法来验证这是否真的有帮助,对看不见的数据(新苹果)。这就是 5 个看不见的苹果发挥作用的地方(验证集)。您测量这些看不见的数据的准确性,以实际了解幼儿是如何学习的,因为在一个真实的例子中,幼儿以前不会见过苹果,所以了解它将如何处理看不见的数据很重要.
这最终将我们带到了测试集。我上面描述的问题可能是验证集中存在某种偏差,也许这些苹果比平时更圆。当然,您想要验证集的最大准确性,因此您调整所有内容以提高此准确性,但这会导致验证集出现偏差。也许您选择的参数仅适用于此验证集. 为了确保不是这种情况,您尝试在验证集上尽可能提高准确度,然后在测试集上测试真实准确度。这确保了您不能只是将超参数调整到验证集并收工。您需要真正的泛化来提高验证和测试集的准确性。