本文主要是介绍[过拟合]早停法 (Early Stopping),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1、过拟合
过拟合(overfitting)指的是只能拟合训练数据, 但不能很好地拟合不包含在训练数据中的其他数据的状态[来自 斋藤康溢]
解决过拟合问题有两个方向:
- 降低参数空间的维度或者降低每个维度上的有效规模(effective size)。降低每个参数维度的有效规模的方法主要是正则化,如权重衰变(weight decay)和早停法(early stopping)等。
- 降低参数数量的方法包括greedy constructive learning、剪枝和权重共享(卷积)等。
2、early stopping
2.1 定义
首先,先了解另一个东西,Callbacks.callbacks用于指定在每个epoch开始和结束的时候进行哪种特定操作。Callbacks中有一些设置好的接口,可以直接使用,如’acc’, 'val_acc’, ’loss’ 和 ’val_loss’等等。
而EarlyStopping是Callbacks的一种,EarlyStopping则是用于提前停止训练的callbacks。具体地,可以达到当训练集上的loss不在减小(即减小的程度小于某个阈值)的时候停止继续训练。
2.2 意义
为了获得性能良好的神经网络,网络定型过程中需要进行许多关于所用设置(超参数)的决策。超参数之一是定型周期(epoch)的数量:亦即应当完整遍历数据集多少次(一次为一个epoch)如果epoch数量太少,网络有可能发生欠拟合(即对于定型数据的学习不够充分);如果epoch数量太多,则有可能发生过拟合(即网络对定型数据中的“噪声”而非信号拟合)。早停法旨在解决epoch数量需要手动设置的问题
同时, 它也可以被视为一种能够避免网络发生过拟合的正则化方法 [与L1/L2权重衰减和丢弃法(dropout)类似].根本原因就是因为继续训练会导致测试集上的准确率下降。那继续训练导致测试准确率下降的原因猜测可能是1. 过拟合 2. 学习率过大导致不收敛 3. 使用正则项的时候,Loss的减少可能不是因为准确率增加导致的,而是因为权重大小的降低。
2.3 原理
- 开始时,将训练的数据分为真的要训练的训练集和验证集
- 每个epoch结束后(或每N个epoch后): 在验证集上获取测试结果,记录目前为止最好的验证集精度, 而随着epoch的增加,如果在验证集上发现测试误差上升,则停止训练;
- 将之前处理测试集时准确率最高时的权重作为网络的最终参数。
怎样才认为验证集精度不再提高了呢?并不是说验证集精度一降下来便认为不再提高了,因为可能经过这个Epoch后,精度降低了,但是随后的Epoch又让精度又上去了,所以不能根据一两次的连续降低就判断不再提高。在现实中,模型在验证集上的误差不会像上图那样平滑,而是像下图一样:
也就是说,模型在验证集上的表现可能从短暂的变差之后继续变好.总之,我们是不能提前知道它的走势,就像预测股票走势一样, 那到底什么时候喊停,所以我们需要一些停止标准来帮助我们去寻找更好的训练时间和泛化错误之间的权衡.
2.4 使用
我们需要一个停止的标准来实施早停法,因此,我们希望它可以产生最低的泛化错误,同时也可以有最好的性价比,即给定泛化错误下的最小训练时间.
2.4.1 停止标准简介
停止标准有很多,也很灵活,大约有三种。在给出早停法的具体标准之前,我们先确定一下符号。假设我们使用E作为训练算法的误差函数,那么Etr(t)是训练数据上的误差,Ete(t)是测试集上的误差。实际情况下我们并不能知道泛化误差,因此我们使用验证集误差来估计它。
2.4.2 停止标准选择规则
reference
1、深度学习技巧之Early Stopping(早停法)
2、[深度学习] keras的EarlyStopping使用与技巧
3、论文《Early Stopping | but when?》
这篇关于[过拟合]早停法 (Early Stopping)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!