神经网络入门篇:详解搭建神经网络块(Building blocks of deep neural networks)
搭建神经网络块

这是一个层数较少的神经网络,选择其中一层(方框部分),从这一层的计算着手。在第\(l\)层有参数\(W^{[l]}\)和\(b^{[l]}\),正向传播里有输入的激活函数,输入是前一层\(a^{[l-1]}\),输出是\(a^{[l]}\),之前讲过\(z^{[l]} =W^{[l]}a^{[l-1]} +b^{[l]}\),\(a^{[l]} =g^{[l]}(z^{[l]})\),那么这就是如何从输入\(a^{[l-1]}\)走到输出的\(a^{[l]}\)。之后就可以把\(z^{[l]}\)的值缓存起来,在这里也会把这包括在缓存中,因为缓存的\(z^{[i]}\)对以后的正向反向传播的步骤非常有用。
然后是反向步骤或者说反向传播步骤,同样也是第\(l\)层的计算,会需要实现一个函数输入为\(da^{[l]}\),输出\(da^{[l-1]}\)的函数。一个小细节需要注意,输入在这里其实是\(da^{[l]}\)以及所缓存的\(z^{[l]}\)值,之前计算好的\(z^{[l]}\)值,除了输出\(da^{[l-1]}\)的值以外,也需要输出需要的梯度\(dW^{[l]}\)和\(db^{[l]}\),这是为了实现梯度下降学习。
这就是基本的正向步骤的结构,把它成为称为正向函数,类似的在反向步骤中会称为反向函数。总结起来就是,在l层,会有正向函数,输入\(a^{[l-1]}\)并且输出\(a^{[l]}\),为了计算结果需要用\(W^{[l]}\)和\(b^{[l]}\),以及输出到缓存的\(z^{[l]}\)。然后用作反向传播的反向函数,是另一个函数,输入\(da^{[l]}\),输出\(da^{[l-1]}\),就会得到对激活函数的导数,也就是希望的导数值\(da^{[l]}\)。\(a^{[l-1]}\)是会变的,前一层算出的激活函数导数。在这个方块(第二个)里需要\(W^{[l]}\)和\(b^{[l]}\),最后要算的是\(dz^{[l]}\)。然后这个方块(第三个)中,这个反向函数可以计算输出\(dW^{[l]}\)和\(db^{[l]}\)。

然后如果实现了这两个函数(正向和反向),然后神经网络的计算过程会是这样的:

把输入特征\(a^{[0]}\),放入第一层并计算第一层的激活函数,用\(a^{[1]}\)表示,需要\(W^{[1]}\)和\(b^{[1]}\)来计算,之后也缓存\(z^{[l]}\)值。之后喂到第二层,第二层里,需要用到\(W^{[2]}\)和\(b^{[2]}\),会需要计算第二层的激活函数\(a^{[2]}\)。后面几层以此类推,直到最后算出了\(a^{[L]}\),第\(L\)层的最终输出值\(\hat y\)。在这些过程里缓存了所有的\(z\)值,这就是正向传播的步骤。

