李宏毅机器学习课程笔记-6.4学习率调整方法

RMSProp

2013年Hinton在Coursera提出。

  • 背景

    RMSProp是Adagrad的升级版。

    在训练神经网络时,损失函数不一定是凸函数(局部最小值即为全局最小值),可能是各种各样的函数,有时需要较大的学习率,有时需要较小的学习率,而Adagrad并不能实现这种效果,因此产生了RMSProp。

  • 定义

    其中$w$是某个参数;$\eta$是学习率;$g$是梯度;$\alpha$代表旧的梯度的重要性,值越小则旧的梯度越不重要。

  • 神经网络中很难找到最优的参数吗?

    面临的问题有plateau、saddle point和local minima。

    | 英文 | 中文 | 梯度 |
    | :—————: | :————: | :——————————————————-: |
    | plateau | 停滞期 | $\frac{\partial L}{\partial w}\approx0$ |
    | saddle point | 鞍点 | $\frac{\partial L}{\partial w}=0$ |
    | local minima | 局部最小值 | $\frac{\partial L}{\partial w}=0$ |

    2007年有人(名字读音好像是young la ken)指出神经网络的error surface是很平滑的,没有很多局部最优。

    假设有1000个参数,一个参数处于局部最优的概率是$p$,则整个神经网络处于局部最优的概率是$p^{1000}$,这个值是很小的。

Momentum

1986年提出

  • 如何处理停滞期、鞍点、局部最小值等问题?

    考虑现实世界中物体具有惯性、动量(Momentum)的特点,尽可能避免“小球”陷入error surface上的这几种位置。

  • 定义

    如下图所示,不仅考虑当前的梯度,还考虑上一次的移动方向:$v^t=\lambda v^{t-1}-\eta g^t,v^0=0$,

    其中上标$t$是迭代次数;$v$指移动方向(movement),类似于物理中的速度;$g$是梯度(gradient);$\lambda$用来控制惯性的重要性,值越大代表惯性越重要;$\eta$是学习率。

    Momentum

Adam

RMSProp+Momentum+Bias Correction,2015年提出

Adam VS SGDM

目前常用的就是Adam和SGDM。

Adam训练速度快,large generalization gap(在训练集和验证集上的性能差异大),但不稳定;SGDM更稳定,little generalization gap,更加converge(收敛)。

领域 技术/模型 优化器
Q&A、文意理解、文章生成 BERT Adam
BERT的Backbone、翻译 Transformer Adam
语音生成 Tacotron Adam
目标检测 YOLO SGDM
目标检测 Mask R-CNN SGDM
图片分类 ResNet SGDM
图片生成 Big-GAN Adam
元学习 MAML Adam

SGDM适用于计算机视觉,Adam适用于NLP、Speech Synthesis、GAN、Reinforcement Learning。

SWATS

2017年提出,尝试把Adam和SGDM结合,其实就是前一段时间用Adam,后一段时间用SGDM,但在切换时需要解决一些问题。

尝试改进Adam

  • AMSGrad

    • Adam的问题

      Non-informative gradients contribute more than informative gradients.

      在Adam中,之前所有的梯度都会对第$t$步的movement产生影响。然而较早阶段(比如第1、2步)的梯度信息是相对无效的,较晚阶段(比如$t-1$、$t-2$步)的梯度信息是相对有效的。在Adam中,可能发生较早阶段梯度相对于较晚阶段梯度比重更大的问题。

    • 提出AMSGrad

      2018年提出

  • AdaBound

    2019年提出,目的也是改进Adam。

  • Adam需要warm up吗?需要

    warm up:开始时学习率小,后面学习率大。

    因为实验结果说明在刚开始的几次(大概是10次)迭代中,参数值的分布比较散乱(distort),因此梯度值就比较散乱,导致梯度下降不稳定。

  • RAdam

    2020年提出

  • Lookahead

    2019年提出,像一个wrapper一样套在优化器外面,适用于Adam、SGDM等任何优化器。

    迭代几次后会回头检查一下。

  • Nadam

    2016年提出,把NAG的概念应用到Adam上。

  • AdamW

    2017年提出,这个优化器还是有重要应用的(训练出了某个BERT模型)。

尝试改进SGDM

  • LR range test

    2017年提出

  • Cyclical LR

    2017年提出

  • SGDR

    2017年提出,模拟Cosine但并不是Cosine

  • One-cycle LR

    2017年提出,warm-up+annealing+fine-tuning

  • SGDW

    2017年提出,

改进Momentum

  • 背景

    如果梯度指出要停下来,但动量说要继续走,这样可能导致坏的结果。

  • NAG(Nesterov accelerated gradient)

    1983年提出,会预测下一步。

Early Stopping

如果学习率调整得较好,随着迭代次数增加,神经网络在训练集上的loss会越来越小,但因为验证集(Validation set)和训练集不完全一样,所以神经网络在验证集上的loss可能不降反升,所以我们应该在神经网络在验证集上loss最小时停止训练。

Keras文档中就有关于Early stopping的说明。


Github(github.com):@chouxianyu

Github Pages(github.io):@臭咸鱼

知乎(zhihu.com):@臭咸鱼

博客园(cnblogs.com):@臭咸鱼

B站(bilibili.com):@绝版臭咸鱼

微信公众号:@臭咸鱼

转载请注明出处,欢迎讨论和交流!