搭建神经网络块

这是一个层数较少的神经网络,选择其中一层(方框部分),从这一层的计算着手。在第\(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)的更多相关文章

  1. [译]深度神经网络的多任务学习概览(An Overview of Multi-task Learning in Deep Neural Networks)

    译自:http://sebastianruder.com/multi-task/ 1. 前言 在机器学习中,我们通常关心优化某一特定指标,不管这个指标是一个标准值,还是企业KPI.为了达到这个目标,我 ...

  2. Neural Networks and Deep Learning 课程笔记(第四周)深层神经网络(Deep Neural Networks)

    1. 深层神经网络(Deep L-layer neural network ) 2. 前向传播和反向传播(Forward and backward propagation) 3. 总结 4. 深层网络 ...

  3. (十八)整合Nacos组件,环境搭建和入门案例详解

    整合Nacos组件,环境搭建和入门案例详解 1.Nacos基础简介 1.1 关键特性 1.2 专业术语解释 1.3 Nacos生态圈 2.SpringBoot整合Nacos 2.1 新建配置 2.2 ...

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

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

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

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

  6. java 日志体系(三)log4j从入门到详解

    java 日志体系(三)log4j从入门到详解 一.Log4j 简介 在应用程序中添加日志记录总的来说基于三个目的: 监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析工作: 跟踪代 ...

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

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

  8. 吴恩达《深度学习》-第一门课 (Neural Networks and Deep Learning)-第四周:深层神经网络(Deep Neural Networks)-课程笔记

    第四周:深层神经网络(Deep Neural Networks) 4.1 深层神经网络(Deep L-layer neural network) 有一些函数,只有非常深的神经网络能学会,而更浅的模型则 ...

  9. 吴恩达《深度学习》-课后测验-第一门课 (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" ...

  10. 【深度学习系列】手写数字识别卷积神经--卷积神经网络CNN原理详解(一)

    上篇文章我们给出了用paddlepaddle来做手写数字识别的示例,并对网络结构进行到了调整,提高了识别的精度.有的同学表示不是很理解原理,为什么传统的机器学习算法,简单的神经网络(如多层感知机)都可 ...

随机推荐

  1. 应用性能监控工具(pinpoint)部署

    Pinpoint是一款全链路分析工具,提供了无侵入式的调用链监控.方法执行详情查看.应用状态信息监控等功能.pinpoint使用HBASE储存数据. 下面介绍pinpoint部署及应用. 1.  安装 ...

  2. 关于package-lock.json

    前言 上篇文章我们了解了package.json,一般与它同时出现的还有一个package-lock.json,这两者又有什么关系呢?下面一起来了解吧. 介绍 package-lock.json 它会 ...

  3. 如何找到docker容器中的网卡外联的veth pair的另一张网卡

    1.概述 在Docker容器中,每个容器都有一个或多个网络接口(网卡),用于连接容器内部与宿主机或其他容器进行通信.这些网络接口中的一些可能是veth pair,也就是虚拟以太网对,它们以成对的方式存 ...

  4. 正则表达式快速入门三: python re module + regex 匹配示例

    使用 Python 实现不同的正则匹配(从literal character到 其他常见用例) reference python regular expression tutorial 目录 impo ...

  5. 「codechef - STRQUER」Strange Queries

    link. 首先对原序列排序,考虑静态序列做法为:设 \(f(n,k\in\{0,1\})\) 为对于前 \(n\) 个数,第 \(n\) 个数否 / 是已经决策完毕的最优方案,转移即 \[\begi ...

  6. Aveva Marine VBNET 编程系列-搭建开发框架

    引用的Dll Aveva.ApplicationFramework.dll Aveva.ApplicationFramework.Presentation 菜单展示效果 创建Attribute,用于反 ...

  7. Django——后台添加的用户密码错误

    django项目中,当我们创建了user模型类,并生成了超级管理员,之后我们进入到admin后台页面中,添加一个用户,再去login页面登陆时,会提示我们 用户名或密码错误. 这时,我们第一时间会想到 ...

  8. mac应用已损坏无法打开

    sudo xattr -r -d com.apple.quarantine /User/name/yourapp # '/User/name/yourapp' 替换成你自己要安装的 mac 应用地址 ...

  9. 文心一言 VS 讯飞星火 VS chatgpt (109)-- 算法导论10.1 7题

    七.用go语言,说明如何用两个队列实现一个栈,并分析相关栈操作的运行时间. 文心一言: 在Go语言中,我们可以用两个队列(queue1和queue2)实现一个栈.以下是实现代码: package ma ...

  10. 解决 Steam 无法自动登录的问题

    前言 劳动节假期闲的没事,重装一下电脑,结果电脑的 Steam 不会自动登录了,每次重启电脑就要重新输入密码和令牌.查了一下居然是 Windows 凭据管理器默认不会自动启动的问题. 解决方法 打开计 ...