深度学习Adam优化算法简介

为你的深度学习模型选择优化算法可能意味着在几分钟、几小时和几天内获得好的结果之间的差异。

Adam优化算法是随机梯度下降算法的扩展,最近在计算机视觉和自然语言处理的深度学习应用中得到了更广泛的采用。

在这篇文章中,你将看到深度学习中使用的Adam优化算法的简单介绍。

读完这篇文章,你就会知道:

  • Adam算法是什么,以及使用该方法优化模型的一些好处。
  • Adam算法是如何工作的,它与AdaGrad和RMSProp的相关方法有何不同。
  • 如何配置Adam算法以及常用的配置参数。

我们开始吧。

Adam优化算法是什么?

Adam是一种基于训练数据迭代更新网络权值的优化算法,可以代替经典的随机梯度下降法。

Adam是由OpenAI的Diederk Kingma和多伦多大学的Jimmy Ba在他们2015年ICLR的论文(海报)中提出的,标题为“Adam:随机优化的方法”。

该算法被称为Adam。它不是首字母缩写,也没有写成“ADAM”。

……Adam这个名字来源于自适应矩估计。

在介绍该算法时,作者列举了使用Adam解决非凸优化问题的吸引人的优点,如下所示:

  • 实施起来简单明了。
  • 计算效率高。
  • 内存需求很小。
  • 渐变的对角重缩不变。
  • 非常适合于数据和/或参数较大的问题。
  • 适用于非固定目标。
  • 适用于具有非常噪波/或稀疏渐变的问题。
  • 超级参数有直观的解释,通常只需要很少的调整。

Adam是怎么工作的?

Adam不同于经典的随机梯度下降。

随机梯度下降为所有权重更新保持单一的学习率(称为α),并且学习率在训练期间不改变。

为每个网络权重(参数)维护学习率,并且随着学习的展开而单独调整学习率。

该方法根据梯度的一阶和二阶矩的估计来计算不同参数的个体自适应学习率。

作者将Adam描述为结合了随机梯度下降的另外两个扩展的优点。具体而言:

  • 自适应梯度算法(AdaGrad),保持每参数学习率,提高稀疏梯度问题(例如自然语言和计算机视觉问题)的性能。
  • 均方根传播(RMSProp),它还维护每个参数的学习率,这些学习率基于权重梯度的最近幅度的平均值(例如,它变化的速度)进行调整。这意味着该算法能够很好地处理在线和非平稳问题(例如,噪声)。

Adam认识到AdaGrad和RMSProp的好处。

与RMSProp中基于平均一阶矩(均值)的参数学习率不同,ADAM还利用梯度的二阶矩(未入心方差)的平均值。

具体地说,该算法计算梯度和平方梯度的指数移动平均,并且参数Beta1和Beta2控制这些移动平均的衰减率。

移动平均值的初始值以及Beta1和Beta2的值接近1.0(推荐)会导致矩估计偏向于零。这种偏差是通过先计算有偏估计,然后再计算经偏差校正的估计来克服的。

这篇文章非常易读,如果你对具体的实现细节感兴趣,我鼓励你阅读它。

Adam是有效的

Adam算法是深度学习领域中比较流行的一种算法,因为它能够快速地得到较好的结果。

实证结果表明,Adam方法在实际应用中效果良好,与其他随机优化方法相比具有一定的优势。

在原文中,Adam被实证地证明了收敛符合理论分析的期望。Adam被应用于MNIST数字识别和IMDB情感分析数据集上的Logistic回归算法、MNIST数据集上的多层感知器算法和CIFAR-10图像识别数据集上的卷积神经网络。他们的结论是:

使用大型模型和数据集,我们证明Adam可以有效地解决实际的深度学习问题。

训练多层感知器的Adam算法与其他优化算法的比较法与其他优化算法的比较
训练多层感知器的Adam算法与其他优化算法的比较

塞巴斯蒂安·鲁德(Sebastian Ruder)对现代梯度下降优化算法进行了全面的评论,题为“梯度下降优化算法概述”,首先作为博客文章发表,然后在2016年发布了一份技术报告。

这篇论文基本上是对现代方法的一次介绍。在标题为“使用哪个优化器?”的小节中,他推荐使用Adam。

就目前而言,RMSprop、Adadelta和Adam是非常相似的算法,它们在类似的环境中表现良好……当梯度变得更稀疏时,它的偏差校正有助于Adam在接近优化结束时略微优于RMSprop。就目前而言,Adam可能是最好的整体选择。

