一、深层神经网络

深层神经网络的符号与浅层的不同,记录如下:

  • 用\(L\)表示层数,该神经网络\(L=4\)
  • \(n^{[l]}\)表示第\(l\)层的神经元的数量,例如\(n^{[1]}=n^{[2]}=5,n^{[3]}=3,n^{[4]}=1\)
  • \(a^{[l]}\)表示第\(l\)层中的激活函数,\(a^{[l]}=g^{[l]}(z^{[l]})\)

二、前向和反向传播

1. 第\(l\)层的前向传播

输入为 \(a^{[l-1]}\)
输出为 \(a^{[l]}\), cache(\(z^{[l]}\))

矢量化表示:
\[Z^{[l]}=W^{[l]}·A^{[l-1]}+b^{[l]}\]
\[A^{[l]}=g^{[l]}(Z^{[l]})\]

2. 第\(l\)层的反向传播

输入为 \(da^{[l]}\)
输出为 \(da^{[l-1]},dW^{[l]},db^{[l]}\)

计算细节:
\[dz^{[l]}=da^{[l]}*g^{[l]'}(z^{[l]})\]
\[dw^{[l]}=dz^{[l]}*a^{[l-1]}\]
\[db^{[l]}=dz^{[l]}\]
\[da^{[l-1]}=w^{[l]^T}·dz^{[l]}\]
\[dz^{[l]}=w^{[l+1]^T}dz^{[l+1]}*g^{[l]'}(z^{[l]})\]

矢量化表示:
\[dZ^{[l]}=dA^{[l]}*g^{[l]'}(z^{[l]})\]
\[dw^{[l]}=\frac{1}{m}dz^{[l]}·A^{[l-1]^T}\]
\[db^{[l]}=\frac{1}{m}np.sum(dz^{[l]},axis=1,keepdim=True)\]
\[dA^{[l-1]}=w^{[l]^T}·dz^{[l]}\]

3. 总结

前向传播示例

反向传播


更清晰的表示:

三、深层网络中的前向传播

四、核对矩阵的维数

这节的内容主要是告诉我们如何知道自己在设计神经网络模型的时候各个参数的维度是否正确的方法。其实我自己在写代码的时候都得这样做才能有信心继续往下敲键盘,2333。


还是以这个神经网络为例,各层神经网络节点数为\(n^{[0]}=3,n^{[1]}=n^{[2]}=5,n^{[3]}=3,n^{[4]}=1\)。

先确定\(W^{[1]}\)的维度:
已知\(Z^{[1]}=W^{[1]}·X+b^{[1]}\),很容易知道\(Z^{[1]}∈R^{5×1},X∈R^{3×1}\),\(b^{[1]}\)其实不用计算就知道其维度与\(Z\)是相同的,即\(b^{[1]}∈R^{5×1}\)。根据矩阵内积计算公式可以确定\(W^{[1]}∈R^{5×3}\)。
其他层同理,不再赘述。

五、为什么使用深层表示

为什么要使用深层表示?


下面就从直观上来理解深层神经网络。


如上图所示是一个人脸识别的过程,具体的实现步骤如下:

  • 1.通过深层神经网络首先会选取一些边缘信息,例如脸形,眼框,总之是一些边框之类的信息(我自己的理解是之所以先找出边缘信息是为了将要观察的事物与周围环境分割开来),这也就是第一层的作用。

  • 2.找到边缘信息后,开始放大,将信息聚合在一起。例如找到眼睛轮廓信息后,通过往上一层汇聚从而得到眼睛的信息;同理通过汇聚脸的轮廓信息得到脸颊信息等等

  • 3.在第二步的基础上将各个局部信息(眼睛、眉毛……)汇聚成一张人脸,最终达到人脸识别的效果。

六、搭建深层神经网络块


上图表示单个神经元的前向和反向传播算法过程。

  • 前向
    输入\(a^{[l-1]}\),经过计算\(g^{[l]}(w^{[l]}·a^{[l-1]}+b^{[l]})\)得到\(a^{[l]}\)

  • 反向
    计算\(da^{[l]}\),然后反向作为输入,经过一系列微分运算得到\(dw^{[l]},db^{[l]}\)(用来更新权重和偏差),以及上一层的\(da^{[l-1]}\)。

推广到整个深层神经网络就如下图所示:

祭上神图:

七、参数 vs 超参数

  • 参数
    常见的参数即为\(W^{[1]},b^{[1]},W^{[2]},b^{[2]}……\)

  • 超参数
    • learning_rate: \(α\)
    • iterations(迭代次数)
    • hidden layer (隐藏层数量\(L\))
    • hidden units (隐藏层神经元数量\(n^{[l]}\))
    • 激活函数的选择
    • minibatch size
    • 几种正则化的方法
    • momentum(动力、动量)后面会提到

八、这和大脑有什么关系

主要就是说神经网络和人的大脑运行机理貌似很相似,blabla。。。


MARSGGBO♥原创





2017-9-2

DeepLearning.ai学习笔记(一)神经网络和深度学习--Week4深层神经网络的更多相关文章

  1. Deep Learning.ai学习笔记_第二门课_改善深层神经网络:超参数调试、正则化以及优化

    目录 第一周(深度学习的实践层面) 第二周(优化算法) 第三周(超参数调试.Batch正则化和程序框架) 目标: 如何有效运作神经网络,内容涉及超参数调优,如何构建数据,以及如何确保优化算法快速运行, ...

  2. 【PyTorch深度学习】学习笔记之PyTorch与深度学习

    第1章 PyTorch与深度学习 深度学习的应用 接近人类水平的图像分类 接近人类水平的语音识别 机器翻译 自动驾驶汽车 Siri.Google语音和Alexa在最近几年更加准确 日本农民的黄瓜智能分 ...

  3. 学习笔记TF045:人工智能、深度学习、TensorFlow、比赛、公司

    人工智能,用计算机实现人类智能.机器通过大量训练数据训练,程序不断自我学习.修正训练模型.模型本质,一堆参数,描述业务特点.机器学习和深度学习(结合深度神经网络). 传统计算机器下棋,贪婪算法,Alp ...

  4. Deeplearning.ai课程笔记-神经网络和深度学习

    神经网络和深度学习这一块内容与机器学习课程里Week4+5内容差不多. 这篇笔记记录了Week4+5中没有的内容. 参考笔记:深度学习笔记 神经网络和深度学习 结构化数据:如数据库里的数据 非结构化数 ...

  5. Deep Learning.ai学习笔记_第一门课_神经网络和深度学习

    目录 前言 第一周(深度学习引言) 第二周(神经网络的编程基础) 第三周(浅层神经网络) 第四周(深层神经网络) 前言 目标: 掌握神经网络的基本概念, 学习如何建立神经网络(包含一个深度神经网络), ...

  6. [DeeplearningAI笔记]神经网络与深度学习人工智能行业大师访谈

    觉得有用的话,欢迎一起讨论相互学习~Follow Me 吴恩达采访Geoffrey Hinton NG:前几十年,你就已经发明了这么多神经网络和深度学习相关的概念,我其实很好奇,在这么多你发明的东西中 ...

  7. [DeeplearningAI笔记]神经网络与深度学习2.11_2.16神经网络基础(向量化)

    觉得有用的话,欢迎一起讨论相互学习~Follow Me 2.11向量化 向量化是消除代码中显示for循环语句的艺术,在训练大数据集时,深度学习算法才变得高效,所以代码运行的非常快十分重要.所以在深度学 ...

  8. Deeplearning.ai课程笔记--汇总

    从接触机器学习就了解到Andrew Ng的机器学习课程,后来发现又出来深度学习课程,就开始在网易云课堂上学习deeplearning.ai的课程,Andrew 的课真是的把深入浅出.当然学习这些课程还 ...

  9. (转)神经网络和深度学习简史(第一部分):从感知机到BP算法

    深度|神经网络和深度学习简史(第一部分):从感知机到BP算法 2016-01-23 机器之心 来自Andrey Kurenkov 作者:Andrey Kurenkov 机器之心编译出品 参与:chen ...

  10. 【吴恩达课后测验】Course 1 - 神经网络和深度学习 - 第一周测验【中英】

    [吴恩达课后测验]Course 1 - 神经网络和深度学习 - 第一周测验[中英] 第一周测验 - 深度学习简介 和“AI是新电力”相类似的说法是什么? [  ]AI为我们的家庭和办公室的个人设备供电 ...

随机推荐

  1. unity android相互调用

    简介 有一些手机功能,Unity没有提供相应的接口,例如震动,例如不锁屏,例如GPS,例如... 有太多的特殊功能Unity都没有提供接口,这时候,我们就需要通过使用Android原生的ADT编辑器去 ...

  2. C/S架构自动化测试入门

    所谓C/S架构即Client/Server(客户端/服务器架构).虽然近年来C/S架构产品越来越少,大有被B/S(Browser/Server 浏览器/服务器)架构超越的趋势,但C/S还是有B/S不可 ...

  3. ionic3中NavController类push setRoot相关问题解决

    今天在测试app的时候发现,登录页跳转到首页后,会加载两次数据.百思不得其解,查看了所有代码也没能发现问题.最终抱着尝试的态度,动了如下代码: if (suc) { //this.navCtrl.pu ...

  4. 14. 监视ZooKeeper实例

    ZooKeeper服务可以通过以下两种方式进行监控: 使用一组四个字母的单词命令来监视健康状态 使用ZooKeeper内置的Java管理扩展功能 四个字母的单词命令 ZooKeeper响应一组命令,每 ...

  5. HDU1248--完全背包

    寒冰王座 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  6. 推荐一个非常牛逼的并发httpful的库(php)

    MultiHttp :结合了libcurl多线程.httpful方式的PHP库 This is high performance curl wrapper written in pure PHP. I ...

  7. 利用InfluxDB和Grafana搭建数据监测的仪表盘

    InfluxDB的介绍及安装 InfluxDB是支持持续写入的时序数据库,常用于监测系统所需要的数据的存储. 官网的详细安装步骤 https://docs.influxdata.com/influxd ...

  8. Maven项目pom.xml文件报xxx\target\classes\META-INF\MANIFEST.MF (系统找不到指定的路径)

    在今天的学习Maven项目中遇到的这个错误:pom.xml文件报xxx\target\classes\META-INF\MANIFEST.MF (系统找不到指定的路径) 在Maven项目学习中,缓存问 ...

  9. 来个Button看一看

    0.目录 1.前言 2.基本属性与方法 3.点点更健康 4.我的Button有点多 5.震惊!TextView竟然... 1.前言 每次写代码总会忘记一些东西,又要重新Goooooooooogle,好 ...

  10. Java调用C# DLL

    由于项目需要,利用了短信猫,但是一个短信猫会加载多个串口,而只需要其AT口,通过java代码,获取其AT口对应的串口号比较困难,于是通过C#获取,这里直接调用C#生成的DLL,但java不能直接调用C ...