深度学习——学习率与warm up

学习率设定

learning rate(lr)是神经网络炼丹最重要的参数,没有之一

没有特定规律,理论上来说,通常学习率过小->收敛过慢,学习率过大->错过局部最优

实际上来说,可能:学习率过小->不收敛,学习率过大->不收敛

为什么会这样,还没有通用理论去解释。

设定学习率的一些常用trick:

首先寻找ok(合理范畴-计算负担-内达到好的结果)的学习率,然后调整其它参数, 其它参数调的差不多了,再去精调学习率。

1、lr与其它参数有相互作用,但不多。在计算负担的起的情况下,选合适的学习率:比如选了好学习率,但要跑100 epoch才能收敛,花了一天,没时间调其它参数了,这种情况下我可能宁可舍弃一些精度,选一个ok的学习率,比如10个 epoch收敛。

2、lr与样本数量关系很大

比如样本比较大,或重复比较多,都会影响学习率。如果样本数量不变的话,一般原来ok的lr,之后还ok。

而提升算法效果比较有效的一个策略是数据扩充,不幸的是数据扩充会影响lr, 需要注意。

3、不同层采用不同的学习率

(1)一部分已经训练好,然后在它上层再搭一层模型

如果底层模型训练好了,然后训练上层模型,这时如果采用一样的学习率,会出现问题。

因为底层模型训练好了,我可能只要稍微微调下就训练好了。

底层模型训练好,上层模型随机初始化,lr不能太小

上下层不一样的话,lr太大太小都不行

trick:

先固定下层,只训练上层,训练差不多ok时,再一块训练

这里ok的意思:一般上层直接train到局部最优就完事了,不要只保留局部最优,因为局部最优可能很难出来。在此之前保留一些checkpoint,可以在这基础上优化。只训练上层不能在验证集上达到最优,但同时要避免因只训练上层陷入局部最优

(2)上层比底层学习率大一些

大多少,没有固定说法。比如指数层级去处理,lr指数缩减

一层层训练,从顶向下一层层训练,理论上有效,实际上算力问题


4、在最终阶段降低学习率,后者babysit

最后比较稳定,降低lr更容易找到局部最优,可以增加batchsize, 这样更稳定

babysit:看整个训练过程,当在验证集上精度不再提升时,降低lr,再跑。细调。

5、 warm-up

从头训练时用..待加

6、常见学习率

finetune: 1e-5, 2e-5, 5e-5

从头训练:一般可以从0.01开始试,如果出现问题就调整。

如果收敛太快,很快在训练集上过拟合了,我就降低lr

如果训练过慢或不收敛,我就增加一点lr

你可能感兴趣的:(深度学习——学习率与warm up)