优化器类别

个人参考记录,先记录大概,后面优化。
优化器类别_第1张图片GD、BGD、SGD
GD 标准梯度下降法,常理解为在线学习,即batch为1。即根据每组数据得到损失的梯度来更新参数。也常写作:
优势:梯度随机性大,代表网络每次更新更具有探索性,理论上有利于泛化能力。更新频率快,局部最优处震荡,反而有可能跳出局部最优。
缺点:梯度随机性很大,往往参数更新方向并不是精准的梯度下降方向,更甚者导致多次梯度互相抵消,导致网络训练周期很长。由于更新频率较快,很容易导致loss震荡,很难达到收敛。

BGD 批量梯度下降法,常理解为全数据集学习,即batch为样本总数。参数每更新一次代表需要遍历一次数据集。

优势:利用全部的样本来计算梯度,可以保证下降方向的精准度。梯度下降方向准确,会是loss较为稳定,容易收敛。
缺点:参数的每次更新都代表着对数据集遍历一次,计算量之大可以想象。大型的数据集对于内存来说,这就是一场灾难。由于不同权重之间梯度差异性较大,很难挑选出一个适合全局的准确率。梯度更新慢,对于新加入数据敏感性低。

SGD 小批量随机梯度下降法,常理解为在数据集随机采样,计算梯度来更新权重。

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

你可能感兴趣的:(深度学习)