对反向传播的步骤而言,需要算一系列的反向迭代,就是这样反向计算梯度,需要把\(da^{[L]}\)的值放在这里,然后这个方块会给\({da}^{[L-1]}\)的值,以此类推,直到得到\({da}^{[2]}\)和\({da}^{[1]}\),还可以计算多一个输出值,就是\({da}^{[0]}\),但这其实是的输入特征的导数,并不重要,起码对于训练监督学习的权重不算重要,可以止步于此。反向传播步骤中也会输出\(dW^{[l]}\)和\(db^{[l]}\),这会输出\(dW^{[3]}\)和\(db^{[3]}\)等等。
神经网络的一步训练包含了,从\(a^{[0]}\)开始,也就是 \(x\) 然后经过一系列正向传播计算得到\(\hat y\),之后再用输出值计算这个(第二行最后方块),再实现反向传播。现在就有所有的导数项了,\(W\)也会在每一层被更新为\(W=W-αdW\),\(b\)也一样,\(b=b-αdb\),反向传播就都计算完毕,有所有的导数值,那么这是神经网络一个梯度下降循环。
继续下去之前再补充一个细节,概念上会非常有帮助,那就是把反向函数计算出来的\(z\)值缓存下来。当做编程练习的时候去实现它时,会发现缓存可能很方便,可以迅速得到\(W^{[l]}\)和\(b^{[l]}\)的值,非常方便的一个方法,在编程练习中缓存了\(z\),还有\(W\)和\(b\)对吧?从实现角度上看,认为是一个很方便的方法,可以将参数复制到在计算反向传播时所需要的地方。
现在们见过实现深度神经网络的基本元件,在每一层中有一个正向传播步骤,以及对应的反向传播步骤,以及把信息从一步传递到另一步的缓存。
神经网络入门篇:详解搭建神经网络块(Building blocks of deep neural networks)的更多相关文章
- [译]深度神经网络的多任务学习概览(An Overview of Multi-task Learning in Deep Neural Networks)
译自:http://sebastianruder.com/multi-task/ 1. 前言 在机器学习中,我们通常关心优化某一特定指标,不管这个指标是一个标准值,还是企业KPI.为了达到这个目标,我 ...
- Neural Networks and Deep Learning 课程笔记(第四周)深层神经网络(Deep Neural Networks)
1. 深层神经网络(Deep L-layer neural network ) 2. 前向传播和反向传播(Forward and backward propagation) 3. 总结 4. 深层网络 ...
- (十八)整合Nacos组件,环境搭建和入门案例详解
整合Nacos组件,环境搭建和入门案例详解 1.Nacos基础简介 1.1 关键特性 1.2 专业术语解释 1.3 Nacos生态圈 2.SpringBoot整合Nacos 2.1 新建配置 2.2 ...
- PHP函数篇详解十进制、二进制、八进制和十六进制转换函数说明
PHP函数篇详解十进制.二进制.八进制和十六进制转换函数说明 作者: 字体:[增加 减小] 类型:转载 中文字符编码研究系列第一期,PHP函数篇详解十进制.二进制.八进制和十六进制互相转换函数说明 ...
- 走向DBA[MSSQL篇] 详解游标
原文:走向DBA[MSSQL篇] 详解游标 前篇回顾:上一篇虫子介绍了一些不常用的数据过滤方式,本篇详细介绍下游标. 概念 简单点说游标的作用就是存储一个结果集,并根据语法将这个结果集的数据逐条处理. ...
- java 日志体系(三)log4j从入门到详解
java 日志体系(三)log4j从入门到详解 一.Log4j 简介 在应用程序中添加日志记录总的来说基于三个目的: 监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析工作: 跟踪代 ...
- Scala进阶之路-Scala函数篇详解
Scala进阶之路-Scala函数篇详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.传值调用和传名调用 /* @author :yinzhengjie Blog:http: ...
- 吴恩达《深度学习》-第一门课 (Neural Networks and Deep Learning)-第四周:深层神经网络(Deep Neural Networks)-课程笔记
第四周:深层神经网络(Deep Neural Networks) 4.1 深层神经网络(Deep L-layer neural network) 有一些函数,只有非常深的神经网络能学会,而更浅的模型则 ...
- 吴恩达《深度学习》-课后测验-第一门课 (Neural Networks and Deep Learning)-Week 4 - Key concepts on Deep Neural Networks(第四周 测验 – 深层神经网络)
Week 4 Quiz - Key concepts on Deep Neural Networks(第四周 测验 – 深层神经网络) \1. What is the "cache" ...
- 【深度学习系列】手写数字识别卷积神经--卷积神经网络CNN原理详解(一)
上篇文章我们给出了用paddlepaddle来做手写数字识别的示例,并对网络结构进行到了调整,提高了识别的精度.有的同学表示不是很理解原理,为什么传统的机器学习算法,简单的神经网络(如多层感知机)都可 ...
随机推荐
- CVE-2023-2825-GitLab目录穿越poc
Gitlab CVE-2023-2825 目录穿越漏洞 前言 昨天 GitLab 出了一个版本目录穿越漏洞(CVE-2023-2825),可以任意读取文件.当时我进行了黑盒测试并复现了该漏洞. &qu ...
- Django+anaconda(spyder)
一.搭建django虚拟环境 打开anaconda prompt 输入:conda create -n mydjango_env 判断(y/n):y 查看虚拟环境 conda env list *号表 ...
- Programming abstractions in C阅读笔记:p132-p137
<Programming Abstractions In C>学习第53天,p132-p137,3.2小节"strings"总结如下: 一.技术总结 3.2小节介绍了字 ...
- API接口的对接流程和注意事项
API接口的对接流程和注意事项 随着互联网技术的发展和数字化时代的到来,API接口已经成为应用程序之间进行数据交换和通信的重要方式.API即应用程序接口,是一种定义.调用和交互的规范,使得不同应用 ...
- 关于API数据接口获取商品的数据的说明
获取商品数据已经成为许多应用程序的重要组成部分.为了实现这一目标,许多公司和技术开发者使用API数据接口来获取相关数据.本文将详细介绍如何使用API数据接口获取商品数据,并使用Python作为编程 ...
- API接口的重要性
API接口的重要性在现代软件开发中无可替代.以下是API接口的几个重要方面: 1. 实现系统集成:API接口允许不同应用程序之间实现数据共享和交流.通过API接口,不同的软件系统可以相互连接和协作,实 ...
- iOS开发过程中的内存监控
- JUC并发编程(3)—锁中断机制
目录 1.什么是中断 2.源码解读(中断的相关API) 3.如何使用中断标识停止线程 学习视频:https://www.bilibili.com/video/BV1ar4y1x727 1.什么是中断 ...
- RPM软件包:Red HatPackage Manager,RPM
RPM软件包是按照GPL条款发行在各个linux版本上使用. 用途 可以安装.删除.升级.刷新和管理RPM软件包 通过RPM软件包管理能知道软件包包含哪些文件,也能知道系统中的某个文件属于哪个RPM软 ...
- Linux: Authentication token is no longer valid
遇见问题: [oracle@sxty-jkdb-184:/u01/rman]crontab -l Authentication token is no longer valid; new one re ...