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. 安装cocoa pods时出现Operation not permitted - /usr/bin/xcodeproj的问题

    安装cocoa pods时, 在命令行中输入: 安装:sudo gem install cocoapods报Operation not permitted - /usr/bin/xcodeproj这个 ...

  2. Java零碎总结

    获取当前类运行的根目录(即classpath,如bin.classes.AppName等)的方式有: 1.Thread.currentThread().getContextClassLoader(). ...

  3. C#设计模式之二十二备忘录模式(Memeto Pattern)【行为型】

    一.引言   今天我们开始讲"行为型"设计模式的第十个模式,该模式是[备忘录模式],英文名称是:Memento Pattern.按老规矩,先从名称上来看看这个模式,个人的最初理解就 ...

  4. 如何在yarn上运行Hello World(二)

      在之前的一篇文章我们介绍了如何编写在yarn集群提交运行应用的AM的yarnClient端,现在我们来继续介绍如何编写在yarn集群控制应用app运行的核心模块 ApplicationMaster ...

  5. 最近提交一个mysql5.7的bug,提醒自己以后注意写SQL要规范

    最近帮朋友提交一个mysql5.7的bug , oracle mysql 的大神还回复我 , 以后注意书写sql规范 , 潜台词是不是不要给他们增加工作量 https://bugs.mysql.com ...

  6. C# 防止同时调用=========使用读写锁三行代码简单解决多线程并发的问题

    http://www.jb51.net/article/99718.htm     本文主要介绍了C#使用读写锁三行代码简单解决多线程并发写入文件时提示"文件正在由另一进程使用,因此该进程无 ...

  7. Matplotlib初体验

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

  8. python字符集的转换(mysql数据乱码的处理)

    本文参考:http://blog.csdn.net/crazyhacking/article/details/39375535 chardet模块:http://blog.csdn.net/tianz ...

  9. golang 栈操作

    Monk's Love for Food   Our monk loves food. Hence,he took up position of a manager at Sagar,a restau ...

  10. react-native-scrollable-tab-view组件的简单使用

    react-native-scrollable-tab-view是一个滑动tab组件,可在tab之间进行切换显示内容 https://github.com/skv-headless/react-nat ...