深度学习中,当我们在训练一个模型的时候,如果设置的epoch太小或者太大,都将影响模型的泛化性能。epoch过小,模型不能学习到样本的主要特征;epoch过大,模型学习的“太好了”,会造成过拟合的情况。下边介绍一种防止模型过拟合的策略。
一、早停法(EarlyStopping)简介
在大多数关于监督神经网络训练的介绍性论文中,你可以看到类似于图1所示的图表。纵坐标代表损失值的大小,横坐标代表训练的轮数。随着训练轮数的增加,训练集合的损失值先降低最后趋于平缓。而验证集的损失值先下降后上升。我们训练模型的目的是为了得到一个泛化性能比较好的模型,即在验证集上误差(损失值)较小。我们选择验证集损失值的最小处的训练轮数(epoch),提前终止训练,一方面保存最佳的模型,另一方面节省了训练时间。
图一:理想化的训练集误差和验证集的误差
然而,对于真实的神经网络训练,验证集误差的演变并不像图1所示的那样平滑,而更像图2所示。
图二:一个真实的验证误差曲线
真实的验证误差曲线几乎总是有多个局部最小值。如何选取合适的训练轮数是我们要考虑的主要问题。
二、如何使用早停法
我们搜索那些产生最低泛化误差的标准,以及那些具有最佳“性价比”的标准,即对于给定的泛化误差需要最少的训练,或者(平均而言)在一定的训练时间内产生最低的泛化误差。以下是三类主流停止准则。
第一类停止准则
Eopt(t)的值定义是在迭代到t之前获得的最小验证集误差。
GL(t)叫做泛化损失,表示为验证误差相对于最小值的增加(以百分比为单位)
高泛化损失是停止训练的候选准则之一,因为它直接表明过拟合(验证集的损失值开始上升,即泛化性能开始下降)。我们选择一个合适的阈值,当泛化损失超过这个阈值就停止训练。
第二类停止准则
然而,当训练速度过快的时候,我们想要模型继续训练,我们要抑制停止。当训练误差仍然快速减小时,泛化损失有更高的机会被“修复”。我们认为,在误差缓慢减小时才会出现过拟合。为了形式化这个概念,我们定义一个长度为k的训练条带是一个编号为n + 1:::n + k的k次序列,即度量进展(measure progress)其中n可以被k整除。
这个公式表示条带期间的平均训练误差比条带期间的最小训练误差大多少。在训练的不稳定阶段,训练集误差会上升而不是下降。这是有意为之的,因为许多训练算法有时会通过在权重空间中采取不适当的大步骤而产生这种“抖动”。然而,进度度量保证在长期运行中接近零,除非训练是全局不稳定的(例如振荡)。因此,我们引入第二个停止准则,即泛化损失和进展的商。当大于阈值时,停止训练。
第三类停止准则
最后一类停止准则为:当泛化错误在连续s个周期内增长的时候停止。
当验证集错误在连续s个周期内出现增长的时候,我们假设这样的现象表明了过拟合,它与错误增长了多大独立。这个停止标准可以度量局部的变化,因此可以用在剪枝算法中,即在训练阶段,允许误差可以比前面最小值高很多时候保留。