Adam优化算法

深度学习常常需要大量的时间和计算机资源进行训练,这也是困扰深度学习算法开发的重大原因。虽然我们可以采用分布式并行训练加速模型的学习,但需要的计算资源并没有丝毫减少。而唯有需要资源更少、令模型收敛更快的最优化算法,才能从根本上加速机器的学习速度和效果,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优化算法,如下:

原文地址:https://www.cnblogs.com/zhibei/p/9389925.html

时间: 2024-11-06 11:25:47

Adam优化算法的相关文章

深度解读最流行的优化算法:梯度下降

深度解读最流行的优化算法:梯度下降 By 机器之心2016年11月21日 15:08 梯度下降法,是当今最流行的优化(optimization)算法,亦是至今最常用的优化神经网络的方法.本文旨在让你对不同的优化梯度下降法的算法有一个直观认识,以帮助你使用这些算法.我们首先会考察梯度下降法的各种变体,然后会简要地总结在训练(神经网络或是机器学习算法)的过程中可能遇到的挑战.(本文的中文版 PDF 下载地址) 目录: 梯度下降的各种变体 批量梯度下降(Batch gradient descent)

梯度下降优化算法综述

本文翻译自Sebastian Ruder的"An overview of gradient descent optimization algoritms",作者首先在其博客中发表了这篇文章,其博客地址为:An overview of gradient descent optimization algoritms,之后,作者将其整理完放在了arxiv中,其地址为:An overview of gradient descent optimization algoritms,在翻译的过程中以

机器学习最常用优化之一——梯度下降优化算法综述

转自:http://www.dataguru.cn/article-10174-1.html 梯度下降算法是机器学习中使用非常广泛的优化算法,也是众多机器学习算法中最常用的优化方法.几乎当前每一个先进的(state-of-the-art)机器学习库或者深度学习库都会包括梯度下降算法的不同变种实现.但是,它们就像一个黑盒优化器,很难得到它们优缺点的实际解释.这篇文章旨在提供梯度下降算法中的不同变种的介绍,帮助使用者根据具体需要进行使用. 这篇文章首先介绍梯度下降算法的三种框架,然后介绍它们所存在的

优化算法动画演示Alec Radford's animations for optimization algorithms

Alec Radford has created some great animations comparing optimization algorithms SGD, Momentum, NAG, Adagrad, Adadelta,RMSprop (unfortunately no Adam) on low dimensional problems. Also check out his presentation on RNNs. "Noisy moons: This is logisti

吴恩达-深度学习-课程笔记-7: 优化算法( Week 2 )

1 Mini-batch梯度下降 在做梯度下降的时候,不选取训练集的所有样本计算损失函数,而是切分成很多个相等的部分,每个部分称为一个mini-batch,我们对一个mini-batch的数据计算代价,做完梯度下降,再对下一个mini-batch做梯度下降.比如500w个数据,一个mini-batch设为1000的话,我们就做5000次梯度下降(5000个mini-batch,每个mini-batch样本数为1000,总共500w个样本). 对于batch梯度下降(每次计算所有的样本),随着迭代

深度学习——优化算法

优化算法以加快训练的速度 1. mini-batch 把训练集划分成小点的子集(mini-batch) X{1}表示第一个mini-batch X(1)第1个样本 X[1]第一层的输入 1.1 mini-batch梯度下降方法过程:每次对一个mini-batch进行计算,包括J, w都是针对一个子集的 epoch:一代,表示遍历了整个数据集(而不是一个子集) 1.2 使用mini-batch的代价函数变化:每次迭代处理的是一个mini-batch,而代价函数也是指J{t} 1.3如何选择min-

优化算法比较的实验结果比较(BGD,SGD,MBGD,Momentum,Nesterov,Adagrad,RMSprop)

最近在学习神经网络的优化算法,发现网上有很多的算法介绍,但是却没有算法实现和实验对比,所以我就用python实现了BGD,SGD,MBGD,Momentum,Nesterov,Adagrad,RMSprop等算法,另外的Adam和NAdam算法是将Momentum,Nesterov,Adagrad几项合并起来的算法,属于工程方面的内容,所以我就没有实现了. 算法原理主要参考文献是: 整体算法参考:深度解读最流行的优化算法:梯度下降 整体算法参考:深度学习最全优化方法总结比较(SGD,Adagra

优化算法—梯度下降

转自:https://www.cnblogs.com/shixiangwan/p/7532858.html 梯度下降法,是当今最流行的优化(optimization)算法,亦是至今最常用的优化神经网络的方法.本文旨在让你对不同的优化梯度下降法的算法有一个直观认识,以帮助你使用这些算法.我们首先会考察梯度下降法的各种变体,然后会简要地总结在训练(神经网络或是机器学习算法)的过程中可能遇到的挑战. 目录: 梯度下降的各种变体 批量梯度下降(Batch gradient descent) 随机梯度下降

优化算法 - 特点

Optimizer 1.选择哪种优化算法并没有达成共识 2.具有自适应学习率(以RMSProp 和AdaDelta 为代表)的算法族表现得相当鲁棒,不分伯仲,但没有哪个算法能脱颖而出. 3.对于当前流行的优化算法包括括SGD.具动量的SGD.RMSProp.具动量的RMSProp.AdaDelta 和Adam而言,选择哪一个算法似乎主要取决于使用者对算法的熟悉程度(以便调节超参数) 4.基本不用二阶近似优化算法 -SGD SGD实际就是min-batch的实现,为最基础的优化算法,当今大部分优化