status
type
date
slug
summary
tags
category
password
icon
Total Videos
Link
Video Duration

Adaptive Learning Rate(自适应学习率)

当我们的训练Loss随着参数的update,越来越低,直到几乎不变时,此时我们能说函数卡在了critical point吗?
notion image
如上图所示,loss函数随着参数的update逐渐下降直到不在变化,而我们看Gradient图却发现,Gradient向量反复波动,并没有变的很小。这是因为loss不断的在error surface之间震荡(左图),没办法真正进入critical point,这是训练过程中相当常见的情况,要比critical point常见的多。
notion image
上图是convex的error surface,convex的特征就是横向gradient坡度很小,纵向却很大,所以看起来不像是椭圆形而是长方形。
从左下图可以看出当学习率设置的较大时(前文我们提到参数的移动距离与Gradient的大小和学习率有关),gradient会反复波动无法掉入真正的critical point区域;即使将设置的更小(右图),虽然在纵向上能掉入最小的Loss区域(因为此时Gradient的坡度够大),但横向上因为Gradient的坡度不够大,所以无法进入真正的critical point区域。
这就带来了一个问题,能不能定制学习率使其在不同的方向(参数)上具有不同的大小呢?

如何定制学习率

notion image

Root Mean Square

notion image
现在我们为了让在不同方向上具有不同的数值,我们将学习率改写为:,使其与参数update的次数t和第i个参数挂钩。
notion image
从上图可以看出,这条公式是如何影响学习率的:
当Gradient比较小时,坡度比较缓,也比较小,因此学习率就比较大;而当Gradient比较大时,坡度比较陡,比较大,学习率就比较小,因此可以控制学习率的大小。
上述的这种通过调整的方法虽然好用,但也有缺陷,就是认为同一个参数的Gradient大小是差不多的。
notion image
如果遇到上图这种,同一个参数(水平箭头)需要调整时就没办法了,因为Gradient并不是平均的,而是有的占比高,有点占比低。这就引出了RMSProp。

RMSProp

notion image
RMSProp与RMS的区别在于根号内多了一个名叫的hyperparameter,用来指定那一部分的Gradient占比更大,因此可以动态调整学习率的大小。
notion image
如图所示,当我们处在第三个蓝球时,我们可以将调小,使增大,继而让减小,以此来踩一脚“刹车”,这要比RMS的反应快的多。

Adam

现在最常用的optimization策略是Adam,它是RMSProp+Momentum的组合。
现在有了RMS之后让我来看一下能不能训练起来。
notion image
上图是RMS找出critical point的过程,可以看到红圈圈出来的部分相当的杂乱,这是因为前一段横轴Gradient太小了,导致累积到一定地步,红框的那一项变的很大,移动的幅度变的更大;之后,因为移动到了Gradient大的地方,红框又变小,回归正常,如此反复。
那怎么解决这种情况呢?

Learning Rate Scheduling

我们现在将改写为与时间有关的常数,这称为Learning Rate Scheduling。最常见的做法是Learning Rate Decay。
notion image
它通过让随着时间的增加变的越来越小,以此让参数更新的慢下来。
另一个方法是Warm up:
notion image
随着时间的增加,先上升后下降。前面从0上升的这一段目的是收集更多的error surface数据。

总结

notion image
现在我们将原始的Gradient Descent改进为:
其中:
  • 是Momentum,它考虑了所有Gradient,将它们全部相加,考虑了大小和方向。
  • 是Learning Rate Scheduling,是一个hyperparameter,
  • 是Root Mean Square,用于控制学习率,也考虑了所有的Gradient,但不考虑Gradient的方向,只考虑Gradient的大小。
至此,optimization已经全部讲完。
 
2.5类神经网络训练不起来怎么办(四):损失函数(Loss)可能也有影响2.3类神经网络训练不起来怎么办(二): 批次 (batch) 与动量 (momentum)
Loading...