SGD收敛较好,但是需要耗费很多时间。
Adam收敛快,但是容易陷入局部解中。
Adam的核心思想是用指数滑动平均去估计梯度每个分量的一阶矩(动量)和二阶矩(自适应学习率),并用二阶矩去normalize一阶矩,得到每一步的更新量:
其中, m t m_{t} mt是一阶矩(动量), v t v_{t} vt是二阶矩(自适应学习率), η \eta η是学习率, c t c_{t} ct是偏差修正项(bias correction), ϵ \epsilon ϵ防止除零错误以及控制更新量的最大scale, Δ θ \Delta\theta Δθ是参数更新量, β 1 \beta_{1} β1和 β 2 \beta_{2} β2是指数滑动平均的超参,越小说明倾向于局部平均。
RAdam指出在训练初期Adam中 v t v_{t} vt的方差会非常大,而 v t v_{t} vt起到修正更新方向的作用,因此Adam参数的更新量的方差也会非常大。
Radam使用预热(warmup)的方法来解决Adam容易收敛到局部最优解的问题,作者前期选用比较稳的SGD + Momentum来进行训练,来稳定缩小方差。
下面是RAdam的算法流程:
和Adam一样,使用的是滑动平均的方法。而在训练初期的时候,切换到SGD + Momentum进行预热。