early stopping & cross validation

欠拟合问题一般是很好解决的,提高模型复杂度(网络深度,embedding size等等)、加大训练数据量等。但是过拟合就是比较头疼的问题了,简单的根据欠拟合的方法倒推,模型的拟合能力往往是打不到预期的。学术界对于模型本身防止过拟合提出了许多方法,可以根据自己使用的模型使用不同的方法。在工业界,一般使用模型较多,因此在train model的时候如何防止过拟合、如何选取效果最优的模型,这里主要想说早停和CV(交叉验证)两种方法。

early stopping-早停

early stopping & cross validation_第1张图片
early stopping

在模型的training和eval中,如图所示,随着training step的增加,trianing loss一般是时间降低的,而eval时的loss则是先降低再升高,升高的原因就是因为模型过拟合导致的,最理想的情况应当是eval的loss将至最低的时候,模型的泛化能力最好。一般早停的方式的指标:

  1. 当测试集上的误差超过一定阈值时,可以停止
  2. 假设过拟合发生在训练误差降低很慢的时候,因此连续n轮训练误差降低很慢,就可以停止
  3. 当验证集连续n轮的误差在增长的时候停止

当然早停的方法比较偷懒,因为过拟合主要由于损失函数不当和方差较高导致的。早停使用一个方法来解决两个问题,有时候是不能解决问题的,当你停止了training,你发现损失不够小,但是又不希望过拟合。并且有时候误差表现并不是那么理想、平滑,如图所示,很有可能使用了早停,却错过了后面效果更好的情况。所以再细致一点可以从模型入手,从设计损失函数和降低方差两方面入手。


early stopping & cross validation_第2张图片
validation error

cross validation-交叉验证

由于我们训练模型的时候,训练集的划分很大程度上是影响着模型在测试集上的结果。如图所示,左边是train error,右边是数据集的不同划分下,test error的浮动,可以看到模型的性能差别较大,如何挑出在数据集中泛化能力最好的模型,就可以使用k折交叉验证。


early stopping & cross validation_第3张图片

k折交叉验证讲数据集随机分成k份,不重复的取其中的一份作为测试集,剩下的作为训练集训练模型,取k次后,最后模型的误差损失是这几次交叉验证的误差均值。由于我们在实验时,一般会选取多个模型做实验,或者是对于一个模型调试多个参数。有的时候该种模型、该种参数在特定划分下性能更好。使用CV可以更加公平的判断该方案的泛化能力。

参考:
https://blog.csdn.net/df19900725/article/details/82973049
https://www.jianshu.com/p/9ab695d91459
https://zhuanlan.zhihu.com/p/24825503

你可能感兴趣的:(early stopping & cross validation)