五、早停
当训练一个容量较大的模型时会经常发现:训练误差逐渐降低,但是验证误差先下降后上升。
当验证误差没有进一步改善时,算法就提前终止。这种策略被称作早停
early stopping
。早停是深度学习中最常用的正则化形式,因为它简单、有效。
当训练终止时,返回的不是最新的模型参数,而是验证误差最小的模型参数,因此需要频繁存储模型参数。
5.1 早停算法
早停算法:
输入:
- 当前验证集的误差非最小值的次数
- 验证集验证的间隔
- 初始参数
输出:
- 最佳参数
- 获得最佳参数时迭代的步数
算法步骤:
初始化:
- 参数变量
- 迭代步数变量
- 验证次数变量
- 验证集的最小误差
- 最佳参数
- 最佳迭代步数
循环,循环条件为: :
学习模型 步(每隔 步验证一次)
更新
记录最新的验证集误差
如果 ,则: 。
如果 ,则: 。
若当前验证集误差是最小的,则 清零。这意味着必须连续 次 ,才说明算法到达终止条件。
可以认为早停是一个非常高效的超参数选择算法:训练步数是一个超参数,该超参数在验证误差上具有
U
形曲线。- 早停策略通过控制训练步数来控制模型的有效容量
capacity
。 - 早停策略只需要跑一轮训练就能够得到很多的超参数(即:训练步数)及其对应的验证误差。
- 早停策略通过控制训练步数来控制模型的有效容量
早停策略的代价有两个:
需要在训练期间定期评估验证集。
- 可以通过并行的执行训练和验证来加速这一过程。
- 也可以选取一个较小的验证集、或者不那么频繁地评估验证集来减小评估代价。
需要保持最佳的参数的副本。
这种代价一般可以忽略不计。
早停是正则化的一种非常不起眼的形式,其优点有:
- 它几乎不需要干涉基本的训练过程,适合任何模型。
- 可以单独使用,或者与其他的正则化策略相结合。
- 早停不仅有正则化的好处,还有降低计算成本的好处。
以泛化误差的偏差方差分解角度来看,早停试图同时解决偏差和方差,其结果很可能导致得到的模型并不是一个最优的模型。
如下图中所示的验证误差曲线。因为提前停止了训练,所以使得代价函数的值可能不够小,即:偏差可能还可以继续降低。方差(即:验证误差与训练误差之间的
gap
) 虽然处于上升趋势,但是它们叠加的结果可能导致验证误差呈现波动走势。
5.2 二次训练
早停需要验证集,这意味着某些样本不能用于模型的训练过程,这会造成数据的浪费。
为了更好地利用验证集的样本,可以在早停之后进行额外的训练。在第二轮额外的训练中,所有的训练数据都被包括在内(包括验证集)。
有两个基本的策略可以用于第二轮训练过程 :
保留迭代步:再次初始化模型,然后使用所有数据再次训练。此时使用第一轮早停确定的最佳步数作为第二轮的迭代步数。
该策略重新训练模型,成本较高,但是效果较好。
保留参数:保持从第一轮训练中获得的参数,然后使用全部的数据继续训练。此时观察原始验证集的损失函数,直到它低于第一轮停止时的原始训练集的损失函数值。
根据早停策略,第一轮结束时原始验证集的损失函数值是较大的
该策略避免了重新训练模型的高成本,但是表现一般。
这是因为一旦将 合并到训练集,则对它们评估的结果就是训练误差(而不再是验证误差)。新的训练误差小于原来的验证误差,并不能说明模型的泛化能力得到了提升。
保留迭代步二次训练算法:
输入:
- 训练集 ,
步骤:
- 将 和 分割为 和
- 随机选择参数的初始化值 ,将 作为训练集, 将 作为验证集,运行早停算法,返回最佳训练步数
- 再次选择参数的另一个初始化值 ,在 上再次训练 步
保留参数二次训练算法:
输入:
- 训练集 ,
步骤:
将 和 分割为 和
随机选择参数的初始化值 ,将 作为训练集, 将 作为验证集,运行早停算法,返回算法停止时的目标函数的值
迭代:
- 在 上训练 步 (每隔 步检查一次,为了降低评估代价)
5.3 早停与 L2 正则化
早停将优化过程的参数空间限制在初始参数值 的一个小的邻域内。
假设参数 。令 ,它就是无正则化项时使得目标函数最小的权重向量。
和 正则化中的推导相同,有: 。
为 在 处的海森矩阵, 其中 在 的一个邻域内。
根据梯度下降法,参数的迭代过程为:
注意:这里并没有加入任何正则化项,而是使用
将 进行特征分解: ,其中 为对角矩阵, 为特征向量的一组标准正交基。则有:
令参数向量的初始值为原点: ,并且选择 使得 ( 为 的特征值)。则经过 次参数更新之后: 。
根据 正则化项中的推导结果,有:
通过直接写出逆矩阵的形式可以证明等式
如果超参数 满足: ,则 正则化等价于早停。
为了求得三个超参数满足的条件,求解:
则有: 。
两边取对数,然后使用 的级数展开有(假设 ,且 ): 。
由于 是 的最小点,因此海森矩阵 是半正定的,因此其特征值
则有: 。即: 的倒数与 正则化系数的作用类似。
在给定 的条件下:
- 越小,则正则化系数越大。这与以下事实吻合: 从原点出发开始迭代,如果 越小,则 越靠近原点。
- 越大,则正则化系数越小。这与以下事实吻合:此时 迭代足够多步之后会逐渐远离原点。
假设用学习率 进行了 个优化步骤(对应于 个训练迭代), 可以视作模型的有效容量
effective capacity
的度量。假设梯度有界,则限制迭代的次数和学习率,会限制 从 能够到达的范围。 的行为就像是 正则化项的系数的倒数。
早停比 正则化更有优势:
早停能够监控验证误差,从而自动在某个较好的参数解的位置终止。
训练一次就相当于得到了多个超参数 的结果。
采用 正则化需要多次训练,从而选择合适的超参数 的值。
这种方式的计算成本太高。