学习率优化
优化方法
学习率衰减
- 等间隔调整学习率 StepLR
- 多间隔调整学习率 MultiStepLR
- 指数衰减调整学习率 ExponentialLR
- 余弦退火函数调整学习率:CosineAnnealingLR
- 根据指标调整学习率 ReduceLROnPlateau
当某指标(loss或accuracy)在最近几个epoch中都没有变化(下降或升高超过给定阈值)时,调整学习率。
自适应学习率调整(学习率优化)
传统SGD的缺点,为什么提出学习率优化
- 学习率大小和策略选择困难
- 学习率不够智能,对所有参数一视同仁。
- 同时面临局部极值和鞍点的问题。
Momentum 动量法
协同参考之前累积的的梯度方向
Nesterov牛顿动量法(根据累计梯度计算提前点)
先按照动量方向前进到点C,再根据C点的梯度进行梯度下降,相比动量法
Adagrad(累计梯度反比)
对于不同的参数动态的采取不同的学习率,让目标函数更快的收敛。
将每一个参数的累计梯度平方和开方,用基础学习率除以这个数,来做学习率的动态更新。
adagrad算法一开始是激励收敛,到了后面就慢慢变成惩罚收敛,速度越来越慢。
why?
不同维度变量的梯度变化率不一致,更新的步长不仅要与函数值变化率(一次微分)成正比,还要与导数变化率(二次微分)成反比,因为曲线曲率越大,那么导数变得快,到极值点的距离就越小,曲线曲率越小,导数变得慢,到极值点的距离越大。
这里用累计梯度平方和来近似二次微分。
RMSprop(滑动窗口)
上述Adagrad 分母项为前序梯度的累加值,会出现学习率越来越小,造成学习停滞问题。很可能出现早期迭代到不好的极值点之后,由于学习率太小而无法冲出这个极值点导致最后收敛到的解不优。RMSprop采用指数加权移动平均的方法解决。(滑动窗口思想)
AdaDelta(自适应学习率)
使用上次的近似变化量来近似学习率
Adam算法
= 动量法+RMSProp