再看Lookahead

Lookahead

优化器的本质目的: \[ \theta_{t+1}=\theta_{t}+dt*\nabla L(\theta) \] 简单变化: \[ \frac{\theta_{t+1}-\theta_{t}}{dt}=\nabla L(\theta) \\ \frac{\partial \theta}{\partial t}=\nabla L(\theta) \] t 表示time step,这个推导不严谨,但是这么写也有点道理。且先这么假设。

优化求解的过程,就是求解 \(\frac{\partial \theta}{\partial t} \rightarrow 0\) 的最优参数(局部最优)的过程,也就是对 \(\nabla L(\theta) \rightarrow 0\) 的优化。

Lookahead要的是啥?不仅要最优化的参数,我还要参数在损失函数空间中处于一个相对更稳定的区域。

怎么稳定?让优化器自己试试周围的情况,多更新几次。怎么实现?设计一个Function(过程): \[ F(\theta)=\theta+\alpha \nabla L(\theta) \] 同时,令: \[ \frac{\partial \theta}{\partial t} = F^k(\theta) - \theta \rightarrow 0 \] 要求 F 的 k 次复合函数变化之后,能满足以上条件。

此时发生了什么?看看,\(F(\theta)=\theta\) 这种变换成立的时候, F 的 k 次复合函数变化的结果还是 \(\theta\),完美满足条件。也几就是说,经过 k 次 \(\nabla L(\theta)\) 的变化,参数会处于一个比较稳定的区域。

虽然有点简化了过程,但是Lookahead确实就是这么个思路。

。。。

Lookahead这个算法搭配RAdam倒是见过几次了。感觉上,应该是不错的。

毕竟,RAdam相较于其它自适应学习率的优化器,对于步长的计算进行了优化。Lookahead 同时选择理论上好像更好的步长,比较地NICE。

RAdam 主要针对 Adam 在训练初始阶段,二阶动量在不同batch输入时可能面临方差过大的情况,导致训练不稳定。Bias-correction 并不能解决这个问题,也不是用来解决这个问题的。

所以 RAdam 设计了参数 \(\rho_t, \rho_{\infty}\)\(\rho_{\infty}\) 很大,而 \(\rho_t\) 逐渐增大趋于 \(\rho_{\infty}\)

根据 \(\rho_t\) 的大小,调整参数更新策略。先是 momentum 方式,只考虑一阶动量;当 \(\rho_t\) 达到一定大小,再进行 RAdam 方式更新。

RAdam 方式相较于 Adam,多了一个随time step逐渐增大的参数 \(r_t\) 和学习率一起作用于权重参数的更新过程。

甚至有点warm-up的味道了。


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!