Adam 优化算法

在深度学习的历史上,包括许多知名研究者在内,提出了优化算法,并很好地解决了一些问题,但随后这些优化算法被指出并不能一般化,并不适用于多种神经网络,时间久了,深度学习圈子里的人开始多少有些质疑全新的优化算法,很多人都觉得动量(Momentum)梯度下降法很好用,很难再想出更好的优化算法。所以RMSprop以及Adam优化算法,就是少有的经受住人们考验的两种算法,已被证明适用于不同的深度学习结构,这个算法会毫不犹豫地推荐给,因为很多人都试过,并且用它很好地解决了许多问题。

Adam优化算法基本上就是将MomentumRMSprop结合在一起,那么来看看如何使用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算法结合了MomentumRMSprop梯度下降法,并且是一种极其常用的学习算法,被证明能有效适用于不同神经网络,适用于广泛的结构。

本算法中有很多超参数,超参数学习率\(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}\),但认识的业内人士很少这么干。

为什么这个算法叫做AdamAdam代表的是Adaptive Moment Estimation,\(\beta_{1}\)用于计算这个微分(\(dW\)),叫做第一矩,\(\beta_{2}\)用来计算平方数的指数加权平均数(\({(dW)}^{2}\)),叫做第二矩,所以Adam的名字由此而来,但是大家都简称Adam权威算法。

这就是关于Adam优化算法的全部内容,有了它,可以更加快速地训练神经网络。

神经网络优化篇:详解Adam 优化算法(Adam optimization algorithm)的更多相关文章

  1. 【机器学习详解】SMO算法剖析(转载)

    [机器学习详解]SMO算法剖析 转载请注明出处:http://blog.csdn.net/luoshixian099/article/details/51227754 CSDN−勿在浮沙筑高台 本文力 ...

  2. 走向DBA[MSSQL篇] 详解游标

    原文:走向DBA[MSSQL篇] 详解游标 前篇回顾:上一篇虫子介绍了一些不常用的数据过滤方式,本篇详细介绍下游标. 概念 简单点说游标的作用就是存储一个结果集,并根据语法将这个结果集的数据逐条处理. ...

  3. PHP函数篇详解十进制、二进制、八进制和十六进制转换函数说明

    PHP函数篇详解十进制.二进制.八进制和十六进制转换函数说明 作者: 字体:[增加 减小] 类型:转载   中文字符编码研究系列第一期,PHP函数篇详解十进制.二进制.八进制和十六进制互相转换函数说明 ...

  4. Adam优化算法

    Question? Adam 算法是什么,它为优化深度学习模型带来了哪些优势? Adam 算法的原理机制是怎么样的,它与相关的 AdaGrad 和 RMSProp 方法有什么区别. Adam 算法应该 ...

  5. JS中的函数节流throttle详解和优化

    JS中的函数节流throttle详解和优化在前端开发中,有时会为页面绑定resize事件,或者为一个页面元素绑定拖拽事件(mousemove),这种事件有一个特点,在一个正常的操作中,有可能在一个短的 ...

  6. Scala进阶之路-Scala函数篇详解

    Scala进阶之路-Scala函数篇详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.传值调用和传名调用 /* @author :yinzhengjie Blog:http: ...

  7. my.cnf 详解与优化【转】

    MySQL配置文件my.cnf 例子最详细翻译,可以保存做笔记用. #BEGIN CONFIG INFO#DESCR: 4GB RAM, 只使用InnoDB, ACID, 少量的连接, 队列负载大#T ...

  8. apache配置文件详解与优化

    apache配置文件详解与优化 一.总结 一句话总结:结合apache配置文件中的英文说明和配置详解一起看 1.apache模块配置用的什么标签? IfModule 例如: <IfModule ...

  9. 跟我学算法-吴恩达老师(mini-batchsize,指数加权平均,Momentum 梯度下降法,RMS prop, Adam 优化算法, Learning rate decay)

    1.mini-batch size 表示每次都只筛选一部分作为训练的样本,进行训练,遍历一次样本的次数为(样本数/单次样本数目) 当mini-batch size 的数量通常介于1,m 之间    当 ...

  10. tomcat常用配置详解和优化方法

    tomcat常用配置详解和优化方法 参考: http://blog.csdn.net/zj52hm/article/details/51980194 http://blog.csdn.net/wuli ...

随机推荐

  1. [ABC262A] World Cup

    Problem Statement A sport event is held in June of every year whose remainder when divided by $4$ is ...

  2. MySQL运维13-Mycat分库分表之按月分片

    一.按照月分片 使用场景为按照自然月来分片,每个自然月为一个分片,但是一年有12个月,是不是要有12个数据节点才行呢?并不是.例如我现在只有三个分片数据库,这样就可以1月在第一个数据分片中,2月在第二 ...

  3. 盘点前端的那些Ajax请求:从ES5到React

    说起前端开发,Ajax请求是绕不开的技术点.然而,程序语言更新换代越来越快,Ajax请求的方式也是各有不同. 在使用ES5开发的时候,我们还在使用最原始的XMLHttpRequest对象: // cr ...

  4. python自动化测试相关资料

     java神功: https://yuedu.baidu.com/ebook/10f4bf7530126edb6f1aff00bed5b9f3f80f7212   selenium书:https:// ...

  5. ElasticSearch之Node query cache settings

    对于filter查询,ElasticSearch提供了缓存查询结果的特性,当缓存中存在满足查询条件要求的数据时,直接从缓存中提取查询结果. 对于ElasticSearch节点,该节点上的所有shard ...

  6. Ubuntu 安装MySQL 8.0.23及以上版本

    首先如果当前linux中没有wget,那么我们可以考虑使用sudo apt-get install wget来安装wget命令 Ubuntu自带的源只能安装MySQL5.7版本,这里去MySQL官网安 ...

  7. 19、Flutter StatelessWidget 、 StatefulWidget

    在Flutter中自定义组件其实就是一个类,这个类需要继承StatelessWidget  /  StatefulWidget. StatelessWidget是无状态组件,状态不可变的widget ...

  8. API安全技术

    自己在日常工作中会涉及到些安全的概念,但是没有成体系,因此最近研读了<API安全技术与实战>一书,在此做些文章记录. API安全是从安全的角度关注API领域的安全问题和这些问题的解决方案, ...

  9. 看这里!带你快速体验MindSpore V1.0(For ubuntu 18.04)

    摘要: 本文介绍了如何在Ubuntu 18.04上安装CPU版本的MindSpore V1.0.并使用安装好的MindSpore进行了LeNet的模型训练. Part One:引言 在HC2020大会 ...

  10. API生态的发展与机遇:从5000组数据看中国API生态与开发者现状

    摘要:华为云联合多家单位发布了<中国API生态与开发者现状调研报告(2020年)>,旨在通过API生态.API开发者.使用者.API全生命周期管理等多视角展现我国API发展的现状与机遇,力 ...