【零基础】神经网络优化之Adam

一、序言

  Adam是神经网络优化的另一种方法,有点类似上一篇中的“动量梯度下降”,实际上是先提出了RMSprop(类似动量梯度下降的优化算法),而后结合RMSprop和动量梯度下降整出了Adam,所以这里我们先由动量梯度下降引申出RMSprop,最后再介绍Adam。不过,由于RMSprop、Adam什么的,真的太难理解了,我就只说实现不说原理了。

二、RMSprop

  先回顾一下动量梯度下降中的“指数加权平均”公式:

  vDW1 = beta*vDW0 + (1-beta)*dw1

  vDb1 = beta*vDb0 + (1-beta)*db1

  动量梯度下降:

  W = W - learning_rate*vDW

  b = b - learning_rate*vDb

  简而言之就是在更新W和b时不使用dw和db,而是使用其“指数加权平均”的值。

  RMSprop只是做了一点微小的改变,为了便于区分将v改成s:

  sDW1= beta*sDW0 + (1-beta)*dw1^2

  sDb1 = beta*sDb0 + (1-beta)*db1^2

  RMSprop梯度下降,其中sqrt是开平方根的意思:

  W = W - learning_rate*(dw/sqrt(sDW))

  b = b - learning_rate*(db/sqrt(sDb))

  需要注意的是,无论是dw^2还是sqrt(sDW)都是矩阵内部元素的平方或开根。

三、Adam

  Adam是结合动量梯度下降和RMSprop的混合体,先按动量梯度下降算出vDW、vDb

  vDW1 = betaV*vDW0 + (1-beta)*dw1

  vDb1 = betaV*vDb0 + (1-beta)*db1

  然后按RMSprop算出sDW、sDb:

  sDW1= betaS*sDW0 + (1-beta)*dw1^2

  sDb1 = betaS*sDb0 + (1-beta)*db1^2

  最后Adam的梯度下降是结合了v和s:

  W = W - learning_rate*( vDW/sqrt(sDW) )

  b = b - learning_rate*( vDb/sqrt(sDb) )

  我们来看下最终实现后的效果:

  是的,你没有看错。。。只需要100次训练,就比以前2000次训练的效果还要好!看到这个结果其实我也很震惊,反复查了几遍。

  不过使用Adam优化后的神经网络一定要注意learning_rate的设置,我这里改成了0.01(之前一直是0.1,多次试错后才发现是这个问题)否则会发生梯度消失(表现为dw等于0)。

四、回顾

  本篇是在mini_batch的基础上,结合动量梯度下降、RMSprop做的Adam梯度下降,其目的与mini_batch、动量梯度下降一样,都是使神经网络可以更快找到最优解,不得不说Adam实在太给力了。完整的实现代码请关注公众号“零基础爱学习”回复“AI13”获取。

  

原文地址:https://www.cnblogs.com/cation/p/11760001.html

时间: 2024-11-05 21:43:39

【零基础】神经网络优化之Adam的相关文章

【零基础】神经网络优化之mini-batch

一.前言 回顾一下前面讲过的两种解决过拟合的方法: 1)L0.L1.L2:在向前传播.反向传播后面加个小尾巴 2)dropout:训练时随机“删除”一部分神经元 本篇要介绍的优化方法叫mini-batch,它主要解决的问题是:实际应用时的训练数据往往都太大了,一次加载到电脑里可能内存不够,其次运行速度也很慢.那自然就想到说,不如把训练数据分割成好几份,一次学习一份不就行了吗?前辈们试了试发现不仅解决了内存不足的问题,而且网络“收敛”的速度更快了.由于mini-batch这么棒棒,自然是神经网络中

【零基础】神经网络优化之动量梯度下降

一.序言 动量梯度下降也是一种神经网络的优化方法,我们知道在梯度下降的过程中,虽然损失的整体趋势是越来越接近0,但过程往往是非常曲折的,如下图所示: 特别是在使用mini-batch后,由于单次参与训练的图片少了,这种“曲折”被放大了好几倍.前面我们介绍过L2和dropout,它们要解决的也是“曲折”的问题,不过这种曲折指的是求得的W和b过于拟合训练数据,导致求解曲线很曲折.动量梯度下降所解决的曲折指的是求得的dw.db偏离正常值导致成本时高时低,求得最优W和b的过程变慢. 二.指数加权平均 动

