首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

302页吴恩达Deeplearning.ai课程笔记,详记基础知识与作业代码

吴恩达的 DeepLearning.ai 已经于 1 月 31 日发布了最后一门课程。近日,来自重庆大学的 Wan Zhen 制作了一份深度学习专项课程笔记,该笔记从神经网络与深度学习基础、提升深度神经网络性能和卷积神经网络三门课程出发详细解释了关键概念与作业代码。本文概括性地介绍了这三课的主要内容,并选择每个课程主题比较有意思的知识点进行介绍。

资源链接:https://pan.baidu.com/s/1oAqpmUe 提取密码(已失效)

在这份笔记中,Wan Zhen 不仅介绍了每个课程的关键知识点,同时还详细解释了各课程的编程作业。在第一门课程《神经网络与深度学习基础》中,该课程笔记不仅提供了最基础的 Python 和 NumPy 操作笔记,同时还从最基础的 Logistic 回归推导到最一般的深度全连接网络。当然,还介绍了必要的损失函数与反向传播方法。而在第二门课程中,该笔记详细记录了提升深度网络性能所需要的技巧与基础,例如初始化、正则化和梯度检验等在实践上大大提升模型性能的方法,以及一般 SGD、动量法和适应性学习率方法等常见的最优化方法。最后,第二门课程重点介绍了 TensorFlow,包括该框架的常用函数和实际构建网络的过程等。最后一章节主要记录了卷积神经网络,包括基本的卷积运算、残差网络和目标检测框架等。

以下是该课程笔记的简要框架与一些详细的知识点。

1. 神经网络与深度学习

这一部分对应的是吴恩达深度学习课程的第一课,主要介绍必要的编程语言和编程工具,并逐步进阶介绍线性网络、非线性网络、隐藏层网络到深度网络的实现方法,细节详尽,附有完整的代码。通过这一部分的学习,你将理解神经网络的结构和数据流(前向传播和反向传播),非线性激活函数和隐藏层对学习复杂函数的作用,并知道如何一步步构建完整的(任意结构的、自定义的)神经网络,体会向量化和模块化编程思想的妙处。

1.1 Python 基础和 Numpy

本章第一节介绍了如何使用 Python 的 Numpy 工具包、iPython Notebook 等基本的编程工具。然后介绍如何用这些工具构建神经网络,特别是理解神经网络计算的向量化思想和 Python 广播的使用。

1.2 logistic 回归

第 2 节介绍如何构建一个准确率为 70% 的 logistic 回归神经网络分类器(图像识别网络)来识别猫,并介绍如何进一步将准确率提高的方法,以及损失函数的偏导数更新参数的过程。其中特别强调了尽量用向量化结构而不要用循环结构,除非有必要(比如 epoch 的迭代就必须使用循环结构)。

1.2.1 介绍必要的 Python 工具包;1.2.2 介绍数据集的结构;1.2.3 介绍整个学习算法的宏观架构;1.2.4 介绍构建算法的基本步骤;1.2.5 和 1.2.6 总结前述内容进行代码实现,并进行了可视化分析;1.2.7 介绍如何用自己的数据集训练该神经网络;1.2.8 展示了 logistic 回归神经网络的完整代码。

其中 1.2.4 介绍的构建算法的基本步骤为:

定义模型结构;

初始化模型参数;

循环迭代结构:

计算当前损失函数值(前向传播)

计算当前梯度值(反向传播)

更新参数(梯度下降)

通常 1—3 部分是分开构建的,然后整合到一个函数 model() 中。

1.2.5 对 model() 进行了代码实现,并画出了损失函数和梯度的图像。

图 1.2.3:损失函数

图 1.2.4:三种不同学习率的学习曲线对比

1.3 用隐藏层分类平面数据点

第 3 节介绍如何在神经网络中添加隐藏层以对平面数据点进行分类,本节将教你理解反向传播的工作过程、隐藏层对捕捉非线性关系的作用,以及构建辅助函数的方法。

