首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么不在火车数据集上优化超参数呢?

问为什么不在火车数据集上优化超参数呢?
EN

Stack Overflow用户
提问于 2016-07-05 21:44:43
回答 3查看 6K关注 0票数 5

在开发神经网络时,通常会将训练数据划分为列车、测试和保留数据集(许多人将这些数据分别称为列车、验证和测试)。同样的东西,不同的名字)。许多人建议根据测试数据集中的性能选择超参数。我的问题是:为什么?为什么不在列车数据集中最大限度地提高超参数的性能,当我们通过测试数据集中的性能下降检测到过度拟合时,停止对超参数的训练?由于列车通常比测试大,这会不会比在测试数据集上训练超参数产生更好的结果?

2016年7月6日更新

术语更改,以匹配下面的注释。在本文中,数据集现在被称为Train、Validation和Test。我不使用测试数据集进行培训。我正在使用GA来优化超参数。在外部遗传算法训练过程的每次迭代中,遗传算法选择一个新的超参数集,对列车数据集进行训练,并对验证和测试数据集进行评估。遗传算法调整超参数,以最大限度地提高列车数据集的准确性。当检测到网络过度拟合时(在验证数据集中),迭代中的网络训练停止,当检测到超参数的过度拟合时(再次在验证中),外部GA训练过程停止。结果是针对列车数据集的超参数进行了优化。问题是:为什么许多源(例如https://www.cs.toronto.edu/~hinton/absps/JMLRdropout.pdf,B.1节)建议优化验证集上的超参数,而不是列车集?引用Srivasta,Hinton等人的话(上面的链接):“在验证集上对超级参数进行了调整,从而产生了最佳的验证错误.”

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-01-21 06:52:02

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

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

最后,您将得到一个对验证数据进行人工优化的模型,因为这正是您对其进行优化的目的。您关心的是全新数据的性能,而不是验证数据,因此您需要使用一个完全不同的、从未见过的数据集来评估模型:测试数据集。您的模型不应该访问任何关于测试集的信息,甚至是间接的。如果已经根据测试集性能对模型进行了任何调整,那么您的泛化度量将是有缺陷的。

票数 7
EN

Stack Overflow用户

发布于 2016-07-05 21:49:42

这里有两件事你遗漏了。首先,次要的是测试集是从不用来做任何训练的。这是验证的一个目的(测试只是为了评估您的最终测试性能)。主要的问题在于它的意思是“使用验证集来适应超参数”。这就意味着你所描述的--在训练集上用一个给定的超参数训练一个模型,并使用验证来简单地检查你是否过拟合(你用它来估计泛化),但是你并没有对它们进行真正的“训练”,你只需要检查你在这个子集上的分数(正如你注意到的那样,这个分数要小得多)。

你不能“停止训练超参数”,因为这不是一个连续的过程,通常超参数只是“可能的值集”,你必须简单地测试它们,没有有效的方法在你感兴趣的实际度量(比如准确性)和超参数(比如神经网络中的隐藏层的大小,甚至支持向量机中的C参数)之间定义一个直接的训练过程,因为这两个参数之间的函数联系是不可微的,是高度非凸的,而且通常是“丑陋的”来优化。如果您可以用超参数来定义一个很好的优化过程,而不是通常所称的超参数而是一个参数,那么这个命名约定中的关键区别是什么使得它很难直接优化--我们称它为参数,而不是针对它直接进行优化,因此您需要一个"meta方法“(就像验证集上的简单测试)来选择它。

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

票数 3
EN

Stack Overflow用户

发布于 2020-09-30 12:39:33

简单回答:我们做

在一个简单的前馈神经网络的情况下,你必须选择例如,每层的层数和单位数,正则化(和不连续的参数,如拓扑,如果不是前馈和损失函数),你将对这些优化。

总之,您优化了:

  • 普通参数只在训练期间使用,而在验证过程中不使用
  • 训练中的超参数和验证过程中的

在验证过程中,不要触及许多普通参数(权重和偏差)是非常重要的。这是因为他们有成千上万的自由度,这意味着他们可以学习你训练他们的数据。但是,模型也没有推广到新的数据(即使新的数据来自相同的分布)。在超参数中,通常只有很少的自由度控制模型的刚性(正则化)。

这也适用于其他机器学习算法,如决策树、森林等。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38213291

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档