优化器

本文记录的目的是方便自己学习和复习,有误之处请谅解,欢迎指出。

1、Batch Gradient Descent (BGD)

    BGD 采用整个训练集的数据来计算 cost function 对参数的梯度,由于这种方法是在一次更新中,就对整个数据集计算梯度,所以计算起来非常慢,遇到很大量的数据集也会非常棘手,而且不能投入新数据实时更新模型。参数更新公式如下:

BGD

2.Stochastic Gradient Descent (SGD)

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

SGD

    随机梯度下降是通过每个样本来迭代更新一次,如果样本量很大的情况,那么可能只用其中部分的样本,就已经将theta迭代到最优解了,对比上面的批量梯度下降,迭代一次需要用到十几万训练样本,一次迭代不可能最优,如果迭代10次的话就需要遍历训练样本10次。

    缺点:

    SGD的噪音较BGD要多,使得SGD并不是每次迭代都向着整体最优化方向。所以虽然训练速度快,但是准确度下降,并不是全局最优。

    SGD 因为更新比较频繁,会造成 cost function 有严重的震荡。

    BGD 可以收敛到局部极小值,当然 SGD 的震荡可能会跳到更好的局部极小值处。当我们稍微减小 learning rate,SGD 和 BGD 的收敛性是一样的。

3.Mini-Batch Gradient Descent (MBGD)

    MBGD 每一次利用一小批样本,即 n 个样本进行计算,这样它可以降低参数更新时的方差,收敛更稳定,另一方面可以充分地利用深度学习库中高度优化的矩阵操作来进行更有效的梯度计算。更新公式如下图:

MBGD

4.Momentum

    ravines 表示下降曲面的一个方向,SGD 在 ravines 的情况下容易被困住, 这时 SGD 会发生震荡而迟迟不能接近极小值,如下图所示:

优化器_第1张图片
随机梯度下降过程

    Momentum更新公式如下:    

Momentum

     通过加入  ,可以加速 SGD, 并且减少局部震荡。当我们将一个小球从山上滚下来时,没有阻力的话,它的动量会越来越大,但是如果遇到了阻力,速度就会变小。

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



学习率改进优化器

7.Adagrad(Adaptive gradient algorithm)

    这个算法就可以对低频的参数做较大的更新对高频的做较小的更新,也因此,对于稀疏的数据它的表现很好,很好地提高了 SGD 的鲁棒性,例如识别 Youtube 视频里面的猫,训练 GloVe word embeddings,因为它们都是需要在低频的特征上有更大的更新。

    梯度更新公式如下:

Adagrad

    其中,G_t是个对角矩阵, (i,i) 元素就是 t 时刻参数θ_i的梯度平方和;g 为t 时刻参数 θ_i 的梯度。

    Adagrad 的优点是减少了学习率的手动调节

7.RMSprop

    RMSprop 与 Adadelta 的第一种形式相同:(使用的是指数加权平均,旨在消除梯度下降中的摆动,与Momentum的效果一样,某一维度的导数比较大,则指数加权平均就大,某一维度的导数比较小,则其指数加权平均就小,这样就保证了各维度导数都在一个量级,进而减少了摆动。允许使用一个更大的学习率η)。参数更新公式如下:

优化器_第2张图片
RMSprop


8.Adam:Adaptive Moment Estimation

    这个算法是另一种计算每个参数的自适应学习率的方法。相当于 RMSprop + Momentum。

    除了像 Adadelta 和 RMSprop 一样存储了过去梯度的平方 vt 的指数衰减平均值 ,也像 momentum 一样保持了过去梯度 mt 的指数衰减平均值

优化器_第3张图片
Adam
Adam

你可能感兴趣的:(优化器)