三种梯度下降算法的比较和几种优化算法

博客已迁至知乎,本文链接:https://zhuanlan.zhihu.com/p/70910873

前言

这篇文章介绍了三种梯度下降方法的原理与优缺点,详细地讲解了MomentumRMSpropAdam优化算法,给出了使用建议。


三种梯度下降方法

1.Batch Gradient Descent,全部样本梯度下降一次,训练样本很大时,单次迭代需要时间太长。

2.Stochastic Gradient Descent,单个样本梯度下降一次,没有了向量化加速,效率比Batch Gradient Descent低,到达loss最低区域后还可能会跳出来,当然这也可以使它从局部最小值区域跳出来,可以使用学习率衰减来缓解这个问题。

3.Mini-batch Gradient Descent,部分样本梯度下降一次,上两个方法的折中,它可能不会收敛也可能不会在很小的范围内波动(同样可以用学习率衰减的方法来缓解这个问题)。

下面是loss的梯度图,三条线是三种梯度下降方法每下降一次的路线,蓝色是Batch Gradient Descent,紫色是Stochastic Gradient Descent,绿色是Mini-batch Gradient Descent

进阶理解:
相对于GD,SGD能更有效的利用信息,特别是信息比较冗余的时候。举个例子,比如所有样本都需要向一个方向优化,GD优化一次需要对整个样本集迭代一次,而SGD只对一个样本优化就可以达到同样的效果。SGD相对于GD的另外一个优点是可以跳出局部最小值区域。
而mini-batch GD综合了两者的优点,既有了GD的向量化加速,还能像SGD更有效利用样本信息、可以跳出局部最小值区域的优点。另外,使用mini-batch,你还会发现不需要等待整个训练集被处理完就可以开始进行后续工作。

下面总结一下mini-batch的优点:
1.有向量化加速,加快了训练速度。
2.能有效利用样本信息,特别是信息比较冗余的时候。
3.有随机性,可以跳出局部最小值区域。
4.不需要等待整个训练集被处理完就可以开始进行后续工作。

