优化器算法

1. BGD(Batch Gradient Descent)

思想:使用整个数据训练集计算损失函数

缺点:计算过程很慢

2. SGD(Stochastic Gradient Descent)

和 BGD 的一次用所有数据计算梯度相比,SGD 每次更新时对每个样本进行梯度更新,对于很大的数据集来说,可能会有相似的样本,这样 BGD 在计算梯度时会出现冗余,而 SGD 一次只进行一次更新,就没有冗余,而且比较快,并且可以新增样本。

优点:收敛快

缺点:引入噪声,存在局部最优

3. MBGD(Mini-Batch Gradient Descent)

MBGD 每一次利用一小批样本,即 n 个样本进行计算

以上三个算法的缺点:

  • Learning Rate 如果选择的太小,收敛速度会很慢,如果太大,Loss Function 就会在极小值处不停地震荡甚至偏离。
  • SGD对所有参数更新时应用同样的 Learning Rate,如果我们的数据是稀疏的,我们更希望对出现频率低的特征进行大一点的更新。Learning Rate会随着更新的次数逐渐变小。

4. Momentum

其中$\beta_1 取0.9$

一阶动量:各个时刻梯度方向的指数移动平均值,约最近 $\frac{1}{1-\beta}$个时刻的梯度向量的平均值。

优点:使得梯度方向不变的维度上速度变快,梯度方向有所改变的维度上的更新速度变慢,这样就可以加快收敛并减小震荡。

5. Adagrad(Adaptive gradient algorithm)

二阶动量$vt = \sum{\tau=1}^{t}g_\tau^2$ :所有梯度值的平方和。

思想:

  • 对经常更新的参数,学习率慢一些;
  • 对偶尔更新的参数,学习率快一些。

优点:自适应,不需要人调节

缺点:学习率越来越小,趋于0

6. Adam

结合Momentum及自适应

具有一阶动量及二阶动量

7. AdamW

加入了Weight Decay

8. 参考

1 优化算法Optimizer比较和总结

Donate comment here