机器学习深度学习·神经网络·计算机视觉我爱编程

吴恩达 —— 深度学习 Course 1 笔记

2017-10-10  本文已影响737人  牛奶芝麻

Course1:神经网络和深度学习,包括:


[1] Week1:深度学习概述
[2] Week2:神经网络基础
[3] Week3:浅层神经网络
[4] Week4:深层神经网络
[5] 深度学习的基本流程


[1] Week1:深度学习概述

1.2 什么是神经网络?

一种强有力的学习算法,受大脑如何工作的启发而得到的。

Example1:单神经网络


Example2:多神经网络
1.3 什么是监督学习?机器学习的数据分为哪两类?
  1. 在监督学习中,给出一个数据集,我们已经知道正确的输出是什么样子的,由此想要知道输入和输出之间存在什么关系。
  2. 监督学习可以看成“回归”或者“分类”问题。“回归”问题尝试把输入变量映射到一些连续的函数上,预测连续的输出结果;“分类”问题尝试把输入变量映射到离散的类别当中,预测离散的输出结果。

以下是一些监督学习的例子:

神经网络有不同的类型,例如standard NN(标准神经网络)用于房价预估和广告点击;CNN(卷积神经网络)经常用于图像处理;RNN(递归神经网络)用于处理一维序列数据,例如语音识别和机器翻译;而自动驾驶则是混合的神经网络结构。

机器学习的数据分为结构化数据非结构化数据。非结构化数据包括音频、图片、文本等等。

1.4 为什么深度学习会兴起?

深度学习兴起的原因有:大数据时代,数据的爆炸性增长;计算机硬件技术的发展,计算成本下降,速度提高;神经网络算法的变革等。

影响性能的两大因素:能够训练一个大的神经网络;拥有很多标记的数据。

训练一个神经网络是可迭代的:


[2] Week2:神经网络基础

2.2 二分分类

Cat vs No-Cat 问题,目标是训练一个分类器,输入是一张图片,图片被表示成一个特征向量 x ,并且预测标签 y 是1(Cat)还是0(No-Cat)。

吴恩达的矩阵表示法:用列向量表示一个样本,因此 X.shape==(n_x,m)n_x 表示特征数,m 是样本大小。


2.3 logistic回归

logistic回归是一种监督学习下的学习算法,使得输出 y 要么都是0或者要么都是1。logistic回归的目标是使预测和训练数据之间的误差最小化。

对于 Cat vs No-Cat 问题,给定一张图的特征向量 x,这个算法将会评估这幅图是猫的概率:



通过计算, W^T+b 是一个线性函数 ax+bW^T 计算出来是一个具体的数值 a),因为我们期待一个在[0,1]区间的概率约束,所以 sigmoid 函数被使用。

sigmoid函数的性质

2.3 logistic回归的损失函数
  1. 损失函数 Loss:单个样本的估计值与真实值的误差。
  2. 成本函数 Cost:所有样本的误差总和的平均值。
2.4 梯度下降法
2.9 用导数流程图计算logistic回归中的梯度

对于单个训练样本的梯度计算:


假设有两个特征 x1x2α是学习率,红色箭头代表反向传播
2.10 m个样本的梯度下降

运用一次梯度下降法,其中 dz^(i) 是第 i 个训练样本的偏导数dzα是学习率:


总结起来步骤如下:参数初始化 -> 前向传播 -> 计算成本 -> 反向传播 -> 更新参数
2.11 向量化
  1. 向量化的好处: 不必显示地使用for循环,用矩阵运算来替代循环,如numpy中的内置函数np.dot(w,t)。充分利用了GPU或CPU的SIMD(单指令流多数据流)的优势,进行并行化计算,明显地提高了计算效率。
  2. 因此,神经网络编程中,尽可能避免显示地使用for循环。
2.13 向量化实现正向传播:

下图有两个注意点:

  1. w^T 是一个 (nx,1) 维的矩阵,无论训练数据中是一个样本 x 还是 m 个样本组成的 X
  2. Z=np.dot(w.T,X)+b 中,numpy 会把 b 拓展成一个 (1,m) 矩阵,这种方法叫广播
2.14 向量化实现logistic回归的完整流程:

左边是for循环的一次梯度下降,右边是向量化的1000次梯度下降:
注意点:在右边的向量化中,np.dot(a,b) 是按照矩阵乘法的运算进行的,而 X*(dz)^T 是按照矩阵对应位置元素相乘进行的。同时再次注意,w 是一个 (nx,1) 的矩阵,因此 dw 也是一个 (nx,1) 的矩阵。


[3] Week3:浅层神经网络

3.3 计算神经网络的输出

神经网络的表示如下:


