吴恩达deeplearning.ai系列课程笔记+编程作业(4)第一课 神经网络和深度学习-第4周:深层神经网络(Deep Neural Networks)

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

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



本周测验见:第四周:测验 Key concepts on Deep Neural Networks 10 个问题
本周编程作业见:第四周:编程作业 Building your Deep Neural Network: Step by Step
第四周:编程作业 Deep Neural Network for Image Classification: Application

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表示层数,上图: L = 4 L=4 L=4,输入层的索引为“0”,第一个隐藏层 n [ 1 ] = 5 {n}^{[1]}=5 n[1]=5,表示有5个隐藏神经元,同理 n [ 2 ] = 5 {n}^{[2]}=5 n[2]=5 n [ 3 ] = 3 {n}^{[3]}=3 n[3]=3 n [ 4 ] { {n}^{[4]}} n[4]= n [ L ] = 1 { {n}^{[L]}}=1 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 g g 计算 z [ l ] {z}^{[l]} z[l],激活函数也被索引为层数 l l l,然后我们用 w [ l ] {w}^{[l]} w[l]来记作在l层计算 z [ l ] {z}^{[l]} z[l]值的权重。类似的, z [ l ] { {z}^{[l]}} z[l]里的方程 b [ l ] {b}^{[l]} b[l]也一样。

       最后总结下符号约定:

       输入的特征记作 x x x,但是 x x x同样也是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 ] {z}^{[l]}={W}^{[l]}\cdot{a}^{[l-1]}+{b}^{[l]} z[l]=W[l]a[l1]+b[l]

​         a [ l ] = g [ l ] ( z [ l ] ) { {a}^{[l]}}={ {g}^{[l]}}\left( { {z}^{[l]}}\right) a[l]=g[l](z[l])

       向量化实现过程可以写成: z [ l ] = W [ l ] ⋅ A [ l − 1 ] + b [ l ] {z}^{[l]}={W}^{[l]}\cdot {A}^{[l-1]}+{b}^{[l]} z[l]=W[l]A[l1]+b[l]

​         A [ l ] = g [ l ] ( Z [ l ] ) {A}^{[l]}={g}^{[l]}({Z}^{[l]}) A[l]=g[l](Z[l])

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

       下面讲反向传播的步骤:

       输入为 d a [ l ] { {da}^{[l]}} da[l],输出为 d a [ l − 1 ] { {da}^{[l-1]}} da[l1] d w [ l ] { {dw}^{[l]}} dw[l], d b [ l ] { {db}^{[l]}} db[l]
       在这里插入图片描述

所以反向传播的步骤可以写成:

(1) d z [ l ] = d a [ l ] ∗ g [ l ] ′ ( z [ l ] ) d{ {z}^{[l]}}=d{ {a}^{[l]}}*{ {g}^{[l]}}'( { {z}^{[l]}}) dz[l]=da

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值