吴恩达深度学习笔记:深层神经网络(Deep Neural Networks)4.1-4.4

目录

  • 第一门课:神经网络和深度学习 (Neural Networks and Deep Learning)
    • 第四周:深层神经网络(Deep Neural Networks)
      • 4.1 深层神经网络(Deep L-layer neural network)
      • 4.2 前向传播和反向传播(Forward and backward propagation)
      • 4.3 深层网络中的前向传播(Forward propagation in a Deep Network)
      • 4.4 核对矩阵的维数(Getting your matrix dimensions right)

第一门课:神经网络和深度学习 (Neural Networks and Deep Learning)

第四周:深层神经网络(Deep Neural Networks)

4.1 深层神经网络(Deep L-layer neural network)

目前为止我们学习了只有一个单独隐藏层的神经网络的正向传播和反向传播,还有逻辑回归,并且你还学到了向量化,这在随机初始化权重时是很重要。

本周所要做的是把这些理念集合起来,就可以执行你自己的深度神经网络。
复习下前三周的课的内容:
1.逻辑回归,结构如下图左边。一个隐藏层的神经网络,结构下图右边:
在这里插入图片描述
注意,神经网络的层数是这么定义的:从左到右,由 0 开始定义,比如上边右图, x 1 x_1 x1 x 2 x_2 x2 x 3 x_3 x3,这层是第 0 层,这层左边的隐藏层是第 1 层,由此类推。如下图左边是两个隐藏层的神经网络,右边是 5 个隐藏层的神经网络。

在这里插入图片描述
严格上来说逻辑回归也是一个一层的神经网络,而上边右图一个深得多的模型,浅与深仅仅是指一种程度。记住以下要点:

有一个隐藏层的神经网络,就是一个两层神经网络。记住当我们算神经网络的层数时,我们不算输入层,我们只算隐藏层和输出层。

但是在过去的几年中,DLI(深度学习学院 deep learning institute)已经意识到有一些函数,只有非常深的神经网络能学会,而更浅的模型则办不到。尽管对于任何给定的问题很难去提前预测到底需要多深的神经网络,所以先去尝试逻辑回归,尝试一层然后两层隐含层,然后把隐含层的数量看做是另一个可以自由选择大小的超参数,然后再保留交叉验证数据上评估,或者用你的开发集来评估。

我们再看下深度学习的符号定义:
在这里插入图片描述
上图是一个四层的神经网络,有三个隐藏层。我们可以看到,第一层(即左边数过去第二层,因为输入层是第 0 层)有 5 个神经元数目,第二层 5 个,第三层 3 个。

我们用 L 表示层数,上图:𝐿 = 4,输入层的索引为“0”,第一个隐藏层 n [ 1 ] n^{[1]} n[1] = 5,表示有 5个隐藏神经元,同理 n [ 2 ] n^{[2]} n[2] = 5, n [ 3 ] n^{[3]} n[3] = 3, n [ 4 ] n^{[4]} n[4]= n [ L ] n^{[L]} n[L] =1(输出单元为 1)。而输入层, n [ 0 ] = n x = 3 n^{[0]} =n_x = 3 n[0]=nx=3

在不同层所拥有的神经元的数目,对于每层 l 都用 a [ l ] a^{[l]} a[l]来记作 l 层激活后结果,我们会在后面看到在正向传播时,最终能你会计算出 a [ l ] a^{[l]} a[l]

通过用激活函数 g计算 z [ l ] z^{[l]} z[l],激活函数也被索引为层数l,然后我们用 w [ l ] w^{[l]} w[l]来记作在 l 层计算 z [ l ] z^{[l]} z[l]值的权重。类似的, z [ l ] z^{[l]} z[l]里的方程b[l]也一样。

最后总结下符号约定:
输入的特征记作𝑥,但是𝑥同样也是 0 层的激活函数,所以 x = a [ 0 ] x = a^{[0]} x=a[0]
最后一层的激活函数,所以 a [ L ] a^{[L]} a[L]是等于这个神经网络所预测的输出结果。

4.2 前向传播和反向传播(Forward and backward propagation)

之前我们学习了构成深度神经网络的基本模块,比如每一层都有前向传播步骤以及一个相反的反向传播步骤,这次视频我们讲讲如何实现这些步骤。

