吴恩达 —— 深度学习 Course 1 笔记
Course1:神经网络和深度学习,包括:
[1] Week1:深度学习概述
[2] Week2:神经网络基础
[3] Week3:浅层神经网络
[4] Week4:深层神经网络
[5] 深度学习的基本流程
[1] Week1:深度学习概述
1.2 什么是神经网络?
一种强有力的学习算法,受大脑如何工作的启发而得到的。
Example1:单神经网络
Example2:多神经网络
1.3 什么是监督学习?机器学习的数据分为哪两类?
- 在监督学习中,给出一个数据集,我们已经知道正确的输出是什么样子的,由此想要知道输入和输出之间存在什么关系。
- 监督学习可以看成“回归”或者“分类”问题。“回归”问题尝试把输入变量映射到一些连续的函数上,预测连续的输出结果;“分类”问题尝试把输入变量映射到离散的类别当中,预测离散的输出结果。
以下是一些监督学习的例子:
神经网络有不同的类型,例如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+b
(W^T
计算出来是一个具体的数值a
),因为我们期待一个在[0,1]区间的概率约束,所以sigmoid
函数被使用。
sigmoid函数的性质:
2.3 logistic回归的损失函数
- 损失函数 Loss:单个样本的估计值与真实值的误差。
- 成本函数 Cost:所有样本的误差总和的平均值。
2.4 梯度下降法
2.9 用导数流程图计算logistic回归中的梯度
对于单个训练样本的梯度计算:
假设有两个特征x1
、x2
,α
是学习率,红色箭头代表反向传播:
2.10 m个样本的梯度下降
运用一次梯度下降法,其中
dz^(i)
是第i
个训练样本的偏导数dz
,α
是学习率:
总结起来步骤如下:参数初始化 -> 前向传播 -> 计算成本 -> 反向传播 -> 更新参数
2.11 向量化
- 向量化的好处: 不必显示地使用for循环,用矩阵运算来替代循环,如numpy中的内置函数np.dot(w,t)。充分利用了GPU或CPU的SIMD(单指令流多数据流)的优势,进行并行化计算,明显地提高了计算效率。
- 因此,神经网络编程中,尽可能避免显示地使用for循环。
2.13 向量化实现正向传播:
下图有两个注意点:
w^T
是一个 (nx,1) 维的矩阵,无论训练数据中是一个样本x
还是m
个样本组成的X
。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)。
使用梯度下降法重复以下过程(一次迭代):
- 正向传播,计算预测值
y(^) = a[2]
;- 反向传播,计算导数
dw[1] db[1] dw[2] db[2]
;- 计算成本(未写出)
- 更新参数
所用公式(注意:正向传播就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] 深度学习的基本流程
最后,深度学习的基本流程总结如下: