关键词:
深度学习常常需要大量的时间和计算机资源进行训练,这也是困扰深度学习算法开发的重大原因。虽然我们可以采用分布式并行训练加速模型的学习,但需要的计算资源并没有丝毫减少。而唯有需要资源更少、令模型收敛更快的最优化算法,才能从根本上加速机器的学习速度和效果,Adam算法正为此而生!
Adam优化算法是随机梯度下降算法的扩展式,进来其广泛的应用与深度学习的应用中,尤其是计算机视觉和自然语言处理等任务。本文分为两部分,前一部分简要介绍了Adam优化算法的特性和其在深度学习中的应用,后一部分从Adam优化算法的原论文出发,详细解释和推导了他的算法过程和更新规则,我们希望读者在苏皖这两部分后能了解掌握以下几点:
1) Adam算法是什么,他为优化深度学习模型带来了哪些优势
2) Adam算法的原理机制是怎样的,它与相关的AdaGrad和RMSProp方法有什么区别
3) Adam算法应该如何调参,它常用的配置参数是怎么样的
4) Adam的实现优化的过程和权重更新规则
5) Adam的初始化偏差修正的推导
6) Adam的扩展形式:AdaMax
1、 什么是Adam优化算法?
Adam是一种可以替代传统随机梯度下降过程的一阶优化算法,它能基于训练数据迭代的更新神经网络权重。
首先该算法名【Adam】,其并不是首字母缩写,也不是人名。他的名称来源于自适应矩估计(adaptive moment estimation)。在介绍这个算法时,原论文列举了将Adam优化算法应用在非凸优化问题中所获得的优势:
1) 直截了当的实现
2) 高效的计算
3) 所需内存少
4) 梯度对角缩放的不变性
5) 适合解决含大规模数据和参数的优化问题
6) 使用于非稳态目标
7) 适用于解决包含很高噪声或稀疏梯度的问题
8) 超参数可以很直观地解释,并且基本上只需要极少量的调参
2、 Adam优化算法的基本机制
Adam算法和传统的随机梯度下降不同。随机梯度下降保持单一的学习率(即alpha)更新所有的权重,学习率在训练过程中并不会改变。而Adam通过随机梯度的一阶矩估计和二阶矩估计而为不同的参数设计独立的自适应性学习率。
Adam算法的提出者描述其为两种随机梯度下降扩展式的优点集合,即:
1) 适应梯度算法(AdaGrad)为每一个参数保留一个学习率以提升在稀疏梯度(即自然语言和计算机视觉问题)上的性能
2) 均方根传播基于权重梯度最近量级的均值为每一个参数适应性的保留学习率。这意味着算法在非稳态和在线问题上有很优秀的性能
3) Adam算法同时获得了AdaGrad和RMSProp算法的优点。Adam不仅如RMSProp算法那样基于一阶矩阵计算适应性参数学习率,它同时还充分利用了梯度的二阶矩均值(即有偏方差)。具体来说,算法计算了梯度的指数移动均值,超参数beta1和beta2控制了这些移动均值的衰减率。
4) 移动均值的初始值和beta1、beta2值接近于1(推荐值),因此矩估计的偏差接近于0,该偏差通过首先计算带偏差的估计而后计算偏差修正后的估计而得到提升。如果对具体的实现细节和推导过程感兴趣,可以继续阅读第二部分和原论文
3、 Adam算法的高效性
Adam在深度学习领域十分流行,因为他能很快地实现优良的结果,经验性结果证明Adam算法在实践中性能优异,相对于其他种类的随机优化算法具有很大的优势。
在原论文中,作者经验性的证明了Adam算法的收敛性符合理论性的分析。Adam算法可以在MINIST手写字符识别和IMDB情感分析数据集上由于logistic回归算法,也可以在MINIST数据集上应用于多层感知机算法和CIFAR-10图像识别数据集上应用于卷积神经网络。他们总结道:在使用大型模型和数据集的情况下,我们证明了Adam优化算法在解决局部深度学习问题上的高效性
Adam优化算法和其他优化算法在多层感知机模型中的对比
事实上,Insofar、RMSProp、Adadelata和Adam算法都是比较类似的优化算法,他们在类似的情境下都可以执行的非常好。但是Adam算法的偏差修正令其在梯度变得稀疏时要比RMSProp算法更优秀更快速。Insofar和Adam优化算法基本是最好的全局选择。同样在CS21n课程中,Adam算法也推荐作为默认的优化苏纳法
虽然Adam算法在实践中要比RMSProp更加优秀,但同时我们也可以尝试SGD+Nesterov动量作为Adam的替代。即我们通常推荐在深度学习模型中使用Adam算法或SGD+Nesterov动量法。
4、 Adam的参数配置
alpha:同样也称为学习率或步长因子,它控制了权重的更新比率(如0.001).较大的值(如0.3)在学习率更新前会更快的初始学习,而较小的值(如1E-5)会令训练收敛到更好的性能
beta1:一阶矩估计的指数衰减率(如0.9)
beta2:二阶矩估计的指数衰减率(如0.99).该超参数在系数梯度(如在NLP或计算机视觉任务中)中应该设置接近1的数
epsilon:该参数是非常小的数,其为了防止在实现中除以零(如1E-8)
另外,学习率衰减同样可以应用到Adam中,原论文使用衰减率alpha=alpha/sqrt(t)在logistic回归中每个epoch(t)中都得到更新
5、 Adam论文建议参数设定
测试机器学习问题比较好的默认参数设定为:alpha=0.001,beta1=0.9,beta2=0.999和epsilon=10E-8.
我们也可以看到流行深度学习库采用了改论文推荐的参数设置:
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是一种在深度学习模型中用来替代随机梯度下降的优化算法。
Adam结合了AdaGrad和RMSProp算法最优的性能,它还是能提供解决稀疏梯度和噪声问题的优化方法
Adam的调参相对简单,默认参数就可以处理绝大部分的问题
我们提出了Adam算法,即一种对随机目标函数执行yi接梯度优化的算法,该算法基于适应性低阶矩估计,Adam算法很容易实现,并且有很高的计算效率和较低的内存需求
Adam算法梯度的对角缩放具有不变性,因此很适合求解带有大规模数据或参数的问题。该算法同样适用于解决大噪声和稀疏梯度的非稳态问题。超参数可以很直观的解释,并只需要少量调整。本论文还讨论了Adam算法和其他区相类似的算法。我们分析了Adam算法的理论收敛性,并提供了收敛的区间,我们证明收敛的速度在线凸优化框架下达到了最优。经验结果也展示了Adam算法在实践上比得上其他随机优化方法。最后,我们讨论了AdaMax,即一种基于无穷范数的Adam变体。
Adam 算法
require:步长alpha:(建议默认为:0.001)
require:矩估计的指数衰减率,beta1、beta2在区间[0,1]内。(建议默认为:分别为0.9和0.999)
require:用于数值稳定的小常数epsilon(建议默认为:1E-8)
require:初始参数为
初始化一阶和二阶变量s=0,r=0
初始化时间步t=0
while 没有达到停止标准 do
从训练集中采包含m个样本的小批量,对应目标为。
计算梯度:
更新有偏一阶矩估计:
更新有偏二阶矩估计:
修正一阶矩的偏差:
修正二阶矩的偏差:
计算更新:
应用更新:
end while
实例:
在学习tensorflow例子的时候代码里面给出的优化方案默认很多情况下都是直接用的AdamOptimizer优化算法,如下:
adam梯度下降算法分析
(一)、什么是Adam算法?Adam(Adaptivemomentum)是一种自适应动量的随机优化方法(Amethodforstochasticoptimization),经常作为深度学习中的优化器算法。(二)、Adam算法如何实现? ? 查看详情
神经网络优化算法如何选择adam,sgd
...来做视频处理,在学习tensorflow例子的时候代码里面给的优化方案默认很多情况下都是直接用的AdamOptimizer优化算法,如下:optimizer=tf.train.AdamOptimizer(learning_rate=lr).minimize(cost)1但是在使用caffe时solver里面一般都用的SGD+momentum 查看详情
adam算法
...Adam是一种可以替代传统随机梯度下降(SGD)过程的一阶优化算法,它能基于训练数据迭代地更新神经网络权重。Adam最开始是由OpenAI的DiederikKingma和多伦多大学的JimmyBa在提交到2015年ICLR论文(Adam:AMethodforStochasticOptimization)中提出... 查看详情
简单解释momentum,rmsprop,adam优化算法
...收敛的速度很慢。因此根据这些原因,有人提出了Momentum优化算法,这个是基于SGD的,简单理解,就是为了防止波动,取前几次波动的平均值当做这次的W。这个就用到理论的计算梯度的指数加权平均数,引进超参数beta(一般取0.9)... 查看详情
深度学习优化算法大全系列6:adam(代码片段)
...前面铺垫了这么多,终于铺垫到Adam了。作为最常用的优化器之一,很多同学可能都听说过Adam的名字,但是Adam是什么意思可能并不清楚。Adam其实包括两部分:Ada+M。其中,Ada就是我们前面提到的Adaptive,... 查看详情
pytorch优化器全总结adadeltarmspropadamadamaxadamwnadamsparseadam(重置版)(代码片段)
目录写在前面一、torch.optim.AdadeltaAdadelta代码Adadelta算法解析Adadelta总结二、torch.optim.RMSpropRMSprop代码RMSprop算法解析RMSprop总结三、torch.optim.Adam(AMSGrad)Adam代码Adam算法解析Adam总结四、torch.optim.AdamaxAdamax代码Adamax算法解析Adama 查看详情
ADAM 优化器如何在 keras 中输出 v_t 的特定值?
】ADAM优化器如何在keras中输出v_t的特定值?【英文标题】:HowdoestheADAMoptimizeroutputaspecificvalueforv_tinkeras?【发布时间】:2018-04-0312:30:41【问题描述】:我想查看计算v_t的ADAM算法每次迭代的结果,所以我在keras\\optimizers.py文件中的Ada... 查看详情
深度学习优化算法大全系列7:nadam,算法选择,调参(代码片段)
1.NAdam集大成前面我们讲Adam的时候,提到Adam是Adaptive+Momentum。更前面的时候,我们还提到Nesterov,如果把Nesterov跟Adam结果,就是我们最后的集大成者NAdam。classNadam(Optimizer):"""NesterovAdamoptimizer.MuchlikeAdamises... 查看详情
优化算法(optimizationalgorithms)
...centwithMomentum) 4.RMSprop算法(rootmeansquareprop):5.Adam优化算法(Adamoptimizationalgorithm):Adam优化算法基本上就是将Momentum和RMSprop结合在一起6.学习率衰减(Learningratedecay):加快学习算法的一个办法就是随时间慢慢减少学习率,这... 查看详情
Tensorflow Adam 优化器与 Keras Adam 优化器
】TensorflowAdam优化器与KerasAdam优化器【英文标题】:TensorflowAdamoptimizervsKerasAdamoptimizer【发布时间】:2019-01-0819:01:19【问题描述】:我最初在Keras中开发了一个分类器,我的优化器很容易应用衰减。adam=keras.optimizers.Adam(decay=0.001)最... 查看详情
入门神经网络优化算法:二阶优化算法k-fac
...redFisherapproximationApproximatingF~\\tildeFF~asblock-diagonal参考资料优化算法系列文章索引:入门神经网络优化算法(一):GradientDescent,Momentum,Nesterovacceleratedgradient入门神经网络优化算法(二):Adaptiv... 查看详情
优化方法总结:sgd,momentum,adagrad,rmsprop,adam
1.SGDBatchGradientDescent在每一轮的训练过程中,BatchGradientDescent算法用整个训练集的数据计算costfuction的梯度,并用该梯度对模型参数进行更新:Θ=Θ−α⋅▽ΘJ(Θ)\\Theta=\\Theta-\\alpha\\cdot\\triangledown_\\ThetaJ(\\Theta 查看详情
smooth的作用,adam算法引入了二阶动量的概念
...ffererntiablefunction(连续可微分函数),从而在optimization(优化)Smooth是需要看一下的,心里有个数.但是具体调参怎么调是没辙的.第一,你不可能告诉网络,这层你得学个边界检测的功能出来.第二,不同任务下会有不同的weights(虽然底... 查看详情
Keras 中 Adam 优化器的衰减参数
】Keras中Adam优化器的衰减参数【英文标题】:DecayparameterofAdamoptimizerinKeras【发布时间】:2020-05-1814:34:06【问题描述】:我认为Adam优化器的设计使其能够自动调整学习率。但是在Keras的Adam参数选项中有一个选项可以明确提及衰减... 查看详情
adam优化器
...慢;当我们采用大的学习率的时候,会导致在训练过程中优化的幅度跳过函数的范围,也就是可能跳过最优点。(3)Momentum(动量)优点:网络在优化的时候网络的损失函数有一个很好的收敛速度同时又不至于摆动幅度太大。Mom... 查看详情
pytorchnote21优化算法对比
PytorchNote21优化算法对比全部笔记的汇总贴:PytorchNote快乐星球在Note15-20中,我们介绍了多种基于梯度的参数更新方法,实际中,我们可以使用Adam作为默认的优化算法,往往能够达到比较好的效果,同时SGD... 查看详情
Tensorflow:如何正确使用 Adam 优化器
】Tensorflow:如何正确使用Adam优化器【英文标题】:Tensorflow:HowtouseAdamoptimizerproperly【发布时间】:2017-05-2316:46:44【问题描述】:有人已经问过similarquestion,但是那里给出的解决方案对我不起作用。我正在尝试在tensorflow中使用Adam... 查看详情
深度学习笔记:优化方法总结(bgd,sgd,momentum,adagrad,rmsprop,adam)
...习笔记(三):激活函数和损失函数深度学习笔记:优化方法总结深度学习笔记(四):循环神经网络的概念,结构和代码注释深度学习笔记(五):LSTM深度学习笔记(六):Encoder- 查看详情