深度学习总结(一)各种优化算法

参考博文:
码农王小呆:https://blog.csdn.net/manong_wxd/article/details/78735439
深度学习最全优化方法总结:
https://blog.csdn.net/u012759136/article/details/52302426
超级详细每个算法的讲解,可参考:
https://blog.csdn.net/tsyccnh/article/details/76673073

一.优化算法介绍

1.批量梯度下降(Batch gradient descent,BGD)

θ=θ−η⋅∇θJ(θ)
每迭代一步,都要用到训练集的所有数据,每次计算出来的梯度求平均
η代表学习率LR

2.随机梯度下降(Stochastic Gradient Descent,SGD)

θ=θ−η⋅∇θJ(θ;x(i);y(i))
通过每个样本来迭代更新一次,以损失很小的一部分精确度和增加一定数量的迭代次数为代价,换取了总体的优化效率的提升。增加的迭代次数远远小于样本的数量。

缺点:

对于参数比较敏感,需要注意参数的初始化
容易陷入局部极小值
当数据较多时,训练时间长
每迭代一步,都要用到训练集所有的数据。

3. 小批量梯度下降(Mini Batch Gradient Descent,MBGD)

θ=θ−η⋅∇θJ(θ;x(i:i+n);y(i:i+n))
为了避免SGD和标准梯度下降中存在的问题,对每个批次中的n个训练样本,这种方法只执行一次更新。【每次更新全部梯度的平均值】

4.指数加权平均的概念

这里写图片描述
这里写图片描述
从这里我们就可已看出指数加权平均的名称由来,第100个数据其实是前99个数据加权和,而前面每一个数的权重呈现指数衰减,即越靠前的数据对当前结果的影响较小
这里写图片描述

缺点:存在开始数据的过低问题,可以通过偏差修正,但是在深度学习的优化算法中一般会忽略这个问题
这里写图片描述
当t不断增大时,分母逐渐接近1,影响就会逐渐减小了

优点:【相较于滑动窗口平均】
1.占用内存小,每次覆盖即可
2.运算简单

5.Momentum(动量梯度下降法)

momentum是模拟物理里动量的概念,积累之前的动量来替代真正的梯度。公式如下:
这里写图片描述
然而网上更多的是另外一种版本,即去掉(1-β)
这里写图片描述
相当于上一版本上本次梯度的影响权值*1/(1-β)
两者效果相当,只不过会影响一些最优学习率的选取
优点

  • 下降初期时,使用上一次参数更新,下降方向一致,乘上较大的μ能够进行很好的加速
  • 下降中后期时,在局部最小值来回震荡的时候,gradient→0,β得更新幅度增大,跳出陷阱
  • 在梯度改变方向的时候,μ能够减少更新

即在正确梯度方向上加速,并且抑制波动方向张的波动大小,在后期本次计算出来的梯度会很小,以至于无法跳出局部极值,Momentum方法也可以帮助跳出局部极值
参数设置
β的常用值为0.9,即可以一定意义上理解为平均了前10/9次的梯度。
至于LR学习率的设置,后面所有方法一起总结吧

6.Nesterov accelerated gradient (NAG)

Momentum图解
NAG图解
这里写图片描述
优点:
这种基于预测的更新方法,使我们避免过快地前进,并提高了算法地响应能力,大大改进了 RNN 在一些任务上的表现【为什么对RNN好呢,不懂啊】
没有对比就没有伤害,NAG方法收敛速度明显加快。波动也小了很多。实际上NAG方法用到了二阶信息,所以才会有这么好的结果。先按照原来的梯度走一步的时候已经求了一次梯度,后面再修正的时候又求了一次梯度,所以是二阶信息。
参数设置:
同Momentum

其实,momentum项和nesterov项都是为了使梯度更新更加灵活,对不同情况有针对性。但是,人工设置一些学习率总还是有些生硬,接下来介绍几种自适应学习率的方法

7.Adagrad

前面的一系列优化算法有一个共同的特点,就是对于每一个参数都用相同的学习率进行更新。但是在实际应用中各个参数的重要性肯定是不一样的,所以我们对于不同的参数要动态的采取不同的学习率,让目标函数更快的收敛。
adagrad方法是将每一个参数的每一次迭代的梯度取平方累加再开方,用基础学习率除以这个数,来做学习率的动态更新。【这样每一个参数的学习率就与他们的梯度有关系了,那么每一个参数的学习率就不一样了!也就是所谓的自适应学习率
这里写图片描述

优点:

  • 前期Gt较小的时候, regularizer较大,能够放大梯度
  • 后期Gt较大的时候,regularizer较小,能够约束梯度
  • 适合处理稀疏梯度:相当于为每一维参数设定了不同的学习率:压制常常变化的参数,突出稀缺的更新。能够更有效地利用少量有意义样本

参数设置:
只需要设置初始学习率,后面学习率会自我调整,越来越小

缺点:
Adagrad的一大优势时可以避免手动调节学习率,比如设置初始的缺省学习率为0.01,然后就不管它,另其在学习的过程中自己变化。当然它也有缺点,就是它计算时要在分母上计算梯度平方的和,由于所有的参数平方【上述公式推导中并没有写出来是梯度的平方,感觉应该是上文的公式推导忘了写】必为正数,这样就造成在训练的过程中,分母累积的和会越来越大。这样学习到后来的阶段,网络的更新能力会越来越弱,能学到的更多知识的能力也越来越弱,因为学习率会变得极其小【就会提前停止学习】,为了解决这样的问题又提出了Adadelta算法。

8.Adadelta

Adagrad会累加之前所有的梯度平方,而Adadelta只累加固定大小的项【其实就是相当于指数滑动平均,只用了前多少步的梯度平方平均值】,并且也不直接存储这些项,仅仅是近似计算对应的平均值【这也就是指数滑动平均的优点】
这里写图片描述
优点:
不用依赖于全局学习率了
训练初中期,加速效果不错,很快
避免参数更新时两边单位不统一的问题
缺点:
训练后期,反复在局部最小值附近抖动

9.RMSprop

这里写图片描述
特点:

  • 其实RMSprop依然依赖于全局学习率
  • RMSprop算是Adagrad的一种发展,和Adadelta的变体,效果趋于二者之间
  • 适合处理非平稳目标(也就是与时间有关的)
  • 对于RNN效果很好,因为RMSprop的更新只依赖于上一时刻的更新,所以适合。???

10.Adam

Adam = Adaptive + Momentum,顾名思义Adam集成了SGD的一阶动量和RMSProp的二阶动量。
这里写图片描述
特点:

  • 结合了Adagrad善于处理稀疏梯度和RMSprop善于处理非平稳目标的优点
  • 对内存需求较小
  • 为不同的参数计算不同的自适应学习率
  • 也适用于大多非凸优化
  • 适用于大数据集和高维空间

11.Adamax

这里写图片描述

12.Nadam

这里写图片描述

13.总结

提速可以归纳为以下几个方面:
- 使用momentum来保持前进方向(velocity);
- 为每一维参数设定不同的学习率:在梯度连续性强的方向上加速前进;
- 用历史迭代的平均值归一化学习率:突出稀有的梯度;

Keras中的默认参数

optimizers.SGD(lr=0.001,momentum=0.9)

optimizers.Adagrad(lr=0.01,epsilon=1e-8)

optimizers.Adadelta(lr=0.01,rho=0.95,epsilon=1e-8)

optimizers.RMSprop(lr=0.001,rho=0.9,epsilon=1e-8)

optimizers.Adam(lr=0.001,beta_1=0.9,beta_2=0.999,epsilon=1e-8)

14.牛顿法——二阶优化方法【待补充】

二.相关注意问题

1.关于批量梯度下降的batch_size选择问题

训练集较小【<2000】:直接使用batch梯度下降,每次用全部的样本进行梯度更新
训练集较大:batch_size一般设定为[64,512]之间,设置为2的n次方更符合电脑内存设置,代码会运行快一些
此外还要考虑GPU和CPU的存储空间和训练过程的波动问题
这里写图片描述
batch_size越小,梯度的波动越大,正则化的效果也越强,自然训练速度也会变慢,实验时应该多选择几个batch_size进行实验,以挑选出最优的模型。

2.关于批量梯度下降的weight_decay【似乎与L2正则有关系,待补充】

3.关于优化算法选择的经验之谈

  1. Adam在实际应用中效果良好,超过了其他的自适应技术。
  2. 如果输入数据集比较稀疏,SGD、NAG和动量项等方法可能效果不好。因此对于稀疏数据集,应该使用某种自适应学习率的方法,且另一好处为不需要人为调整学习率,使用默认参数就可能获得最优值。
  3. 如果想使训练深层网络模型快速收敛或所构建的神经网络较为复杂,则应该使用Adam或其他自适应学习速率的方法,因为这些方法的实际效果更优。
  4. SGD通常训练时间更长,但是在好的初始化和学习率调度方案的情况下,结果更可靠。
  5. Adadelta,RMSprop,Adam是比较相近的算法,在相似的情况下表现差不多。在想使用带动量的RMSprop,或者Adam的地方,大多可以使用Nadam取得更好的效果

4.训练优化器的目的

加速收敛 2. 防止过拟合 3. 防止局部最优

5.选用优化器的目的

在构建神经网络模型时,选择出最佳的优化器,以便快速收敛并正确学习,同时调整内部参数,最大程度地最小化损失函数。

6.为什么神经网络的训练不采用二阶优化方法 (如Newton, Quasi Newton)?

这里写图片描述

7. 优化SGD的其他手段

这里写图片描述
这里写图片描述
这里写图片描述

附录

这里写图片描述

  • 50
    点赞
  • 448
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
深度学习中,优化器算法用于调整模型的参数以最小化损失函数。常见的优化器算法包括随机梯度下降(SGD)、动量法(Momentum)、AdaGrad、RMSProp和Adam等。 随机梯度下降(SGD)是最基本的优化器算法之一,它在每个训练样本上计算梯度并更新参数。然而,SGD的收敛速度较慢,并且容易陷入局部最优。 动量法(Momentum)通过引入动量项来加速收敛速度。它基于梯度的移动指数加权平均,使梯度的摆动幅度更加平缓。动量法的更新公式为:v = 0.8v - 0.2∇w, w = w - αv,其中v表示动量,∇w表示梯度,α表示学习率。 AdaGrad算法根据参数的历史梯度信息来调整学习率。它对于稀疏数据和非平稳目标函数效果较好,但在训练过程中学习率会不断减小,可能导致训练过早停止。 RMSProp算法通过对梯度的平方进行指数加权平均来调整学习率。它可以自适应地调整学习率,适用于非平稳目标函数。 Adam算法是一种结合了动量法和RMSProp的优化器算法。它不仅计算每个参数的对应学习率,还计算每个参数的对应动量变化并独立存储。Adam算法在实践中表现良好,被广泛应用于深度学习中。 总结来说,深度学习中的优化器算法有多种选择,每种算法都有其优点和适用场景。根据具体的问题和数据集特点,选择合适的优化器算法可以提高模型的训练效果和收敛速度。 #### 引用[.reference_title] - *1* [深度学习 优化算法](https://blog.csdn.net/u012655441/article/details/121029471)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [深度学习之优化器(优化算法)](https://blog.csdn.net/qq_38375203/article/details/125142769)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [深度学习常见的优化算法](https://blog.csdn.net/qq_41296039/article/details/125194889)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值