1. 算法
受Nesterov加速梯度算法启发,sutskever提出了动量算法的一个变种。
[warning] Nesterov加速梯度算法?
这种情况的更新规则如下:
其中参数和发挥了和标准动量方法中类似的作用。 Nesterov 动量和标准动量之间的区别体现在梯度计算上。 Nesterov 动量中,梯度计算在施加当前速度之后。 因此,Nesterov 动量可以解释为往标准动量方法中添加了一个校正因子。
[warning] 怎样理解把“这一步临时更新”看作是添加一个校正因子?
完整的\,Nesterov 动量算法如算法8.3所示。
[success]
临时更新: 计算梯度:
更新速度:
更新参数:
Click to show
{% raw %}
\begin{algorithm}[ht]
\caption{使用\,Nesterov 动量的随机梯度下降(SGD)}
\label{alg:nesterov}
\begin{algorithmic}
\REQUIRE 学习率 {% math_inline %}\epsilon{% endmath_inline %}, 动量参数 {% math_inline %}\alpha{% endmath_inline %}
\REQUIRE 初始参数 {% math_inline %}\theta{% endmath_inline %},初始速度 {% math_inline %}v{% endmath_inline %}
\WHILE{没有达到停止准则}
\STATE 从训练集中采包含{% math_inline %}m{% endmath_inline %}个样本{% math_inline %}\{ x^{(1)},\cdots, x^{(m)}\}{% endmath_inline %} 的小批量,对应目标为{% math_inline %}y^{(i)}{% endmath_inline %}。
\STATE 应用临时更新: {% math_inline %}\tilde{\theta} \leftarrow \theta + \alpha v{% endmath_inline %}
\STATE 计算梯度(在临时点):{% math_inline %}g \leftarrow
\frac{1}{m} \nabla_{\tilde{\theta}} \sum_i L(f(x^{(i)};\tilde{\theta}),y^{(i)}){% endmath_inline %}
\STATE 计算速度更新:{% math_inline %}v \leftarrow \alpha v -
\epsilon g{% endmath_inline %}
\STATE 应用更新:{% math_inline %}\theta \leftarrow \theta + v{% endmath_inline %}
\ENDWHILE
\end{algorithmic}
\end{algorithm}
{% endraw %}
2. 效果
在凸批量梯度的情况下,Nesterov 动量将额外误差收敛率从(步后)改进到,如Nesterov83b所示。 可惜,在随机梯度的情况下,Nesterov 动量没有改进收敛率。