1. 计算深度神经网络的时候,尽量向量化数据,不要用for循环。唯一用for循环的地方是依次在每一层做计算。

2. 最常用的检查代码是否有错的方法是检查算法中矩阵的维度。

正向传播:

对于单个样本,第i层网络 z[i] = W[i]a[i-1] + b[i]

a[i] = f[i](z[i])。

其中,z[i]是n[i]*1,W[i]是n[i]*n[i-1],a[i-1]是n[i-1]*1,b[i]是n[i]*1。

对于向量化后的所有样本,第i层网络 Z[i] = W[i]A[i-1] + b[i]

A[i] = f[i](Z[i])。

其中,Z[i]是n[i]*m,W[i]是n[i]*n[i-1],A[i-1]是n[i-1]*m,b[i]是n[i]*1,python运算过程中会把b[i]broadcasting成n[i]*m,m是训练集样本数量。

反向传播:

对于单个样本,第i层网络 dz[i] = da[i]*f[i]'(z[i]),*是对应元素相乘。

dw[i]=dz[i]a[i-1]

db[i]=dz[i]

da[i-1]=W[i]Tdz[i]

对于向量化后的所有样本,第i层网络 dZ[i] = dA[i]*f[i]'(Z[i]),*是对应元素相乘。

dW[i]=1/m*dZ[i]A[i-1]T

db[i]=1/m*np.sum(dZ[i], axis=1, keepdims=True)

dA[i-1]=W[i]TdZ[i]

3. 深度神经网络的直观解释:比如做人脸检测的时候,可以把浅层的神经网络当成是边缘检测器,不同的神经元检测不同方向的边缘在图片的位置。中层的神经网络是把第一层提取出的不同位置的不同方向的边缘特征组合成面部的不同部分,比如有的是眼睛,有的是鼻子。深层的神经网络把这些部分放在一起组合成不同的人脸。对于语音识别,也是类似,浅层的神经网络检测低层次的波形特征,比如音调高低,白噪声还是咝咝的声音,中层的神经网络可以把波形特征组合成音位(phoneme),识别基本的声音单元,深层的神经网络可以把识别单词,再深层次的神经网络可以识别句子。

另外一种深度神经网络有效性的解释来源于电路理论,如果使用树形一层层堆叠简单的操作,那么最终实现复杂功能需要的元器件数量是O(logn),而如果只允许使用浅层网络,则需要O(2n)的元器件。

NG说还有一个原因让深度神经网络很迷人是名字取得好。。。。。。“深度”!一听就很酷炫。但带来的问题是人会很按照字面意思钻牛角尖非要用很深的网络,但实际上,NG自己在思考问题的时候,还是从最简单的模型比如Logistic回归入手,然后试试一两个隐藏层,把隐藏层的层数当成超参数一样去调试。

4. NG说即使他做机器学习很多年了,但是依旧经常搞不明白为什么算法就可以工作,会很惊讶结果这么好。实际算法的复杂性来源于数据,而不是写的代码。

5. 超参数:学习率,梯度下降循环的次数,隐藏层数量,每一层隐藏神经元的数量,激活函数的类型。其他超参数包括:momentum,mini batch的大小,正则化参数的形式,等等。

深度学习领域非常基于经验,基于经验的意思就是不断试参数直到合适。。。针对不同的模型最优的超参数值是不同的,所以必须针对具体问题多试,甚至针对相同的问题,超参数的最优值也会变化,比如广告点击率,所以即使模型建好了跑通了,也要隔一段时间尝试一下新的超参数。

6. NG觉得深度学习和人类大脑相关性不大,因为大脑神经元的机制比神经网络算法复杂的多的多的多。深度学习的确是一种很好的方法来找到输入和输出之间复杂映射关系。

7. 总结一下神经网络算法实现的流程,和week3的总结差不多:

  1)定义结构,包括输入的大小,隐藏层层数,每层神经元的数量,等等。对于L层(1~L)的神经网络,第0层是输入层,第1~L-1层是隐含层,激活函数是ReLU,第L层是输出层,激活函数是sigmoid。输入层不计入层数。

  2)初始化参数,W初始化为小随机数,b初始化为0。

  3)优化迭代求最优参数:

    a)前向传播。从1到L依次计算每一层。对于第[i]层网络,已知前一层传进来的输入A[i-1],和这一层的参数W[i]、b[i],以及激活函数,计算出Z[i]和A[i],并且把Z[i]、A[i]、W[i]、b[i]保存起来为反向传播的计算做准备,作业的程序里,把Z[i]放在activation_cache里,把A[i]、W[i]、b[i]放在linear_cache里。

    b)计算loss,用最后一层的输出A[L]带入损失函数求出loss。

    c)反向传播。根据前向传播算出的A[L]和Y计算出dA[L]。然后从L到1依次计算每一层。对于第[i]层网络,已知后一层传来的输入dA[i],先从activation_cache里取出Z[i],求出dZ[i]。然后从linear_cache中取出A[i]、W[i]、b[i],借助dZ[i] 计算出dW[i]、db[i]、dA[i-1]

    d)更新参数。

  4)用计算出的参数做预测。

