李宏毅——Optimization for Deep Learning

Posted 三つ叶

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了李宏毅——Optimization for Deep Learning相关的知识,希望对你有一定的参考价值。

What is Optimization about?

Find a θ \\theta θ to get the lowest L ( θ ) L(\\theta) L(θ) !!

What you have known before?

  • SGD
  • SGD with momentum (SGDM)

Adaptive learning rate:

  • Adagrad
  • RMSProp
  • Adam

SGD

SGD with momentum (SGDM)

Adagrad

RMSProp


和之前的Adagrad主要在于分母部分表达不太一样,原本的Adagrad是直接将过去的gradient加起来,而现在则是将过去的累积gradient乘以 α \\alpha α而当前乘以 ( 1 − α ) (1-\\alpha) (1α)。为什么要这样呢,在于Adagrad是一直累加之前的gradient,如果一开始的gradient就很大,那很可能你的learning rate一下子就会变得很小,这样会导致Adagrad没走几步就卡住了。RMSP这样的设计就可以保证分母部分不会永无止境的变大

但是RSMP并不能解决梯度下降中卡在梯度为0的位置

Adam


Adam将SBDM和RMSProp结合在一起。 m t ^ \\hatm_t mt^其实是momentum除上 1 − β 1 t 1-\\beta_1^t 1β1t,这其实是一个偏差修正项。对于偏差修正可以参考文章https://blog.csdn.net/yinyu19950811/article/details/90476956
ε \\varepsilon ε 是害怕一开始t=0的时候爆掉,出现无限大learning rate的情况

Learning Rate Scheduling

什么是learning rate scheduling?
我们刚才这边还有一项η,这个η是一个固定的值,learning rate scheduling的意思就是说,我们不要把η当一个常数,我们把它跟时间有关

Learning Rate Decay

最常见的策略叫做Learning Rate Decay,也就是说,随著时间的不断地进行,随著参数不断的update,我们这个η让它越来越小

那这个也就合理了,因為一开始我们距离终点很远,随著参数不断update,我们距离终点越来越近,所以我们把learning rate减小,让我们参数的更新踩了一个煞车,让我们参数的更新能够慢慢地慢下来,所以刚才那个状况,如果加上Learning Rate Decay有办法解决

Warm Up

除了Learning Rate Decay以外,还有另外一个经典,常用的Learning Rate Scheduling的方式,叫做Warm Up

Warm Up这个方法,听起来有点匪夷所思,这Warm Up的方法是让learning rate,要先变大后变小,你会问说 变大要变到多大呢,变大速度要多快呢 ,小速度要多快呢,这个也是hyperparameter,你要自己用手调的,但是大方向的大策略就是,learning rate要先变大后变小

(一)、什么是Warmup?
Warmup是在ResNet论文中提到的一种学习率预热的方法,它在训练开始的时候先选择使用一个较小的学习率,训练了一些epoches或者steps(比如4个epoches,10000steps),再修改为预先设置的学习率来进行训练。

(二)、为什么使用Warmup?
由于刚开始训练时,模型的权重(weights)是随机初始化的,此时若选择一个较大的学习率,可能带来模型的不稳定(振荡),选择Warmup预热学习率的方式,可以使得开始训练的几个epoches或者一些steps内学习率较小,在预热的小学习率下,模型可以慢慢趋于稳定,等模型相对稳定后再选择预先设置的学习率进行训练,使得模型收敛速度变得更快,模型效果更佳。

ExampleExampleExample:Resnet论文中使用一个110层的ResNet在cifar10上训练时,先用0.01的学习率训练直到训练误差低于80%(大概训练了400个steps),然后使用0.1的学习率进行训练。

(三)、Warmup的改进
(二)所述的Warmup是constant warmup,它的不足之处在于从一个很小的学习率一下变为比较大的学习率可能会导致训练误差突然增大。于是18年Facebook提出了gradual warmup来解决这个问题,即从最初的小学习率开始,每个step增大一点点,直到达到最初设置的比较大的学习率时,采用最初设置的学习率进行训练。

Optimizers: Real Application

BERT: ADAM
Transformer: ADAM
Tacotron: ADAM
YOLO: SGDM
Mask R-CNN: SGDM
ResNet: SGDM
Big-GAN: ADAM

最新的成果几乎还都是用ADAM或者SGDM训练出来的,表现了这两个Optimizers的优势。

Adam vs SGDM


generalization 能力:也就是在validation set上面的表现的落差程度。Adam拥有large generalization gap表示它在validation set上的表现有比较大的误差,相对来说SGDM的落差会比较小,而且SGDM好像可以converge比较好。

解释一下为什么他们的generalization能力的差距。如上图所示,这里有两个minimum,他们值一样 。黑色的线是training时候的function,红色的线是testing时候的function。因为training和testing他的dataset有点分布上的差异,他的x是不一样的东西,所以他的Loss function长得有点像,但有差距。那么如果你是一个比较平坦的minimum的话,这两个Loss function都会比较平坦,所以这个generalization的差距就不会太大;那如果是一个比较sharp的Loss Function的话,这边的generalization的差距就会非常大。Adam和SGDM在generalization上的差距有一部分原因与此相关,也就是Adam可能更倾向于sharp的Minimum而SGDM则可能更倾向于Flat的Minimum。

综上, Adam比较快,SGDM比较稳而且他在训练最后更可能收敛到比较小的值。于是我们可能将目光放在直接结合这两个东西,使得又快又稳。

下面总结了一些有这样思想的算法

Advices

以上是关于李宏毅——Optimization for Deep Learning的主要内容,如果未能解决你的问题,请参考以下文章

李宏毅《机器学习》丨5. Tips for neural network design(神经网络设计技巧)

李宏毅《机器学习》丨5. Tips for neural network design(神经网络设计技巧)

知识索引李宏毅机器学习

李宏毅是g

李宏毅《机器学习》丨7. Conclusion(总结)

李宏毅《机器学习》国语课程(2022)来了