欢迎光临散文网 会员登陆 & 注册

深度学习中用的最多的优化算法:Adam算法

2023-05-07 17:08 作者:数学建模学习交流  | 我要投稿

刚入门深度学习时,所有课程都会介绍梯度下降算法,以梯度下降为基础,通常会接着介绍:SGD(随机梯度下降)、BGD(批量梯度下降)和Mini-BGD(小批量梯度下降)三种变形。

然而,传统的梯度算法有下面两个最大的缺点:

(1)学习率保持不变

学习率保持不变的话有以下几个缺点:若设置的学习率过大,可能会导致梯度下降算法在最优解附近震荡,无法收敛,或者跳过最优解,导致损失函数增大。若学习率过小,可能会导致梯度下降算法收敛速度过慢,需要更多的迭代次数,或者陷入局部最优解,无法达到全局最优解。另外,固定的学习率可能会导致梯度下降算法无法适应不同的数据分布和模型复杂度,需要手动调整或选择合适的学习率。

(2)在鞍点处震荡且容易陷入局部最优点

普通的梯度下降方法更新最优解的方向完全依赖于计算出来的梯度,所以很容易陷入局部最优的马鞍点。

如何解决上面两点问题呢?

针对问题(1),可以采用自适应梯度下降解决。自适应梯度下降是一类改进的随机梯度下降算法,它可以根据参数的稀疏程度或历史梯度信息,动态地调整每个参数的学习率。其优点是可以加速收敛,适应不同的数据分布和模型复杂度,减少手动调参的工作。常见的自适应梯度下降算法有AdaGrad,RMSProp等。Adam算法也采用了自适应梯度下降的策略。

针对问题(2),可以使用动量梯度下降法,其优点有以下几点:可以加速梯度下降算法的收敛速度,特别是在损失函数存在鞍点或者曲率不一致的情况下;可以抑制梯度下降算法的震荡,使其沿着最优方向更新参数,而不是随机地变换方向;可以克服梯度下降算法的局部最优解问题,使其更有可能达到全局最优解。


Adam算法在2014年底由Kingma和Lei Ba两位学者共同提出。首先,Adam算法是自适应梯度下降算法的一种,因为它可以根据梯度的一阶矩和二阶矩的估计,为每个参数的学习率进行自适应调整。这样可以避免使用固定的或者手动调节的学习率,提高优化效率和稳定性。同时,Adam算法是添加了动量的梯度下降算法,因为它可以利用梯度的一阶矩的估计,为每个参数的更新方向增加一个惯性项,使得更新方向更加平滑和稳定。这样可以避免梯度下降算法在噪声或者曲率不一致的情况下产生的震荡或者偏离最优解的问题。实践表明,在NLP、CV等问题的优化上,Adam算法取得了较好的成功。

原论文如下,根据google学术上的数据,目前该论文被引用次数有14w次,这数据太夸张了。。。

Kingma D ,  Ba J . Adam: A Method for Stochastic Optimization[J]. Computer Science, 2014.

下面我们直接来看论文中的核心步骤:

上图是原作者给的伪代码,翻译成中文如下:

原文作者还给出了一组表现较好的默认参数:学习率取为0.001,一阶矩估计的指数衰减率为0.9,二阶矩估计的指数衰减率为0.999。


Adam算法和其他优化算法的优缺点如下:

  • 优点:

  • Adam算法可以自适应地调整学习率,不需要手动设置或调整。

  • Adam算法可以有效地处理稀疏梯度或噪声梯度的问题。

  • Adam算法可以快速收敛,适用于大规模的数据集和模型。

  • 缺点:

  • Adam算法有一些超参数,如β1,β2,需要根据问题进行选择或调整。

  • Adam算法可能会导致过拟合,特别是在小数据集或正则化不足的情况下。

  • Adam算法可能会陷入局部最优解,而不是全局最优解

在MATLAB中也有相应的介绍:

https://ww2.mathworks.cn/help/deeplearning/ref/trainingoptions.html

深度学习中用的最多的优化算法:Adam算法的评论 (共 条)

分享到微博请遵守国家法律