姓名:宋子璇
学号:16020199060
转载自:https://zhuanlan.zhihu.com/p/33385885
【嵌牛导读】:深度学习最常用的学习算法:Adam优化算法
【嵌牛鼻子】:深度学习 Adam
【嵌牛提问】:Adam有哪些特点?
【嵌牛正文】
听说你了解深度学习最常用的学习算法:Adam优化算法?-深度学习世界。
深度学习常常需要大量的时间和机算资源进行训练,这也是困扰深度学习算法开发的重大原因。虽然我们可以采用分布式并行训练加速模型的学习,但所需的计算资源并没有丝毫减少。而唯有需要资源更少、令模型收敛更快的最优化算法,才能从根本上加速机器的学习速度和效果,Adam 算法正为此而生!
Adam 优化算法是随机梯度下降算法的扩展式,近来其广泛用于深度学习应用中,尤其是计算机视觉和自然语言处理等任务。本文分为两部分,前一部分简要介绍了 Adam 优化算法的特性和其在深度学习中的应用,后一部分从 Adam 优化算法的原论文出发,详细解释和推导了它的算法过程和更新规则。我们希望读者在读完两部分后能了解掌握以下几点:
Adam 算法是什么,它为优化深度学习模型带来了哪些优势。
Adam 算法的原理机制是怎么样的,它与相关的 AdaGrad 和 RMSProp 方法有什么区别。
Adam 算法应该如何调参,它常用的配置参数是怎么样的。
Adam 的实现优化的过程和权重更新规则
Adam 的初始化偏差修正的推导
Adam 的扩展形式:AdaMax
01
什么是Adam优化算法?
Adam 是一种可以替代传统随机梯度下降过程的一阶优化算法,它能基于训练数据迭代地更新神经网络权重。Adam 最开始是由 OpenAI 的 Diederik Kingma 和多伦多大学的 Jimmy Ba 在提交到 2015 年 ICLR 论文(Adam: A Method for Stochastic Optimization)中提出的。本文前后两部分都基于该论文的论述和解释。
首先该算法名为「Adam」,其并不是首字母缩写,也不是人名。它的名称来源于适应性矩估计(adaptive moment estimation)。在介绍这个算法时,原论文列举了将 Adam 优化算法应用在非凸优化问题中所获得的优势:
直截了当地实现
高效的计算
所需内存少
梯度对角缩放的不变性(第二部分将给予证明)
适合解决含大规模数据和参数的优化问题
适用于非稳态(non-stationary)目标
适用于解决包含很高噪声或稀疏梯度的问题
超参数可以很直观地解释,并且基本上只需极少量的调参
02
Adam优化算法的基本机制
Adam 算法和传统的随机梯度下降不同。随机梯度下降保持单一的学习率(即 alpha)更新所有的权重,学习率在训练过程中并不会改变。而 Adam 通过计算梯度的一阶矩估计和二阶矩估计而为不同的参数设计独立的自适应性学习率。
Adam 算法的提出者描述其为两种随机梯度下降扩展式的优点集合,即:
适应性梯度算法(AdaGrad)为每一个参数保留一个学习率以提升在稀疏梯度(即自然语言和计算机视觉问题)上的性能。
均方根传播(RMSProp)基于权重梯度最近量级的均值为每一个参数适应性地保留学习率。这意味着算法在非稳态和在线问题上有很有优秀的性能。
Adam 算法同时获得了 AdaGrad 和 RMSProp 算法的优点。Adam 不仅如 RMSProp 算法那样基于一阶矩均值计算适应性参数学习率,它同时还充分利用了梯度的二阶矩均值(即有偏方差/uncentered variance)。具体来说,算法计算了梯度的指数移动均值(exponential moving average),超参数 beta1 和 beta2 控制了这些移动均值的衰减率。
移动均值的初始值和 beta1、beta2 值接近于 1(推荐值),因此矩估计的偏差接近于 0。该偏差通过首先计算带偏差的估计而后计算偏差修正后的估计而得到提升。如果对具体的实现细节和推导过程感兴趣,可以继续阅读该第二部分和原论文。
03
Adam算法的高效性
Adam 在深度学习领域内是十分流行的算法,因为它能很快地实现优良的结果。经验性结果证明 Adam 算法在实践中性能优异,相对于其他种类的随机优化算法具有很大的优势。
在原论文中,作者经验性地证明了 Adam 算法的收敛性符合理论性的分析。Adam 算法可以在 MNIST 手写字符识别和 IMDB 情感分析数据集上应用优化 logistic 回归算法,也可以在 MNIST 数据集上应用于多层感知机算法和在 CIFAR-10 图像识别数据集上应用于卷积神经网络。他们总结道:「在使用大型模型和数据集的情况下,我们证明了 Adam 优化算法在解决局部深度学习问题上的高效性。」
Adam 优化算法和其他优化算法在多层感知机模型中的对比
事实上,Insofar、RMSprop、Adadelta 和 Adam 算法都是比较类似的优化算法,他们都在类似的情景下都可以执行地非常好。但是 Adam 算法的偏差修正令其在梯度变得稀疏时要比 RMSprop 算法更快速和优秀。Insofar 和 Adam 优化算法基本是最好的全局选择。同样在 CS231n 课程中,Adam 算法也推荐作为默认的优化算法。
虽然 Adam 算法在实践中要比 RMSProp 更加优秀,但同时我们也可以尝试 SGD+Nesterov 动量来作为 Adam 的替代。即我们通常推荐在深度学习模型中使用 Adam 算法或 SGD+Nesterov 动量法。
04
Adam的参数配置
alpha:同样也称为学习率或步长因子,它控制了权重的更新比率(如 0.001)。较大的值(如 0.3)在学习率更新前会有更快的初始学习,而较小的值(如 1.0E-5)会令训练收敛到更好的性能。
beta1:一阶矩估计的指数衰减率(如 0.9)。
beta2:二阶矩估计的指数衰减率(如 0.999)。该超参数在稀疏梯度(如在 NLP 或计算机视觉任务中)中应该设置为接近 1 的数。
epsilon:该参数是非常小的数,其为了防止在实现中除以零(如 10E-8)。
另外,学习率衰减同样可以应用到 Adam 中。原论文使用衰减率 alpha = alpha/sqrt(t) 在 logistic 回归每个 epoch(t) 中都得到更新。
05
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 的调参相对简单,默认参数就可以处理绝大部分的问题。