前已经提到过:神经网络的层数是指不包括输入层的其他所有层数
为了使反向传播更加明了,把各个变量的表达式整理出有: 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]) L ( Y , A ) = − [ 1 m ∑ i = 1 m Y l o g [ A ] + ( 1 − Y ) l o g ( 1 − A ) ] L(Y,A)=-[\frac{1}{m}\sum_{i=1}^{m}Ylog[A]+(1-Y)log(1-A)] L(Y,A)=−[m1∑i=1mYlog[A]+(1−Y)log(1−A)]
所以有:
前面有:d(arr_name) = d L d ( a r r n a m e ) \frac{dL}{d(arr_name)} d(arrname)dL
为 了 书 写 方 便 , ‘ 所 有 ‘ 变 量 默 认 ‘ 带 上 标 ‘ v a r [ l ] , ‘ 非 l 层 ‘ 给 出 为了书写方便,`所有`变量默认`带上标`var^{[l]},`非l层`给出 为了书写方便,‘所有‘变量默认‘带上标‘var[l],‘非l层‘给出
d L d A = − Y A + 1 − Y 1 − A \frac{dL}{dA}=-\frac{Y}{A}+\frac{1-Y}{1-A} dAdL=−AY+1−A1−Y
d L d Z = d L d A d A d Z = d L d A g ′ ( Z ) \frac{dL}{dZ}=\frac{dL}{dA}\frac{dA}{dZ}=\frac{dL}{dA}g\prime(Z) dZdL=dAdLdZdA=dAdLg′(Z)
d L d b = 1 m n p . s u m ( d L d Z , a x i s = 1 , k e e p d i m s = T r u e ) \frac{dL}{db}=\frac{1}{m}np.sum(\frac{dL}{dZ},axis=1,keepdims=True) dbdL=m1np.sum(dZdL,axis=1,keepdims=True)
d L d W = d L d z d Z d W = d L d z A [ l − 1 ] \frac{dL}{dW}=\frac{dL}{dz}\frac{dZ}{dW}=\frac{dL}{dz}A^{[l-1]} dWdL=dzdLdWdZ=dzdLA[l−1]
d L d A [ l − 1 ] = d L d Z d Z d A [ l − 1 ] = d L d z W [ T ] \frac{dL}{dA^{[l-1]}}=\frac{dL}{dZ}\frac{dZ}{dA^{[l-1]}}=\frac{dL}{dz}{W^{[T]}} dA[l−1]dL=dZdLdA[l−1]dZ=dzdLW[T]
以上是一个直接向量化过给出的导数公式
前向传播便是一个迭代逐层计算 Z = W A [ l − 1 ] + b , A = g ( Z ) Z= WA^{[l-1]}+b,A=g(Z) Z=WA[l−1]+b,A=g(Z)的过程
矩阵的维数: W的维度是(下一层的维数,上一层的维数) b的维度是(下一层的维数,1) Z,A的维度是(本层的维数,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] A [ l ] = g [ l ] ( Z [ l ] ) A^{[l]}=g^{[l]}(Z^{[l]}) A[l]=g[l](Z[l]) L ( Y , A ) = − [ 1 m ∑ i = 1 m Y l o g [ A ] + ( 1 − Y ) l o g ( 1 − A ) ] L(Y,A)=-[\frac{1}{m}\sum_{i=1}^{m}Ylog[A]+(1-Y)log(1-A)] L(Y,A)=−[m1∑i=1mYlog[A]+(1−Y)log(1−A)]
d L d A = − Y A + 1 − Y 1 − A \frac{dL}{dA}=-\frac{Y}{A}+\frac{1-Y}{1-A} dAdL=−AY+1−A1−Y
d L d Z = d L d A d A d Z = d L d A g ′ ( Z ) \frac{dL}{dZ}=\frac{dL}{dA}\frac{dA}{dZ}=\frac{dL}{dA}g\prime(Z) dZdL=dAdLdZdA=dAdLg′(Z)
d L d b = 1 m n p . s u m ( d L d Z , a x i s = 1 , k e e p d i m s = T r u e ) \frac{dL}{db}=\frac{1}{m}np.sum(\frac{dL}{dZ},axis=1,keepdims=True) dbdL=m1np.sum(dZdL,axis=1,keepdims=True)
d L d W = d L d z d Z d W = d L d z A [ l − 1 ] \frac{dL}{dW}=\frac{dL}{dz}\frac{dZ}{dW}=\frac{dL}{dz}A^{[l-1]} dWdL=dzdLdWdZ=dzdLA[l−1]
d L d A [ l − 1 ] = d L d Z d Z d A [ l − 1 ] = d L d z W [ T ] \frac{dL}{dA^{[l-1]}}=\frac{dL}{dZ}\frac{dZ}{dA^{[l-1]}}=\frac{dL}{dz}{W^{[T]}} dA[l−1]dL=dZdLdA[l−1]dZ=dzdLW[T]
Z与上一层有关系,dW与上一层有关系,上一层的 d A [ l − 1 ] dA^{[l-1]} dA[l−1]与下一层的 d Z [ l ] dZ^{[l]} dZ[l]有关系,其他的计算都是基于本层的数据的,课程中缓存的是 Z [ l ] Z^{[l]} Z[l]的值
看的PDF,我总觉得这块他说的不全,让人思路有点乱,计算反向梯度按如下来理解更好理解一些:
首先计算出 d A [ l ] dA^{[l]} dA[l]的值而后就可以计算出 d Z [ l ] dZ^{[l]} dZ[l]的值而后便可以计算 d A [ l − 1 ] dA^{[l-1]} dA[l−1]和 d b [ l ] db^{[l]} db[l]的值而后便可以计算dW^{[l]}的值最后便可以用梯度下降函数迭代进行学习超参数:学习率,迭代次数,隐藏层数目,隐藏单元数目,激活函数的选择
这些最终控制了W和b的值
超参在长期学习的过程当中是会不断发生变化的