Coursera deeplearning.ai 深度学习笔记1-4-Deep Neural Networks-深度神经网络原理推导与代码实现

时间:2022-12-14 17:30:44

在掌握了浅层神经网络算法后,对深度神经网络进行学习。

1. 原理推导

1.1 深度神经网络表示

定义:L表示神经网络总层数,上标[l]代表第l层网络,n[l]代表第l层的节点数,a[l]代表第l层的激活,W[l]b[l]为第l层的参数。输入层为第0层a[0] = x,输出层为第L层a[L]

Coursera deeplearning.ai 深度学习笔记1-4-Deep Neural Networks-深度神经网络原理推导与代码实现

1.2 正向传播(Forward Propagation)

类似浅层神经网络的推导可以得到,对于第l层,针对单个样本,正向传播可以表示为:
z[l]=W[l]a[l1]+b[l],a[l]=g[l](z[l])(1)
式中,g[l](z[l])为第l层的激活函数,且a[0] = x。针对m个样本,以上标(m)表示第m个样本,将上式改写为:
Z[l]=W[l]A[l1]+b[l],A[l]=g[l](Z[l])(2)
式中,A[0] = X
Z[l]=|z[l](1)||z[l](2)||||z[l](m)|,A[l]=|a[l](1)||a[l](2)||||a[l](m)|(3)
因此,对于以上L层深度神经网络,给定A[0] = X,正向传播计算流程如下:
A[0]=Xforiinrange(1,L+1):Z[l]=W[l]A[l1]+b[l]A[l]=g[l](Z[l])(4)
正向传播,实际就是输入A[l-1]得到A[l]的过程,同时需要将Z[l]保存以便于反向传播的计算。
各矩阵维度如下表:

矩阵
A [0] = X
A [l]
W [l]
b [l]
Z [l]
维度
(n[0], m)
(n[l], m)
(n[l], n[l-1])
(n[l], 1)
(n[l], m)

1.3 反向传播(Backward Propagation)

类似浅层神经网络的推导可以得到,对于第l层,针对单个样本,反向传播可以表示为:
dz[l]=da[l]g[l](z[l])dW[l]=dz[l]a[l1]Tdb[l]=dz[l]da[l1]=W[l]Tdz[l](5)
式中,“*”表示元素点乘。拓展到m个样本得到:
dZ[l]=dA[l]g[l](Z[l])dW[l]=1mdZ[l]A[l1]Tdb[l]=1mnp.sum(dZ[l],axis=1,keepdims=True)dA[l1]=W[l]TdZ[l](6)
通过上式便可求出梯度dWdb
反向传播,实际就是输入dA[l]得到dA[l-1]以及梯度dW[l]db[l]的过程,同时需要将dZ[l]保存以方便计算。
反向传播的初始化如下。由于损失函数表示为:
L(a,y)=[yloga+(1y)log(1a)](7)
则可以求出:
da[L]=dda[L]{[yloga[L]+(1y)log(1a[L])]}=ya[L]+1y1a[L]dA[L]=|y(1)a[L](1)+1y(1)1a[L](1)||y(2)a[L](2)+1y(2)1a[L](2)||||y(m)a[L](m)+1y(m)1a[L](m)|(8)
在反向传播过程中,同样可以求出代价函数如下:
J(w,b)=1mi=1mL(a(i),y(i))=1mi=1m[y(i)loga(i)+(1y(i))log(1a(i))](9)

1.4 梯度下降(Gradient Descent)

通过反向传播求出了梯度dWdb后,即可用梯度下降法对参数进行更新:
W[l]=W[l]αdW[l]b[l]=b[l]αdb[l](10)

1.5 超参数(Hyperparameters)

深度神经网络中主要有以下几个超参数需要调整:
(1) 学习因子α
(2) 迭代次数iterations;
(3) 隐含层数量L
(4) 隐含层单元数量n[1], n[2], … , n[L]
(5) 激活函数的选择。
其他超参数:momentum、mini batch size、regularization parameters等。

2. 代码实现

案例:采用L层深度神经网络,实现猫咪图片的二分类。

Coursera deeplearning.ai 深度学习笔记1-4-Deep Neural Networks-深度神经网络原理推导与代码实现

各个模块如下:
Coursera deeplearning.ai 深度学习笔记1-4-Deep Neural Networks-深度神经网络原理推导与代码实现

2.1 初始化initialize

