[deep learning] Optimizer

  • 本文主要是用于介绍深度学习中常用的几种优化器
  • SGD:这是我们最常用的优化器之一。SGD其实有三个版本:
    • batch-SGD,他是一个epoch更新一次数据,这样子的缺点也是很明显的,对计算的要求大,不能实时增加数据。有冗余的信息。
    • SGD,每个sample更新一次梯度。这样子做的主要问题是网络可能难以收敛,波动较大。
    • Mini-batch SGD,这是我们现在最常用的,就是对一个batch内的数据计算平均梯度,再更新参数。
  • Momentum,主要是方式SGD陷入局部最优点(或鞍点)不能跳出来。相比于SGD,他引入来动量vv,来表示之前整个参数更新的趋势。下面是参数θ\theta更新的过程。我们可以看到在计算更新的梯度的时候,我们加入来上一时刻的更新量μvt\mu v_{t},这样可以防止梯度突然变成0。

vt+1=μvtαf(θt)θt+1=θt+vt+1 v_{t+1} = \mu v_{t} - \alpha \triangledown f(\theta_t) \\ \theta_{t+1} = \theta_t + v_{t+1}

  • Momentum的改进,Nesterov’s Accelerate Gradient(NAG) 的更新过程如下所示。相比较于Momentum,他在计算动量的时候,计算的梯度不是当前点的梯度,而是用上一时刻动量更新过点的梯度。他们之间的不同如下图所示(还没看懂这个图)。
    vt+1=μvtαf(θt+μvt)θt+1=θt+vt+1 v_{t+1} = \mu v_{t} - \alpha \triangledown f(\theta_t+\mu v_{t}) \\ \theta_{t+1} = \theta_t + v_{t+1}
    [deep learning] Optimizer
  • 待续