【零基础】神经网络优化之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”获取。

【零基础】神经网络优化之Adam的更多相关文章
- 【零基础】神经网络优化之mini-batch
一.前言 回顾一下前面讲过的两种解决过拟合的方法: 1)L0.L1.L2:在向前传播.反向传播后面加个小尾巴 2)dropout:训练时随机“删除”一部分神经元 本篇要介绍的优化方法叫mini-bat ...
- 【零基础】神经网络优化之dropout和梯度校验
一.序言 dropout和L1.L2一样是一种解决过拟合的方法,梯度检验则是一种检验“反向传播”计算是否准确的方法,这里合并简单讲述,并在文末提供完整示例代码,代码中还包含了之前L2的示例,全都是在“ ...
- 【零基础】神经网络优化之L1、L2
一.序言 前面的文章中,我们逐步从单神经元.浅层网络到深层网络,并且大概搞懂了“向前传播”和“反向传播”的原理,比较而言深层网络做“手写数字”识别已经游刃有余了,但神经网络还存在很多问题,比如最常见的 ...
- 神经网络优化算法:梯度下降法、Momentum、RMSprop和Adam
最近回顾神经网络的知识,简单做一些整理,归档一下神经网络优化算法的知识.关于神经网络的优化,吴恩达的深度学习课程讲解得非常通俗易懂,有需要的可以去学习一下,本人只是对课程知识点做一个总结.吴恩达的深度 ...
- 狗屁不通的“视频专辑:零基础学习C语言(小甲鱼版)”(2)
前文链接:狗屁不通的“视频专辑:零基础学习C语言(小甲鱼版)”(1) 小甲鱼在很多情况下是跟着谭浩强鹦鹉学舌,所以谭浩强书中的很多错误他又重复了一次.这样,加上他自己的错误,错谬之处难以胜数. 由于拙 ...
- IM开发者的零基础通信技术入门(二):通信交换技术的百年发展史(下)
1.系列文章引言 1.1 适合谁来阅读? 本系列文章尽量使用最浅显易懂的文字.图片来组织内容,力求通信技术零基础的人群也能看懂.但个人建议,至少稍微了解过网络通信方面的知识后再看,会更有收获.如果您大 ...
- IM开发者的零基础通信技术入门(一):通信交换技术的百年发展史(上)
[来源申明]本文原文来自:微信公众号“鲜枣课堂”,官方网站:xzclass.com,原题为:<通信交换的百年沧桑(上)>,本文引用时已征得原作者同意.为了更好的内容呈现,即时通讯网在收录时 ...
- IM开发者的零基础通信技术入门(三):国人通信方式的百年变迁
[来源申明]本文原文来自:微信公众号“鲜枣课堂”,官方网站:xzclass.com,原题为:<中国通信的百年沉浮>,本文引用时已征得原作者同意.为了更好的内容呈现,即时通讯网在收录时内容有 ...
- 【零基础】使用Tensorflow实现神经网络
一.序言 前面已经逐步从单神经元慢慢“爬”到了神经网络并把常见的优化都逐个解析了,再往前走就是一些实际应用问题,所以在开始实际应用之前还得把“框架”翻出来,因为后面要做的工作需要我们将精力集中在业务而 ...
随机推荐
- setTimeout()方法和setInterval()方法
setTimeout方法: 定义和用法: setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式. tip: 1000 毫秒= 1 秒. tip: 如果你只想重复执行可以使用setI ...
- Qt定时器
PS: 本案例使用的是Qt 4.8.4版本,不同版本代码可能会有差异. 第一步: // 重写此虚函数(继承自QObject) virtual void timerEvent(QTimerEvent* ...
- iOS开发微信支付的介绍与实现
1.前期准备 1) 到微信开放平台注册账号 需要登录邮箱验证 填写您的商户信息 2) 进入管理中心 --- 移动应用 --- 创建移动应用 --- 根据页面完善应用资料 3) 审核过后,通过应用详情页 ...
- MySQL常见问题集锦及注意事项
一.表设计上的坑 1.字段设计 1.1 字段类型设计 尽量使用整型表示字符串: `INET_ATON(str)`,address to number `INET_NTOA(number)`,numbe ...
- dockerfile创建镜像1
vim Dockerfile FROM alpine:latest MAINTAINER brady CMD echo "hello world" 进行构建 docker buil ...
- code first从入门到伪精通
新入职一家公司,虽然之前也用ef,但是方式不一样,之前用的db,现在用代码先行的code,基于现有公司基本项目框架都是用的code,所以一步登顶,从最实战的角度去操作code,心颤的很,废话不多说,开 ...
- Hadoop安装-单机-伪分布式简单部署配置
最近在搞大数据项目支持所以有时间写下hadoop随笔吧. 环境介绍: Linux: centos7 jdk:java version "1.8.0_181 hadoop:hadoop-3.2 ...
- spark 实现多文件输出
需求 不同的key输出到不同的文件 txt文件 multiple.txt 中国;22 美国;4342 中国;123 日本;44 日本;6 美国;55 美国;43765 日本;786 日本;55 sca ...
- Flink系列之流式
本文仅是自己看书.学习过程中的个人总结,刚接触流式,视野面比较窄,不喜勿喷,欢迎评论交流. 1.为什么是流式? 为什么是流式而不是流式系统这样的词语?流式系统在我的印象中是相对批处理系统而言的,用来处 ...
- AD19新功能之跟随走线
跟随走线 AD19新增跟随走线,比如需要按照特定的轨迹进行走线,比如要绕着一个圆进行走线,或者靠着边框走线,普通模式下的效果如下图所示,线会跟着指针跑: 在走线模式下,按住 shift + f ,然后 ...