pytorch优化器学习速率调整实验及结论

一.前言:

目前我们对深度学习的研究只是工程科学,所能优化的点做有效的方式只能是有目的的做实验,下面就将pytorch的bi-gru分类模型的调优过程附上。

二.背景:

使用tf的效果85%/32%,keras是85%/34%,而pytorch的效果只有85%/22%,网络结构基本相同,都是bi-gru,所不同的只是评估样本和优化器。需要做的是和tensorflow和keras的效果打平,从优化器的学习速率调优上,就可以做到这一点,可见学习率对一个训练器的重要程度。

三.实验过程:

1. 一开始的 lr:0.5,decay:0.08, 准85%/召0.000%, auc:0.78, 不收敛-------^^^^

2.既然不收敛,调整lr为0.01, decay:0.8试一下:结果:到20%了,还需提高^_^

auc:0.9485560449492769

高分段:['0.6605', '0.8519', '0.2035']

3.lr再稍微往上调一点试试:初始lr为0.05, 效果出来了,挺好:到32%了

4. decay为0,也就是不衰减会怎样? lr调成0.01不变试试:也还好,比衰减差3个点

auc:0.9589003424257141

高分段:['0.5628', '0.8526', '0.2942']

5.用流行的schedule_optimizer,三角学习率,lr 先升后降的学法试试:

auc:0.963233359864019

高分段:['0.5980', '0.8516', '0.3429']


哦也,到34%了,果然圣贤足迹是不容置疑的 ^ __  ^

四.结论:

学习速率的调整对效果影响显著

学习速率过大,则无法找到最优点,局部最优点也无法定位,因此无法收敛;

学习速率过小,则只能徘徊在一段空间附近,只能找到局部最优,或者无法找到最优点。

实验证明,最优的学习速率方案是先有个warmup步长,进行学习速率上升, 经过warmup到达最高点,然后逐渐下降。

一定要找到一个合理的学习速率,使全局的学习速率保持到这个均值,才能达到比较好的效果,比如这次bi-gru的调整最优的平均速率是0.01

五.使用pytorch的心得及结论(一些定理):

     1. 在保持学习速率均值的情况下,三角学习率> 按照auc逐步衰减> 保持均值不变;

     2. 交叉验证的效果好于特定的验证集,最好的训练效果是交叉验证,最后用测试集进行评估,也就是说,训练集、校正集、评估集是三个集合,不做交叉。

     3.网络merge的最好组合方法: merge的最好组合,是模型差异性越大越好,多次实验证明:单模型效果稍差的情况下,cnn与lstm的merge会好于两个lstm的merge效果,

        模型差异性大的结果进行merge,会得到最好的效果。

     4. fintune微调的最优方式:1. 数据量:fintune预训练的集合数据量> 精细标注样本的数据量 2.层冻结:将后面的全连接层与loss计算部分冻结,只fintune 词向量层及编码层,效果较好。

你可能感兴趣的:(pytorch优化器学习速率调整实验及结论)