# 8.3.3 Nesterov 动量

## 算法

受Nesterov加速梯度算法启发，sutskever提出了动量算法的一个变种。

> **\[warning]** Nesterov加速梯度算法?

这种情况的更新规则如下：

$$
\begin{aligned}
    v &\leftarrow \alpha v - \epsilon \nabla_{\theta} \left[
    \frac{1}{m} \sum_{i=1}^m L\big( f(x^{(i)}; \theta + \alpha v), y^{(i)} \big)
 \right], \\
    \theta &\leftarrow \theta + v
\end{aligned}
$$

其中参数$\alpha$和$\epsilon$发挥了和标准动量方法中类似的作用。 Nesterov 动量和标准动量之间的区别体现在梯度计算上。 Nesterov 动量中，梯度计算在施加当前速度之后。 因此，Nesterov 动量可以解释为往标准动量方法中添加了一个**校正因子**。

> **\[warning]** 怎样理解把“这一步临时更新”看作是添加一个校正因子？

完整的\\,Nesterov 动量算法如算法8.3所示。

> **\[success]**\
> **临时更新：$\tilde \theta \leftarrow \theta + \alpha v$** 计算梯度：$g \leftarrow \frac{1}{m} \nabla\_{\tilde \theta} \sum\_i L(f(x^{(i)};\tilde \theta),y^{(i)})$\
> 更新速度：$v \leftarrow \alpha v - \epsilon g$\
> 更新参数：$\theta \leftarrow \theta + v$

## 效果

在凸批量梯度的情况下，Nesterov 动量将额外误差收敛率从$O(1/k)$（$k$步后）改进到$O(1/k^2)$，如Nesterov83b所示。 可惜，在随机梯度的情况下，Nesterov 动量没有改进收敛率。
