深度学习 Optimizer 梯度下降优化算法总结
机器学习实验室
共 7175字,需浏览 15分钟
· 2021-01-28
来源:https://zhuanlan.zhihu.com/p/343564175
论文标题:An overview of gradient descent optimization algorithms
原文链接:https://arxiv.org/pdf/1609.04747.pdfGithub:NLP相关Paper笔记和代码复现(https://github.com/DengBoCong/nlp-paper)
说明:阅读论文时进行相关思想、结构、优缺点,内容进行提炼和记录,论文和相关引用会标明出处,引用之处如有侵权,烦请告知删除。
写在前面
计算目标函数关于当前参数的梯度: 根据历史梯度计算一阶动量和二阶动量: 计算当前时刻的下降梯度: 根据下降梯度进行更新:
鞍点:一个光滑函数的鞍点邻域的曲线,曲面,或超曲面,都位于这点的切线的不同边。例如这个二维图形,像个马鞍:在x-轴方向往上曲,在y-轴方向往下曲,鞍点就是(0,0)。
指数加权平均、偏差修正:可参见这篇文章
Gradient Descent(GD)
训练速度慢:在应用于大型数据集中,每输入一个样本都要更新一次参数,且每次迭代都要遍历所有的样本,会使得训练过程及其缓慢,需要花费很长时间才能得到收敛解。 容易陷入局部最优解:由于是在有限视距内寻找下山的反向,当陷入平坦的洼地,会误以为到达了山地的最低点,从而不会继续往下走。所谓的局部最优解就是鞍点,落入鞍点,梯度为0,使得模型参数不在继续更新。
Batch Gradient Descent(BGD)
Stochastic Gradient Descent(SGD)
虽然看起来SGD波动非常大,会走很多弯路,但是对梯度的要求很低(计算梯度快),而且对于引入噪声,大量的理论和实践工作证明,只要噪声不是特别大,SGD都能很好地收敛。 应用大型数据集时,训练速度很快。比如每次从百万数据样本中,取几百个数据点,算一个SGD梯度,更新一下模型参数。相比于标准梯度下降法的遍历全部样本,每输入一个样本更新一次参数,要快得多。
SGD在随机选择梯度的同时会引入噪声,使得权值更新的方向不一定正确(次要)。 SGD也没能单独克服局部最优解的问题(主要)。
Mini-batch Gradient Descent(MBGD,也叫作SGD)
Mini-batch gradient descent 不能保证很好的收敛性,learning rate 如果选择的太小,收敛速度会很慢,如果太大,loss function 就会在极小值处不停地震荡甚至偏离(有一种措施是先设定大一点的学习率,当两次迭代之间的变化低于某个阈值后,就减小 learning rate,不过这个阈值的设定需要提前写好,这样的话就不能够适应数据集的特点)。对于非凸函数,还要避免陷于局部极小值处,或者鞍点处,因为鞍点所有维度的梯度都接近于0,SGD 很容易被困在这里(会在鞍点或者局部最小点震荡跳动,因为在此点处,如果是BGD的训练集全集带入,则优化会停止不动,如果是mini-batch或者SGD,每次找到的梯度都是不同的,就会发生震荡,来回跳动)。 SGD对所有参数更新时应用同样的 learning rate,如果我们的数据是稀疏的,我们更希望对出现频率低的特征进行大一点的更新, 且learning rate会随着更新的次数逐渐变小。
Momentum
随机梯度的方法(引入的噪声) Hessian矩阵病态问题(可以理解为SGD在收敛过程中和正确梯度相比来回摆动比较大的问题)。
Nesterov Accelerated Gradient
Adagrad
仍需要手工设置一个全局学习率 , 如果 设置过大的话,会使regularizer过于敏感,对梯度的调节太大 中后期,分母上梯度累加的平方和会越来越大,使得参数更新量趋近于0,使得训练提前结束,无法学习
Adadelta
训练初中期,加速效果不错,很快 训练后期,反复在局部最小值附近抖动
RMSprop
其实RMSprop依然依赖于全局学习率 RMSprop算是Adagrad的一种发展,和Adadelta的变体,效果趋于二者之间 适合处理非平稳目标(包括季节性和周期性)——对于RNN效果很好
Adaptive Moment Estimation(Adam)
Adam梯度经过偏置校正后,每一次迭代学习率都有一个固定范围,使得参数比较平稳。 结合了Adagrad善于处理稀疏梯度和RMSprop善于处理非平稳目标的优点 为不同的参数计算不同的自适应学习率 也适用于大多非凸优化问题——适用于大数据集和高维空间。
AdaMax
Nadam
下图描述了在一个曲面上,6种优化器的表现:
下图在一个存在鞍点的曲面,比较6中优化器的性能表现:
下图图比较了6种优化器收敛到目标点(五角星)的运行过程
总结
对于稀疏数据,尽量使用学习率可自适应的优化方法,不用手动调节,而且最好采用默认值 SGD通常训练时间更长,但是在好的初始化和学习率调度方案的情况下,结果更可靠 如果在意更快的收敛,并且需要训练较深较复杂的网络时,推荐使用学习率自适应的优化方法。 Adadelta,RMSprop,Adam是比较相近的算法,在相似的情况下表现差不多。 在想使用带动量的RMSprop,或者Adam的地方,大多可以使用Nadam取得更好的效果 如果验证损失较长时间没有得到改善,可以停止训练。 添加梯度噪声(高斯分布 )到参数更新,可使网络对不良初始化更加健壮,并有助于训练特别深而复杂的网络。
An overview of gradient descent optimization algorithms(https://ruder.io/optimizing-gradient-descent/) 深度学习最全优化方法总结比较(SGD,Adagrad,Adadelta,Adam,Adamax,Nadam)(https://zhuanlan.zhihu.com/p/22252270) visualize_optimizers(https://github.com/snnclsr/visualize_optimizers) lossfunctions(https://lossfunctions.tumblr.com/) 优化算法Optimizer比较和总结(https://zhuanlan.zhihu.com/p/55150256) 一个框架看懂优化算法之异同 SGD/AdaGrad/Adam(https://zhuanlan.zhihu.com/p/32230623) 深度学习——优化器算法Optimizer详解(BGD、SGD、MBGD、Momentum、NAG、Adagrad、Adadelta、RMSprop、Adam)(https://www.cnblogs.com/guoyaohua/p/8542554.html) 机器学习:各种优化器Optimizer的总结与比较(https://blog.csdn.net/weixin_40170902/article/details/80092628) optimizer优化算法总结(https://blog.csdn.net/muyu709287760/article/details/62531509#%E4%B8%89%E7%A7%8Dgradient-descent%E5%AF%B9%E6%AF%94)
往期精彩:
点个在看
评论
【深度学习】人人都能看懂的LSTM
熟悉深度学习的朋友知道,LSTM是一种RNN模型,可以方便地处理时间序列数据,在NLP等领域有广泛应用。在看了台大李宏毅教授的深度学习视频后,特别是介绍的第一部分RNN以及LSTM,整个人醍醐灌顶。本文就是对视频的记录加上了一些个人的思考。0. 从RNN说起循环神经网络(Recurrent Neur
机器学习初学者
0
科普:深度学习训练,不同预算GPU选购指南
以下文章来源于微信公众号:DeepHub IMBA作者:Mike Clayton本文仅用于学术分享,如有侵权,请联系后台作删文处理导读购买显卡第一个要考虑的问题是什么?当然是预算。本文提供了不同预算的显卡选购指南,希望能对各位读者有所帮助。在进行机器学习项目时,特别是在处理深度学习和神经网络时,最好
机器学习初学者
0
15种时间序列预测方法总结(包含多种方法代码实现)
向AI转型的程序员都关注了这个号👇👇👇在这篇文章中,我们将深入探讨时间序列预测的基本概念和方法。我们将首先介绍单元预测和多元预测的概念,然后详细介绍各种深度学习和传统机器学习方法如何应用于时间序列预测,包括循环神经网络(RNN)、一维卷积神经网络(1D-CNN)、Transformer、自回归模型(
机器学习AI算法工程
0
APP 安全测试项总结
一、安装包测试 1.1、关于反编译 目的是为了保护公司的知识产权和安全方面的考虑等,一些程序开发人员会在源码中硬编码一些敏感信息,如密码。而且若程序内部一些设计欠佳的逻辑,也可能隐含漏洞,一旦源码泄漏,安全隐患巨大。 为了避免这些问题,除了代码审核外,通常开发的做法是对代码进行混淆,混淆后源代
测试开发技术
0
深度解读RoCE v2网络技术
在日新月异的网络技术领域中,远程直接内存访问(RDMA)技术已成为优化数据传输流程、提升整体网络效能的关键驱动力。其中,以太网融合RDMA技术——RoCE(RDMA over Converged Ethernet),其第二代版本RoCE v2凭借显著的性能提升与更强的灵活性脱颖而出。本文来自“深度解
架构师技术联盟
0
学习开放日:开放复杂科学、AI+X 海量学习资源!
Datawhale干货 学习开放日:4月27-28日1. 什么是学习开放日?以AI为代表的技术突飞猛进,人类知识森林快速扩张,仅凭一人之力不仅难以覆盖,更是难以串联知识线索。唯有像蚂蚁探索最优路径一样,我们才能在信息爆炸的知识森林中探索出更好的方向!因此,今年集智斑图联合国内最
Datawhale
1
接口响应慢?那是你没用 CompletableFuture 来优化!
来源:blog.csdn.net/qq_43372633/article/details/130814200👉 欢迎加入小哈的星球 ,你将获得: 专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡 / 赠书福利全栈前后端分离博客项目 2.0
小哈学Java
3
魔改Transformer!9种提速又提效的模型优化方案
向AI转型的程序员都关注了这个号👇👇👇Transformer目前已经成为人工智能领域的主流模型,应用非常广泛。然而Transformer中注意力机制计算代价较高,随着序列长度的增加,这个计算量还会持续上升。为了解决这个问题,业内出现了许多Transformer的魔改工作,以优化Transformer
机器学习AI算法工程
0