注意: 这里的输入层算作第0层,故这是一个two-layer的神经网络。W[1] 是隐藏层的一个 (4,3) 矩阵,其中4代表隐藏层有4个单元,3代表来自输入层的3个特征。W[2] 是输出层的一个 (1,4) 矩阵,同理。

隐藏层的计算过程,目的是得到 a[1]

输出层的计算过程,目的是得到 y(^) = a[2]

3.6 激活函数

常见的 4 种激活函数(σ、tanh、ReLU、Leaky ReLU):


4 种激活函数的优缺点:
σ: 优点:适合二元分类,因为预测值在[0,1]之间,比如在输出层使用;缺点:当z很大,梯度接近0,下降速度缓慢。
tanh: 比σ要好,因为预测值在[-1,1]之间,可以使均值为0,比如在隐藏层使用;缺点:当z很大,梯度接近0,下降速度缓慢。
ReLU(修正线性单元): 优点:当z很大,梯度为1,下降速度很快,最常用的激活函数;缺点:z有一半梯度为0。
Leaky ReLU(带泄露的修正线性单元): 优点:解决了ReLU的有一半梯度为0的问题;缺点:需要调参来找到一个好的缓慢下降的参数,不常用。
3.9 神经网络的梯度下降法

以下是单隐层神经网络的梯度下降法的流程:


参数解释:nx=n[0]n[1],n[2] = 1 分别代表输入层特征数量、隐藏层和输出层的单元数量,因此隐藏层 w[1] (n[1],n[0])、 b[1] (n[1],1),输出层的 w[2] (n[2],n[1]) 、b[2] (n[2],1)。

使用梯度下降法重复以下过程(一次迭代):

  1. 正向传播,计算预测值 y(^) = a[2]
  2. 反向传播,计算导数 dw[1] db[1] dw[2] db[2]
  3. 计算成本(未写出)
  4. 更新参数

所用公式(注意:正向传播就4个公式,反向传播先计算的是 dz[2] dw[2] db[2] ,再计算的是 dz[1] dw[1] db[1],共6个公式):

3.11 随机初始化

如果将 w[1]w[2] 初始化为全0矩阵,会导致隐藏单元在计算完全一样的函数,即所有隐藏单元的计算都是对称的。b[1]b[0]不存在对称性问题。

正确的做法:随机初始化参数


解释:w[1]w[2] 初始化为高斯分布随机变量,再乘以一个小因子(如0.01),使得 w[1]w[2] 中的值尽可能小,原因是可以使得计算出来的 z[1]z[2] 尽可能小,这样在反向传播过程中求梯度 dz[1]dz[2] 就不会接近0,使得梯度下降的速度加快。

[4] Week4:深层神经网络

4.1 深层神经网络的表示
4.2 深层网络中的前向传播
4.3 核对矩阵的维数

核对矩阵维数可以帮助我们检查算法是否正确:

4.4 为什么使用深层表示

以人脸识别为例,浅层的神经网络可能只能做的是一些简单的边缘检测,而深层的神经网络可以将边缘特征组合成人脸特征,进行面部检测。

事实上,深层表示可以用电路理论来解释,如下:


比如我们要实现一个异或操作,使用深层的神经网络可以减少异或门的数量,时间复杂度也会降低,而浅层的神经网络需要更大的计算量,进行指数级操作。
4.5 搭建深层神经网络块

深层网络前向传播后向传播流程:

4.6 前向和反向传播

举例,总结:
L 层的前向传播:输入 a[L-1],输出 a[L],并缓存 z[L]、w[L]、b[L],用于反向传播过程;
L 层的反向传播:输入da[L],输出 da[L-1]、dw[L]、db[L],用于更新参数 w[L]、b[L]


4.7 参数 VS 超参数

超参数:控制参数的参数


参数: w[1] b[1] w[2] b[2] w[3] b[3] ...
超参数: 学习率 α 、梯度下降迭代次数、隐藏层数 L 、隐藏单元数 n[1] n[2]、激活函数等等。

调参是深度学习中很常见的一环,最优参数的取值还会随着GPU或CPU的变化而变化。所以经常调试,探索最优参数取值,逐渐地就会掌握一些调参的规律。

4.8 深度学习和大脑的关系

当我们提及正向传播和反向传播时,很多人可能不明白那些公式在做什么,为什么就可以行之有效?但是,如果把深度学习比喻成就像大脑一样,这样大众更乐于接收,也方便媒体报道。

一个简单的类比:


事实上,深度学习和大脑到底有多少联系,这也无法衡量,毕竟人类对大脑的认知还是有限的。

[5] 深度学习的基本流程

最后,深度学习的基本流程总结如下:


至此,Course1 的总结就到这里。由于本人也在自学此系列课程,故该系列会持续更新,See You Course2!!!
上一篇下一篇

猜你喜欢

热点阅读