吴恩达【神经网络和深度学习】Week4——深层神经网络

news2024/12/25 8:57:53

文章目录

  • Deep Neural Network
    • 1、Deep L-layer Neural Network
    • 2、Forward Propagation in a Deep Network
    • 3、Getting your matrix dimensions right
    • 4、Why deep representations?
    • 5、 Building blocks of deep neural networks
    • 6、 Forward and Backward Propagation
    • 7、Parameters vs Hyperparameters
    • 8、 What does this have to do with the brain?
    • 9、Quiz
    • 10、Homework
      • 10.1、Building your Deep Neural Network: Step by Step
      • 10.2、Deep Neural Network for Image Classification: Application
    • 11、Summary

本部分接续上周的浅层神经网络讲解,对具有多于一个隐藏层的深层神经网络进行介绍并摘要。
本文参考自 Coursera吴恩达《神经网络与深度学习》课程笔记(5)-- 深层神经网络

Deep Neural Network

1、Deep L-layer Neural Network

深层神经网络其实就是包含更多的隐藏层的神经网络。
在这里插入图片描述
Notations:
n [ l ] n^{[l]} n[l]表示第 l l l层包含的单元个数,第 l l l层的激活函数输出用 a [ l ] a^{[l]} a[l]表示, a [ l ] = g [ l ] ( z [ l ] ) a^{[l]}=g^{[l]}(z^{[l]}) a[l]=g[l](z[l]), W [ l ] W^{[l]} W[l] 表示第l层的权重.

2、Forward Propagation in a Deep Network

神经网络里的计算和之前的思路相同,要从单个样本过渡到多个样本,最终整体形式如下:
Z [ l ] = W [ l ] A [ l − 1 ] + b [ l ] Z^{[l]}=W^{[l]}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])其中 l = 1 , … … , L l = 1,……,L l=1,……,L

3、Getting your matrix dimensions right

对于单个训练样本:

在这里插入图片描述
z [ 1 ] = W [ 1 ] ∗ x + b [ 1 ] z^{[1]}=W^{[1]}*x+b^{[1]} z[1]=W[1]x+b[1] ( 3 , 1 ) ⟶ ( 3 , 2 ) ∗ ( 2 , 1 ) + ( 3 , 1 ) (3,1) \longrightarrow(3,2)*(2,1)+(3,1) (3,1)(3,2)(2,1)+(3,1)
推广之:

W [ l ] : ( n [ l ] , n [ l − 1 ] ) W^{[l]}:(n^{[l]},n^{[l-1]}) W[l]:(n[l],n[l1]) b [ l ] : ( n [ l ] , 1 ) b^{[l]}:(n^{[l]},1) b[l]:(n[l],1)
且在反向传播过程中:
d W [ l ] = W [ l ] : ( n [ l ] , n [ l − 1 ] ) dW^{[l]}=W^{[l]}:(n^{[l]},n^{[l-1]}) dW[l]=W[l]:(n[l],n[l1]) d b [ l ] = b [ l ] : ( n [ l ] , 1 ) db^{[l]}=b^{[l]}:(n^{[l]},1) db[l]=b[l]:(n[l],1)
正向传播中:
z [ l ] : ( n [ l ] , 1 ) z^{[l]}:(n^{[l]},1) z[l]:(n[l],1) a [ l ] : ( n [ l ] , 1 ) a^{[l]}:(n^{[l]},1) a[l]:(n[l],1)
d z [ l ] 和 d a [ l ] 与 z [ l ] , a [ l ] 维度一致 dz^{[l]}和da^{[l]}与z^{[l]},a^{[l]}维度一致 dz[l]da[l]z[l]a[l]维度一致

对于m个训练样本:
Z [ 1 ] = W [ 1 ] ∗ X + b [ 1 ] Z^{[1]}=W^{[1]}*X+b^{[1]} Z[1]=W[1]X+b[1]
其中, W [ 1 ] , b [ 1 ] W^{[1]},b^{[1]} W[1],b[1]的维度不发生变化, X X X ( n [ 0 ] , m ) (n^{[0]},m) (n[0],m),这会导致 Z [ l ] 和 A [ l ] Z^{[l]}和A^{[l]} Z[l]A[l]尺度变为 ( n [ l ] , m ) (n^{[l]},m) (n[l],m), d Z [ l ] 和 d A [ l ] dZ^{[l]}和dA^{[l]} dZ[l]dA[l]与之相同。

