【详解】神经网络梯度更新方法

神经网络参数更新方法

1、SGD
  • SGD(Stochastic Gradient Descent)就是最常见的随机梯度下降。

  • 向着参数的梯度的负方向改变(梯度方向是增加的方向)。

x + = − l e a r n i n g _ r a t e ∗ d x x += -learning\_rate*dx x+=learning_ratedx

这里的x可以是权值w也可以是偏置b。

2、MBGD
  • MBGD(Mini Batch Gradient Descent)小批量梯度下降

  • 对每个批次中的n个训练样本,这种方法只执行一次更新。

  • 为了避免SGD和标准梯度下降中存在的问题。

使用小批量梯度下降的优点是:

  1. 可以减少参数更新的波动,最终得到效果更好和更稳定的收敛。
  2. 还可以使用最新的深层学习库中通用的矩阵优化方法,使计算小批量数据的梯度更加高效。
  3. 通常来说,小批量样本的大小范围是从50到256,可以根据实际问题而有所不同。
  4. 在训练神经网络时,通常都会选择小批量梯度下降算法。
3、Momentum update
  • SGD方法中的高方差振荡使得网络很难稳定收敛。
  • 研究者提出了一种称为动量(Momentum)的技术,通过优化相关方向的训练和弱化无关方向的振荡,来加速SGD训练。

受到物理中的启发:例子的力与势能梯度有相对关系。例子感受到的力,正是损失函数的负梯度。F=ma,负梯度正比于粒的加速度。与普通SGD不同,梯度直接作用于位置,这里用物理的角度来看,梯度直接影响速度,速度再影响位置。
x + = − l e a r n i n g _ r a t e ∗ d x x + = v \begin{aligned} x +=& -learning\_rate*dx\\ x +=& \quad v \end{aligned} x+=x+=learning_ratedxv

4、Nestrevo Momentum update

与Momentum稍稍有点不同。对于凸函数具有较强的理论收敛保证,实际中效果比Mnmentum稍好。

  • 通过使网络更新与误差函数的斜率相适应,并依次加速SGD。
  • 也可根据每个参数的重要性来调整和更新对应参数,以执行更大或更小的更新幅度。

当前参数向量在点x处,从Momentum更新中看v,忽略第二项v变成mu*v。做一个提前量用x_ahead=x+mu*v代替x。
x _ a h e a d = x + m u ∗ v v = m u ∗ v − l e a r n i n g _ r a t e ∗ d x _ a h e a d x + = v \begin{aligned} & x\_ahead = x + mu*v\\ & v = mu*v - learning\_rate*dx\_ahead\\ & x += \quad v \end{aligned} x_ahead=x+muvv=muvlearning_ratedx_aheadx+=v

每个参数适应学习率方法

前面的方法对每个参数学习了是固定的,调整学习率是一个耗时的过程。可以使用对每个参数都适应的学习率。

5、Adagrad

c a c h e + = ( d x ) 2 x + = − l e a r n i n g _ r a t e ∗ d x ( n p . s q r t ( c a c h e ) + e p s ) \begin{aligned} & cache += (dx)^2\\ &x += -learning\_rate*\frac{dx}{(np.sqrt(cache)+eps)} \end{aligned} cache+=(dx)2x+=learning_rate(np.sqrt(cache)+eps)dx

Adagrad方法是通过参数来调整合适的学习率η,对稀疏参数进行大幅更新和对频繁参数进行小幅更新。因此,Adagrad方法非常适合处理稀疏数据

对于大的梯度,会使他的有效学习率减小;对于小的梯度会使他的有效学习率增大。这种方法的一个缺点是,在深度学习中,单调的学习率通常证明太激进,会使学习停止过早。

6、AdaDelta

AdaDelta方法是AdaGrad的延伸方法,它倾向于解决其学习率衰减的问题。Adadelta不是累积所有之前的平方梯度,而是将累积之前梯度的窗口限制到某个固定大小w。

7、RMSprop

​ RMSprop是一种有效,但目前还未公开发布的自适应学习率方法。RMSprop改进Adagrad方法,减小他的激进,使用单调减小学习率。特别的,它使用了梯度平方移动平均值。
c a c h e = d e c a y _ r a t e ∗ c a c h e + ( 1 − d e c a y _ r a t e ) ∗ ( d x ) 2 x + = − l e a r n i n g _ r a t e ∗ d x ( n p . s q r t ( c a c h e ) + e p s ) \begin{aligned} &cache = decay\_rate*cache+(1-decay\_rate)*(dx)^2\\ &x += -learning\_rate*\frac{dx}{(np.sqrt(cache)+eps)} \end{aligned} cache=decay_ratecache+(1decay_rate)(dx)2x+=learning_rate(np.sqrt(cache)+eps)dx
decay_rate是一个超参数,典型值为[0.9, 0.99, 0.999]。
根据梯度尺度来调整学习率是一个有利均衡的效果,但与Adagrad不同,更新不是单调小。

8、Adam

Adam算法即自适应时刻估计方法(Adaptive Moment Estimation),能计算每个参数的自适应学习率。这个方法不仅存储了AdaDelta先前平方梯度的指数衰减平均值,而且保持了先前梯度M(t)的指数衰减平均值,有点像RMSprop结合momentum。

简单的更新如下:
m = b e l t a l ∗ m + ( 1 − b e l t a 1 ) ∗ d x v = b e l t a 2 ∗ v + ( 1 − b e l t a 2 ) ∗ ( d x ) 2 x + = − l e a r n i n g _ r a t e ∗ d x ( n p . s q r t ( v ) + e p s ) \begin{aligned} &m =beltal*m + (1-belta1)*dx\\ &v = belta2*v+(1-belta2)*(dx)^2\\ &x += -learning\_rate*\frac{dx}{(np.sqrt(v)+eps)} \end{aligned} m=beltalm+(1belta1)dxv=belta2v+(1belta2)(dx)2x+=learning_rate(np.sqrt(v)+eps)dx
与RMSProp类似,使用smooth版本的梯度m代替原始梯度dx。论文中的推荐值eps=1e-8,belta1=0.9,belta2=0.999。使用推荐值的Adam方法效果RMSprop稍好。但SGD加Nestrevo Momentum也值得使用。完整的Adam方法还包括一个bias校正机制。对前几部m,v设置成0进行补偿。

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值