deeplearning.ai 神经网络和深度学习 week4 深层神经网络 听课笔记的更多相关文章

  1. deeplearning.ai 神经网络和深度学习 week4 深层神经网络

    1. 计算深度神经网络的时候,尽量向量化数据,不要用for循环.唯一用for循环的地方是依次在每一层做计算. 2. 最常用的检查代码是否有错的方法是检查算法中矩阵的维度. 正向传播: 对于单个样本,第 ...

  2. DeepLearning.ai学习笔记(一)神经网络和深度学习--Week4深层神经网络

    一.深层神经网络 深层神经网络的符号与浅层的不同,记录如下: 用\(L\)表示层数,该神经网络\(L=4\) \(n^{[l]}\)表示第\(l\)层的神经元的数量,例如\(n^{[1]}=n^{[2 ...

  3. deeplearning.ai 改善深层神经网络 week1 深度学习的实用层面 听课笔记

    1. 应用机器学习是高度依赖迭代尝试的,不要指望一蹴而就,必须不断调参数看结果,根据结果再继续调参数. 2. 数据集分成训练集(training set).验证集(validation/develop ...

  4. 【神经网络与深度学习】卷积神经网络(CNN)

    [神经网络与深度学习]卷积神经网络(CNN) 标签:[神经网络与深度学习] 实际上前面已经发布过一次,但是这次重新复习了一下,决定再发博一次. 说明:以后的总结,还应该以我的认识进行总结,这样比较符合 ...

  5. 【神经网络与深度学习】卷积神经网络-进化史:从LeNet到AlexNet

    [卷积神经网络-进化史]从LeNet到AlexNet 本博客是[卷积神经网络-进化史]的第一部分<从LeNet到AlexNet> 如需转载,请附上本文链接:http://blog.csdn ...

  6. deeplearning.ai 人工智能行业大师访谈 林元庆 听课笔记

    1. 读博士之前,林元庆是学光学,他自认为数学基础非常好.在宾夕法尼亚大学上课认识了他的博士导师Dan Lee,转学机器学习.他从头开始学了很多算法,甚至PCA,之前他完全不知道这些,他觉得非常兴奋, ...

  7. 《深度学习-改善深层神经网络》-第二周-优化算法-Andrew Ng

    目录 1. Mini-batch gradient descent 1.1 算法原理 1.2 进一步理解Mini-batch gradient descent 1.3 TensorFlow中的梯度下降 ...

  8. 吴裕雄--天生自然python Google深度学习框架:深度学习与深层神经网络

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

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

随机推荐

  1. vue双向绑定的原理及实现双向绑定MVVM源码分析

    vue双向绑定的原理及实现双向绑定MVVM源码分析 双向数据绑定的原理是:可以将对象的属性绑定到UI,具体的说,我们有一个对象,该对象有一个name属性,当我们给这个对象name属性赋新值的时候,新值 ...

  2. MongoDB的CURD命令

    1.启动客户端 在MongDB服务成功启动的情况下,打开cmd,在MongDB的bin文件目录下执行MongDB命令 可以看到MongDB版本号3.0.7与默认连接的数据库test.test数据库是系 ...

  3. WindowsServer2012 搭建域错误“本地Administraor账户不需要密码”

    标签:MSSQL/SQLServer/域控制器提升的先决条件验证失败/密码不符合要求 概述 在安装WindowsServer2012域控出现administrator账户密码不符合要求的错误,但是实际 ...

  4. 计算机和HMI设备通信之程序上下载

    1.传送模式 2.串行接口传送HMI,软件采用Wincc flexable smart v3 3.设置HMI设备,给HMI设备上电 打开控制面板,双击Transfer 使能Enable Channel ...

  5. 455. Assign Cookies.md

    Assume you are an awesome parent and want to give your children some cookies. But, you should give e ...

  6. bzoj 4824: [Cqoi2017]老C的键盘

    Description 老 C 是个程序员.     作为一个优秀的程序员,老 C 拥有一个别具一格的键盘,据说这样可以大幅提升写程序的速度,还能让写出来的程序 在某种神奇力量的驱使之下跑得非常快.小 ...

  7. Macaca环境配置及样例执行

    1.Macaca简介 macaca是由阿里巴巴公司开发的一套自动化解决方案,适用于PC端和移动端.Macaca基于Node.js开发,测试案例编写语言暂时也只支持Node.js. 2.Macaca与A ...

  8. Python爬虫——爬豆瓣登录页面

    直接上代码 import urllib.request import http.cookiejar from lxml import etree # from spiderImg import get ...

  9. Effective Java 第三版——13. 谨慎地重写 clone 方法

    Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...

  10. Nifi自定义processor

    有关nifi的基本介绍和架构可以参考nifi官网 一下介绍nifi的一些比较重要的类和自己的一些理解,我刚刚接触nifi: nifi的数据流可以表示为一个flow这是一个队列,每个数据包被封装在flo ...