我发现了很多关于如何处理不同分布的训练/测试/验证数据集的技巧,但是我很难找出为什么它们需要具有相同的分布。
谁能向我详细解释为什么这些数据集需要具有相同/相似的分布?或者指向我解释它的资源?
我发现了很多关于如何处理不同分布的训练/测试/验证数据集的技巧,但是我很难找出为什么它们需要具有相同的分布。
谁能向我详细解释为什么这些数据集需要具有相同/相似的分布?或者指向我解释它的资源?
您可以将数据分布视为模型所在的世界。您想训练它在这个世界中表现良好,为此您必须在代表这个世界的示例上对其进行训练。此外,您必须通过对这个世界的更多示例进行测试来估计它在这个世界中的表现。如果您在一个世界中训练您的模型,在另一个世界上进行测试和验证,然后将其部署到第三个世界中,您将不知道该模型在现实世界中的训练效果如何,或者根本不知道它是否针对现实世界进行了训练。
让我们看一个小例子。我创建了一个小玩具数据集,并使用相同的网络、相同的优化器和所有相同的东西运行回归,除了初始化。
所有 5 个模型在有数据的域中给出相同的预测(它们甚至以相同的方式过度拟合)。但是对于远离训练数据的 x 值,我们会从不同的模型中得到截然不同的预测。
那么这告诉我们什么呢?它告诉我们,对于远离训练数据的输入,我们的模型基本上毫无价值。在这个意义上,“远”意味着“来自不同的分布”。但是,如果我们的模型对于不是来自原始分布的输入毫无价值,那么任何基于测试和验证数据集的质量测量也是毫无价值的。
我在这里使用了“远”这个词有点松散,基本上就像我在谈论距离一样。我认为这在一定程度上是正确的,但不是全部。即使两个分布的支持度相同,如果一个分布对事件的权重很大,而另一个分布的权重很小,那么它们可能会“相距甚远”。
这也是一个问题,因为这意味着您从一个分布中获得了许多样本,而另一个分布只提供了一些样本。对于特定输入域,您拥有的训练数据量将影响您的模型对该域的泛化程度。如果现在在测试或验证集中转移大部分分布,您基本上会过分强调模型几乎没有训练过的输入值,同时几乎不会在已经训练好的域中对其进行测试。因此,您对模型性能的衡量并不能真正告诉您训练效果如何。
这就是为什么训练、测试和验证数据集应该来自相同的分布,而且部署模型后的输入也需要来自相同的分布,否则您的质量测量和预测将非常不准确。