New Optimizer for Deep Learning
- 参数更新 $\theta_t = \theta_{t-1} - \eta_{t-1}$
SGD
存在问题:
选择恰当的初始学习率困难
所有参数使用相同的学习率
- 容易陷入局部极值(导数值为0的局部点)
SGD with Momentum(SGDM)
引入一阶动量 ,
不仅依赖于当前梯度,还依赖于过去的移动(惯性)。坡度陡,惯性大,下降多;坡度缓,惯性小,下降慢
某些时候可以解决陷入局部最小值的情况
Adagrad
分母:陡峭走慢,平缓走快
问题:分母越来越大,最终会导致学习率太小而无法有效更新
RMSProp
主要解决的是Adagrad中,分母太大导致无法有效更新的问题
但依然无法彻底解决
Adam = SGDM + RMSProp
$\theta_t = \theta_{t-1} - \frac{\eta}{\sqrt{\hat{v}_t}+\epsilon}\hat{m}_t$ ($\epsilon=10^{-8}$ ,避免刚开始分母为0)
$\hat{m}_t=\frac{m_t}{1-\beta_1^t}$ ($\beta_1=0.9$)(均值的无偏估计。de-biasing:确保t较小的时候,一阶动量不会因为系数小于1而太小)
$\hat{v}_t=\frac{v_t}{1-\beta_2^t}$ ($\beta_2=0.999$)(方差的无偏估计)
问题:
$\underset{t\rightarrow\infty}{\lim}\frac{\hat{m}_t}{\sqrt{\hat{v}_t}}=1$
这会导致训练很久后,的movement$\rightarrow\eta$ ,并且不能提供有效的方向信息;而当真正有效的gradient出现时,又会因为前面大量的无效gradient而只产生微不足道的影响
一次更新最多移动的距离不超过$\sqrt{\frac{1}{1-\beta_2}}\eta$