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. 腾讯WeTest《2017中国移动游戏质量白皮书》开放预约,再为国内手游把把脉

    产品为王,质量先行.如果说2016年是爆款手游相继崛起的一年,那么2017年则更像是打磨精品.建立生态的高手切磋之年.守住一个游戏的质量生命线,方能建立健康生态,方能在如火如荼的行业竞争中角逐到最后. ...

  2. 43.Linux调试测试输入思路

    当产品要发布之前,都会进行反复的测试输入,比如:测试按键,遥控,触摸等等. 当出现bug时,就还需要不停地找规律,修改程序,直到修复成功,会显的非常麻烦 答: 可以通过之前在35.Linux-分析并制 ...

  3. 【python】函数filter、map

  4. UML2和建模工具学习总结

    软件发展的方向:CS–>BS–>SOA–>BIG DATA 建模的含义: 模型是对现实的简化 从特点视角对系统的一个完整性描述 建模的重要性: 为了更好的理解一个系统 管理复杂度(也 ...

  5. Swift tableview自带的刷新控件

    import UIKit class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource { let ...

  6. ftp 只需上传禁止下载

    一.首先在ftp / 主目录下给所有用户授予读写权限 二.给子目录授予写入权限,不允许读取

  7. 原来你是这样的JAVA[02]-包、传参、构造器

    一.包(package) 在java程序中,一个java源文件称为编译单元,以.java后缀命名.编译单元内可以有一个public类,类名必须与文件名相同.注意:每个编译单元只能有一个public类. ...

  8. vim 当前用户显示行号

    在 -/.vimrc 中添加 set nu 如果文件不存在可以直接新建这个文件 -表示当前用户的主目录

  9. Matplotlib初体验

    为一个客户做了关于每个差异otu在时间点上变化的折线图,使用python第一次做批量作图的程序,虽然是很简单的折线图,但是也是第一次使用matplotlib的纪念. ps:在第一个脚本上做了点小的改动 ...

  10. 解决 react-router / react-router-dom v4 history不能访问的问题

    今天我把react-router 升级了一下, 在使用react-router-dom 是,子组件使用this.props.history 找不到了,看看官方文档,找了半天也没找到,因为我是在异步执行 ...