台大李宏毅课程笔记3
本次笔记主要包含两节课:
https://www.bilibili.com/video/BV1JE411g7XF?p=8
https://www.bilibili.com/video/BV1JE411g7XF?p=9
SGD with Momentum(SGDM)
SGDM通俗的讲就是在本次计算的偏导和learningrate的基础上,加上上一次的运动长度,也就是保持原来的运动趋势。
下面两个图是对比SGDM和SGD,可以比较容易看出区别。
下面这个图给出了一些情况下SGDM的优势:
- 1号位置可以看出本次的偏导比较小,本次应该运动缓慢,但是现在距离目标还较远,所以应该大步长更优,在SGDM上,刚好加上之前的大步长,保持了较高的运动速度,就提高了缓坡平原的速度;
- 2号位置是个局部极值点,SGD在这里就不会动了,但是,图中右侧有更优值,在SGDM算法下,本次加速0,加上原本的速度,可以维持原速度冲过局部极值点;
- 3号位置本次偏导反向指向局部极值,也是由于原有速度,冲过了小的边界,发现了更优值。
但是,这个图是刚好适合SGDM的,改变图形后,SGDM有可能反而使结果陷入了本不该陷入的局部极值。不过思考下来,SGDM是让参数整体更活跃了,无论平坦和局部极值的小的梯度都被本身携带的上次动能增大了运动效果,从而提高了速度和精度。
RMSProp
这个方式主要是Adagrad的改进,主要是为了避免由于迭代初期g过大,导致后来加入的g对均方根几乎没啥影响了。RMSProp主要是逐渐削弱之前的g的影响,保持新的g的影响是比较大的。
Adam
SWATS
老师介绍说,Adam前期快,SGDM平稳后期更优,所以有些结合方法,SWATS就是其中之一。
AdaXXX
其他Adam改进都是动态改进learning rate。希望在远距离时取大的,需要精度的时候取小值。
https://www.bilibili.com/video/BV1JE411g7XF?p=8
其他改进方法在视频最后45:00之后的部分。
总之就是各种动态调整Learning rate,比如加阈值,虽循环改变,或者具备周期调整等。
Adam分析
由于,Adam的机制,会考虑历史的大量的梯度影响,在出现一个真正有意义的重要的梯度时,往往又被削弱了其影响。如图中100999次迭代,产生了超大的gradient,结果由于Adam的机制,让他呗削弱的还没有之前的小的gradient的影响大。
AMSGrad
AdaBound
对Learning Rate加阈值,限制其范围,避免过大和过小。
SGDM分析
Cyclical LR
就是周期性改变Learning Rate,周期性变大变小,维持其搜索速度和精度。
SGDR
一个思路,就是变大过程直接阶跃变最大。
One-Cyclical
单个周期内改变其大小。
Adam warm up
为了解决在迭代初期,参数分布不合理,提高分布合理速度。