【神经网络和深度学习】吴恩达(Andrew Ng)- 第一课第四周课程内容总结

  在【神经网络和深度学习】第四周的课程中,感觉有些内容比较容易忘记但是及其重要,于是由这篇文章来记录相关内容。

一、深层神经网络

1.1 何为深层神经网络

  拥有大于两层隐藏层的神经网络。(根据PPT得出的结论)

1.2 深层神经网络符号规约

拥有四层隐藏层的神经网络
  如图, x 1 , x 2 , x 3 x_1, x_2, x_3 x1,x2,x3为输入的特征值,可以称为第0层或输入层。从输入层向右依次是第1层、第2层、第3层、第4层(也叫输出层)。
  所以这个网络是四层神经网络(通常不包含输入层),即: L ( L a y e r s ) = 4 L (Layers) = 4 L(Layers)=4

  • n [ l ] n^{[l]} n[l] 是第 l l l层的神经元个数。如: n [ 0 ] = 3 n^{[0]} =3 n[0]=3 n [ 1 ] = 5 n^{[1]} =5 n[1]=5 n [ 2 ] = 5 n^{[2]} =5 n[2]=5 n [ 3 ] = 3 n^{[3]} =3 n[3]=3 n [ 4 ] = 1 n^{[4]} =1 n[4]=1
  • w [ l ] w^{[l]} w[l] 是第 l l l层的权重;
  • b [ l ] b^{[l]} b[l] 是第 l l l层的偏置值;
  • z [ l ] z^{[l]} z[l] 是第 l l l层的未被激活函数(激励函数)激活的输出的值;
  • g [ l ] g^{[l]} g[l] 是第 l l l层的激活函数(激励函数);
  • a [ l ] a^{[l]} a[l] 是第 l l l层的激活函数(激励函数)输出的值,即: a [ l ] = g [ l ] ( z [ l ] ) a^{[l]} = g^{[l]}(z^{[l]}) a[l]=g[l](z[l]),注意: a [ 0 ] a^{[0]} a[0] x 1 , x 2 , x 3 x_1,x_2,x_3 x1x2x3

二、深层神经网络中的前向传播

  在前向传播中,首先我们要明确我们需要计算的量有: 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 y a[4]=g[4](z[4])=y^

经过这样的循环计算后,我们可以得到一组输入的 y ^ \hat y y^

通式(通式中大写变量均为向量,便于省去部分循环计算):

  • Z [ l ] = W [ l ] A [ l − 1 ] + B [ l ] Z^{[l]}=W^{[l]}A^{[l-1]}+B^{[l]} Z[l]=W[l]A[l1]+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]
  • Z Z Z是每一层的激活函数的个数(神经元个数), Z [ 1 ] . s h a p e ( ) = ( 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)
  • X X X是输入的特征值个数, X [ 1 ] . s h a p e ( ) = ( 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[l1]),也就是(当前层的神经元维数,前一层的神经元维数)
  • 我们可以看到, W [ l ] X W^{[l]}X W[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)
  • 在反向传播中 d w [ l ] dw^{[l]} dw[l] W [ l ] W^{[l]} W[l]有着相同的规模,为: ( n [ l ] , n [ l − 1 ] ) (n^{[l]}, n^{[l-1]}) (n[l],n[l1]) d b [ 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 神经网络 l l l层的前向传播

  输入: a [ l − 1 ] a^{[l-1]} a[l1]
  输出: a [ l ] , c a c h e ( 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[l1]+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[l1]+b[l]
A [ l ] = g [ l ] ( Z [ l ] ) A^{[l]}=g^{[l]}(Z^{[l]}) A[l]=g[l](Z[l])

4.1.5 神经网络 l l l层的后向传播

  输入: d a [ l ] da^{[l]} da[l]
  输出: d a [ l − 1 ] , d w [ l ] , d b [ l ] da^{[l-1]},dw^{[l]},db^{[l]} da[l1]dw[l]db[l]

  • d z [ l ] = d a [ l ] ∗ g [ l ] ′ ( z [ l ] ) dz^{[l]}=da^{[l]}*g^{[l]}\\'(z^{[l]}) dz[l]=da[l]g[l](z[l])
  • d a [ l ] = w [ l ] T ∗ d z [ l ] da^{[l]}=w^{[l]^T}*dz^{[l]} da[l]=w[l]Tdz[l],将 d a [ l ] da^{[l]} da[l]带入上式得: d z [ l ] = w [ l + 1 ] T ∗ d z [ l + 1 ] ∗ g [ l ] ′ ( z [ l ] ) dz^{[l]}=w^{[l+1]^T}*dz^{[l+1]}*g^{[l]}\\'(z^{[l]}) dz[l]=w[l+1]Tdz[l+1]g[l](z[l])
  • d w [ l ] = d z [ l ] ∗ a [ l − 1 ] dw^{[l]}=dz^{[l]}*a^{[l-1]} dw[l]=dz[l]a[l1]
  • d b [ l ] = d z [ l ] db^{[l]}=dz^{[l]} db[l]=dz[l]
    综上向量化后:
    d Z [ l ] = d A [ l ] ∗ g [ l ] ′ ( Z [ l ] ) dZ^{[l]}=dA^{[l]}*g^{[l]}\\'(Z^{[l]}) dZ[l]=dA[l]g[l](Z[l])
    d W [ l ] = 1 m d Z [ l ] ∗ A [ l − 1 ] T dW^{[l]}=\frac 1mdZ^{[l]}*A^{[l-1]^{T}} dW[l]=m1dZ[l]A[l1]T
    d b [ l ] = 1 m n p . s u m ( d Z [ l ] , a x i s = 1 , k e e p d i m s = t r u e ) db^{[l]}=\frac 1mnp.sum(dZ^{[l]},axis=1,keepdims=true) db[l]=m1np.sum(dZ[l],axis=1,keepdims=true)
    d A [ l − 1 ] = W [ l ] T ∗ d Z [ l ] dA^{[l-1]}=W^{[l]^{T}}*dZ^{[l]} dA[l1]=W[l]TdZ[l]
4.1.3 小结

  神经网络的一个梯度下降循环就是将正向传播和反向传播进行一次,计算出相关参数,然后使用 w = w − d w w = w - dw w=wdw b = b − d b b = b - db b=bdb梯度下降的方法来更新参数。

注:需要将 Z , b [ l ] , w [ l ] Z,b^{[l]},w^{[l]} Zb[l]w[l]缓存下来。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值