首页 理论教育 深度学习超参数与验证

深度学习超参数与验证

时间:2023-11-18 理论教育 版权反馈
【摘要】:但到了大数据时代,数据量有可能为百万级别,此时不需要数量庞大的验证集和测试集评估模型。在k折交叉验证中,首先把数据集分割为k个不重合的子集,然后利用1个子集作为验证集,并使用其余的k-1个子集作为训练集。这样共重复k次,每次的验证数据集均不相同,平均k次的结果最终得到训练误差和验证误差。

深度学习超参数与验证

神经网络中,除了权重和偏置等参数,超参数(hyper-parameter)一词也经常出现。这里所说的超参数是指如隐含层层个数、隐藏节点数量、激活函数类型、参数更新时的学习率、batch大小等需要人为设置的参数。如果这些超参数没有设置合适的值,会严重影响网络模型的性能。

利用神经网络只能训练权值等普通参数,而无法“训练”模型中包含的需要人工设置的“超参数”。这类超参数如同教学过程中教师的教学方法,需要及时根据学生的学习状况进行调整。为及时发现模型参数存在的问题,需要提供一个不同于训练数据集和测试数据集的验证数据集,训练的模型通过在验证数据集的测试表现来提供一个反馈信号,作为修改网络模型及参数的依据。

为什么不能用测试数据评估超参数的性能呢?这是因为如果使用测试数据集调整超参数,超参数的值会对测试数据集发生过拟合。这样的话,网络对测试数据的泛化能力往往存在高估的可能。因此,调整超参数时,必须使用单独的数据集。使用验证数据来评估超参数的好坏,根据效果判断是否需要终止当前的模型训练,更改超参之后再进行训练,最终得到更优的网络模型。

验证集需要在训练的过程中对模型进行验证,为避免影响训练速度,一般会间隔几个epoch进行验证,这样可以及时发现模型或者参数存在的问题,比如模型在验证集上发散、评价指标没有变化或者变化很慢等情况,可以及时终止训练,重新调整参数或者修改模型,不需浪费时间等到训练结束。另外,验证集可以验证模型的泛化能力,当网络模型在验证集上的效果比训练集上差很多时,应考虑模型是否过拟合。因此,在上面MNIST数据集的分类实验中,通过在给定的训练数据集中选取了20%的数据作为验证集,可以及时测试网络的泛化能力。(www.xing528.com)

当数据量比较小时(万级别及以下),一般将训练数据集、验证数据集和测试数据集按照6:2:2比例划分。但到了大数据时代,数据量有可能为百万级别,此时不需要数量庞大的验证集和测试集评估模型。假设有100万条数据,只需要拿出1万条数据当验证集,1万条数据当测试集,就可以很好地评估和优化模型了。因此,面对数据量很大的应用场景,可以将训练集、验证集、测试集比例调整为98:1:1。

在数据量很少,验证集会非常小(比如大约100个样本)。这时,验证集的划分方式可能会造成验证测试结果有很大的方差,这让模型评估变得不可靠。此时,可以采用k折交叉验证的方式。在k折交叉验证中,首先把数据集分割为k个不重合的子集,然后利用1个子集作为验证集,并使用其余的k-1个子集作为训练集。这样共重复k次,每次的验证数据集均不相同,平均k次的结果最终得到训练误差和验证误差。该方法的优势在于,保证每个样本数据都参与训练且都被测试,降低泛化误差。在实践中常采用10折交叉验证的方法。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