神经网络优化篇:详解Adam 优化算法(Adam optimization algorithm)
2024/1/19 14:02:42
本文主要是介绍神经网络优化篇:详解Adam 优化算法(Adam optimization algorithm),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Adam 优化算法
在深度学习的历史上,包括许多知名研究者在内,提出了优化算法,并很好地解决了一些问题,但随后这些优化算法被指出并不能一般化,并不适用于多种神经网络,时间久了,深度学习圈子里的人开始多少有些质疑全新的优化算法,很多人都觉得动量(Momentum)梯度下降法很好用,很难再想出更好的优化算法。所以RMSprop以及Adam优化算法,就是少有的经受住人们考验的两种算法,已被证明适用于不同的深度学习结构,这个算法会毫不犹豫地推荐给,因为很多人都试过,并且用它很好地解决了许多问题。
Adam优化算法基本上就是将Momentum和RMSprop结合在一起,那么来看看如何使用Adam算法。
使用Adam算法,首先要初始化,\(v_{dW} = 0\),\(S_{dW} =0\),\(v_{db} = 0\),\(S_{db} =0\),在第\(t\)次迭代中,要计算微分,用当前的mini-batch计算\(dW\),\(db\),一般会用mini-batch梯度下降法。接下来计算Momentum指数加权平均数,所以\(v_{dW}= \beta_{1}v_{dW} + ( 1 - \beta_{1})dW\)(使用\(\beta_{1}\),这样就不会跟超参数\(\beta_{2}\)混淆,因为后面RMSprop要用到\(\beta_{2}\)),使用Momentum时肯定会用这个公式,但现在不叫它\(\beta\),而叫它\(\beta_{1}\)。同样\(v_{db}= \beta_{1}v_{db} + ( 1 -\beta_{1} ){db}\)。
接着用RMSprop进行更新,即用不同的超参数\(\beta_{2}\),\(S_{dW}=\beta_{2}S_{dW} + ( 1 - \beta_{2}){(dW)}^{2}\),再说一次,这里是对整个微分\(dW\)进行平方处理,\(S_{db} =\beta_{2}S_{db} + \left( 1 - \beta_{2} \right){(db)}^{2}\)。
相当于Momentum更新了超参数\(\beta_{1}\),RMSprop更新了超参数\(\beta_{2}\)。一般使用Adam算法的时候,要计算偏差修正,\(v_{dW}^{\text{corrected}}\),修正也就是在偏差修正之后,
\(v_{dW}^{\text{corrected}}= \frac{v_{dW}}{1 - \beta_{1}^{t}}\),
同样\(v_{db}^{\text{corrected}} =\frac{v_{db}}{1 -\beta_{1}^{t}}\),
\(S\)也使用偏差修正,也就是\(S_{dW}^{\text{corrected}} =\frac{S_{dW}}{1 - \beta_{2}^{t}}\),\(S_{db}^{\text{corrected}} =\frac{S_{db}}{1 - \beta_{2}^{t}}\)。
最后更新权重,所以\(W\)更新后是\(W:= W - \frac{a v_{dW}^{\text{corrected}}}{\sqrt{S_{dW}^{\text{corrected}}} +\varepsilon}\)(如果只是用Momentum,使用\(v_{dW}\)或者修正后的\(v_{dW}\),但现在加入了RMSprop的部分,所以要除以修正后\(S_{dW}\)的平方根加上\(\varepsilon\))。
根据类似的公式更新\(b\)值,\(b:=b - \frac{\alpha v_{\text{db}}^{\text{corrected}}}{\sqrt{S_{\text{db}}^{\text{corrected}}} +\varepsilon}\)。
所以Adam算法结合了Momentum和RMSprop梯度下降法,并且是一种极其常用的学习算法,被证明能有效适用于不同神经网络,适用于广泛的结构。
本算法中有很多超参数,超参数学习率\(a\)很重要,也经常需要调试,可以尝试一系列值,然后看哪个有效。\(\beta_{1}\)常用的缺省值为0.9,这是dW的移动平均数,也就是\(dW\)的加权平均数,这是Momentum涉及的项。至于超参数\(\beta_{2}\),Adam论文作者,也就是Adam算法的发明者,推荐使用0.999,这是在计算\({(dW)}^{2}\)以及\({(db)}^{2}\)的移动加权平均值,关于\(\varepsilon\)的选择其实没那么重要,Adam论文的作者建议\(\varepsilon\)为\(10^{-8}\),但并不需要设置它,因为它并不会影响算法表现。但是在使用Adam的时候,人们往往使用缺省值即可,\(\beta_{1}\),\(\beta_{2}\)和\(\varepsilon\)都是如此,觉得没人会去调整\(\varepsilon\),然后尝试不同的\(a\)值,看看哪个效果最好。也可以调整\(\beta_{1}\)和\(\beta_{2}\),但认识的业内人士很少这么干。
为什么这个算法叫做Adam?Adam代表的是Adaptive Moment Estimation,\(\beta_{1}\)用于计算这个微分(\(dW\)),叫做第一矩,\(\beta_{2}\)用来计算平方数的指数加权平均数(\({(dW)}^{2}\)),叫做第二矩,所以Adam的名字由此而来,但是大家都简称Adam权威算法。
这就是关于Adam优化算法的全部内容,有了它,可以更加快速地训练神经网络。
这篇关于神经网络优化篇:详解Adam 优化算法(Adam optimization algorithm)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-20go-zero 框架的 RPC 服务 启动start和停止 底层是怎么实现的?-icode9专业技术文章分享
- 2024-12-19Go-Zero 框架的 RPC 服务启动和停止的基本机制和过程是怎么实现的?-icode9专业技术文章分享
- 2024-12-18怎么在golang中使用gRPC测试mock数据?-icode9专业技术文章分享
- 2024-12-15掌握PageRank算法核心!你离Google优化高手只差一步!
- 2024-12-15GORM 中的标签 gorm:"index"是什么?-icode9专业技术文章分享
- 2024-12-11怎么在 Go 语言中获取 Open vSwitch (OVS) 的桥接信息(Bridge)?-icode9专业技术文章分享
- 2024-12-11怎么用Go 语言的库来与 Open vSwitch 进行交互?-icode9专业技术文章分享
- 2024-12-11怎么在 go-zero 项目中发送阿里云短信?-icode9专业技术文章分享
- 2024-12-11怎么使用阿里云 Go SDK (alibaba-cloud-sdk-go) 发送短信?-icode9专业技术文章分享
- 2024-12-10搭建个人博客网站之一、使用hugo创建个人博客网站