美文网首页
梯度下降算法中的BGD、SGD和MBGD的详细介绍

梯度下降算法中的BGD、SGD和MBGD的详细介绍

作者: dreamsfuture | 来源:发表于2018-05-01 09:10 被阅读0次

    本文为原创文章,转载请注明出处。

    在讲述这BGD、SGD和MBGD几个算法之前,需要先说明一下梯度下降算法中的几个概念:

    ①epoch:

    训练回合,也即完整的前向传播与反向传播的组合,两个过程相继走完。

    epoch的次数 = 训练集个数 / batch_size

    ②iterations:

    一次epoch过程中需要完成batch_size个数据样本的前向传播。

    ③batch_size:

    训练集大小N小于2000个,则利用BGD算法更好;
    训练集规模很大,则用MBGD算法更好,batch_size的取值通常为64,128,256,512,这与CPU/GPU的数据存储位数有关系。

    1.批量梯度下降法(Batch Gradient Descent,BGD)

    批量梯度下降,是每个epoch过程中把所有样本数据集都迭代了一遍,

    整体表示数据集中m个数据样本的loss求均值,m表示训练集的样本容量,i表示当前样本
    一般情况下,输入一个样本输出只会有一个,所有没有再次求累积的情况,但是如果要求中间隐藏层的损失函数则必然有累积,因为隐藏层有很多个。
    如果把一个数据集中的所有样本都进行一次epoch,则BGD算法更新一次权重的公式:

    上式,权重j在当前第i轮epoch更新中的值 = (第i-1轮epoch的权重j值) -
    (学习率) × (第i-1轮更新的权重在输入的m个样本数据的Loss于权重j的梯度)。
    其中,j表示第j个权重,i表示第i个epoch,n表示n个权重,m表示m个样本的数据集,k表示m个样本中的第k个样本

    BGD算法的收敛图:


    2. 随机梯度下降(Stochastic Gradient Descent, SGD)

    随机梯度下降每次的权重更新只利用数据集中的一个样本来完成,也即一个epoch过程只有一次迭代和一个更新数据。
    则Loss Function函数公式:

    则利用Loss函数来更新权重参数的公式:

    随机梯度下降算法在online场景下用的比较多
    但是,SGD算法由于每次epoch过程只用一个数据样本,很容易受到单个数据的影响,如果单个样本是离群点或噪声,SGD算法也依然会得到更新,这使得SGD算法的每次更新迭代有可能不朝全局最优解方向走,也可能导致不收敛。

    SGD算法的收敛图:

    3.小批量梯度下降法(Mini-batch Gradient Descent,MBGD)

    小批量梯度下降法在BGD算法和SGD算法之间找了一个trade-off,即加快更新速度,并减少噪声的影响,从而减少训练时间和提高准确率。

    特点:每次不选择所有的样本也不只选择一个样本,而是选择l(L的小写)个样本,也即bach_size。

    则Loss Function函数公式:

    则利用Loss函数来更新权重参数的公式:

    参考文献:

    [1] 训练一个神经网络1-- epoch,batch_size,iteration

    相关文章

      网友评论

          本文标题:梯度下降算法中的BGD、SGD和MBGD的详细介绍

          本文链接:https://www.haomeiwen.com/subject/ueptrftx.html