在掌握了浅层神经网络算法后,对深度神经网络进行学习。
定义:L表示神经网络总层数,上标[l]代表第l层网络,n[l]代表第l层的节点数,a[l]代表第l层的激活,W[l]和b[l]为第l层的参数。输入层为第0层a[0] = x,输出层为第L层a[L]。
类似浅层神经网络的推导可以得到,对于第l层,针对单个样本,正向传播可以表示为:
z[l]=W[l]a[l−1]+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[l−1]+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[l−1]+b[l]A[l]=g[l](Z[l])(4)
正向传播,实际就是输入A[l-1]得到A[l]的过程,同时需要将Z[l]保存以便于反向传播的计算。
各矩阵维度如下表:
|
|
|
|
|
|
---|---|---|---|---|---|
|
|
|
|
|
|
类似浅层神经网络的推导可以得到,对于第l层,针对单个样本,反向传播可以表示为:
dz[l]=da[l]∗g[l]′(z[l])dW[l]=dz[l]a[l−1]Tdb[l]=dz[l]da[l−1]=W[l]Tdz[l](5)
式中,“*”表示元素点乘。拓展到m个样本得到:
dZ[l]=dA[l]∗g[l]′(Z[l])dW[l]=1mdZ[l]A[l−1]Tdb[l]=1mnp.sum(dZ[l],axis=1,keepdims=True)dA[l−1]=W[l]TdZ[l](6)
通过上式便可求出梯度dW和db。
反向传播,实际就是输入dA[l]得到dA[l-1]以及梯度dW[l]和db[l]的过程,同时需要将dZ[l]保存以方便计算。
反向传播的初始化如下。由于损失函数表示为:
L(a,y)=−[yloga+(1−y)log(1−a)](7)
则可以求出:
da[L]=dda[L]{−[yloga[L]+(1−y)log(1−a[L])]}=−ya[L]+1−y1−a[L]dA[L]=⎡⎣⎢⎢|−y(1)a[L](1)+1−y(1)1−a[L](1)||−y(2)a[L](2)+1−y(2)1−a[L](2)||⋯||−y(m)a[L](m)+1−y(m)1−a[L](m)|⎤⎦⎥⎥(8)
在反向传播过程中,同样可以求出代价函数如下:
J(w,b)=1m∑i=1mL(a(i),y(i))=−1m∑i=1m[y(i)loga(i)+(1−y(i))log(1−a(i))](9)
通过反向传播求出了梯度dW和db后,即可用梯度下降法对参数进行更新:
W[l]=W[l]−αdW[l]b[l]=b[l]−αdb[l](10)
深度神经网络中主要有以下几个超参数需要调整:
(1) 学习因子α;
(2) 迭代次数iterations;
(3) 隐含层数量L;
(4) 隐含层单元数量n[1], n[2], … , n[L];
(5) 激活函数的选择。
其他超参数:momentum、mini batch size、regularization parameters等。
案例:采用L层深度神经网络,实现猫咪图片的二分类。
采用下式,实现每个节点的线性部分:
Z[l]=W[l]A[l−1]+b[l](11)
核心代码如下:
采用下式,实现sigmoid和ReLU函数的线性激活部分:
A[l]=g[l](Z[l])(12)
核心代码如下:
利用以上两个函数,实现[Linear -> ReLU](*L - 1) -> [Linear -> Sigmoid]的正向传播过程,核心代码如下:
采用下式,实现每个节点的线性部分:
dW[l]=1mdZ[l]A[l−1]Tdb[l]=1mnp.sum(dZ[l],axis=1,keepdims=True)dA[l−1]=W[l]TdZ[l](13)
核心代码如下:
采用下式实现sigmoid和ReLU函数的线性激活部分,
dZ[l]=dA[l]∗g[l]′(Z[l])(14)
核心代码如下:
利用以上两个函数,实现[Linear -> ReLU](*L - 1) -> [Linear -> Sigmoid]的正向传播过程,核心代码如下:
核心代码如下:
得到如下结果。可以看出,代价函数随着迭代次数的增加不断下降,训练样本准确率98.56%,测试样本的准确率80%。
代码下载地址:https://gitee.com/tuzhen301/Coursera-deeplearning.ai1-4