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. 【神经网络与深度学习】卷积神经网络(CNN)

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

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. thinkcmf面包屑制作

    网站常有的功能面包屑,如图所示: 支持1级分类 list.html 首页 / {$name} article.html 首页 / {$term['name']} / {$post_title} 链接: ...

  2. MyBatis从入门到精通(第5章):MyBatis代码生成器

    jdk1.8.MyBatis3.4.6.MySQL数据库5.6.45.Eclipse Version: 2019-12 M2 (4.14.0) MyBatis从入门到精通(第5章):MyBatis代码 ...

  3. python学习笔记-面向对象设计

    前言 1.三大编程范式: 面向过程编程 函数式编程 面向对象编程 2.编程进化论 1.编程最开始就是无组织无结构,从简单控制流中按步写指令 2.从上述的指令中提取重复的代码块或逻辑,组织到一起,便实现 ...

  4. [原]排错实战——解决Tekla通过.tsep安装插件失败的问题

    原总结调试排错troubleshootteklaprocess monitorsysinternals 缘起 最近同事使用.tsep安装Tekla插件的时候,Tekla提示该插件已经存在了,需要卸载后 ...

  5. 利用tensorflow编写自己的机器学习模型主要步骤

    利用tensorlow编写自己的机器学习模型主要分为两个阶段: 第一阶段:建立模型或者建立网络结构 1.定义输入和输出所需要的占位符 2.定义权重 3.定义具体的模型接口 4.定义损失函数 5.定义优 ...

  6. c语言删除文件的指定行,更新文件

    有时候我们需要删除文件的某一行,来更新文件,在这我个人扩展了一个函数,以删除指定条件的行. static void UpdateHistoryFile(void) { FILE *fin,*fout; ...

  7. Python 学习笔记:Python 连接 SQL Server 报错(20009, b'DB-Lib error message 20009, severity 9)

    问题及场景: 最近需要使用 Python 将数据写到 SQL Server 数据库,但是在进行数据库连接操作时却报以下错误:(20009, b'DB-Lib error message 20009, ...

  8. 2019牛客暑期多校训练营(第五场)B.generator 1

    传送门:https://ac.nowcoder.com/acm/contest/885/B 题意:给出,由公式 求出 思路:没学过矩阵快速幂.题解说是矩阵快速幂,之后就学了一遍.(可以先去学一下矩阵快 ...

  9. pip换源源

    介绍 """ 1.采用国内源,加速下载模块的速度 2.常用pip源: -- 豆瓣:https://pypi.douban.com/simple -- 阿里:https:/ ...

  10. 哈夫曼编码的理解(Huffman Coding)

    哈夫曼编码(Huffman Coding),又称霍夫曼编码,是一种编码方式,可变字长编码(VLC)的一种.Huffman于1952年提出一种编码方法,该方法完全依据字符出现概率来构造异字头的平均长度最 ...