问题

事实上,用一般的 Gradient Descent 方法,我们的训练往往走不到 Critical Point 就停止了。

学习率大了,步子太大,震荡;学习率小了,步子太小,训练不动

因此要客制化 Learning Rate!

代表其是由参数和迭代次数决定的。

计算方法

均方根:Adagrad

但是仍需要改进,就算是同一个参数,需要的 Learning Rate 也会因为 Gradient 大小改变而需要改变。

RMSProp

我们可以自己决定算出来的 权重的占比,让他更看重最近新算出来的 Gradient

Adam = RMSProp + Momentum

EMA

事实上,Momentum 和 RMSProp 本质都是 EMA。

Adam 维护了两个“关于梯度的记忆”,都是指数滑动平均(EMA):

  1. 一阶 EMA(向量)
    • 梯度本身的指数滑动平均
    • 记住运动的“方向和趋势”(也影响大小)
    • 类似“惯性”
  2. 二阶 EMA(逐坐标标量)
    • 梯度平方的指数滑动平均
    • 记住这个方向“通常有多陡”
    • 决定你在这个方向上“该走多大一步”
  • EMA:
  • Momentum (一阶 EMA):
  • RMSProp(二阶 EMA):

Bias Correction(Adam 除了 RMS 和 Momentum 以外的一个改进):

  • Adam:

Adam 变体

  • AdamW(L2 正则化时,weight decay 不进入 EMA
  • RAdam(Adam + 自动 warmup —— rectification)
    • 早期:行为类似 Momentum SGD
    • 后期:行为类似 Adam

Example

爆炸是因为 过小,导致更新较大

可以依靠 Learning Rate Scheduling 解决

  • Learning Rate Decay
  • Warm Up 一个可能的原因是,由于 是一个统计数据,一开始并不准确,所以需要先缓慢移动,探索、收集数据,然后再逐步提升学习率,开始快速优化、Decay