大数据系统学习零基础入门到精通加项目实战2017最新全套视频教程

38套大数据,云计算,架构,数据分析师,Hadoop,Spark,Storm,Kafka,人工智能,机器学习,深度学习,项目实战视频教程 视频课程包含: 38套大数据和人工智能精品高级课包含:大数据,云计算,架构,数据挖掘实战,实时推荐系统实战,电视收视率项目实战,实时流统计项目实战,离线电商分析项目实战,Spark大型项目实战用户分析,智能客户系统项目实战,Linux基础,Hadoop,Spark,Storm,Docker,Mapreduce,Kafka,Flume,OpenStack,Hiv

【零基础】使用Tensorflow实现神经网络

一.序言 前面已经逐步从单神经元慢慢“爬”到了神经网络并把常见的优化都逐个解析了,再往前走就是一些实际应用问题,所以在开始实际应用之前还得把“框架”翻出来,因为后面要做的工作需要我们将精力集中在业务而不是网络本身,所以使用框架可以减少非常多的工作量,有了前面自己实现神经网络的经验,现在理解框架的一些设置也比较容易了.本篇我们就使用比较常见的Tensorflow来重置一下前面的工作. 备注一下Tensorflow的安装: 1)安装python3.6,高版本不支持 2)pip install ten

零基础的人该怎么学习JAVA

对于JAVA有所兴趣但又是零基础的人,该如何学习JAVA呢?对于想要学习开发技术的学子来说找到一个合适自己的培训机构是非常难的事情,在选择的过程中总是 因为这样或那样的问题让你犹豫不决,阻碍你前进的步伐,今天就让小编为您推荐培训机构新起之秀--乐橙谷Java培训机构,助力你成就好未来. 选择java培训就到乐橙谷 北京有什么好的Java培训机构?来乐橙谷北京学Java,零基础走起,乐橙谷Java基础班授课老师经验非常丰富,课程内容安排合理,适合于有一点点Java基础甚至一点都不会Java的同学学

Android零基础入门第64节:揭开RecyclerView庐山真面目

大家还记得之前在第38期~第50期都在学习列表控件吗,其中用了8期讲ListView的使用,相信都已经掌握好了吧.那么本期一起来学习Android 5.X新增的一个列表组件,那就是RecyclerView的使用. 一.RecyclerView概述 从前面的学习我们知道,ListView的功能非常强大,几乎绝大部分应用程序都会使用到,虽然也学会一些方法技巧来提升ListView的效率,但其性能还是不是很完美. 另外ListView的可扩展性相对来说比较弱,以前要实现每个列表项的高度不同的界面,或者

Android零基础入门第61节:滚动视图ScrollView

原文:Android零基础入门第61节:滚动视图ScrollView 前面几期学习了ProgressBar系列组件.ViewAnimator系列组件.Picker系列组件和时间日期系列组件,接下来几期继续来学习常见的其他组件. 一.ScrollView概述 从前面的学习有的同学可能已经发现,当拥有很多内容时屏幕显示不完,显示不全的部分完全看不见.但是在实际项目里面,很多内容都不止一个屏幕宽度或高度,那怎么办呢?那就需要本节学习的ScrollView来完成. 在默认情况下,ScrollView只是

Android零基础入门第60节:日历视图CalendarView和定时器Chronometer

原文:Android零基础入门第60节:日历视图CalendarView和定时器Chronometer 上一期学习了AnalogClock.DigitalClock和TextClock时钟组件,本期继续来学习日历视图CalendarView和定时器Chronometer. 一.CalendarView 日历视图(CalendarView)可用于显示和选择日期,用户既可选择一个日期,也可通过触 摸来滚动日历.如果希望监控该组件的日期改变,则可调用CalendarView的 setOnDateCha

Android零基础入门第62节:搜索框组件SearchView

原文:Android零基础入门第62节:搜索框组件SearchView 一.SearchView概述 SearchView是搜索框组件,它可以让用户在文本框内输入文字,并允许通过监听器监控用户输入,当用户输入完成后提交搜索时,也可通过监听器执行实际的搜索. SearchView默认是展示一个search的icon,点击icon展开搜索框,也可以自己设定图标.用SearchView时可指定如下表所示的常见XML属性及相关方法. 如果为SearchView增加一个配套的ListView,则可以为Se