在安德烈·卡帕西等人开发的斯坦福大学计算机视觉深度学习课程“CS231n:用于视觉识别的卷积神经网络”中,Adam算法再次被建议为深度学习应用的默认优化方法。

实际上,目前推荐使用Adam作为默认算法,并且通常比RMSProp稍好一些。然而,通常也值得尝试SGD+Nesterov Momentum作为替代方案。

后来说得更清楚了:

推荐使用的两个更新是SGD+Nesterov Momentum或Adam。

Adam正在被改编成深度学习论文中的基准。

例如,它被用在关于图像字幕注意的论文《显示、注意和讲述:具有视觉注意的神经图像字幕生成》和关于图像生成的《绘制:用于图像生成的递归神经网络》的论文中。

Adam配置参数

  • alpha。也称为学习速率或步长。权重更新的比例(例如0.001)。值越大(例如0.3),更新速率之前的初始学习速度越快。较小的值(例如1.0E-5)会降低培训期间的学习速度。
  • beta1。一阶矩的指数衰减率估计值(例如0.9)。
  • beta2。二阶矩估计的指数衰减率(例如0.999)。对于具有稀疏渐变的问题(例如,NLP和计算机视觉问题),该值应设置为接近1.0。
  • epsilon。是一个非常小的数字,以防止实现中的任何被零除(例如10E-8)。

此外,学习速率衰减也可以与Adam一起使用。本文用衰减率alpha = alpha/sqrt(t)对每个epoch (t) 进行Logistic回归论证。

Adam的论文建议:

测试的机器学习问题的良好默认设置是alpha=0.001、beta1=0.9、beta2=0.999和epsilon=10−8。

TensorFlow文档建议对epsilon进行一些调整:

通常,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优化算法。

具体地说,你了解到:

  • Adam是一种用于训练深度学习模型的随机梯度下降的替换优化算法。
  • Adam结合了AdaGrad和RMSProp算法的最佳特性,提供了一种可以处理噪声问题上的稀疏梯度的优化算法。
  • Adam相对容易配置,默认配置参数可以很好地解决大多数问题。

00

Python

发表评论

邮箱地址不会被公开。 必填项已用*标注

什么阻碍了你实现迈入机器学习领域的目标?

什么阻碍了你实现迈入机器学习领域的目标?

2020-04-22 机器学习

如果你在为进入机器学习领域而挣扎,感觉到有什么东西阻止了自己的开始,那么你应该看看这篇文章。 在这篇文章中,我们会讨论阻止进入机器学习领域的自我限制的信念,让你明白面临的问题。 几乎总是一种自我限制的信念阻碍了你们的进步。 也许你会在一个或多个这样的信念中看到自己。如果是这样的话, [......]

了解详情

R语言机器学习迷你课程

R语言机器学习迷你课程

2020-08-12 机器学习

在这个迷你课程中,你将发现如何开始,构建精确的模型,并自信地完成在14天内使用R预测建模机器学习项目。 这是一个重要而重要的文章。你可能想把它书签。 了解如何准备数据,拟合机器学习模型,并用我的新书评估他们在r上的预测,包括14步教程、3个项目和完整源代码。 我们开始吧。 [......]

了解详情

关于机器学习的几点思考

关于机器学习的几点思考

2020-04-26 机器学习

机器学习是一个大的、跨学科的研究领域。 你可以通过机器学习获得令人印象深刻的结果,并找到非常具有挑战性的问题的解决方案。但这只是更广泛的机器学习领域的一小部分,通常被称为预测建模或预测分析。 在这篇文章中,你将发现如何改变你对机器学习的思考方式,以便更好地为你提供机器学习实践者的服务。 [......]

了解详情

找到你的机器学习部落

找到你的机器学习部落

2020-04-26 机器学习

机器学习是一个充满算法和数据的迷人而强大的研究领域。 问题是,有这么多不同类型的人对机器学习感兴趣,每个人都有不同的需求。重要的是要了解你想要从机器学习中得到什么,并根据这些需求调整你的自学。 如果你不这样做,你很容易就会陷入困境,迷失方向,失去兴趣,得不到你想要的东西。 找到 [......]

了解详情

应用机器学习过程

应用机器学习过程

2020-04-26 机器学习

随着时间的推移,在处理应用机器学习问题时,你会开发出一种模式或流程,以快速获得良好的正常结果。 一旦开发完成,你就可以在一个又一个项目上反复使用此过程。你的流程越健壮、越发达,你就能越快地获得可靠的结果。 在这篇文章中,我想与你分享我解决机器学习问题的过程框架。 你可以将其用作下一 [......]

了解详情