本笔记系列参照吴恩达深度学习课程的视频和课件,并在学习和做练习过程中从CSDN博主何宽分享的文章中得到了帮助,再此表示感谢。
本周主要学习的内容有:
深层神经网络、深层网络中的前向传播、核对矩阵的维数、为什么使用深层表示、搭建深层神经网络块、前向和反向传播、参数 VS 超参数、这和大脑有什么关系?
一、本周学习主要疑难点
- L层的含义
对于L层神经网络,每层的激活函数输出值我们记为 a [ l ] a^{[l]} a[l],向量化表示为 A [ l ] A^{[l]} A[l],默认情况下, A [ 0 ] A^{[0]} A[0]表示为模型的输入X,而 A [ L ] A^{[L]} A[L]则表示为模型的训练输出 Y ^ \hat Y Y^
图1直观表示了,对于一个4(L=4)层神经网络,各层的层号表示方法
图 1 图1 图1 - 矩阵维数
在编写神经网络的时候,要注意每层参数矩阵的维度,是否正确,不然会导致矩阵运算错误。
检查矩阵维数时可以参照以下四个公式:
W [ l ] : ( n [ l ] , n [ l − 1 ] ) (1) W^{[l]}:(n^{[l]},n^{[l-1]}) \tag 1 W[l]:(n[l],n[l−1])(1)
b [ l ] : ( n [ l ] , 1 ) (2) b^{[l]}:(n^{[l]},1) \tag 2 b[l]:(n[l],1)(2)
d W [ l ] : ( n [ l ] , n [ l − 1 ] ) (3) dW^{[l]}:(n^{[l]},n^{[l-1]})\tag 3 dW[l]:(n[l],n[l−1])(3)
d b [ l ] : ( n [ l ] , 1 ) (4) db^{[l]}:(n^{[l]},1) \tag 4 db[l]:(n[l],1)(4)
图2表示了对一个5(L=5)层神经网络,核对矩阵维数的具体过程
图 2 图2 图2
而对于用来识别图片X=(12228,209)的L层神经网络,其各层参数及激活函数值的维数如下表所示:
Shape of W | Shape of b | Activation | Shape of Activation | |
---|---|---|---|---|
Layer 1 | ( n [ 1 ] , 12288 ) (n^{[1]},12288) (n[1],12288) | ( n [ 1 ] , 1 ) (n^{[1]},1) (n[1],1) | Z [ 1 ] = W [ 1 ] X + b [ 1 ] {Z^{[1]} }= W^{[1]} X + b^{[1]} Z[1]=W[1]X+b[1] | ( n [ 1 ] , 209 ) (n^{[1]},209) (n[1],209) |
Layer 2 | ( n [ 2 ] , n [ 1 ] ) (n^{[2]}, n^{[1]}) (n[2],n[1]) | ( n [ 2 ] , 1 ) (n^{[2]},1) (n[2],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] | ( n [ 2 ] , 209 ) (n^{[2]}, 209) (n[2],209) |
⋮ \vdots ⋮ | ⋮ \vdots ⋮ | ⋮ \vdots ⋮ | ⋮ \vdots ⋮ | ⋮ \vdots ⋮ |
Layer L-1 | ( n [ L − 1 ] , n [ L − 2 ] ) (n^{[L-1]}, n^{[L-2]}) (n[L−1],n[L−2]) | ( n [ L − 1 ] , 1 ) (n^{[L-1]}, 1) (n[L−1],1) | Z [ L − 1 ] = W [ L − 1 ] A [ L − 2 ] + b [ L − 1 ] Z^{[L-1]} = W^{[L-1]} A^{[L-2]} + b^{[L-1]} Z[L−1]=W[L−1]A[L−2]+b[L−1] | ( n [ L − 1 ] , 209 ) (n^{[L-1]}, 209) (n[L−1],209) |
Layer L | ( n [ L ] , n [ L − 1 ] ) (n^{[L]}, n^{[L-1]}) (n[L],n[L−1]) | ( n [ L ] , 1 ) (n^{[L]}, 1) (n[L],1) | 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] | ( n [ L ] , 209 ) (n^{[L]}, 209) (n[L],209) |
- 如何理解深层神经网络块
神经网络块其实类似于函数封装的概念,对于第l层神经网络,我们可以把它看成是由参数 W [ l ] W^{[l]} W[l]、 b [ l ] b^{[l]} b[l]封装而成的网络块,在进行前向传播时,对l层神经网络块输入 a [ l − 1 ] a^{[l-1]} a[l−1],得到 a [ l ] a^{[l]} a[l] 和 cache Z [ l ] Z^{[l]} Z[l],然后在进行反向传播时,l层神经网络块是由参数 W [ l ] W^{[l]} W[l]、 b [ l ] b^{[l]} b[l]、 d Z [ l ] dZ^{[l]} dZ[l]封装而成,对其输入 d a [ l ] da^{[l]} da[l]、cache Z [ l ] Z^{[l]} Z[l],得到 d a [ l − 1 ] da^{[l-1]} da[l−1]、 d W [ l ] dW^{[l]} dW[l]、 d b [ l ] db^{[l]} db[l],具体流程如图3所示
图
3
图3
图3
单个样本和m个样本的l层前向传播表达如图4所示
图
4
图4
图4
单个样本和m个样本的l层反向传播表达如图5所示
图
5
图5
图5
因此,对于L层神经网络的前向传播和反向传播,我们用网络块来表示的话,就可以如图6这样来理解了
图
6
图6
图6
深度学习和神经网络总结:这一阶段四周的学习内容到此就结束了,从视频里可以感受到吴恩达老师讲课真的是非常简洁高效,而深度学习的基础其实就是前向传播和反向传播,因此这阶段的重点我觉得就是要熟练掌握前向传播和反向传播的推导公式,从单个神经元网络到浅层神经网络再到深层神经网络,循序渐进,而这些公式的向量化表达其实就是基本的矩阵相乘规则,所以熟练掌握前向传播和反向传播公式,对我们学习这门课程至关重要!
另外,吴恩达老师的课程练习是基于TensorFlow框架,里面的关于矩阵维数是用张量形状(shape of Tensor)的概念可以参考我翻译的官方教程Tensorflow Tensor