主要就四个量要记: W , b , Z , A W,b,Z,A W,b,Z,A

4、Why deep representations?

在这里插入图片描述
先来看人脸识别的例子,如图所示。

经过训练,神经网络第一层所做的事就是从原始图片中提取出人脸的轮廓与边缘,即边缘检测。这样每个神经元得到的是一些边缘信息。神经网络第二层所做的事情就是将前一层的边缘进行组合,组合成人脸一些局部特征,比如眼睛、鼻子、嘴巴等。第三层,就将这些局部特征组合起来,融合成人脸的模样。可以看出,随着层数由浅到深,神经网络提取的特征也是从边缘到局部特征到整体,由简单到复杂。可见,如果隐藏层足够多,那么能够提取的特征就越丰富、越复杂,模型的准确率就会越高。

语音识别模型也是这个道理。浅层的神经元能够检测一些简单的音调,然后较深的神经元能够检测出基本的音素,更深的神经元就能够检测出单词信息。如果网络够深,还能对短语、句子进行检测。记住一点,神经网络从左到右,神经元提取的特征从简单到复杂。特征复杂度与神经网络层数成正相关。特征越来越复杂,功能也越来越强大。

除了从提取特征复杂度的角度来说明深层网络的优势之外,深层网络还有另外一个优点,就是能够减少神经元个数,从而减少计算量。例如下面这个例子,使用电路理论,计算逻辑输出:
y = x 1 ⊕ x 2 ⊕ x 3 … … ⊕ x n y = x_1\oplus x_2\oplus x_3……\oplus x_n y=x1x2x3……xn
在这里插入图片描述
对于多层神经网络,层数是 O ( l o g n ) O(logn) O(logn),使用的神经元的个数为 1 + 2 + … … + 2 l o g 2 ( n ) − 1 = n − 1 1+2+……+2^{log_2(n)-1}=n-1 1+2+……+2log2(n)1=n1
如果只用一层网络,需要 2 n − 1 个神经元 2^{n-1}个神经元 2n1个神经元

这一节讲的不明所以,大概明白随着层数变深识别的特征越复杂,结果越精确即可。

5、 Building blocks of deep neural networks

在这里插入图片描述
对于神经网络中的一层,既需要考虑前向传播的结果计算,也需要考虑反向传播的参数更新,整体的流程如下所示:

在这里插入图片描述

6、 Forward and Backward Propagation

正向传播在第二节讨论过了,比较简单,现在主要看反向传播,结合上一章的两层神经网络看一下计算公式。
在这里插入图片描述
两层神经网络公式如上所示,要注意的是 d z [ 2 ] dz^{[2]} dz[2]是按照最后一层的sigmoid+loss来计算的,通用的形式应该是 d z [ 1 ] dz^{[1]} dz[1]那样。
可总结如下:
d Z [ l ] = d A [ l ] ∗ g ′ ( Z [ l ] ) dZ^{[l]} = dA^{[l]} * g'(Z^{[l]}) dZ[l]=dA[l]g(Z[l])
d W [ l ] = ∂ J ∂ W [ l ] = 1 m d Z [ l ] A [ l − 1 ] T dW^{[l]} = \frac{\partial \mathcal{J} }{\partial W^{[l]}} = \frac{1}{m} dZ^{[l]} A^{[l-1] T} dW[l]=W[l]J=m1dZ[l]A[l1]T
d b [ l ] = ∂ J ∂ b [ l ] = 1 m ∑ i = 1 m d Z [ l ] ( i ) db^{[l]} = \frac{\partial \mathcal{J} }{\partial b^{[l]}} = \frac{1}{m} \sum_{i = 1}^{m} dZ^{[l](i)} db[l]=b[l]J=m1i=1mdZ[l](i)
d A [ l − 1 ] = ∂ L ∂ A [ l − 1 ] = W [ l ] T d Z [ l ] dA^{[l-1]} = \frac{\partial \mathcal{L} }{\partial A^{[l-1]}} = W^{[l] T} dZ^{[l]} dA[l1]=A[l1]L=W[l]TdZ[l]
在这里插入图片描述
我们从最后一层出发,给定的输入是 d A [ L ] dA^{[L]} dA[L],然后我们用 d Z [ L ] dZ^{[L]} dZ[L]作为一个中介,得出 d W [ L ] , d b [ L ] , d A [ L − 1 ] dW^{[L]},db^{[L]},dA^{[L-1]} dW[L],db[L],dA[L1],之后重复。