W随机初始化,并将b初始化为0,核心代码如下:
Coursera deeplearning.ai 深度学习笔记1-4-Deep Neural Networks-深度神经网络原理推导与代码实现

2.2 正向传播

2.2.1 线性部分linear_forward

采用下式,实现每个节点的线性部分:
Z[l]=W[l]A[l1]+b[l](11)
核心代码如下:
Coursera deeplearning.ai 深度学习笔记1-4-Deep Neural Networks-深度神经网络原理推导与代码实现

2.2.2 线性激活部分linear_activation_forward

采用下式,实现sigmoid和ReLU函数的线性激活部分:
A[l]=g[l](Z[l])(12)
核心代码如下:
Coursera deeplearning.ai 深度学习笔记1-4-Deep Neural Networks-深度神经网络原理推导与代码实现

2.2.3 正向传播forward

利用以上两个函数,实现[Linear -> ReLU](*L - 1) -> [Linear -> Sigmoid]的正向传播过程,核心代码如下:
Coursera deeplearning.ai 深度学习笔记1-4-Deep Neural Networks-深度神经网络原理推导与代码实现

2.3 计算代价函数compute_cost

核心代码如下:
Coursera deeplearning.ai 深度学习笔记1-4-Deep Neural Networks-深度神经网络原理推导与代码实现

2.4 反向传播

2.4.1 线性部分linear_backward

采用下式,实现每个节点的线性部分:
dW[l]=1mdZ[l]A[l1]Tdb[l]=1mnp.sum(dZ[l],axis=1,keepdims=True)dA[l1]=W[l]TdZ[l](13)
核心代码如下:
Coursera deeplearning.ai 深度学习笔记1-4-Deep Neural Networks-深度神经网络原理推导与代码实现

2.4.2 线性激活部分linear_activation_backward

采用下式实现sigmoid和ReLU函数的线性激活部分,
dZ[l]=dA[l]g[l](Z[l])(14)
核心代码如下:
Coursera deeplearning.ai 深度学习笔记1-4-Deep Neural Networks-深度神经网络原理推导与代码实现
Coursera deeplearning.ai 深度学习笔记1-4-Deep Neural Networks-深度神经网络原理推导与代码实现
Coursera deeplearning.ai 深度学习笔记1-4-Deep Neural Networks-深度神经网络原理推导与代码实现

2.4.3 正向传播backward

利用以上两个函数,实现[Linear -> ReLU](*L - 1) -> [Linear -> Sigmoid]的正向传播过程,核心代码如下:
Coursera deeplearning.ai 深度学习笔记1-4-Deep Neural Networks-深度神经网络原理推导与代码实现

2.5 参数更新update_parameters

利用梯度下降法对参数进行更新,核心代码如下:
Coursera deeplearning.ai 深度学习笔记1-4-Deep Neural Networks-深度神经网络原理推导与代码实现

2.6 模型构建dnn_model

将上述几个模块组合起来,得到最优参数Wb,核心代码如下:
Coursera deeplearning.ai 深度学习笔记1-4-Deep Neural Networks-深度神经网络原理推导与代码实现

2.7 样本预测predict

输入样本,利用模型预测样本并计算预测准确率,核心代码如下:
Coursera deeplearning.ai 深度学习笔记1-4-Deep Neural Networks-深度神经网络原理推导与代码实现

2.8 样本测试

核心代码如下:
Coursera deeplearning.ai 深度学习笔记1-4-Deep Neural Networks-深度神经网络原理推导与代码实现
得到如下结果。可以看出,代价函数随着迭代次数的增加不断下降,训练样本准确率98.56%,测试样本的准确率80%。

Coursera deeplearning.ai 深度学习笔记1-4-Deep Neural Networks-深度神经网络原理推导与代码实现

以下代码输出预测错误的图片。
Coursera deeplearning.ai 深度学习笔记1-4-Deep Neural Networks-深度神经网络原理推导与代码实现
结果如下:
Coursera deeplearning.ai 深度学习笔记1-4-Deep Neural Networks-深度神经网络原理推导与代码实现

可以看出,该模型对于具备以下特征的图片的分类较为困难:
(1) 猫咪身体位置较偏;
(2) 猫咪与背景颜色相似;
(3) 品种少见的猫咪;
(4) 相机角度特殊;
(5) 图片亮度较差;
(6) 猫咪在图片中太大或者太小。

代码下载地址:https://gitee.com/tuzhen301/Coursera-deeplearning.ai1-4