先讲前向传播,输入 a [ l − 1 ] a^{[l−1]} a[l1],输出是 a [ l ] a^{[l]} a[l],缓存为 z [ l ] z^{[l]} z[l];从实现的角度来说我们可以缓存下 w [ l ] w^{[l]} w[l] b [ l ] b^{[l]} b[l],这样更容易在不同的环节中调用函数。
在这里插入图片描述
所以前向传播的步骤可以写成: z [ l ] = W [ l ] ⋅ a [ l − 1 ] + b [ l ] , a [ l ] = g [ l ] ( z [ l ] ) z^{[l]} = W^{[l]}⋅ a^{[l−1]} + b^{[l]} , a^{[l]} = g^{[l]}(z^{[l]}) z[l]=W[l]a[l1]+b[l],a[l]=g[l](z[l])
向量化实现过程可以写成: Z [ l ] = W [ l ] ⋅ A [ l − 1 ] + b [ l ] , A [ l ] = g [ l ] ( Z [ l ] ) Z^{[l]}= W^{[l]}⋅ A^{[l−1]} + b^{[l]} , A^{[l]} = g^{[l]}(Z^{[l]}) Z[l]=W[l]A[l1]+b[l],A[l]=g[l](Z[l])

前向传播需要喂入 A [ 0 ] A^{[0]} A[0]也就是X,来初始化;初始化的是第一层的输入值。 a [ 0 ] a^{[0]} a[0]对应于一个训练样本的输入特征,而 A [ 0 ] A^{[0]} A[0]对应于一整个训练样本的输入特征,所以这就是这条链的第一个前向函数的输入,重复这个步骤就可以从左到右计算前向传播。

下面讲反向传播的步骤:输入为𝑑𝑎[𝑙],输出为𝑑𝑎[𝑙−1],𝑑𝑤[𝑙], 𝑑𝑏[𝑙]
在这里插入图片描述

