谁挡了我的神经网络?(二)—— 优化算法

谁挡了我的神经网络?(二)—— 优化算法

这一系列文章介绍了在神经网络的设计和训练过程中,可能提升网络效果的一些小技巧。前文介绍了在训练过程中的一系列经验,这篇文章将重点关注其中的优化算法部分。更新于2018.11.1。

前言

在训练的过程中,选择的优化算法是否合适,很大程度上影响了神经网络的结果是否收敛、收敛到的精度和收敛的速度。因此,学会为当前的训练情境选择合适的优化算法是神经网络设计者们必备的技能之一。

考虑到传统的梯度下降法、随机梯度下降法等都已经非常成熟,可供学习的资料也很多,算法本身也并不复杂,而且由于算法的局限性,现在很少会用到了,因此这里只总结当前效果比较好、更受欢迎的Adam优化算法,至于其他几种算法可以从参考文献中找到介绍。

Adam

Adam是随机梯度下降法的一个延伸,也是目前最流行的优化算法,其中涉及到了非常多的参数。

参数

首先,上参数介绍和推荐参数,这些是与实验最相关的部分。至于理论,可以根据具体需要是否看下去。

  • alpha:也称作学习率(learning rate)或步长(step size),表示权重被更新的比例(如0.001);大一点的数值(如0.3)会导致在权重更新前较快的学习,而小一点的数值(如1.0e-5)会导致学习过程的减慢。
  • beta1:第一动量的指数衰减率(如0.9)。
  • beta2:第二动量的指数衰减率(如0.999)。对于NLP和计算及视觉等稀疏梯度问题,这个数值应当在1.0附近。
  • epsilon:是一个很小的数值(如1.0E-8),以防止在应用过程中出现除以0的情况。

除此以外,Adam也适用学习率衰减的方法。比如论文中用到了alpha=alpha/sqrt(t)。

根据论文,推荐的默认参数设置为alpha=0.001, beta1=0.9, beta2=0.999, epsilon=10-8。

TensorFlow上面推荐了epsilon的调参:1e-8并不一定对所有情况都适用,比如对于ImageNet,目前最好的选择是1.0或0.1。

尽管如此,目前流行的深度学习库都默认使用论文推荐的参数:

  • TensorFlow: learning_rate=0.001, beta1=0.9, beta2=0.999, epsilon=1e-08.
  • Keras: lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=1e-08, decay=0.0.
  • Blocks: learning_rate=0.002, beta1=0.9, beta2=0.999, epsilon=1e-08, decay_factor=1.
  • Lasagne: learning_rate=0.001, beta1=0.9, beta2=0.999, epsilon=1e-08
  • Caffe: learning_rate=0.001, beta1=0.9, beta2=0.999, epsilon=1e-08
  • MxNet: learning_rate=0.001, beta1=0.9, beta2=0.999, epsilon=1e-8
  • Torch: learning_rate=0.001, beta1=0.9, beta2=0.999, epsilon=1e-8

什么是Adam算法

Adam算法是Diederik Kingma(OpenAI)和Jimmy Ba(多伦多大学)在2015年的ICLR上发表的论文《Adam: A Method for Stochastic Optimization》中提出的。(注意:Adam算法是一个名字,而不是缩写,因此不要写成ADAM)

作者在论文中指出,Adam算法在解决非凸优化问题时有这样几点优势:

  • 应用简洁;
  • 计算效率高;
  • 所需内存小;
  • 对于梯度的对角尺寸变化(diagnoal rescale)具有不变性;
  • 适合有大量数据或(/和)参数的问题;
  • 适合非静态目标(non-stationary objectives);
  • 适合梯度噪声较大或稀疏梯度的问题;
  • 超参数具有直观解释(intuitive interpretation)且在一般情况下几乎不用调参。

Adam的工作原理

与随机梯度下降法不同的是,Adam算法会根据梯度的第一和第二动量的估计,为不同的参数习得不同的学习率。

作者形容,Adam算法结合了下面两种SGD的演化算法,并具有它们的优势:

  • Adaptive Gradient Algorithm (AdaGrad):这种算法中每个参数都有自己的学习率,从而提升了在稀疏梯度问题(如自然语言问题和计算及视觉问题)上的表现。
  • Root Mean Square Propagation(RMSProp):这个算法也保持了每个参数都有专属的学习率,并且学习率是根据最近这个权重的梯度幅值的平均值决定的(如其变化的速度),这也意味着,这个算法能很好地适应在线问题和非静态问题(如噪声)。

与RMSProp不同的是,Adam不是依据第一动量(first moment estimates)的平均值(mean)调整学习率的,其也会考虑梯度第第二动量的平均值(uncentered variance)。具体来讲,Adam计算梯度和梯度的平方的指数移动平均数(moving average),并且依靠参数beta1和beta2控制这些移动平均数的衰减率。运动平均数、beta1和beta2的推荐初始值是1.0附近,从而使得动量偏置趋向0。偏置的估计方式是首先计算得到偏置的估计,随后不断更正估计。

Adam的有效性

在这里插入图片描述

更多内容,欢迎加入星球讨论。
在这里插入图片描述

参考文献

  1. Adam算法介绍:https://machinelearningmastery.com/adam-optimization-algorithm-for-deep-learning/
  2. Momentum、RMSProp、Adam介绍:https://blog.paperspace.com/intro-to-optimization-momentum-rmsprop-adam/(中文版:https://www.jqr.com/article/000505)
  3. keras提供的几种优化算法和参数介绍:https://keras.io/optimizers/
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值