3.3 优化器及自定义优化器
最后更新于
最后更新于
Adam算法在RMSProp算法基础上对小批量随机梯度也做了指数加权移动平均。下面我们来介绍这个算法。
Adam算法使用了动量变量和RMSProp算法中小批量随机梯度按元素平方的指数加权移动平均变量,并在时间步0将它们中每个元素初始化为0。给定超参数(算法作者建议设为0.9),时间步的动量变量即小批量随机梯度的指数加权移动平均:
和RMSProp算法中一样,给定超参数$$0 \leq \beta_2 < 1$(算法作者建议设为0.999), 将小批量随机梯度按元素平方后的项$\boldsymbol{g}_t \odot \boldsymbol{g}_t$做指数加权移动平均得到$\boldsymbol{s}_t$:
由于我们将和中的元素都初始化为0, 在时间步我们得到。将过去各时间步小批量随机梯度的权值相加,得到 。需要注意的是,当较小时,过去各时间步小批量随机梯度权值之和会较小。例如,当时,。为了消除这样的影响,对于任意时间步,我们可以将再除以,从而使过去各时间步小批量随机梯度权值之和为1。这也叫作偏差修正。在Adam算法中,我们对变量和均作偏差修正:
原始论文中实现:
基于Python实现Adam优化器:
TODO:
https://github.com/OverLordGoldDragon/keras-adamw/blob/master/keras_adamw/optimizers_v2.py
实验
接下来,Adam算法使用以上偏差修正后的变量和,将模型参数中每个元素的学习率通过按元素运算重新调整:
其中是学习率,是为了维持数值稳定性而添加的常数,如。和AdaGrad算法、RMSProp算法以及AdaDelta算法一样,目标函数自变量中每个元素都分别拥有自己的学习率。最后,使用迭代自变量: