adam算法_常用优化算法

我们有了之前指数加权平均的基础,就可以快速理解目前较为常用的一些优化算法的原理。

01

动量梯度下降法

上一节我们讨论了指数加权平均,并了解了指数加权平均的实际意义。这将使我们能更好地理解动量梯度下降法。 先来回顾一下我们梯度下降的目的,我们需要使代价函数J 达到最小值,或者是局部的相对最小值,从而使深度学习产生的模型能够更好地拟合实际的数据。对于大多数情况,代价函数都不止一个参数,因为我们输入的特征feature (X )往往是多个的,我们需要满足多个feature (X )同时权重达到相对最优(调整每个X 的W 和b ,output = input*W+b ),并且神经网络大多不止一层,这就增加了更多的参数需要梯度下降调优。 我们通过了解两个参数的代价函数的梯度下降方式,从而帮助我们理解更高维的代价函数的调优。 图像中间的红点是代价函数的最低点,由于两个参数不同,往往画出全部图像会形成这样椭圆的等高线,而不是圆形的等高线,这就会导致向梯度方向移动一段距离,方向不会指向最低点(蓝色线),多次执行梯度下降,会形成下图这种情况。我们进行了多次迭代,但总是上下波动,向红点处移动的距离很小,这样就会大大降低梯度下降的速度,我们需要更多次的迭代才能使代价函数收敛到最小。

be454c78f4248eae93ca9375b6b4db54.png

甚至如果选用的学习率过大,会直接摆动到更大的代价函数位置上(紫色线)。为了避免这种情况,就需要选用更小的学习率,这也会减慢梯度下降的速度。

13b125603a363cffcdb352230a88c917.png

现在总结一下我们需要解决的问题:在纵轴上,我们需要摆动得小一些,而在横轴上,我们希望移动得大一些,这样就会使梯度下降更有效,减少不必要的移动损耗。 于是由这个问题,我们就引出了动量梯度下降法(gradient descent with momentum ),我们先算出当前mini-batch 中的梯度dW ,db ,然后再迭代下式,α是设定的学习率,V dW ,V db 的初始值为0 :

319c69aa3c60f5c162cb794e9b52c571.png

也就是计算出了W 和b 的移动平均数,梯度下降路径变为了红色线,在抵达最小值的路上减少了摆动。

54ca64cce989ff3096ca90b2fe1d10b2.png

动量梯度下降的命名则是因为将其类比到了物理中的动量公式,β<1 ,可以看做摩擦力对速度的作用,摩擦力使本来运动速度降低,但是又有一个加速度在横向上,导致总体来说抵消掉了纵向的摆动速度,增加了横向的运动速度。

c198c381fb227e41ba12bbb30c7b49cb.png

一般情况下β会设置为0.9 ,在动量梯度下降下,往往不会使用指数加权平均的偏差修正,因为梯度下降需要非常多次迭代,初始的偏差在第十多次迭代后影响就很小了,最终不会产生什么显著差异。 在一些论文中,往往会删去(1- β )项,这相当于dW ,db 变化了1/ (1- β)倍,实际性质没有变化,但需要调整学习率α的值。

fd087d1a069814576c37046f7c85a389.png

02

RMSprop(root mean square prop)

RMSprop 是另一种优化算法,目的也是使代价函数更快地到达最小值,为了方便理解,我们假设横轴为W ,纵轴为b 。在这个图中(蓝线),梯度下降法在b 轴移动较快,在W 轴移动较慢,说明在梯度db 的绝对值比较大。这里说是绝对值,是因为我们需要找的是最小点,要移动的方向是向比较小的值移动。根据基本的数学知识,如果函数是单调递增的,那么导数符号为正,反之导数符号为负,这里的基本数学问题就不再赘述。

68f87bc1a704709ceaca24221da09b45.png

我们希望在b 方向上的函数值变化减小,W 方向上的函数值增大。于是我们引入一个S ,不同于之前动量梯度下降法的v ,S 不直接作为变化量,而是作为分母,如以下公式所示:

f92c570410a31cb103c3d01fbb1dc6eb.png

当b 方向上的梯度较大时,S db 就会较大,从而 项较小,也就是纵轴上的更新较小;同理 W 方向上的梯度较小,S dW 较小, 项较大,也是就是横轴上的更新较大。从而使各方向上的更新一致,从而消除摆动,更快到达最小值(绿线)。

ead3e519288fb9495445cc3c64b45037.png

如果摆动幅度降低,我们还可以适当增加学习率α,从而更快达到最小值,又不会摆动到更偏离的位置。实际上我们不会在一个二维参数中优化学习率,而是参数更多,在这种情况下,我们的等高线(暂且类比地理的等高线)会更加复杂,而不是单纯为一个椭圆形。无论如何,消除摆动都会使我们更快到达最低点。 在实际中需要避免S 趋于0 的情况下出现,我们需要在分母中加一个很小的ε,防止S 趋于0 后产生的问题。一般来说ε=10^(-8) 是一个不错的选择。

9257df09c11aa92243cb55d366c0f132.png

花书中也有相对应的算法,红色字是在我们之前推导过程中所用的符号,对比就能看懂花书中算法执行过程。

e28a63f7336de04e434a03d98ffde1b5.png

计算梯度时,因为存在一个 mini-batch ,对于 m 个样本,每个样本的 feature 都有相应梯度,我们取其平均值来计算,这就是计算梯度算式的含义。

03

Adam优化算法

Adam 优化算法是结合了动量梯度下降法和RMSprop 方法的一种优化算法。 首先我们设置初始值:V dW=0 ,S dW=0 ,V db=0 ,S db=0 。 接下来我们进行迭代,因为动量梯度下降法和RMSprop 都有β作为指数加权平均的衰减值,为了加以区分,我们将动量梯度下降部分设为β 1 ,RMSprop 部分设为β 2 。 首先我们计算动量梯度下降法的部分:

34e4ccbcaefae0a1f2b368f9d3068755.png

然后我们计算RMSprop 部分:

429ad432dab172a631d8709ee5b1be3f.png

一般在使用Adam 时,需要计算偏差修正后的V 和S , e322759d20608a7f7de675a1761d0cb4.png 是修正后的V , 490e111ad9ba38f4776b0210c4674b13.png 是修正后的S ,修正方法在指数加权平均中提到,在此就不再赘述:

0629212c6153d2db79719e88af0eb77a.png

最后进行参数的更新:

bc47b69a737f7f867ceffbd219917012.png

学习率α需要调试来找出合适的学习率,β 1 一般选用0.9 ,β 2 一般选用0.999 ,ε一般选用10^(-8) ,但ε的选用其实并不是那么重要,因为它并不会影响算法表现。一般在应用的时候,只需要调整学习率。  花书中也有相对应的算法,红色字是在我们之前推导过程中所用的符号,对比就能看懂花书中算法执行过程。

f87b8e11d3b6a37a90e2ab6f3a3694d2.png

04

算法对比以及pytorch实现

通过以下的可视化图片,我们可以明显看出RMSprop 和Adam 算法的性能较好,能够迅速收敛到一个较小值。

e4d29f087a89a975dce3d4a5316f0056.png

图片来源:https://zhuanlan.zhihu.com/p/78622301

efb07abac1c5b8de8f3a146e40429c84.gif

图片来源:https://imgur.com/a/Hqolp#NKsFHJb

Pytorch 的优化器放置在 torch.optim 包中,通过以下方式调用优化方法:
opt_SGD = torch.optim.SGD(model.parameters(), lr=LR)opt_Momentum = torch.optim.SGD(model.parameters(), lr=LR, momentum=0.8)opt_RMSprop = torch.optim.RMSprop(model.parameters(), lr=LR, alpha=0.9)opt_Adam = torch.optim.Adam(model.parameters(), lr=LR, betas=(0.9, 0.99))
model是我们的深度学习模型。 迭代时,先进行对之前储存梯度清零,释放内存,再进行backward ,通过backword 收集到梯度后调用优化器进行参数更新:
optimizer.zero_grad()loss.backward()optimizer.step()

Reference

深度学习课程 --吴恩达
Deep learing --Ian Goodfellow,Yoshua bengio,Aaron Courville

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于计算机专业的学生而言,参加各类比赛能够带来多方面的益处,具体包括但不限于以下几点: 技能提升: 参与比赛促使学生深入学习和掌握计算机领域的专业知识与技能,如编程语言、算法设计、软件工程、网络安全等。 比赛通常涉及实际问题的解决,有助于将理论知识应用于实践中,增强问题解决能力。 实践经验: 大多数比赛都要求参赛者设计并实现解决方案,这提供了宝贵的动手操作机会,有助于积累项目经验。 实践经验对于计算机专业的学生尤为重要,因为雇主往往更青睐有实际项目背景的候选人。 团队合作: 许多比赛鼓励团队协作,这有助于培养学生的团队精神、沟通技巧和领导能力。 团队合作还能促进学生之间的知识共享和思维碰撞,有助于形成更全面的解决方案。 职业发展: 获奖经历可以显著增强简历的吸引力,为求职或继续深造提供有力支持。 某些比赛可能直接与企业合作,提供实习、工作机会或奖学金,为学生的职业生涯打开更多门路。 网络拓展: 比赛是结识同行业人才的好机会,可以帮助学生建立行业联系,这对于未来的职业发展非常重要。 奖金与荣誉: 许多比赛提供奖金或奖品,这不仅能给予学生经济上的奖励,还能增强其成就感和自信心。 荣誉证书或奖状可以证明学生的成就,对个人品牌建设有积极作用。 创新与研究: 参加比赛可以激发学生的创新思维,推动科研项目的开展,有时甚至能促成学术论文的发表。 个人成长: 在准备和参加比赛的过程中,学生将面临压力与挑战,这有助于培养良好的心理素质和抗压能力。 自我挑战和克服困难的经历对个人成长有着深远的影响。 综上所述,参加计算机领域的比赛对于学生来说是一个全面发展的平台,不仅可以提升专业技能,还能增强团队协作、沟通、解决问题的能力,并为未来的职业生涯奠定坚实的基础。
对于计算机专业的学生而言,参加各类比赛能够带来多方面的益处,具体包括但不限于以下几点: 技能提升: 参与比赛促使学生深入学习和掌握计算机领域的专业知识与技能,如编程语言、算法设计、软件工程、网络安全等。 比赛通常涉及实际问题的解决,有助于将理论知识应用于实践中,增强问题解决能力。 实践经验: 大多数比赛都要求参赛者设计并实现解决方案,这提供了宝贵的动手操作机会,有助于积累项目经验。 实践经验对于计算机专业的学生尤为重要,因为雇主往往更青睐有实际项目背景的候选人。 团队合作: 许多比赛鼓励团队协作,这有助于培养学生的团队精神、沟通技巧和领导能力。 团队合作还能促进学生之间的知识共享和思维碰撞,有助于形成更全面的解决方案。 职业发展: 获奖经历可以显著增强简历的吸引力,为求职或继续深造提供有力支持。 某些比赛可能直接与企业合作,提供实习、工作机会或奖学金,为学生的职业生涯打开更多门路。 网络拓展: 比赛是结识同行业人才的好机会,可以帮助学生建立行业联系,这对于未来的职业发展非常重要。 奖金与荣誉: 许多比赛提供奖金或奖品,这不仅能给予学生经济上的奖励,还能增强其成就感和自信心。 荣誉证书或奖状可以证明学生的成就,对个人品牌建设有积极作用。 创新与研究: 参加比赛可以激发学生的创新思维,推动科研项目的开展,有时甚至能促成学术论文的发表。 个人成长: 在准备和参加比赛的过程中,学生将面临压力与挑战,这有助于培养良好的心理素质和抗压能力。 自我挑战和克服困难的经历对个人成长有着深远的影响。 综上所述,参加计算机领域的比赛对于学生来说是一个全面发展的平台,不仅可以提升专业技能,还能增强团队协作、沟通、解决问题的能力,并为未来的职业生涯奠定坚实的基础。
对于计算机专业的学生而言,参加各类比赛能够带来多方面的益处,具体包括但不限于以下几点: 技能提升: 参与比赛促使学生深入学习和掌握计算机领域的专业知识与技能,如编程语言、算法设计、软件工程、网络安全等。 比赛通常涉及实际问题的解决,有助于将理论知识应用于实践中,增强问题解决能力。 实践经验: 大多数比赛都要求参赛者设计并实现解决方案,这提供了宝贵的动手操作机会,有助于积累项目经验。 实践经验对于计算机专业的学生尤为重要,因为雇主往往更青睐有实际项目背景的候选人。 团队合作: 许多比赛鼓励团队协作,这有助于培养学生的团队精神、沟通技巧和领导能力。 团队合作还能促进学生之间的知识共享和思维碰撞,有助于形成更全面的解决方案。 职业发展: 获奖经历可以显著增强简历的吸引力,为求职或继续深造提供有力支持。 某些比赛可能直接与企业合作,提供实习、工作机会或奖学金,为学生的职业生涯打开更多门路。 网络拓展: 比赛是结识同行业人才的好机会,可以帮助学生建立行业联系,这对于未来的职业发展非常重要。 奖金与荣誉: 许多比赛提供奖金或奖品,这不仅能给予学生经济上的奖励,还能增强其成就感和自信心。 荣誉证书或奖状可以证明学生的成就,对个人品牌建设有积极作用。 创新与研究: 参加比赛可以激发学生的创新思维,推动科研项目的开展,有时甚至能促成学术论文的发表。 个人成长: 在准备和参加比赛的过程中,学生将面临压力与挑战,这有助于培养良好的心理素质和抗压能力。 自我挑战和克服困难的经历对个人成长有着深远的影响。 综上所述,参加计算机领域的比赛对于学生来说是一个全面发展的平台,不仅可以提升专业技能,还能增强团队协作、沟通、解决问题的能力,并为未来的职业生涯奠定坚实的基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值