1. 算法

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

[warning] Nesterov加速梯度算法?

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

vαvϵθ[1mi=1mL(f(x(i);θ+αv),y(i))],θθ+v \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]
临时更新:θ~θ+αv\tilde \theta \leftarrow \theta + \alpha v 计算梯度:g1mθ~iL(f(x(i);θ~),y(i))g \leftarrow \frac{1}{m} \nabla_{\tilde \theta} \sum_i L(f(x^{(i)};\tilde \theta),y^{(i)})
更新速度:vαvϵgv \leftarrow \alpha v - \epsilon g
更新参数:θθ+v\theta \leftarrow \theta + v

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 动量将额外误差收敛率从O(1/k)O(1/k)kk步后)改进到O(1/k2)O(1/k^2),如Nesterov83b所示。 可惜,在随机梯度的情况下,Nesterov 动量没有改进收敛率。

results matching ""

    No results matching ""