Company dynamics

【Pytorch神经网络理论篇】 10 优化器模块+退化学习率

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第5天,点击查看活动详情

?

反向传播的意义在于告诉模型我们需要将权重修改到什么数值可以得到最优解,在开始探索合适权重的过程中,正向传播所生成的结果与实际标签的目标值存在误差,反向传播通过这个误差传递给权重,要求权重进行适当的调整来达到一个合适的输出,最终使得正向传播所预测的结果与标签的目标值的误差达到最小,以上即为反向传播的核心思想

正向结构与损失函数获取完毕之后,通过优化器模块中优化函数来实现对学习参数的优化,其内部原理主要是梯度下降的方法实现的

优化器是指通过算法帮助模型在训练过程中更快更好地将参数调整到位,梯度下降主要在损失函数求解出损失值时,它利用梯度下降的方向为前进方向,沿着梯度下降的方向求解最小值,帮助模型找到最小的那个损失值,从而可以反向推算出学习参数的权重,达到优化的目的。

主要特点:遍历全部数据集计算一次损失函数,根据函数结果更新梯度。

缺点:每次都要遍历全部数据集,计算开销大,计算慢,不支持在线学习。

主要特点:每检查一个数据就进行损失函数计算,求梯度更新函数

缺点:计算速度快,收敛性不好,易在最优点附近摆动,两次参数也可能互相抵消,函数震荡剧烈。

主要特点:将数据集分成若干批,按照批次来实现更新参数,一批中的一组数据共同决定梯度的反向,梯度下降方向不易跑偏,减少随机性,计算量小。

缺点:————————

较为常用,学习率设为3e-4

基于RAdam与Lookhead优化器基础上融合而来,兼顾两者的优点,综合性能占优,使得其在各种模型中都具有较高的精度、收敛速度快、使用方便、无需手动调参。

  • RAdam:带有整流器的Adam,能够利用潜在散度动态地打开或者管理自适应学习率。
  • Lookhead:通过迭代更新两组权重的方法,提前观察另一个优化器生成的序列进而选择探索方向。

在Adam优化器基础上使用二阶冲量,在计算机视觉模型上表现更为出色

在带有词向量的自然语言处理模型中表现得更好

一般先使用Adam优化器训练模型,在模型无法进一步收敛后,再使用SGD优化器进行手动调节学习率,进一步提升模型性能。

一般以Adam优化器为最常用,在收敛速度、模型训练精度都具有较好的效果,对于学习率设置较为宽松,更易于使用。

优化器在工作时,先算出梯度(根据损失值对某个参数求偏导),再沿着该梯度的方向算出一段距离(由学习率决定),该差值作为变化值更新到原有参数上。


Pytorch中的每个优化器类中均有param_groups属性,该属性包括每个待优化权重的配置参数,是一个列表对象


退化学习率/学习率衰减,即在刚训练开始时,使用大的学习率加速,训练到一定程度后使用小的学习率来提高精度。


?编辑

在Ptorch的optim模块中,将退化学习率的多种实现方法封装到lr_scheduler接口中


?编辑

  • 等间隔调整学习率StepLR():每训练指定步数,学习率调整为 lr=lr×gamma (gamma为手动设置的退化率参数)。

  • 多间隔调整学习率MultiStepLR():按照指定的步数来调整学习率。调整方式也是lr=lr x gamma。
  • 指数衰减调整学习率ExponentialLR():每训练一步,学习率呈指数型衰减,即学习率调整为lr=lr ? gamma^epoch (step为训练步数)。

  • 余弦退火函数调整学习率CosineAnnealingLR():余弦退火指的就是按照弦函数的曲线进行衰减,每训练一步,学习率呈余弦函数型衰减。

    
    

  • 根据指标调整学习率ReduceLROnPlateau:当某指标(loss或accuracy)在最近几次训练中均没有变化(下降或升高超过给定阈值)时,调整学习率。

  • 自定义调整学习率LambdaLR:将每个参数组的学习速率设置为初始的lr乘以一个给定的函数。

LambdaLR最为灵活,可以根据需求指定任何策略的学习率变化。它在fne-tune(微调模型的一种方法)中特别有用,不但可以为不同层设置不同的学习率,而且可以为不同层设置不同的学习率调整策略。

MultiStepLR():在论文中使用较多,简单可控。

ReducelROnPlateau():自动化程度高,参数多。


?编辑


?编辑

上述代码 参数Threshold_mode有两种取值:

'rel': 在参数mode为max时,如果监控值超过best(1+threshold),则触发规则;在参数mode为min时,如果监控值低于best(1 - threshold),则触发规则。【best为训练过程中的历史最好值】

'abs': 在参数mode为max时,如果监控值超过best + threshold,则触发规则;在参数mode为min时,如果监控值低于best - threshold,则触发规则。【best为训练过程中的历史最好值】

?

平台注册入口