2016-07-05 70 views
1

当开发一个神经网络人们通常划分训练数据到列车,测试,和坚持数据集(很多人都称这些列车,验证和测试分别。同样的事情,不同的名字)。许多人建议根据测试数据集中的性能选择超参数。我的问题是:为什么?为什么不最大化训练数据集中超参数的性能,并且当我们通过测试数据集中的性能下降来检测过度拟合时,停止训练超参数?由于训练通常比测试大,因此与训练测试数据集上的超参数相比,这不会产生更好的结果吗?为什么不优化火车数据集上的超参数?

UPDATE 2016年7月6日

术语变更,下面搭配评论。现在数据集被称为火车验证,并在这个岗位测试。我不使用测试数据集进行培训。我正在使用GA来优化超参数。在外部遗传算法训练过程的每次迭代中,GA选择一个新的超参数集,在训练数据集上训练,并在验证和测试数据集上进行评估。 GA调整超参数以最大化Train数据集中的准确性。当检测到网络过度拟合(在验证数据集中)时,迭代内的网络训练停止,并且当检测到过度拟合超参数时(再次在验证中),外部GA训练过程停止。结果是为Train数据集进行了优化的超参数。问题是:为什么许多来源(例如https://www.cs.toronto.edu/~hinton/absps/JMLRdropout.pdf,第B.1节)建议优化验证集上的超参数,而不是火车集?引用来自Srivasta,Hinton等人(上面的链接):“超验参数在验证集上进行了调整,以便产生最好的验证错误...

回答

1

原因在于开发一个模型总是需要调整其配置:例如,选择层数或层的大小(称为模型的超参数,以将它们与参数(网络的权重)区分开来)。您可以通过将验证数据上的模型性能用作反馈信号来进行调整。实质上,这种调整是一种学习形式:在某些参数空间中搜索良好的配置。因此,根据验证集上的性能调整模型的配置可能会很快导致过度验证集,即使您的模型从未受过直接培训。

这种现象的核心是信息泄漏的概念。每次根据模型在验证集上的性能调整模型的超参数时,有关验证数据的一些信息会泄漏到模型中。如果你只做一次,对于一个参数,那么只有很少的信息会泄漏,并且你的验证集对于评估模型将保持可靠。但是,如果重复这么多次 - 运行一个实验,评估验证集并修改模型作为结果 - 那么您会将越来越多的有关验证集的信息泄漏到模型中。

在一天结束时,您最终会得到一个在验证数据上人为操作的模型,因为这是您优化它的原因。您关心的是全新数据而不是验证数据的性能,因此您需要使用完全不同的,从未见过的数据集来评估模型:测试数据集。即使是间接的,您的模型也不应该访问任何关于测试集的信息。如果关于模型的任何事情都是根据测试集的性能进行调整的,那么你的泛化测度就会有缺陷。

+0

谢谢Prakhar。我同意关于信息泄露并且不适合测试或验证。但我仍然留有原始问题:为什么不a)根据Train数据集中的性能调整超参数,b)使用验证来检测超参数过度拟合,以及c)使用Test来估计新的未见数据的性能? –

+0

你在说什么只是重新框架我的答案。这样想:a。)通过调整,你的意思是什么。当你使用训练集开始训练模型时,你修复超参数(层数,每层中神经元的数量等),并基本学习权重。 b。)然后使用验证集对此进行评估。 简而言之,hyperpameters的“所有”组合可以学习一组训练集上损失较低的权重,但超参数的最佳值是使用验证集合确定的。 –

3

您在这里缺少两件东西。首先,次要的是,测试集是从来没有用于做任何培训。这是验证的目的(测试只是以评估您的最终的测试性能)。主要的误解是“使用验证集合来适应超参数”。这里的意思是你的描述 - 来训练模型训练集一个给定的超参数,并使用验证简单地检查您是否过度拟合(你用它来估计泛化),但你真的不“火车”上他们,你只需检查你的分数在这个子集(哪些,你注意到 - 是小得多)。

你不能“停训hyperparamters”,因为这不是一个连续的过程,通常超参数都只是“值的可能集合”,你必须简单地测试了他们很多,有确定的直接trainingn没有有效的办法实际指标您有兴趣之间的程序(如精度)和超参数(如在NN或SVM甚至参数C隐藏层的尺寸),因为这两个之间的功能性连接是不可微分,是高度非凸和一般“丑“来优化。如果你能在一个超参数来定义一个很好的优化过程比人们通常不叫超参数,但参数,在此命名约定的关键区别是什么使得它很难直接优化 - 我们称之为超参数一个参数,不是不可能直接进行优化,因此您需要一个“元方法”(如简单地在验证集上进行测试)来选择它。

但是,您可以为超参数定义一个“很好”的元优化协议,但是这仍然会使用验证集作为估计器,例如,超参数的贝叶斯优化就是这样做的 - 它试图拟合一个函数,您的模型在超参数空间中行为,但为了获得这个元方法的任何“训练数据”,您需要验证集来估计任何给定的超参数集(输入到您的元方法)

+0

谢谢!请参阅我上面的更新。我们有不同的术语:我:[训练,测试,持续] =你:[训练,验证,测试]。我在上面的ujpdate中使用过你的术语。 –

+0

请不要重大修改SO上的问题。如果你有otger问题,请问另一个问题。 – lejlot

+0

请参阅上面的说明。 –