【深度学习】深度学习基础-Warm_up训练策略

背景

        学习率是最影响性能的超参数之一,如果我们只能调整一个超参数,那么最好的选择就是它。 其实在我们的大多数情况下,遇到 loss 变成 NaN 的情况大多数是由于学习率选择不当引起的

warmup介绍

        warmup可以称为训练热身。由于神经网络在刚开始训练的时候是非常不稳定的,因此刚开始的学习率应当设置得很低很低,这样可以保证网络能够具有良好的收敛性。但是较低的学习率会使得训练过程变得非常缓慢,因此这里会采用以较低学习率逐渐增大至较高学习率的方式实现网络训练的“热身”阶段,随着训练的进行学习率慢慢变大,到了一定程度,以设置的初始学习率进行训练,接着过了一些inter后,学习率再慢慢变小;学习率变化:上升——平稳——下降

warmup具体步骤

        启用warm up,设置warm up setp(一般等于epoch*iter_one_epoch),当step小于warm up setp时,学习率等于基础学习率×(当前step/warmup_step),由于后者是一个小于1的数值,因此在整个warm up的过程中,学习率是一个递增的过程!当warm up结束后,学习率以基础学习率进行训练,再学习率开始递减。

warmup学习率计算公式:

        其中base_lr是初始学习率,后面分式就是用来控制warm_up操作的,分子是模型训练当前迭代的step步数,分母中warm_epoch是设置的热身的epoch数(例如另epoch=5),iter_one_epoch是训练集迭代一个epoch需要的步数。

        从上式中可以看出,前warm_epoch个训练阶段,随着step增加,学习率是递增的,一直到warm_epoch时,分子等于分母,此时学习率增长到初始学习率的值,warmup阶段完成。

学习率变化曲线:

【深度学习】深度学习基础-Warm_up训练策略_第1张图片

应用场景

(1)训练出现NaN:当网络非常容易nan时候,采用warm up进行训练,可使得网络正常训练;

(2)过拟合:训练集损失很低,准确率高,但测试集损失大,准确率低,可用warm up;

应用原理

这个问题目前还没有被充分证明,目前效果有:
(1)有助于减缓模型在初始阶段对mini-batch的提前过拟合现象,保持分布的平稳;
(2)有助于保持模型深层的稳定性。

参考链接:https://blog.csdn.net/weixin_40051325/article/details/107465843

你可能感兴趣的:(Deep,Learning,深度学习,pytorch,神经网络)