数据主要分为训练数据和测试数据。在实际的训练中,还会使用到一个数据集,叫做验证集。验证集通常被用在训练过程中,但并不作为用于更新网络权重的一部分。主要作用是在训练过程中评估模型的准确度和损失函数值,作为一个指标选择模型的超参数,比如网络层数、隐藏单元数量,或是激活函数的类型等。同时验证集也用来观察训练是否已经过拟合,因为验证集并不作为更新网络权重的数据,所以能体现网络的泛化能力。在神经网络中,随着训练的进行,在训练集和验证集上的损失函数值长呈现如图3-36所示的趋势。
图3-36和图3-33的趋势非常相似,只不过横坐标换成了迭代次数。定性理解这个趋势,在训练的开始阶段,模型什么都尚未学到,所以无论训练集还是验证集误差都很高。随着训练的不断迭代,在训练集上的误差会越来越小,这是学习到数据特征的阶段,模型仍然欠拟合,所以在训练过程中,训练集和验证集的误差都下降了。然后就是过拟合阶段,训练集的误差不断下降,但是泛化能力则变差,于是验证集上的误差变高了。所以当验证集上值最小时,就是参数最优的时候。
一个非常简单的策略是每当验证集上的损失函数值达到一个比之前更小的值,就把这个值记录下来,然后继续训练,直到发现某一个最小值后一个给定的迭代次数内,如果没有发现心的更小的值,则认为已经过拟合了。于是之前验证集上最小值对应的模型就是最优的模型,这个简单粗暴的策略叫做提前停止。提前停止虽然简单,但是有个潜在的风险就是用来判断是否已经过拟合的次数并不容易确定。这个次数无论是个常数还是一个比例,如果太长,会浪费计算资源,如果太短,则有可能在验证集误差还有可能继续下降(比如鞍点或者缓慢离开极小值时)的时候就提前结束。
虽然验证集知识在训练中使用,但是和测试集有个共性就是都不参加到参数的剃度下降训练中。如表3-1总结了这3中数据集的特点。
当然,如果数据非常匮乏的情况下,有个策略是将验证集和测试集合二为一,则比没有强。
深度学习数据集划分和提前停止
最新推荐文章于 2024-07-13 10:57:50 发布