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