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