Early Stopping与Learning Rate

转载自:https://www.jianshu.com/p/9ab695d91459

https://blog.csdn.net/manong_wxd/article/details/78734839

目的

为了获得性能良好的神经网络,网络定型过程中需要进行许多关于所用设置(超参数)的决策。超参数之一是定型周期(epoch)的数量:亦即应当完整遍历数据集多少次(一次为一个epoch)?如果epoch数量太少,网络有可能发生欠拟合(即对于定型数据的学习不够充分);如果epoch数量太多,则有可能发生过拟合(即网络对定型数据中的“噪声”而非信号拟合)。

早停法旨在解决epoch数量需要手动设置的问题。它也可以被视为一种能够避免网络发生过拟合的正则化方法(与L1/L2权重衰减和丢弃法类似)。

根本原因就是因为继续训练会导致测试集上的准确率下降。
那继续训练导致测试准确率下降的原因猜测可能是1. 过拟合 2. 学习率过大导致不收敛

原理

  • 将数据分为训练集和验证集
  • 每个epoch结束后(或每N个epoch后): 在验证集上获取测试结果,随着epoch的增加,如果在验证集上发现测试误差上升,则停止训练;
  • 将停止之后的权重作为网络的最终参数。

这种做法很符合直观感受,因为精度都不再提高了,在继续训练也是无益的,只会提高训练的时间。那么该做法的一个重点便是怎样才认为验证集精度不再提高了呢?并不是说验证集精度一降下来便认为不再提高了,因为可能经过这个Epoch后,精度降低了,但是随后的Epoch又让精度又上去了,所以不能根据一两次的连续降低就判断不再提高。一般的做法是,在训练的过程中,记录到目前为止最好的验证集精度,当连续10次Epoch(或者更多次)没达到最佳精度时,则可以认为精度不再提高了。

直观理解

Early Stopping

最优模型是在垂直虚线的时间点保存下来的模型,即处理测试集时准确率最高的模型。

为什么能减小过拟合

当还未在神经网络运行太多迭代过程的时候,w参数接近于0,因为随机初始化w值的时候,它的值是较小的随机值。当你开始迭代过程,w的值会变得越来越大。到后面时,w的值已经变得十分大了。所以early stopping要做的就是在中间点停止迭代过程。我们将会得到一个中等大小的w参数,会得到与L2正则化相似的结果,选择了w参数较小的神经网络。

Early Stopping的缺点

没有采取不同的方式来解决优化损失函数和降低方差这两个问题,而是用一种方法同时解决两个问题 ,结果就是要考虑的东西变得更复杂。之所以不能独立地处理,因为如果你停止了优化代价函数,你可能会发现代价函数的值不够小,同时你又不希望过拟合。

扩充

如果不用early stopping降低过拟合,另一种方法就是L2正则化,但需尝试L2正则化超级参数λ的很多值,个人更倾向于使用L2正则化,尝试许多不同的λ值。

参考资料

  • https://deeplearning4j.org/cn/earlystopping
  • https://blog.csdn.net/heyongluoyao8/article/details/49429629
  • deeplearning.ai


作者:zzkdev
链接:https://www.jianshu.com/p/9ab695d91459
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。


1. 学习率对训练的影响

为了能够使得梯度下降法有较好的性能,我们需要把学习率的值设定在合适的范围内。太大的学习速率导致学习的不稳定,太小值又导致极长的训练时间。自适应学习速率通过保证稳定训练的前提下,达到了合理的高速率,可以减少训练时间。

2. 学习率的设置

固定学习率的设置:

  1. 经验选择:一般情况下倾向于选取较小的学习速率以保证系统的稳定性,学习速率的选取范围在0.01~0.8之间。
  2. 对于不同大小的数据集,调节不同的学习率。根据我们选择的成本函数F()不同,问题会有区别。当平方误差和(Sum of Squared Errors)作为成本函数时, ∂F(ωj) / ∂ωj 会随着训练集数据的增多变得越来越大,因此学习率需要被设定在相应更小的值上。解决此类问题的一个方法是将学习率λ 乘上1/N,N是训练集中数据量。这样每步更新的公式变成下面的形式:ωj = ωj - (λ/N) * ∂F(ωj) / ∂ωj 
    解析:固定学习率是根据cost曲线的走向来不断调整学习率,最终获得比较好的初始化。其往往搭配Early Stopping来结束训练。

可变的学习率:

  1. 在每次迭代中调节不同的学习率。在每次迭代中去调整学习率的值是另一种很好的学习率自适应方法。此类方法的基本思路是当你离最优值越远,你需要朝最优值移动的就越多,即学习率就应该越大;反之亦反。例如:如果相对于上一次迭代,错误率减少了,就可以增大学习率,以5%的幅度;如果相对于上一次迭代,错误率增大了(意味着跳过了最优值),那么应该重新设置上一轮迭代ωj 的值,并且减少学习率到之前的50%。
  2. 当validation accuracy满足early stopping时,但是我们可以不stop,而是让learning rate减半之后让程序继续跑。下一次validation accuracy又满足no-improvement-in-n规则时,我们同样再将learning rate减半。继续这个过程,直到learning rate变为原来的1/1024再终止程序。(1/1024还是1/512还是其他可以根据实际确定)。


你可能感兴趣的:(只优化算法,deep,learning)