深层神经网络的符号与浅层的不同,记录如下:
输入为 \(a^{[l-1]}\) 输出为 \(a^{[l]}\), cache(\(z^{[l]}\))
矢量化表示: \[Z^{[l]}=W^{[l]}·A^{[l-1]}+b^{[l]}\] \[A^{[l]}=g^{[l]}(Z^{[l]})\]
输入为 \(da^{[l]}\) 输出为 \(da^{[l-1]},dW^{[l]},db^{[l]}\)
计算细节: \[dz^{[l]}=da^{[l]}*g^{[l]'}(z^{[l]})\] \[dw^{[l]}=dz^{[l]}*a^{[l-1]}\] \[db^{[l]}=dz^{[l]}\] \[da^{[l-1]}=w^{[l]^T}·dz^{[l]}\] \[dz^{[l]}=w^{[l+1]^T}dz^{[l+1]}*g^{[l]'}(z^{[l]})\]
矢量化表示: \[dZ^{[l]}=dA^{[l]}*g^{[l]'}(z^{[l]})\] \[dw^{[l]}=\frac{1}{m}dz^{[l]}·A^{[l-1]^T}\] \[db^{[l]}=\frac{1}{m}np.sum(dz^{[l]},axis=1,keepdim=True)\] \[dA^{[l-1]}=w^{[l]^T}·dz^{[l]}\]
前向传播示例
反向传播
更清晰的表示:
这节的内容主要是告诉我们如何知道自己在设计神经网络模型的时候各个参数的维度是否正确的方法。其实我自己在写代码的时候都得这样做才能有信心继续往下敲键盘,2333。
还是以这个神经网络为例,各层神经网络节点数为\(n^{[0]}=3,n^{[1]}=n^{[2]}=5,n^{[3]}=3,n^{[4]}=1\)。
先确定\(W^{[1]}\)的维度: 已知\(Z^{[1]}=W^{[1]}·X+b^{[1]}\),很容易知道\(Z^{[1]}∈R^{5×1},X∈R^{3×1}\),\(b^{[1]}\)其实不用计算就知道其维度与\(Z\)是相同的,即\(b^{[1]}∈R^{5×1}\)。根据矩阵内积计算公式可以确定\(W^{[1]}∈R^{5×3}\)。 其他层同理,不再赘述。
为什么要使用深层表示?
下面就从直观上来理解深层神经网络。
如上图所示是一个人脸识别的过程,具体的实现步骤如下:
上图表示单个神经元的前向和反向传播算法过程。
推广到整个深层神经网络就如下图所示:
祭上神图:
主要就是说神经网络和人的大脑运行机理貌似很相似,blabla。。。