目前,深度学习的优化器以反向传播的梯度下降算法为主流。常见的优化器有如下几种:
- BGD
- SGD
- MBGD
- Momentum
- RMSProp
- AdaGrad
- Adam
1. 批量梯度下降(Batch Gradient Descent, BGD)
2. 随机梯度下降法(Stochastic Gradient Descent,SGD)
3. 小批量随机梯度下降(Mini-batch Gradient Descent, MBGD)
4. SGDM(SGD with Momentum)
SGDM在SGD基础上引入了一阶动量:
\[m_t = \beta_1\cdot m_{t-1}+(1-\beta_1)\cdot g_t \]SGD-M参数更新公式如下,其中\(\alpha\)是学习率,\(g_t\)是当前参数的梯度
\[\omega_{t+1} = \omega_t - \alpha\cdot m_t = \omega_t-\alpha\cdot\left(\beta_1\cdot m_{t-1}+(1-\beta_1)\cdot g_t\right) \]一阶动量是各个时刻梯度方向的指数移动平均值,也就是说,\(t\)时刻的下降方向,不仅由当前点的梯度方向决定,而且由此前累积的下降方向决定。\(\beta_1\) 的经验值为0.9,这就意味着下降方向主要是此前累积的下降方向,并略微偏向当前时刻的下降方向。想象高速公路上汽车转弯,在高速向前的同时略微偏向,急转弯可是要出事的。
特点:
因为加入了动量因素,SGD-M缓解了SGD在局部最优点梯度为0,无法持续更新的问题和振荡幅度过大的问题,但是并没有完全解决,当局部沟壑比较深,动量加持用完了,依然会困在局部最优里来回振荡。
5. RMSProp
6. 自适应梯度法(adaptive gradient, AdaGrad)
它通过记录每次迭代过程中的前进方向和距离,从而使得针对不同问题,有一套自适应调整学习率的方法,即不同的参数是需要不同的学习率的。具有损失较大偏导的参数相应地有一个快速下降的学习率,而具有小偏导的参数在学习率上有相对较小的下降。
AdaGrad的效果是:在参数空间中更为平缓的倾斜方向会取得更大的进步(因为平缓,所以历史梯度平方和较小,对应学习下降的幅度较小)。
优点:解决了SGD中学习率不能自适应调整的问题。
缺点:
(1)对于训练深度神经网络模型而言,从训练开始时累积平方梯度值会越来越大,会导致学习率过早和过量的减少,从而导致迭代后期收敛及其缓慢。AdaGrad在某些深度学习模型上效果不错,但不是全部。
(2)需要手动设置全局学习率