在【神经网络和深度学习】第四周的课程中,感觉有些内容比较容易忘记但是及其重要,于是由这篇文章来记录相关内容。
一、深层神经网络
1.1 何为深层神经网络
拥有大于两层隐藏层的神经网络。(根据PPT得出的结论)
1.2 深层神经网络符号规约
如图,x1,x2,x3x_1, x_2, x_3x1,x2,x3为输入的特征值,可以称为第0层或输入层。从输入层向右依次是第1层、第2层、第3层、第4层(也叫输出层)。
所以这个网络是四层神经网络(通常不包含输入层),即:L(Layers)=4L (Layers) = 4L(Layers)=4。
- n[l]n^{[l]}n[l] 是第lll层的神经元个数。如:n[0]=3n^{[0]} =3n[0]=3,n[1]=5n^{[1]} =5n[1]=5,n[2]=5n^{[2]} =5n[2]=5,n[3]=3n^{[3]} =3n[3]=3,n[4]=1n^{[4]} =1n[4]=1;
- w[l]w^{[l]}w[l] 是第lll层的权重;
- b[l]b^{[l]}b[l] 是第lll层的偏置值;
- z[l]z^{[l]}z[l] 是第lll层的未被激活函数(激励函数)激活的输出的值;
- g[l]g^{[l]}g[l] 是第lll层的激活函数(激励函数);
- a[l]a^{[l]}a[l] 是第lll层的激活函数(激励函数)输出的值,即:a[l]=g[l](z[l])a^{[l]} = g^{[l]}(z^{[l]})a[l]=g[l](z[l]),注意:a[0]a^{[0]}a[0]为x1,x2,x3x_1,x_2,x_3x1,x2,x3。
二、深层神经网络中的前向传播
在前向传播中,首先我们要明确我们需要计算的量有:z[l],a[l]z^{[l]},a^{[l]}z[l],a[l]。
2.1 前向传播计算方法
- z[1]=w[1]a[0]+b[1]z^{[1]}=w^{[1]}a^{[0]}+b^{[1]}z[1]=w[1]a[0]+b[1]
- a[1]=g[1](z[1])a^{[1]}=g^{[1]}(z^{[1]})a[1]=g[1](z[1])
- z[2]=w[2]a[1]+b[2]z^{[2]}=w^{[2]}a^{[1]}+b^{[2]}z[2]=w[2]a[1]+b[2]
- a[2]=g[2](z[2])a^{[2]}=g^{[2]}(z^{[2]})a[2]=g[2](z[2])
- ……
- a[4]=g[4](z[4])=y^a^{[4]}=g^{[4]}(z^{[4]})=\hat ya[4]=g[4](z[4])=y^
经过这样的循环计算后,我们可以得到一组输入的y^\hat yy^。
通式(通式中大写变量均为向量,便于省去部分循环计算):
- Z[l]=W[l]A[l−1]+B[l]Z^{[l]}=W^{[l]}A^{[l-1]}+B^{[l]}Z[l]=W[l]A[l−1]+B[l]
- A[l]=g[l](Z[l])A^{[l]}=g^{[l]}(Z^{[l]})A[l]=g[l](Z[l])
- Y^=A[4]\hat Y=A^{[4]}Y^=A[4]
三、核对矩阵维数(可视为debug方法)
何对矩阵维数时关键的公式是Z[l]=W[l]X+B[l]Z^{[l]}=W^{[l]}X+B^{[l]}Z[l]=W[l]X+B[l]。如:
- Z[1]=W[1]X+B[1]Z^{[1]}=W^{[1]}X+B^{[1]}Z[1]=W[1]X+B[1]
- ZZZ是每一层的激活函数的个数(神经元个数),Z[1].shape()=(3,1)Z^{[1]}.shape() =(3,1)Z[1].shape()=(3,1),也就是(n[1],1)=(3,1)(n^{[1]},1)=(3,1)(n[1],1)=(3,1)
- XXX是输入的特征值个数,X[1].shape()=(2,1)X^{[1]}.shape()=(2,1)X[1].shape()=(2,1),也就是(n[0],1)=(2,1)(n^{[0]},1)=(2,1)(n[0],1)=(2,1)
- 然后我们就可以根据矩阵乘法规则推算出W的规模,W[1]=(n[1],n[0])W^{[1]}=(n^{[1]}, n^{[0]})W[1]=(n[1],n[0])
- 所以我们可以得到:W[l]=(n[l],n[l−1])W^{[l]}=(n^{[l]}, n^{[l-1]})W[l]=(n[l],n[l−1]),也就是(当前层的神经元维数,前一层的神经元维数)
- 我们可以看到,W[l]XW^{[l]}XW[l]X的维数为(n[l],1)(n^{[l]},1)(n[l],1),因此根据矩阵加法规则,推算出B[l]B^{[l]}B[l]的规模为(n[l],1)(n^{[l]},1)(n[l],1)
- 在反向传播中dw[l]dw^{[l]}dw[l]和W[l]W^{[l]}W[l]有着相同的规模,为:(n[l],n[l−1])(n^{[l]}, n^{[l-1]})(n[l],n[l−1]);db[l]db^{[l]}db[l]与B[l]B^{[l]}B[l]有着相同的规模,为:(n[l],1)(n^{[l]},1)(n[l],1)。
可以得到前向传播和后向传播中传播公式为:
四、深层神经网络
4.1 每层神经网络输入及输出
4.1.1 正向传播
4.1.2 反向传播
4.1.4 神经网络lll层的前向传播
输入:a[l−1]a^{[l-1]}a[l−1]
输出:a[l],cache(z[l])a^{[l]},cache(z^{[l]})a[l],cache(z[l])
注:由于Z[l]=W[l]∗a[l−1]+b[l]Z^{[l]}=W^{[l]}*a^{[l-1]}+b^{[l]}Z[l]=W[l]∗a[l−1]+b[l],因此输出还有w[l]w^{[l]}w[l]和b[l]b^{[l]}b[l]。
a[l]=g[l](Z[l])a^{[l]} = g^{[l]}(Z^{[l]})a[l]=g[l](Z[l])
综上向量化后:Z[l]=W[l]∗A[l−1]+b[l]Z^{[l]}=W^{[l]}*A^{[l-1]}+b^{[l]}Z[l]=W[l]∗A[l−1]+b[l]
A[l]=g[l](Z[l])A^{[l]}=g^{[l]}(Z^{[l]})A[l]=g[l](Z[l])
4.1.5 神经网络lll层的后向传播
输入:da[l]da^{[l]}da[l]
输出:da[l−1],dw[l],db[l]da^{[l-1]},dw^{[l]},db^{[l]}da[l−1],dw[l],db[l]
- dz[l]=da[l]∗g[l]′(z[l])dz^{[l]}=da^{[l]}*g^{[l]}\\'(z^{[l]})dz[l]=da[l]∗g[l]′(z[l])
- da[l]=w[l]T∗dz[l]da^{[l]}=w^{[l]^T}*dz^{[l]}da[l]=w[l]T∗dz[l],将da[l]da^{[l]}da[l]带入上式得:dz[l]=w[l+1]T∗dz[l+1]∗g[l]′(z[l])dz^{[l]}=w^{[l+1]^T}*dz^{[l+1]}*g^{[l]}\\'(z^{[l]})dz[l]=w[l+1]T∗dz[l+1]∗g[l]′(z[l])
- dw[l]=dz[l]∗a[l−1]dw^{[l]}=dz^{[l]}*a^{[l-1]}dw[l]=dz[l]∗a[l−1]
- db[l]=dz[l]db^{[l]}=dz^{[l]}db[l]=dz[l]
综上向量化后:
dZ[l]=dA[l]∗g[l]′(Z[l])dZ^{[l]}=dA^{[l]}*g^{[l]}\\'(Z^{[l]})dZ[l]=dA[l]∗g[l]′(Z[l])
dW[l]=1mdZ[l]∗A[l−1]TdW^{[l]}=\frac 1mdZ^{[l]}*A^{[l-1]^{T}}dW[l]=m1dZ[l]∗A[l−1]T
db[l]=1mnp.sum(dZ[l],axis=1,keepdims=true)db^{[l]}=\frac 1mnp.sum(dZ^{[l]},axis=1,keepdims=true)db[l]=m1np.sum(dZ[l],axis=1,keepdims=true)
dA[l−1]=W[l]T∗dZ[l]dA^{[l-1]}=W^{[l]^{T}}*dZ^{[l]}dA[l−1]=W[l]T∗dZ[l]
4.1.3 小结
神经网络的一个梯度下降循环就是将正向传播和反向传播进行一次,计算出相关参数,然后使用w=w−dww = w - dww=w−dw、b=b−dbb = b - dbb=b−db梯度下降的方法来更新参数。
注:需要将Z,b[l],w[l]Z,b^{[l]},w^{[l]}Z,b[l],w[l]缓存下来。