7、Parameters vs Hyperparameters

该部分介绍神经网络中的参数(parameters)和超参数(hyperparameters)的概念。

神经网络中的参数就是我们熟悉的 W [ l ] W^{[l]} W[l] b [ l ] b^{[l]} b[l]。而超参数则是例如学习速率 α α α,训练迭代次数 N N N,神经网络层数 L L L,各层神经元个数 n [ l ] n^{[l]} n[l],激活函数 g ( z ) g(z) g(z)等。之所以叫做超参数的原因是它们决定了参数 W [ l ] W^{[l]} W[l] b [ l ] b^{[l]} b[l]的值。

如何设置最优的超参数是一个比较困难的、需要经验知识的问题。通常的做法是选择超参数一定范围内的值,分别代入神经网络进行训练,测试cost function随着迭代次数增加的变化,根据结果选择cost function最小时对应的超参数值。

8、 What does this have to do with the brain?

神经网络实际上可以分成两个部分:正向传播过程和反向传播过程。神经网络的每个神经元采用激活函数的方式,类似于感知机模型。这种模型与人脑神经元是类似的,可以说是一种非常简化的人脑神经元模型。如下图所示,人脑神经元可分为树突、细胞体、轴突三部分。树突接收外界电刺激信号(类比神经网络中神经元输入),传递给细胞体进行处理(类比神经网络中神经元激活函数运算),最后由轴突传递给下一个神经元(类比神经网络中神经元输出)。
值得一提的是,人脑神经元的结构和处理方式要复杂的多,神经网络模型只是非常简化的模型。

9、Quiz

在这里插入图片描述
这个东西搞的,parameters[“W” + str(i)]表示的是Wi这样一个变量,然后需要从 W 1 W1 W1 W L WL WL进行初始化

10、Homework

10.1、Building your Deep Neural Network: Step by Step

可以参考一下别人写的DeepLearning.ai作业:(1-4)-深层神经网络
不过还是自己从头写一遍更有收获。
这里结合参考文章重点看一下反向传播过程中的代码实现即可,讲的很清楚了。
主要逻辑就是:

从最后一层出发,给定的输入是 d A [ L ] dA^{[L]} dA[L],然后我们用 d Z [ L ] dZ^{[L]} dZ[L]作为一个中介,利用cache里面的 A p r e v , W , b A_{prev},W,b Aprev,W,b得出 d W [ L ] , d b [ L ] , d A [ L − 1 ] dW^{[L]},db^{[L]},dA^{[L-1]} dW[L],db[L],dA[L1],之后重复,不同的只有最后一层激活函数与前面不同,要利用的cache逐渐更新即可。

10.2、Deep Neural Network for Image Classification: Application

主函数是这样的(从前往后顺完一个神经网络的感觉太爽了(✪ω✪))

