假设我将数据分为 3 部分:训练、验证和测试。例如,我知道在神经网络中,隐藏层的数量是一个超参数。为什么我不能在训练集中训练大量的神经网络架构,然后在测试集中测试它们的准确性;从而允许我选择一个最终模型?在这种情况下验证集的目的是什么?
为什么我不能在训练集中选择我的超参数?
数据挖掘
交叉验证
训练
2021-10-06 03:52:56
2个回答
我不会说你不能调整训练数据集中的超参数,但这样做的目的与验证集中的不同。
一般来说,ML 算法的目的是如何在给定一些训练数据的情况下优化分类或执行回归。一旦模型经过训练,它将与新数据一起使用以获得预测,因此:
- 我们需要一些训练数据。使用此数据集,模型将寻找最小化所选损失函数的最佳权重和偏差。
- 我们需要一些性能指标的上限:例如,我们可以决定我们的模型必须像人类一样执行,对于某些特定任务,它的平均指标显示为 95%。上限可以是某些基准测试中的最佳分数,等等。
- 我们开始在训练数据上训练模型并评估它的指标,让我们来看看准确性。如果准确度太低,我们可以调整超参数,直到训练数据的准确度提高(这里没有使用评估数据集)。我们模型的准确率和上界之间的差异被视为模型的偏差(这个偏差不能与神经元的偏差混淆)。因此,训练数据的准确性给了我们模型的偏差。
- 一旦我们确定我们的偏差是合理的(最好为 0),就会出现一个问题,即当模型输入未用于训练的数据(实际应用程序)时,模型将如何执行。这个看不见的数据的准确率和训练数据的准确率之间的差异就是模型的方差。这些看不见的数据是验证集,让我们了解模型如何推广到新数据。如果方差很大,则模型很难泛化到新数据。然后,我们执行超参数调整并评估验证数据的准确性,直到方差足够低,尽量不恶化偏差(方差-偏差权衡)。
示例:所需准确度 = 95%。训练准确率 = 93%。验证准确度 = 82% -> 偏差 = 2%,方差 = 11%
总结:
- 调整训练数据 = 减少偏差
- 调整验证数据 = 减少方差
更不清楚的是测试数据集的作用。当我决定不再更改模型并且我需要描述模型的最终指标时,我通常会使用它。测试集还可用于了解模型如何处理不打算使用的数据。一般来说,测试集为推理任务提供了模型的能力。
这正是原因。如果您使用测试数据集来选择可以预测的最佳架构,那么您不是将其用作测试数据,而是将测试数据用作验证数据。而且,最后,您用完了要测试的数据。
说清楚:
训练数据集:使用训练数据集来学习模型的参数(例如,NN 中的连接权重)。
验证数据集:使用您的验证数据集查看它们如何执行和调整这些超参数(例如,修剪您的网络等)。
测试数据集:您的测试数据集只能在最后一个实例中用于测试模型。否则,您将无法测试未用于训练模型的数据。
你可以在这篇文章中阅读更多关于它的信息。
其它你可能感兴趣的问题