2018年9月版本
Week 4
深度L层神经网络 Deep L-layer neural network
- 具有多个隐藏层的神经网络模型(甚至可以把隐藏层层数作为超参数)
- L L L,网络的层数
- n [ l ] n^{[l]} n[l],l层的单元个数
- a [ l ] a^{[l]} a[l],l层的激活值
深度网络的正向传播 Forward Propagation
- 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])
- 前向传播时,上述公式会因为隐藏层而被重复调用,这里可以使用一次for循环
- W [ l ] : ( n [ l ] , n [ l − 1 ] ) W^{[l]}:(n^{[l]},n^{[l-1]}) W[l]:(n[l],n[l−1])
- b [ l ] : ( n [ l ] , 1 ) b^{[l]}:(n^{[l]},1) b[l]:(n[l],1)
- dW和db应该分别与W和b的维数相同
深度的意义 Deep
- 拥有众多隐藏层的神经网络能够让早期的神经层学习低级别的简单特征,后面更深的神经层可以汇聚之前的简单信息,以便检测更加复杂的事物
- 电路理论:有一些函数,可以使用一个比较小的深度网络计算,而使用浅层网络则有可能需要指数级的隐藏层单元
l层的正向传播 FP for Layer l
- 输入 a [ l − 1 ] a^{[l-1]} a[l−1]
- 输出 a [ l ] a^{[l]} a[l],缓存 ( z [ l ] ) (z^[l]) (z[l])(理论上应该还有W和b)
- 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层的反向传播 BP for Layer 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[l−1],dW[l],db[l]
- d Z [ l ] = d A [ l ] ∗ g [ l ] ′ ( Z [ l ] ) dZ^{[l]}=dA^{[l]}*g^{[l]\prime}(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{1}{m}dZ^{[l]}A^{[l-1]T} dW[l]=m1dZ[l]A[l−1]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{1}{m}np.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[l−1]=W[l]TdZ[l]
- 注意,反向传播初始化(交叉熵代价函数求导) d a [ L ] = − y a + 1 − y 1 − a da^{[L]}=-\frac{y}{a}+\frac{1-y}{1-a} da[L]=−ay+1−a1−y
参数和超参数 Parameters and Hyperparameters
- 神经网络模型中,参数就是W和b
- 神经网络模型中,超参数是需要额外设置的,用于调整模型能力(控制W和b)的参数
- 学习率
- 迭代次数
- 隐藏层层数
- 隐藏神经元个数
- 激活函数的选择
- 超参数一定程度上决定了W和b的最终结果