def L_layer_model(X, Y, layers_dims, learning_rate = 0.0075, num_iterations = 3000, print_cost=False):
    """
    Implements a L-layer neural network: [LINEAR->RELU]*(L-1)->LINEAR->SIGMOID.
    
    Arguments:
    X -- data, numpy array of shape (num_px * num_px * 3, number of examples)
    Y -- true "label" vector (containing 0 if cat, 1 if non-cat), of shape (1, number of examples)
    layers_dims -- list containing the input size and each layer size, of length (number of layers + 1).
    learning_rate -- learning rate of the gradient descent update rule
    num_iterations -- number of iterations of the optimization loop
    print_cost -- if True, it prints the cost every 100 steps
    
    Returns:
    parameters -- parameters learnt by the model. They can then be used to predict.
    """

    np.random.seed(1)
    costs = []                         # keep track of cost
    
    # Parameters initialization.
    #(≈ 1 line of code)
    # parameters = ...
    # YOUR CODE STARTS HERE
    parameters = initialize_parameters_deep(layers_dims)
    
    # YOUR CODE ENDS HERE
    
    # Loop (gradient descent)
    for i in range(0, num_iterations):

        # Forward propagation: [LINEAR -> RELU]*(L-1) -> LINEAR -> SIGMOID.
        #(≈ 1 line of code)
        # AL, caches = ...
        # YOUR CODE STARTS HERE
        AL, caches = L_model_forward(X, parameters)
        
        # YOUR CODE ENDS HERE
        
        # Compute cost.
        #(≈ 1 line of code)
        # cost = ...
        # YOUR CODE STARTS HERE 
        cost = compute_cost(AL, Y)
        
        # YOUR CODE ENDS HERE
    
        # Backward propagation.
        #(≈ 1 line of code)
        # grads = ...    
        # YOUR CODE STARTS HERE
        grads = L_model_backward(AL, Y, caches)
        
        # YOUR CODE ENDS HERE
 
        # Update parameters.
        #(≈ 1 line of code)
        # parameters = ...
        # YOUR CODE STARTS HERE
        parameters = update_parameters(parameters, grads, learning_rate)
        
        # YOUR CODE ENDS HERE
                
        # Print the cost every 100 iterations
        if print_cost and i % 100 == 0 or i == num_iterations - 1:
            print("Cost after iteration {}: {}".format(i, np.squeeze(cost)))
        if i % 100 == 0 or i == num_iterations:
            costs.append(cost)
    
    return parameters, costs

11、Summary

在浅层神经网络的基础上稍有拓展,重点掌握反向传播的计算公式即可。

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

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

相关文章

【Ctfer训练计划】——(十一)

作者名:Demo不是emo主页面链接: 主页传送门创作初心: 舞台再大,你不上台,永远是观众,没人会关心你努不努力,摔的痛不痛,他们只会看你最后站在什么位置,然后羡慕或鄙夷座右…

最新版wifi营销分销流量主前后端+小程序源码+搭建教程

前端后端数据库搭建教程,无任何密码,亲测能用,避免踩坑,v:JZ716888 教程如下: 安装源码到根目录 1、网站运行目录public 2、PHP7.2,开通SSL 3、导入数据库文件 4、修改数据库文件里applic…

【十一】Netty UDP协议栈开发

Netty UDP协议栈开发介绍协议简介伪首部UDP协议的特点开发jar依赖UDP 服务端启动类服务端业务处理类客户端启动类客户端业务处理类代码说明测试服务端打印截图:客户端打印截图:测试结果总结介绍 UDP 是用户数据报协议(User Datagram Protocol) 的简称,其…

【Azure 架构师学习笔记】-Azure Logic Apps(4)-演示2

