tag 标签: Adam

相关博文
  • 热度 2
    2019-10-29 23:16
    1882 次阅读|
    1 个评论
    【零基础】神经网络优化之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”获取。
相关资源
  • 所需E币: 4
    时间: 2019-12-27 19:56
    大小: 785.1KB
    上传者: givh79_163.com
    MMDS20254H解决方案提供了必要的先进技术和全面的支持,能够帮助射频工程师优化飞思卡尔业界领先的Airfast射频功率产品组合的性能。TMFreescaleandtheFreescalelogoaretrademarksofFreescaleSemiconductor,Inc.,Reg.U.S.Pat.&Tm.Off.Allotherproductorservicenamesarethepropertyoftheirrespectiveowners.2013FreescaleSemiconductor,Inc.freescale.com/ADAMWhyDohertyAlignment?fSPIC……