所以反向传播的步骤可以写成:
(1) d z [ l ] = d a [ l ] ∗ g [ l ] ′ ( z [ l ] ) dz^{[l]} = da^{[l]}∗ g^{[l]'}(z^{[l]}) dz[l]=da[l]g[l](z[l])
(2) d w [ l ] = d z [ l ] ⋅ a [ l − 1 ] dw^{[l]} = dz^{[l]}⋅ a^{[l−1]} dw[l]=dz[l]a[l1]
(3) d b [ l ] = d z [ l ] db^{[l]} = dz^{[l]} db[l]=dz[l]
(4) d a [ l − 1 ] = w [ l ] T ⋅ d z [ l ] da^{[l−1]} = w^{[l]T}⋅ dz^{[l]} da[l1]=w[l]Tdz[l]
(5) d z [ l ] = w [ l + 1 ] T d z [ l + 1 ] ∗ g [ l ] ′ ( z [ l ] ) dz^{[l]} = w^{[l+1]T}dz^{[l+1]}*g^{[l]'}(z^{[l]}) dz[l]=w[l+1]Tdz[l+1]g[l](z[l])
式子(5)由式子(4)带入式子(1)得到,前四个式子就可实现反向函数。

向量化实现过程可以写成:
(6) d Z [ l ] = d A [ l ] ∗ g [ l ] ′ ( Z [ l ] ) dZ^{[l]} = dA^{[l]}∗ g^{[l]'}(Z^{[l]}) dZ[l]=dA[l]g[l](Z[l])
(7) d W [ l ] = 1 m d Z [ l ] ⋅ A [ l − 1 ] T dW^{[l]} =\frac{1}{m}dZ^{[l]}⋅A^{[l−1]T} dW[l]=m1dZ[l]A[l1]T
(8) d b [ l ] = 1 m n p . s u m ( d z [ l ] , a x i s = 1 , k e e p d i m s = T r u e ) db^{[l]} =\frac{1}{m}np.sum(dz[l], axis = 1, keepdims =True) db[l]=m1np.sum(dz[l],axis=1,keepdims=True)
(9) d A [ l − 1 ] = W [ l ] T . d Z [ l ] dA^{[l−1]} = W^{[l]T}. dZ[l] dA[l1]=W[l]T.dZ[l]

总结一下:
在这里插入图片描述
第一层你可能有一个 ReLU 激活函数,第二层为另一个 ReLU 激活函数,第三层可能是sigmoid 函数(如果你做二分类的话),输出值,用来计算损失;这样你就可以向后迭代进行反向传播求导来求 d w [ 3 ] , d b [ 3 ] , d w [ 2 ] , d b [ 2 ] , d w [ 1 ] , d b [ 1 ] dw^{[3]},db^{[3]} ,dw^{[2]} ,db^{[2]} ,dw^{[1]} ,db^{[1]} dw[3]db[3]dw[2]db[2]dw[1]db[1]。在计算的时候,缓存会把 z [ 1 ] , z [ 2 ] , z [ 3 ] z^{[1]},z^{[2]},z^{[3]} z[1],z[2],z[3]传递过来,然后回传 d a [ 2 ] , d a [ 1 ] da^{[2]},da^{[1]} da[2]da[1] ,可以用来计算 d a [ 0 ] da^{[0]} da[0],但我们不会使用它,这里讲述了一个三层网络的前向和反向传播,还有一个细节没讲就是前向递归——用输入数据来初始化,那么反向递归(使用 Logistic 回归做二分类)——对 A [ l ] A^{[l]} A[l] 求导。

4.3 深层网络中的前向传播(Forward propagation in a Deep Network)

跟往常一样,我们先来看对其中一个训练样本 x 如何应用前向传播,之后讨论向量化的版本。

第一层需要计算 z [ 1 ] = w [ 1 ] x + b [ 1 ] , a [ 1 ] = g [ 1 ] ( z [ 1 ] ) z^{[1]} = w^{[1]}x + b^{[1]},a^{[1]} = g^{[1]}(z^{[1]}) z[1]=w[1]x+b[1]a[1]=g[1](z[1])(x可以看做 a [ 0 ] a^{[0]} a[0]
第二层需要计算 z [ 2 ] = w [ 2 ] a [ 1 ] + b [ 2 ] , a [ 2 ] = g [ 2 ] ( z [ 2 ] ) z^{[2]} = w^{[2]}a^{[1]} + b^{[2]},a^{[2]} = g^{[2]}(z^{[2]}) z[2]=w[2]a[1]+b[2]a[2]=g[2](z[2])
以此类推,第四层为 z [ 4 ] = w [ 4 ] a [ 3 ] + b [ 4 ] , a [ 4 ] = g [ 4 ] ( z [ 4 ] ) z^{[4]} = w^{[4]}a^{[3]} + b^{[4]},a^{[4]} = g^{[4]}(z^{[4]}) z[4]=w[4]a[3]+b[4]a[4]=g[4](z[4])
前向传播可以归纳为多次迭代 z [ l ] = w [ l ] a [ l − 1 ] + b [ l ] , a [ l ] = g [ l ] ( z [ l ] ) z^{[l]} = w^{[l]}a^{[l−1]} + b^{[l]},a^{[l]} = g^{[l]}(z^{[l]}) z[l]=w[l]a[l1]+b[l]a[l]=g[l](z[l])

在这里插入图片描述
向量化实现过程可以写成: Z [ l ] = W [ l ] a [ l − 1 ] + b [ l ] , A [ l ] = g [ l ] ( Z [ l ] ) ( A [ 0 ] = X ) Z^{[l]} = W^{[l]}a^{[l−1]} + b^{[l]},A^{[l]} = g^{[l]}(Z^{[l]}) (A^{[0]} = X) Z[l]=W[l]a[l1]+b[l]A[l]=g[l](Z[l])(A[0]=X)

这里只能用一个显式 for 循环,𝑙从 1 到𝐿,然后一层接着一层去计算。下一节讲的是避免代码产生 BUG,我所做的其中一件非常重要的工作。

4.4 核对矩阵的维数(Getting your matrix dimensions right)

当实现深度神经网络的时候,其中一个我常用的检查代码是否有错的方法就是拿出一张纸过一遍算法中矩阵的维数。
𝑤的维度是(下一层的维数,前一层的维数),即 w [ l ] : ( n [ l ] , n [ l − 1 ] ) w^{[l]}: (n^{[l]},n^{[l−1]}) w[l]:(n[l],n[l1])
𝑏的维度是(下一层的维数,1),即: b [ l ] : ( n [ l ] , 1 ) b^{[l]}: (n^{[l]},1) b[l]:(n[l],1)
z [ l ] , a [ l ] : ( n [ l ] , 1 ) z^{[l]},a^{[l]}:(n^{[l]}, 1) z[l],a[l]:(n[l],1);
d w [ l ] dw^{[l]} dw[l] w [ l ] w^{[l]} w[l]维度相同, d b [ l ] db^{[l]} db[l] b [ l ] b^{[l]} b[l]维度相同,且w和b向量化维度不变,但𝑧,𝑎以及𝑥的维度会向量化后发生变化。

在这里插入图片描述
向量化后:
Z [ l ] Z^{[l]} Z[l]可以看成由每一个单独的 Z [ l ] Z^{[l]} Z[l]叠加而得到, Z [ l ] = ( z [ l ] [ 1 ] , z [ l ] [ 2 ] , z [ l ] [ 3 ] , … , z [ l ] [ m ] ) Z^{[l]} = (z^{[l][1]},z^{[l][2]},z^{[l][3]},…,z^{[l][m]}) Z[l]=(z[l][1]z[l][2]z[l][3]z[l][m]),𝑚为训练集大小,所以 Z [ l ] Z^{[l]} Z[l]的维度不再是 ( n [ l ] , 1 ) (n^{[l]}, 1) (n[l],1),而是 ( n [ l ] , m ) (n^{[l]}, m) (n[l],m)
A [ l ] : ( n [ l ] , m ) , A [ 0 ] = X = ( n [ l ] , m ) A^{[l]}:(n^{[l]}, m),A^{[0]} = X = (n^{[l]}, m) A[l](n[l],m)A[0]=X=(n[l],m)

在这里插入图片描述
在你做深度神经网络的反向传播时,一定要确认所有的矩阵维数是前后一致的,可以大大提高代码通过率。下一节我们讲为什么深层的网络在很多问题上比浅层的好。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/802788.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vscode 重命名很慢或失败 vscode renames are slow

网上问题, 插件问题(我遇见的排除,不是)被其他程序占用问题,(我这边是这个) 解决方案: 打开【资源管理器】,使用火绒 或其他软件,查看文件夹 or 文件 被哪个…

智慧公厕系统3.0有哪些新功能呢

随着科技的不断进步,智慧公厕系统也在不断升级和完善。最新推出的智慧公厕系统3.0,集成了一系列创新功能,为城市公共卫生设施管理带来了全新的体验和便利。让我们一起来看看智慧公厕系统3.0有哪些新功能吧。 1、云端管理平台:智慧…

家用洗地机哪个牌子好?四大热销机型推荐,值得推荐!

随着科技的进步,洗地机在日常生活中能够帮助人们省时省力地打扫卫生,但市面上出现了各种各样的洗地机,好坏参差不齐,选择一个好品牌的洗地机非常重要,因为它们有着可靠的质量保证。那市面上如此众多的洗地机品牌&#…

8×8点阵数码管显示驱动/大电流数码管驱动IC-VK16K33C SOP20

产品品牌:永嘉微电/VINKA 产品型号:VK16K33C 封装形式:SOP20 概述 VK16K33C是一种带按键扫描接口的数码管或点阵LED驱动控制专用芯片,内部集成有数据锁 存器、键盘扫描、LED 驱动模块等电路。数据通过I2C通讯接口与MCU通信。SE…

为什么电脑越用越慢!

电脑随着时间推移逐渐变慢是一个常见的现象,其背后涉及多种原因。以下是导致电脑运行速度变慢的几个主要因素: 系统资源消耗增加 软件更新与新增应用:随着软件版本的更新和新应用程序的安装,它们往往对硬件资源的需求更高,尤其是对处理器、内存和硬盘的要求。这些新软件可…

Java毕业设计 基于SpringBoot vue流浪动物救助网站

Java毕业设计 基于SpringBoot vue流浪动物救助网站 SpringBoot 流浪动物救助网站 功能介绍 首页 图片轮播 动物领养/捐赠 留言 论坛 发布帖子 公告信息 商品信息 添加购物车 立即购买 寻宠请求 购物车 注册登录 个人中心 余额充值 收货地址 动物收藏 动物领养审核 商品订单 …

6AV6643-5CB10-0BN0触摸屏

6AV6643-5CB10-0BN0触摸屏 6AV6643-5CB10-0BN0触摸屏 6AV6643-5CB10-0BN0触摸屏 商品编号(市售编号) 6AV6643-5CB10-0BN0 产品说明 SIMATIC MP 277 8" 触摸屏 多功能面板带剩磁存储器 7.5" TFT 显示屏 6MByte 项目组态存储器 可项目组态,利用 W…

R语言绘图 | 散点小提琴图

原文链接:R语言绘图 | 散点小提琴图 本期教程 写在前面 本期的图形来自发表在Nature期刊中的文章,这样的基础图形在日常分析中使用频率较高。 获得本期教程数据及代码,后台回复关键词:20240405 绘图 设置路径 setwd("You…

【经典算法】LeetCode 5: 最长回文子串(Java/C/Python3实现含注释说明,Medium)

目录 题目描述思路及实现方式一:动态规划法思路代码实现Java版本C语言版本Python3版本 复杂度分析 方式二:中心扩展法思路代码实现Java版本C语言版本Python3版本 复杂度分析 总结相似题目 标签(题目类型):回文串、动态规划 题目描述 给定一…

【C++】unordered 系列关联式容器

文章目录 1. unordered 系列关联式容器2. unordered_map2.1 unordered_map 的文档介绍2.2 unordered_map 的接口说明 3. unordered_set4. 在线 OJ 1. unordered 系列关联式容器 在 C 98 中,STL 提供了底层为红黑树结构的一系列关联式容器,在查询时效率可…

mybatis(4) 代理机制以及小技巧

mybatis 1、 问题2、使用3、#与$3.1 例子3.2什么情况下必须使用${} 4、别名机制5 、Mapper配置6、配置模板文件7、使用自动生成的主键 1、 问题 在上一篇mybtis的web项目中,我们最后有一个问题没有解决,就是dao的实现类,其代码很类似&#x…

Mybase 8.x 下载安装试用详细教程(Windows)

一、软件介绍 MyBase是一款本地笔记软件,它能够帮助你管理和组织大量的信息。 二、下载安装 下载:点我去下载页面 Mybase 软件目前主要实现了两种版本:Mybase Desktop (桌面版) 和 Mybase Server (网络版): 桌面版软件运行于 …

零售行业数字化广告评价标准 - 《IAB/MRC零售(广告)测量指南》

IAB/MRC零售(广告)测量指南 --- 最新标准,2024年1月发布 目录 1出台此标准的目的是什么?2标准宗旨3本标准的主要关键领域4为什么这对品牌和零售商很重要5能给零售媒体中小型玩家带来什么机会?6评价零售媒体效果的最…

金仓数据库Kingbase的数据库开发管理工具KStudio连接乱码

背景: 金仓数据库V8R6,KStudio在Windows10上运行,JDK8 问题: 使用客户端连接数据库时,提示信息乱码,首选项设置字符集不管用,具体如下图所示: Before: After&#xff1…

【CPA考试】2024注册会计师报名照片尺寸要求解读及手机拍照方法

随着2024年注册会计师考试的临近,众多会计专业人士和学生都开始准备报名参加这一行业的重要考试,报名时间为4月8日至4月30日。报名过程中,一张符合要求的证件照是必不可少的。本文将为您详细解读2024年注册会计师考试报名照片的尺寸要求&…

sfml sdl2 windows vscode 调试和coderunner插件运行

链接库写在编译链接命令里,如果没有使用到不会加入到生成的可执行文件里。所以tasks.json可以这样写, {"version": "2.0.0","tasks": [{"type": "cppbuild","label": "C/C: g.exe 生…

GlusterFS分布式文件系统

一、GlusterFS简介 GlusterFS 是一个开源的分布式文件系统。由存储服务器、客户端以及NFS/Samba存储网关(可选,根据需要选择使用)组成。没有元数据服务器组件,这有助于提升整个系统的性能、可靠性和稳定性 二、GlusterFS特点 2.1 扩展性和高性能 Glu…

结合 linux 0.11 源码分析为什么 fork 函数会返回两个值

#(1)学习资料是这些书 以及赵炯博士的完全剖析。谢谢这些大师与网上优秀的文章。 #(2)看 linux 0.11 源码是 sourceinlight 4.这里附上一个安装包。 由本图可知, main 函数对 fork 函数的调用。 fork 函数实际是定…

掌握苹果电脑保养秘籍,全方位维护指南!

苹果电脑(Mac)凭借卓越的性能表现、精致的设计美学以及深入人心的操作系统体验赢得了全球用户的高度评价。不过,无论是哪款顶级配置的Mac产品,都需要经过适时且恰当的保养维护,才能持续展现最优性能。 苹果电脑维护小…

最新AI工具系统ChatGPT网站运营源码SparkAi系统V6.0版本,GPTs应用、AI绘画、AI换脸、垫图混图、Suno-v3-AI音乐生成大模型全支持

一、前言 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统,支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美,那么如何搭建部署AI创作ChatGPT?小编这里写一个详细图文教程吧。已支持GPT…