本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Logic Apps】系列。 接上文[【Azure 架构师学习笔记】-Azure Logic Apps(3)-演示1] (https://blog.csdn.net/DBA_Huangzj/article/details/128542539) 前言 上文做了简单的演示,这一…

【Flutter】关于Button 的那些知识ElevatedButton等,以及Buttonstyle

文章目录前言一、Button是什么?二、开始使用button1.ElevatedButton1.无style 的ElevatedButton2.基础功能的处理之后的button3.利用buttonstyle 来美化下button2.IconButton,TextButton基础功能都是一样的三、做几个好看点的按键总结前言 一、Button是什…

【设计模式】七大设计原则

设计模式学习之旅(二) 查看更多可关注后查看主页设计模式DayToDay专栏 在软件开发中,为了提高软件系统的可维护性和可复用性,增加软件的可扩展性和灵活性,程序员要尽量根据7条原则来开发程序,从而提高软件开发效率、节约软件开发成…

SAP 详细解析在建工程转固定资产

由固定资产归口采购部门或业务部门提交购置固定资产/在建工程的申请,经审批后,若是需要安装调试,则由财务部固定资产会计建立内部订单收集成本,月末结转在建工程。项目完工后,相关部门(公司装备部、分公司装…

数据库设计之三范式

写在前面 很多数据库设计者,都是按照自己的性子和习惯来设计数据库数据表,其实不然。 其实,数据库的设计也有要遵循的原则。 范式,就是规范,就是指设计数据库需要(应该)遵循的原则。 每个范…

智慧变频中的数据监测、下发控制以及告警推送

[小 迪 导读]:在智能制造的推动下,制造商对于变频器在绿色节能、智能运行、远程维护以及大数据等方面的需求也日趋凸显。针对传统变频器无法满足智能时代的需求问题,dgiot可适配多种DTU/网关对变频器进行数据监测、下发控制以及告警推送。概述…

VS2019编译OSG

VS2019编译OSG 资源准备 由于3rd依赖项很多,编译耗时,可以在牛人编译的版本基础上开展。 杨石兴编译博客; 百度网盘: 链接:https://pan.baidu.com/s/101IXFgvKQhQOEbfLa-ztZg 提取码:osgb 编译 1. 编译…

【patch-package】修改node_modules下的依赖包源码

场景:当项目里使用的element-ui有bug,但是项目里又急需修改这bug,这个时候就需要给依赖打补丁啦~ 1、patch-package 1.1、概念 lets app authors instantly make and keep fixes to npm dependencies. Its a vital band-aid for those of u…

【hcip】mpls实验

目录 1.拓扑图 2.要求 3.主要配置 4.测试 1.拓扑图 2.要求 实现全网可达 3.主要配置 isp区域已配置ospf,bgp 然后配置mpls(r2) r2]mpls lsr-id 2.2.2.2 [r2]mpls Info: Mpls starting, please wait... OK! [r2-mpls]mpls ld [r2-mpls…

VTK-vtkPolyData解读

小结:本博文主要讲解vtkPolyData接口及常用的方法实现原理。 vtkPolyData 1描述 vtkPolyData是一系列的数据集包括vertices,lines,polygons,triangle strips。 vtkPolyData是vtkDataSet的具体实现,代表了一系列的几…

ELF文件格式解析

ELF文件是什么? ELF是Executable and Linkable Format的缩写,字面上看就是可执行和可连接文件。在Linux下可重定位文件(.o)、可执行文件、共享目标文件(.so)、核心转储问文件(core dump) 都是使用ELF文件格式。 ELF 通常由编译器或者连接器产生&#x…

2021年大数据挑战赛B题口罩佩戴检测求解全过程论文及程序

2021年大数据挑战赛 B题 口罩佩戴检测 原题再现: 新冠疫情的爆发对人类生命安全及全球经济发展造成了重大影响。虽然现在国内疫情基本得到有效遏制,但日常防控仍不可松懈。戴口罩是预防新冠肺炎最便捷、最有效的措施和方法。人脸佩戴口罩的自动化识别可…

2022跨境支付回顾,iPayLinks让“链接”更高效

从2015年服务第一个客户开始iPayLinks已陪伴用户走过8个春秋作为贴心的跨境资金管家iPayLinks跨越山海,链接全球以产品为基石这一年,iPayLinks持续开发新产品、新功能,帮助外贸企业和跨境卖家抓住机遇,降本增效。B2B外贸收款主打“…

Python 使用TF-IDF

第一个 简易版本 直接来至 jieba 包, 一下代码直接来源 https://blog.csdn.net/qq_38923076/article/details/81630442 这里记录 进行对比 jieba.analyse.extract_tags(sentence, topK20, withWeightFalse, allowPOS()) sentence:待提取的文本语料 topK…

【阶段三】Python机器学习25篇:机器学习项目实战:LigthGBM算法的核心思想、原理与LightGBM分类模型

本篇的思维导图: LigthGBM算法的核心思想 LigthGBM算法是Boosting算法的新成员,由微软公司开发。它和XGBoost算法一样是对GBDT算法的高效实现,在原理上与GBDT算法和XGBoost算法类似,都采用损失函数的负梯度作为当前决策树的残差近似值,去拟合新的决策树。 …

MATLAB实验五

实验五 A 1、在同一图形窗口绘制。利用plot绘图指令绘图命令。 (1)在窗口上部绘制正弦信号 x(t)sin(0.5πtπ4),t∈[0,4π]x(t)sin(0.5\pi t\frac \pi 4),t∈[0,4\pi]x(t)sin(0.5πt4π​),t∈[0,4π]。要求曲线为黑色实线。 (2&#xff…

QT(7)-初识委托

初识委托1 简介2 QT中的委托类2.1 函数2.1.1 关键函数2.1.2 其他函数3 例子3.1 官方例子3.2 修改官方例子4 设想1 简介 委托是Qt中的一种机制,用于在Qt模型/视图架构中处理特定类型的数据。委托提供了一种方便的方法来定制特定类型的数据的显示和编辑。 委托可以做…