[1] Week1:深度学习概述 [2] Week2:神经网络基础 [3] Week3:浅层神经网络 [4] Week4:深层神经网络 [5] 深度学习的基本流程
一种强有力的学习算法,受大脑如何工作的启发而得到的。
Example1:单神经网络

Example2:多神经网络

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

神经网络有不同的类型,例如standard NN(标准神经网络)用于房价预估和广告点击;CNN(卷积神经网络)经常用于图像处理;RNN(递归神经网络)用于处理一维序列数据,例如语音识别和机器翻译;而自动驾驶则是混合的神经网络结构。
机器学习的数据分为结构化数据和非结构化数据。非结构化数据包括音频、图片、文本等等。
深度学习兴起的原因有:大数据时代,数据的爆炸性增长;计算机硬件技术的发展,计算成本下降,速度提高;神经网络算法的变革等。
影响性能的两大因素:能够训练一个大的神经网络;拥有很多标记的数据。

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

如
Cat vs No-Cat问题,目标是训练一个分类器,输入是一张图片,图片被表示成一个特征向量x,并且预测标签y是1(Cat)还是0(No-Cat)。吴恩达的矩阵表示法:用列向量表示一个样本,因此
X.shape==(n_x,m),n_x表示特征数,m是样本大小。


logistic回归是一种监督学习下的学习算法,使得输出
y要么都是0或者要么都是1。logistic回归的目标是使预测和训练数据之间的误差最小化。对于
Cat vs No-Cat问题,给定一张图的特征向量x,这个算法将会评估这幅图是猫的概率:


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



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

假设有两个特征 x1 、x2,α是学习率,红色箭头代表反向传播:

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

总结起来步骤如下:参数初始化 -> 前向传播 -> 计算成本 -> 反向传播 -> 更新参数
下图有两个注意点:
w^T 是一个 (nx,1) 维的矩阵,无论训练数据中是一个样本 x 还是 m 个样本组成的 X。Z=np.dot(w.T,X)+b 中,numpy 会把 b 拓展成一个 (1,m) 矩阵,这种方法叫广播。

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

神经网络的表示如下:

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

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

常见的 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的问题;缺点:需要调参来找到一个好的缓慢下降的参数,不常用。
以下是单隐层神经网络的梯度下降法的流程:

参数解释: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个公式):

如果将
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,使得梯度下降的速度加快。


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

以人脸识别为例,浅层的神经网络可能只能做的是一些简单的边缘检测,而深层的神经网络可以将边缘特征组合成人脸特征,进行面部检测。
事实上,深层表示可以用电路理论来解释,如下:

比如我们要实现一个异或操作,使用深层的神经网络可以减少异或门的数量,时间复杂度也会降低,而浅层的神经网络需要更大的计算量,进行指数级操作。
深层网络前向传播和后向传播流程:

举例,总结: 第
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];


超参数:控制参数的参数
参数:
w[1] b[1] w[2] b[2] w[3] b[3]... 超参数: 学习率α、梯度下降迭代次数、隐藏层数L、隐藏单元数n[1] n[2]、激活函数等等。调参是深度学习中很常见的一环,最优参数的取值还会随着GPU或CPU的变化而变化。所以经常调试,探索最优参数取值,逐渐地就会掌握一些调参的规律。
当我们提及正向传播和反向传播时,很多人可能不明白那些公式在做什么,为什么就可以行之有效?但是,如果把深度学习比喻成就像大脑一样,这样大众更乐于接收,也方便媒体报道。
一个简单的类比:

事实上,深度学习和大脑到底有多少联系,这也无法衡量,毕竟人类对大脑的认知还是有限的。
最后,深度学习的基本流程总结如下:
