⚡本系列历史文章⚡
【Momentum优化器】
【Nesterov accelerated gradient优化器】
【RMSprop优化器】
【Adagrad优化器】
【Adadelta优化器】
【Adam优化器】
NAG(Nesterov accelerated gradient)优化原理
Momentum是基于动量原理的,就是每次更新参数时,梯度的方向都会和上一次迭代的方向有关,当一个球向山下滚的时候,它会越滚越快,能够加快收敛,但是这样也会存在一个问题,每次梯度都是本次和上次之和,如果是同向,那么将导致梯度很大,当到达谷底的时候很容易动量过大导致小球冲过谷底,跳过当前局部最优位置。
我们希望有一个更智能的球,一个知道它要去哪里的球,这样它知道在山坡再次向上倾斜之前减速。
Nesterov accelerated gradient是一种使动量项具有这种预见性的方法。我们知道我们将使用动量项来移动参数。因此,为我们提供了参数下一个位置的近似值(完全更新时缺少梯度),大致了解了参数的位置。我们现在可以通过计算梯度(不是我们当前参数的,而是我们参数的近似未来位置的)有效地向前看。
第一个公式分为两个部分看,第一项是动量部分,保持上次的梯度方向,第二项就是当前梯度,但是这个不太一样,梯度参数里面是
我们再次将动量项的值设置为0.9左右。动量首先计算当前梯度(图3中的蓝色小矢量),然后在更新的累积梯度(蓝色大矢量)的方向上进行大跳跃,而NAG首先在先前累积梯度(棕色矢量)的方向上进行大跳跃,测量梯度,然后进行校正(绿色矢量)。此预期更新可防止我们进行得太快,从而提高响应能力,从而显著提高RNN在许多任务上的性能。
现在我们能够根据误差函数的斜率调整更新,并反过来加快SGD,我们还希望根据每个参数的重要性调整更新,以执行更大或更小的更新。
迭代过程
代码实践