重点内容包括:用单个隐藏层实现二分类器;使用非线性激活函数;计算交叉熵损失;实现前向和反向传播。

1.3.1 介绍必要的工具包;1.3.2 介绍数据集的构成(平面上的红点和蓝点);1.3.3 介绍无隐藏层的 logistic 回归对该数据集的分类结果;1.3.4 介绍添加了隐藏层的完整模型的实现过程和对该数据集的分类;1.3.5 展示了完整代码。

其中 1.3.3 的分类结果如下图所示:

图 1.3.3:logistic 回归

1.3.4 中使用的神经网络的架构:

图 1.3.4:神经网络模型

1.3.4 构建神经网络的方法和 1.2.4 基本相同,重点强调了如何定义隐藏层结构和非线性激活函数的使用,实现代码后,得到的运行结果为:

图 1.3.6:有隐藏层分类器的决策边界

其中,添加了隐藏层之后,必须使用非线性激活函数,因为不使用非线性激活函数的线性层堆叠是无意义的,无法增大模型的复杂度和容量。

1.4 一步步构建完整的深度神经网络

第 4 节介绍深度神经网络的完整架构,以及如何构建自定义的模型。完成这部分后,你将学会:使用 ReLU 激活函数提升模型的性能、构建更深的模型(隐藏层数大于 1),以及实现易用的神经网络(模块化思想)。

1.4.1 介绍必要的工具包;1.4.2 介绍任务概述;1.4.3 介绍从 2 层网络到 L 层网络的初始化过程;1.4.4 介绍前向传播模块的构建,从线性前向传播、线性+非线性激活前向传播,再到 L 层网络的前向传播;1.4.5 介绍损失函数;1.4.6 介绍反向传播模块的构建,从线性反向传播、线性+非线性激活反向传播,再到 L 层网络的反向传播;1.4.7 展示了深度神经网络的完整代码。

图 1.4.1:任务概述

图 1.4.3:前向传播和反向传播的线性—ReLU—线性—sigmoid 的过程图示。上方表示前向传播,下方表示反向传播。

1.5 深度神经网络的图像分类应用

通过前面四节的学习,你已学会如何一步一步构建完整的深度神经网络。第 5 节介绍如何用深度神经网络构建猫识别分类器。此前在 logistic 回归网络中,识别准确率只能达到 68%,而在完整的深度网络中,识别准确率能达到 80%!

完成本节后,你将学会:用前面介绍的所有辅助函数构建任意结构的神经网络;试验不同结构的神经网络,并进行分析;理解构建辅助函数对构建网络的好处(对比从零开始)。

1.5.1 介绍必要的工具包;1.5.2 介绍数据集(猫 vs. 非猫);1.5.3 介绍模型架构,其中分别构建了 2 层和 L 层的神经网络;1.5.4 介绍 2 层神经网络的训练和测试结果;1.5.5 介绍 2 层神经网络的训练和测试结果;1.5.6 对结果进行分析;1.5.7 介绍如何用你自己的图像训练分类模型;1.5.8 展示了完整代码。

其中,2 层神经网络的运行结果:

图 1.5.4:2 层神经网络的损失函数

运行结果:

图 1.5.5:L 层神经网络的损失函数

运行结果:

通过比较可知,更深的网络有助于提高识别准确率(0.72 vs. 0.8;2 层 vs. 5 层)。

1.5.6 简单总结了影响识别错误的因素:

猫出现在非常规的位置;

猫的颜色和背景相似;

非常规的猫毛色和品种;

拍摄角度;

照片的亮度;

猫的占图比例太小或太大。

这些识别错误可能跟全连接网络自身的局限性有关,包括参数共享、过拟合倾向(参数数量)和层级特征方面,而这些问题将在卷积神经网络里得到改善。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180208A0RJYR00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券