原文链接《Adam:A Method for Stochastic Optimization》
在常见的知识更新中,最容易将参数更改为负梯度方向。 坡度指向上升方向,但需要使损失函数最小化。 如果存在参数向量x及其梯度dx,则最简单的更新形式如下:
x =- learning_rate * dx其中learning_rate是超级参数,是固定常数。 在整个数据集上进行计算时,如果学习率足够低,则总是在损耗函数上取得非负进展。
动量(Momentum )更新v=mu * v - learning_rate * dx # )和速度融合x=v )和位置融合在此引入了初始=0的变量v和超级参数mu。
变量mu在优化过程中被认为是动量,但其物理意义与摩擦系数更一致。 该变量有效地抑制了速度,降低了系统的动能。 否则,质点在山的底部永远不会停止。
交叉验证通常将mu设置为[ 0.5、0.9、0.95、0.99 ]之一。 与学习率随时间退火(见下文)一样,动量随时间的变化略有效果,其中动量在学习过程的后阶段上升。 一个典型的设定最初为0.5,但在多个周期(epoch )中逐渐上升到0.99。
rmspropcache=decay _ rate * cache (1- decay _ rate ) dx * * 2x=-learning _ rate * dx/(NP.sqrt ) cache ) eps )
x=与Adagrad相同,但cache变量不同。 因此RMSProp仍然基于梯度大小修改每个权重的学习率,这同样有效。 但是,其更新不会单调地减小学习率。
Adam原文算法如下。