【李宏毅2020 ML/DL】P8-9 Optimization for Deep Learnin | 优化器技术总结,SGDM 与 Adam 对比与使用建议
我已经有两年 ML 经历,这系列课主要用来查缺补漏,会记录一些细节的、自己不知道的东西。
已经有人记了笔记(很用心,强烈推荐):
https://github.com/Sakura-gh/ML-notes
本节对应笔记:在 Sakura-gh/ML-notes 仓库中无。
本节内容综述
- 本节由由助教
簡仲明
同学讲授,目的为介绍Adam
等优化器,不会讲解证明,力求大家会用就好。 - 首先复习了之前了解到的概念、符号等。
- on-line 是指只能见到一对
(x, y)
,off-line 是在拥有所有(x, y)
后,进行学习。 - 介绍了
SGD
,SGDM(SGD with Momentum)
(上节课有提及); - 接着介绍了
Adagrad
(上节课介绍过),可以理解为对于Momentum
的改进,防止在大梯度时走过大,小梯度时走过小。 -
RMSProp
进行了 操作,防止在某一幅度摆动过于夸张。 - 但上述方法依然无法处理卡在局部最小的问题。引出
Adam
,可以理解为SGDM + RMSProp
。 - 接着,助教讲到“关于 Adaptive 的技术都是2014年以后提出的”,原因是其应用越来越广泛,举了例子:
BERT
由 ADAM 训练,Transformer
由 ADAM 训练,Tacotron
由 ADAM 训练;YOLO
由 SGDM 训练,Mask R-CNN
由 SGDM 训练,ResNet
由 SGDM 训练;Big-GAN
由 ADAM 训练,MAML
由 ADAM 训练。 - 为什么只用
SGDM
或者Adam
?因为这二者抢到了两个极端的位置,见[小细节](#Adam vs SGDM)。 - SWATS 这个技术于 2017 提出,将 Adam 与 SGDM 简单结合。
- 接着,引出了 Adam 的缺陷(会被差的小的梯度牵着鼻子走),提出了
AMSGrad(2018)
。但是AMSGrad only handles large learning rates
。 - 接着,引出 Adam 另一个缺陷(梯度大时,学习率过小),由
AdaBound(2019)
解决。但是该方法也有些“粗暴”。 - 接着,引出 SGDM 的缺陷(SGDM之所以慢,是因为不能动态调整学习率)。有没有可能帮 SGDM 找到最佳学习率?提出了
Cyclical LR(2017)
,其学习率呈周期性变化;而SGDR(2017)
是呈曲线三角函数型的变化;One-cycle LR(2017)
是一个周期变化。 - Does Adam need warm-up? 提出了
warmup
的优势,以及RAdam
。(见[小细节](#Does Adam need warm-up?)) - RAdam vs SWATS (见[小细节](#RAdam vs SWATS))。
- 提出了
Lookahead(2019)
,为优化器做了一个“包裹”:k step foward, 1 step back, universal wrapper for all optimizers
。 -
Nesterov accelerated gradient, NAG(1983)
,并不是为深度学习提出(为了数学优化),思路为首先预测未来的区域好坏(超前部署),从而决定是否下降。涉及到一些数学证明。 -
Nadam(2016)
实际上就是将NAG
用到Adam
上。 - 接着,举了一个
L2 regularization
的故事。见[小细节](#Do you really know your optimizer?)。提出了weight decay
比L2
的效果好,以及SGDWM
,AdamW
。NLP中使用AdamW
比较多,AdamW
比之前提出的各种新算法在工程上意义都大。 - 一些其他帮助优化的东西:
Suffling
,Dropout
,Gradient noise(2015)
。The more exploration, the better! - 一些其他帮助优化的东西:
Warm-up
,Curriculum learning(2009)
,Fine-tuning
。(从简单的开始)Teach your model patiently! - 一些其他帮助优化的东西:
Normalization
,Regularization
。 - 最后,总结,关于 SGDM 与 Adam 的对比,与建议。见小细节
小细节
What is Optimization about?
- find a to get the lowest !!
- Or, Find a to get the lowest !!
Adam vs SGDM
- Adam : fast training, large generalization gap, unstable
- SGDM : stable, little generalization gap, better convergence(?)
有没有可能将其结合?SWATS
- Begin with Adam (fast), end with SGDM
Does Adam need warm-up?
横轴是分布,纵轴是代数。可以看到,有了 warmup
分布会有所改善。
warmup
的意义在于,在不确定方向好不好时,不要暴走。
还有一种 RAdam(2020)
,使用 R 帮助决定 Adam
的步长。
RAdam vs SWATS
RAdam | SWATS | |
---|---|---|
Inspiration | Distortion of gradient at the beginning of training results in inaccurate adaptive learning rate | non-convergence and generalization gap of Adam, slow training of SGDM |
How? | Apply warm-up learning rate to reduce the influence of inaccurate adaptive learning rate | Combine their advantages by applying Adam first, then SGDM |
Switch | SGDM to RAdam | Adam to SGDM |
Why switch | The approximation of the variance of is invalid at the beginning of training | To pursue better convergence |
Switch point | When the approximation becomes valid | Some human-defined criteria |
Do you really know your optimizer?
如上图,对于 SGDM:
- 计算 时,是只要主项的梯度,还是也要把用于正则的那项也加进去?
- 对于 Adam 有同样的疑问。
这其实没有标准答案。
Loshchilov 在 2017 写了篇文章:
- 不做正则,而是做一个
weight decay
; - 如上图的
SGDWM
与AdamW
,额外减去一个 weitgh decay。
Advices
SGDM:
- Slow
- Better convergence
- Stable
- Smaller generalization gap
Adam:
- Fast
- Possibly non-convergence
- Unstable
- Larger generalization gap
给一些建议。
SGDM:
- Computer vision (image classification, segmentation, object detection)
- NLP (QA, machine translation summary), Speech synthesis, GAN
有没有 Universal Optimizer ? No Way.