自动调整学习速率
文章目录
- 自动调整学习速率
- 1. RMS and Adagrad
- 2. RMSProp and Adam
- 3. Learning rate scheduling
- 3. 总结
1. RMS and Adagrad
在下面有两幅图,如第一幅图所示,随着 iteration 的增加,loss 在不断减少,最后趋近于 0,训练卡住不动了,很多人以为肯定是遇到了 critical point…
其实不然,如第二幅图所示,gradient 还是有起有伏的,并没有完全等于 0,只是在训练过程中,小球在两个峡谷的谷壁之间来回跳动,并没有落到谷底之中…
那么下面这张图背后的模型又是怎样训练出来的呢?下面这个模型需要特别的技巧才能将其训练出来。
但是在大多数的模型训练过程中,很多时候 loss 等于 0 但 gradient 还是很大,所以遇到 critical point 的几率还是较小的。
假如 critical point 也遇不到了,性能较好的模型依旧很难训练出来。
如下图所示,loss 相当于一个凸函数,要使 loss 逐渐变小最后趋近于 0,相当于在解一个凸优化的问题。
当 learning rate =
1
0
−
2
10^{-2}
10−2 时,设置得太过大了,以至于直接喷了出去;
当 learning rate =
1
0
−
7
10^{-7}
10−7 时,设置得太过小了,以至于始终走不到使得 loss 最小的点。
因此我们要给每一个不同的未知参数,单独设置学习率。
在坡度比较陡的时候,学习率设置小一点,在坡度比较平缓的时候,学习率设置大一点。
引入的参数
σ
\sigma
σ 是求 gradient 的 root mean square.
这也就是 Adagrad 优化算法。
2. RMSProp and Adam
刚刚的 error surface 是一个凸函数,梯度是在不断减小的,但如果遇到了如下这样比较复杂的情形时,梯度一会增加一会减小,我们就希望学习率能够动态的自适应。
在计算梯度的 RMS 时,多引入了一个超参数
α
\alpha
α,如果
α
\alpha
α 比较小,说明当前点的梯度占比多,反之,则说明前一个点的梯度占比较多。
这种对梯度的有权重地求 RMS 叫RMSProp.
RMSProp + Momentum 相结合起来使用,就变成了 Adam 优化算法。
让学习率根据 error surface 的变化而自适应,使用 Adagrad 优化算法后,发现 Loss 不断地走到了最小点。
3. Learning rate scheduling
在上面的模型训练过程中,虽然最后训练结果是好的,loss 减少到最小,但在做 optimization 的最后几步,突然喷了出去,是因为小球快滚到谷底了,连续较小的梯度和,使得学习率变得太大,以至于喷了出去。
在这里我们引入学习率调度,随着模型在不断地训练,当越来越接近目的地的时候,我们要减少学习率,以避免出现乱喷现象。
3. 总结
为了让 optimization 做得更好,我们由最开始的梯度下降公式,让学习率自适应,引入了 RMS,变成了 Adagrad 优化算法;然后为了应对更复杂的 error surface,引入了 RMSProp,再结合 Momentum,变成了 Adam 优化算法;最后为了应对 last few steps 的乱喷现象,引入了学习率调度,也就变成了如下图中的公式。