深度学习基础-优化器学习

1.Batch Gradient Descent (BGD)
梯度更新规则:在这里插入图片描述
BGD 采用整个训练集的数据来计算 cost function 对参数的梯度:

缺点:
一次更新对整个数据集计算梯度,所以计算非常慢,遇到很大量的数据集也会非常棘手,而且不能投入新数据实时更新模型。

Batch gradient descent 对于凸函数可以收敛到全局极小值,对于非凸函数可以收敛到局部极小值。

2.Stochastic Gradient Descent (SGD)
梯度更新规则:

在这里插入图片描述
SGD 每次更新时对每个样本进行梯度更新,对于很大的数据集来说,可能会有相似的样本,这样 BGD 在计算梯度时会出现冗余,而 SGD 一次只进行一次更新,就没有冗余,而且比较快,并且可以新增样本。
缺点:
SGD 因为更新比较频繁,会造成 loss有严重的震荡
BGD 可以收敛到局部极小值,当然 SGD 的震荡可能会跳到更好的局部极小值处。
当我们稍微减小 learning rate,SGD 和 BGD 的收敛性是一样的。

3.Mini-Batch Gradient Descent (MBGD)
梯度更新规则:
在这里插入图片描述
每一次利用一小批样本(即 n 个样本)进行计算,这样它可以降低参数更新时的方差,收敛更稳定,另一方面可以充分地利用深度学习库中高度优化的矩阵操作来进行更有效的梯度计算。

缺点:(两大缺点)
1.不Mini-batch gradient descent 不能保证很好的收敛性learning rate 如果选择的太小,收敛速度会很慢,如果太大,loss function 就会在极小值处不停地震荡甚至偏离。(有一种措施是先设定大一点的学习率,当两次迭代之间的变化低于某个阈值后,就减小 learning rate,不过这个阈值的设定需要提前写好,这样的话就不能够适应数据集的特点。)对于非凸函数,还要避免陷于局部极小值处,或者鞍点处,因为鞍点周围的error是一样的,所有维度的梯度都接近于0,SGD 很容易被困在这里。(会在鞍点或者局部最小点震荡跳动,因为在此点处,如果是训练集全集带入即BGD,则优化会停止不动,如果是mini-batch或者SGD,每次找到的梯度都是不同的,就会发生震荡,来回跳动。)
2.SGD对所有参数更新时应用同样的 learning rate,如果我们的数据是稀疏的,我们更希望对出现频率低的特征进行大一点的更新。LR会随着更新的次数逐渐变小。

鞍点就是:一个光滑函数的鞍点邻域的曲线,曲面,或超曲面,都位于这点的切线的不同边。例如这个二维图形,像个马鞍:在x-轴方向往上曲,在y-轴方向往下曲,鞍点就是(0,0)。
深度学习基础-优化器学习_第1张图片

https://zhuanlan.zhihu.com/p/22252270

https://www.cnblogs.com/guoyaohua/p/8542554.html

你可能感兴趣的:(深度学习基础-优化器学习)