改善深度学习训练的trick总结

在深度学习中,同样一个模型用不同的初始化,数据处理,batch size,学习率,优化器都能得到不同性能的参数。我根据自己参与过的比赛中经常用到的一些trick进行大致的总结,有代码的会顺便附上,方便自己以后使用。

学习率调整

在训练模型过程中,我们可以使用固定的学习率,但一些研究工作显示在模型训练过程中使用动态的学习率有助于加速收敛,在更少的epoch里得到更好的模型精度。

CLR

在每个batch/epoch训练结束后调整学习率,而且在一定范围内呈周期性变化,有助于用更少的迭代次数得到更优的参数。CLR一般有三中参数调整模式:‘exp_range’,‘triangular’和’triangular2’;下图是’triangular2’模式。

CLR学习率周期变化

代码链接

pytorch版本:https://github.com/anandsaha/pytorch.cyclic.learning.rate
keras版本:https://www.kaggle.com/shujian/single-rnn-with-4-folds-clr

参数设置

1、其中stepsize最好设置为一个epoch迭代次数的2~10倍;
2、base_lr是最低学习率,max_lr是最高学习率,max_lr最好设置为base_lr的3到4倍;
3、一共有三种周期变化模式:trianglar、triangular2、exp_range,在论文中,后两者表现更好;

余弦退火

在采用批次随机梯度下降算法时,神经网络应该越来越接近Loss值的全局最小值。当它逐渐接近这个最小值时,学习率应该变得更小来使得模型不会超调且尽可能接近这一点。余弦退火(Cosine annealing)利用余弦函数来降低学习率,进而解决这个问题,如下图所示:


在这里插入图片描述

该调整学习率的方法pytorch是自带的,在torch.optim.lr_scheduler模块中,函数名为CosineAnnealingLR,用法可以参考pytorch文档:https://pytorch.org/docs/master/optim.html#how-to-adjust-learning-rate。

SGDR

神经网络在训练过程中容易陷入局部最优值,SGDR通过梯度下降过程中突然提高学习率来跳出局部最优值并找到通向全局最优值的路径。这种方式称为带重启的随机梯度下降。


在这里插入图片描述

代码链接

keras版本:https://github.com/emrul/Learning-Rate

参数设置

1、min_lr:最小学习率,max_lr:最大学习率;
2、base_iterations:第一个下降周期的长度,mul_iterations:后面每个下降周期是之前下降周期的几倍;
3、使用SGDR回调函数的时候记得把模型的优化器设置为’sgd’;

Switch Adam to SGD

前期用Adam优化器,迅速收敛,后期切换到SGD,慢慢寻找最优解。

集成手段

在传统集成方法中,stacking与bagging是比较主流的方法,stacking即是训练一些不同的模型在同一批数据上得到不同的预测结果,将预测结果作为新的特征,最后用一个上层的模型学习这些新特征到目标之间的映射关系,如果是用的线性分类器,那也可以称为blending。这种方法在深度学习中当然也是适用的,但需要多个基模型的训练,比较耗时。所以有相关的研究工作提出了单模型集成的方法。

Snapshot Ensemble

神经网络在训练过程中容易陷入局部最优值,快照集成方法把每个epoch中的局部最优参数保存下来,并最终取各个模型的平均。该方法属于单模型集成,不需要耗费额外的训练代价,而且适合与防止局部最优的方法结合使用。


在这里插入图片描述

代码链接

keras版本:https://github.com/titu1994/Snapshot-Ensembles

FGE

FGE采用线性分段循环学习策略代替余弦;每个循环只有2到4个epoch。由于在足够多的不同模型间,存在低损失的连接通路,沿着这些通路,采用短循环是可行的,而且在这一过程中,会产生差异足够大的模型,集成这些模型会产生很好的结果。与快照集成相比,FGE提高了模型的性能,每次循环经过更少的epoch就能找到差异足够大的模型(训练速度更快)。

SWA

1、每次学习率循环结束时产生的局部最小值趋向于再损失面的边缘域累积,这些边缘区域上的损失值较小 ( W 1 , W 2   a n d   W 3 ) (W_1,W_2\ and\ W_3) (W1,W2 and W3)。通过对这几个这样的点取平均,很有可能得到一个更低损失的全局化的通用解(下图中的 W s w a W_{swa} Wswa)。即在权重空间而不是模型空间对这些点进行平均。


在这里插入图片描述

2、FGE集成对k个模型集成的测试预测需要k倍的计算时间。但SWA可以解释成FGE集成的近似值,且只需单个模型的测试时间。
3、相较于SGD, SWA能够使所取得的解在本质上具有更好的优化。SGD一般收敛于最优点的宽阔平坦区域边界附近的点;此外,SWA能够找到一个位于该地区中心的点。

代码链接

keras版本:https://github.com/xuyiqiang-learn/SWA_keras

  • 0
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值