下面是mini-batch的伪代码,中括号上标代表层数:
将 样 本 分 为 n 个 m i n i   b a t c h f o r     t = 1 , . . . n : 前 向 传 播 : { a [ 1 ] = g ( W [ 1 ] X t + b [ 1 ] ) a [ 2 ] = g ( W [ 2 ] X t + b [ 2 ] )              . . . a [ l ] = g ( W [ l ] X t + b [ l ] ) 计 算 l o s s : L 总 = 1 n ∑ i = 1 l L ( y ^ [ i ] , y [ i ] ) 反 向 传 播 : { 计 算 各 层 梯 度 d w 和 d b W [ l ] = W [ l ] − α d W [ l ] b [ l ] = b [ l ] − α d b [ l ] \begin{aligned} 将样本分为n个mini \ batch\\ for \ \ \ t=1,...n:\\ &前向传播:\\ &\begin{cases} a^{[1]} = g(W^{[1]}X_t+b^{[1]})\\ a^{[2]} = g(W^{[2]}X_t+b^{[2]})\\ \ \ \ \ \ \ \ \ \ \ \ \ ...\\ a^{[l]} = g(W^{[l]}X_t+b^{[l]})\\ \end{cases}\\ &计算loss: L_总 = \frac{1}{n} \sum^l_{i=1}L(\hat{y}^{[i]},y^{[i]}) \\ &反向传播:\\ &\begin{cases} 计算各层梯度 dw和db \\ W^{[l]}=W^{[l]}-\alpha dW^{[l]} \\ b^{[l]}=b^{[l]}-\alpha db^{[l]} \\ \end{cases}\\ \end{aligned} nmini batchfor   t=1,...n::a[1]=g(W[1]Xt+b[1])a[2]=g(W[2]Xt+b[2])            ...a[l]=g(W[l]Xt+b[l])loss:L=n1i=1lL(y^[i],y[i]):dwdbW[l]=W[l]αdW[l]b[l]=b[l]αdb[l]

用法总结

首先,如果训练集较小,直接使用Batch Gradient Descent梯度下降法,样本集较小就没必要使用mini-batch梯度下降法,这里的少是说小于差不多2000个样本,这样比较适合使用Batch Gradient Descent梯度下降法。

样本数目较大的话,一般的mini-batch大小为64到512,考虑到电脑内存设置和使用的方式,如果mini-batch大小是2的次方,代码会运行地快一些。64到512的mini-batch比较常见。


下面讲几种常见的梯度下降优化算法:

动量梯度下降法(Momentum)

Gradient descent with Momentum,这个梯度下降方法,基本的想法就是计算梯度的指数加权平均数,并利用它更新权重。直观来讲,就是给普通的梯度下降加了个“惯性”,就像开车,你不能开着开着想往右拐就瞬间拐到右边,它有个向前再往右的过程,换言之,你想改变行驶方向,是需要从之前的行驶方向慢慢改变的,并不能瞬间改变。同理,Momentum梯度下降也一样,比如这次迭代算出来你需要向a方向优化,但你并不能直接将你的方向改成a,需要综合考虑之前的方向。
下图左边是普通随机梯度下降,右边是Momentum随机梯度下降,可以看出后者加快了优化速度,抑制了震荡。

因为mini-batch相比标准的梯度下降来说,更新参数更快,所以收敛过程会有浮动(loss下降曲线),使用动量梯度下降法可以减小该浮动,还能加速训练。

看下mini-batch GD with Momentum的公式:

初 始 化 每 层 的 v d W 、 v d b , 形 状 和 d W 、 d b 一 致 , 元 素 全 为 0 将 样 本 分 为 n 个 m i n i   b a t c h f o r     t = 1 , . . . n : 前 向 传 播 : { a [ 1 ] = g ( W [ 1 ] X t + b [ 1 ] ) a [ 2 ] = g ( W [ 2 ] X t + b [ 2 ] )              . . . a [ l ] = g ( W [ l ] X t + b [ l ] ) 计 算 l o s s : L 总 = 1 n ∑ i = 1 l L ( y ^ [ i ] , y [ i ] ) 反 向 传 播 : { 计 算 各 层 梯 度 d w 和 d b v d W [ l ] = β v d W [ l − 1 ] + ( 1 − β ) d W [ l ] v d b [ l ] = β v d b [ l − 1 ] + ( 1 − β ) d b [ l ] W [ l ] = W [ l ] − α v d W [ l ] W [ l ] = b [ l ] − α v d b [ l ] \begin{aligned} {\color{Red}{初始化每层的v_{dW}、v_{db},}}&{\color{Red}{形状和dW、db一致,元素全为0}}\\ 将样本分为n个mini \ batch\\ for \ \ \ t=1,...n:\\ &前向传播:\\ &\begin{cases} a^{[1]} = g(W^{[1]}X_t+b^{[1]})\\ a^{[2]} = g(W^{[2]}X_t+b^{[2]})\\ \ \ \ \ \ \ \ \ \ \ \ \ ...\\ a^{[l]} = g(W^{[l]}X_t+b^{[l]})\\ \end{cases}\\ &计算loss: L_总 = \frac{1}{n} \sum^l_{i=1}L(\hat{y}^{[i]},y^{[i]}) \\ &反向传播:\\ &\begin{cases} 计算各层梯度 dw和db \\ {\color{Red}{v_{dW^{[l]}} = \beta v_{dW^{[l-1]}} + (1 - \beta) dW^{[l]}}} \\ \\ {\color{Red}{v_{db^{[l]}} = \beta v_{db^{[l-1]}} + (1 - \beta) db^{[l]}}} \\ \\ W^{[l]} = W^{[l]}

  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
梯度下降算法是一种常用的优化算法,用于在数学模型中找到最小化误差的参数。以下是几种常见的梯度下降算法及其理解: 1. 批量梯度下降(Batch Gradient Descent,BGD) 批量梯度下降是最基本的梯度下降算法,它通过在每次更新参数时使用整个训练集的梯度来更新参数,因此也被称为全局梯度下降。BGD的优点是收敛速度较快,但在处理大规模数据集时速度较慢,因为每次更新参数时需要计算所有训练样本的梯度。 2. 随机梯度下降(Stochastic Gradient Descent,SGD) 随机梯度下降是一种每次更新参数时只使用一个随机样本的梯度的算法。与BGD相比,SGD的更新速度更快,但是由于每次只更新一个样本,所以更新参数的方向变化更加不稳定。此外,SGD对初始参数的选择较为敏感,需要进行一定的参数调整。 3. 小批量梯度下降(Mini-Batch Gradient Descent,MBGD) 小批量梯度下降是介于BGD和SGD之间的一种梯度下降算法。它每次更新参数时使用一小批次(一般为2-100个)训练样本的梯度,同时也具有较快的更新速度和较稳定的更新方向。MBGD通常是深度学习中最常用的梯度下降算法之一。 总的来说,不同的梯度下降算法适用于不同的场景,需要根据具体情况选择。例如,在处理小规模数据集时,SGD可能比BGD更适合,而在处理大规模数据集时,MBGD可能更加适合。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值