然而,单纯的动量处理却也存在其他问题。最明显的就是,因为动量叠加,没有修正逻辑的纯动量叠加,会导致每一次的轻微误差也随着时间一起叠加,导致当前时刻 t 时,实际梯度变化速率要远大于实际值,阻尼因子设定过小和初速度过大都可能会久久不能收敛。所以,在动量化的基础上,我们更希望能够有修正方法来减小误差的累积。
幸运的是 Nesterov Y. 在1983年提出的 NAG 很好的解决了这个问题。
涅斯捷罗夫梯度加速(NAG [Nesterov Accelerated Gradient])
迭代公式:
vtθt=γvt−1+η∇θJ(θ−γvt−1)=θt−1−vt
涅斯捷罗夫梯度加速(NAG [Nesterov Accelerated Gradient]) 较标准动量化处理来说,用来计算当前梯度方向的时候,计算 损失函数(Loss) 采用的是基于当前上一次梯度变化值预测的,当前状态下,下一次可能的维度权重。以这个预测的维度权重来计算当前位置的方向梯度变化,来修正动量化算法。这样,当我们计算当前 t 时梯度变化速度的时候,就可以从一定程度上避免掉误差堆积导致的问题。