一、使用场合
当loss函数表面崎岖不平时,可以采用这招。
被困住时不一定是小梯度,还有可能在峡谷两端来回跳跃,下不去了
例子
当误差表面是凸函数(可以想成长轴很大的椭圆)时,可能在峡谷两端交替,再次减小学习率时,可能update很多次但走的贼慢,很难到达目标。
二、解决方法
不同的状态需要不同的学习率,所以引入Σ
与前面的所有梯度有关(注意只与梯度大小有关)
小梯度时大步走,大梯度时小步走
RMSProp
再引入α,控制比例(被以前梯度影响的多少)
Adam优化器
经常用的Adam优化器,就是采用了RMSProp和动量的结合
动量是与梯度方向有关的,但RMSProp只与其大小有关,所以不会抵消掉!!
例子
此时,该例子变成了这样,琢磨之后就知道很合理了,最后可以到目标。
为什么有向上下的一跃?Y轴方向累积了很多小的Σ,累积到一定地步后,下一step变得很大就喷出去了,走到大梯度的地方又迈着小步子回来了(左右山谷有摩擦力震荡着下来了)
如何解决这个问题?
Learning Rate Decay
加入decay,随着时间的增大,学习率在变小
Warm Up
还有一个变化叫做 warm up(预热)
为什么要先变大呢?刚开始Σ的统计量有很大误差(小学习率探索,先收集统计数据),只有足够多的统计后才会变准确。
实例论文支撑的warm up