Week4:深层神经网络(Deep Neural Networks)
4.1 深层神经网络(Deep L-layer neural network)
- 定义
深层神经网络其实就是包含更多的隐藏层神经网络。
上图分别列举了逻辑回归、1个隐藏层的神经网络、2个隐藏层的神经网络和5个隐藏层的神经网络它们的模型结构。- 命名规则:一般只参考隐藏层个数和输出层。如果是L-layer NN,则包含了L-1个隐藏层,最后的L层是输出层。
上图中的逻辑回归又叫1 layer NN,1个隐藏层的神经网络叫做2 layer NN,2个隐藏层的神经网络叫做3 layer NN,以此类推。
- 为什么要深度神经网络:但是在过去的几年中,DLI(深度学习学院 deep learning institute)意识到有一些函数,只有非常深的神经网络能学会,而浅的模型效果不好。
对于任何给定的问题很难提前预测到底需要多深的神经网络,所以:
1.先去尝试逻辑回归,尝试一层然后两层隐含层;
2. 然后把隐含层的数量看做是另一个可以自由选择大小的超参数;
3. 最后再保留交叉验证数据上评估,或者用你的开发集来评估。
- 命名规则:一般只参考隐藏层个数和输出层。如果是L-layer NN,则包含了L-1个隐藏层,最后的L层是输出层。
- 深度学习的符号定义
以四层神经网络为例:- 层数:用 L L L表示,上图 L = 4 L=4 L=4,输入层是第 0 0 0层,输出层是第 L L L层。
-
l
l
l层的隐藏单元:用
n
[
l
]
,
l
=
0
,
1
,
⋯
,
L
n^{[l]},l=0,1,\cdots,L
n[l],l=0,1,⋯,L表示第
l
l
l层包含的单元个数。
- 这个模型中, n [ 0 ] = n x = 3 n^{[0]}=n_x=3 n[0]=nx=3,表示三个输入特征 x 1 , x 2 , x 3 x_1,x_2,x_3 x1,x2,x3。
- n [ 1 ] = 5 , n [ 2 ] = 5 , n [ 3 ] = 3 , n [ 4 ] = n [ L ] = 1 n^{[1]}=5,n^{[2]}=5,n^{[3]}=3,n^{[4]}=n^{[L]}=1 n[1]=5,n[2]=5,n[3]=3,n[4]=n[L]=1。
- 第 l l l层的激活函数的结果:用 a [ l ] a^{[l]} a[l]表示, a [ l ] = g [ l ] ( z [ l ] ) a^{[l]}=g^{[l]}(z^{[l]}) a[l]=g[l](z[l])。
- 第 l l l层的权重:用 W [ l ] W^{[l]} W[l]表示,用于计算 z [ l ] z^{[l]} z[l]。
- 输入 x x x记为 a [ 0 ] a^{[0]} a[0],把输出层 y ^ \hat y y^记为 a [ L ] a^{[L]} a[L]。
注意, a [ l ] a^{[l]} a[l]和 W [ l ] W^{[l]} W[l]中的上标l都是从 1 1 1开始的, l = 1 , ⋯ , L l=1,\cdots,L l=1,⋯,L。
4.2 深层网络中的前向传播(Forward propagation in a Deep Network)
- 单个样本
以上面4层神经网络为例,对于单个样本,推导深层神经网络的正向传播过程:- 第1层(
l
=
1
l=1
l=1):
z [ 1 ] = W [ 1 ] x + b [ 1 ] = W [ 1 ] a [ 0 ] + b [ 1 ] a [ 1 ] = g [ 1 ] ( z [ 1 ] ) \begin{array}{l}z^{[1]}=W^{[1]}x+b^{[1]}=W^{[1]}a^{[0]}+b^{[1]}\\ a^{[1]}=g^{[1]}(z^{[1]})\end{array} z[1]=W[1]x+b[1]=W[1]a[0]+b[1]a[1]=g[1](z[1]) - 第2层(
l
=
2
l=2
l=2):
z [ 2 ] = W [ 2 ] a [ 1 ] + b [ 2 ] a [ 2 ] = g [ 2 ] ( z [ 2 ] ) \begin{array}{l}z^{[2]}=W^{[2]}a^{[1]}+b^{[2]}\\ a^{[2]}=g^{[2]}(z^{[2]})\end{array} z[2]=W[2]a[1]+b[2]a[2]=g[2](z[2]) - 第3层(
l
=
3
l=3
l=3):
z [ 3 ] = W [ 3 ] a [ 2 ] + b [ 3 ] a [ 3 ] = g [ 3 ] ( z [ 3 ] ) \begin{array}{l}z^{[3]}=W^{[3]}a^{[2]}+b^{[3]}\\ a^{[3]}=g^{[3]}(z^{[3]})\end{array} z[3]=W[3]a[2]+b[3]a[3]=g[3](z[3]) - 第4层(
l
=
4
l=4
l=4):
z [ 4 ] = W [ 4 ] a [ 3 ] + b [ 4 ] a [ 4 ] = g [ 4 ] ( z [ 4 ] ) \begin{array}{l}z^{[4]}=W^{[4]}a^{[3]}+b^{[4]}\\ a^{[4]}=g^{[4]}(z^{[4]})\end{array} z[4]=W[4]a[3]+b[4]a[4]=g[4](z[4])
- 第1层(
l
=
1
l=1
l=1):
-
m
m
m个训练样本
对于 m m m个训练样本,其向量化矩阵形式为:- 第1层(
l
=
1
l=1
l=1):
Z [ 1 ] = W [ 1 ] X + b [ 1 ] = W [ 1 ] A [ 0 ] + b [ 1 ] A [ 1 ] = g [ 1 ] ( Z [ 1 ] ) \begin{array}{l}Z^{[1]}=W^{[1]}X+b^{[1]}=W^{[1]}A^{[0]}+b^{[1]}\\ A^{[1]}=g^{[1]}(Z^{[1]})\end{array} Z[1]=W[1]X+b[1]=W[1]A[0]+b[1]A[1]=g[1](Z[1]) - 第2层(
l
=
2
l=2
l=2):
Z [ 2 ] = W [ 2 ] A [ 1 ] + b [ 2 ] A [ 2 ] = g [ 2 ] ( Z [ 2 ] ) \begin{array}{l}Z^{[2]}=W^{[2]}A^{[1]}+b^{[2]}\\ A^{[2]}=g^{[2]}(Z^{[2]})\end{array} Z[2]=W[2]A[1]+b[2]A[2]=g[2](Z[2]) - 第3层(
l
=
3
l=3
l=3):
Z [ 3 ] = W [ 3 ] A [ 2 ] + b [ 3 ] A [ 3 ] = g [ 3 ] ( Z [ 3 ] ) \begin{array}{l}Z^{[3]}=W^{[3]}A^{[2]}+b^{[3]}\\ A^{[3]}=g^{[3]}(Z^{[3]})\end{array} Z[3]=W[3]A[2]+b[3]A[3]=g[3](Z[3]) - 第4层(
l
=
4
l=4
l=4):
Z [ 4 ] = W [ 4 ] A [ 3 ] + b [ 4 ] A [ 4 ] = g [ 4 ] ( Z [ 4 ] ) \begin{array}{l}Z^{[4]}=W^{[4]}A^{[3]}+b^{[4]}\\ A^{[4]}=g^{[4]}(Z^{[4]})\end{array} Z[4]=W[4]A[3]+b[4]A[4]=g[4](Z[4])
- 第1层(
l
=
1
l=1
l=1):
- 小总结
对于第 l l l层,其正向传播过程的 Z [ l ] Z^{[l]} Z[l]和 A [ l ] A^{[l]} A[l]可以表示为:
Z [ l ] = W [ l ] A [ l − 1 ] + b [ l ] A [ l ] = g [ l ] ( Z [ l ] ) \begin{array}{l}Z^{[l]}=W^{[l]}A^{[l-1]}+b^{[l]}\\ A^{[l]}=g^{[l]}(Z^{[l]})\end{array} Z[l]=W[l]A[l−1]+b[l]A[l]=g[l](Z[l])
其中 l = 1 , ⋯ , L l=1,\cdots,L l=1,⋯,L。
4.3 核对矩阵的维数(Getting your matrix dimensions right)
当实现深度神经网络的时候,检查代码是否有错的方法:拿出一张纸核对一遍算法中 矩 阵 的 维 数 \color{red}矩阵的维数 矩阵的维数。
- 单个训练样本
对于单个训练样本,输入 x x x的维度是 ( n [ 0 ] , 1 ) (n^{[0]},1) (n[0],1)神经网络的参数:- 正向传播
-
W
[
l
]
W^{[l]}
W[l]和
b
[
l
]
b^{[l]}
b[l]的维度分别是:
W [ l ] : ( n [ l ] , n [ l − 1 ] ) b [ l ] : ( n [ l ] , 1 ) \begin{array}{l}W^{[l]}:\ (n^{[l]},n^{[l-1]})\\ b^{[l]}:\ (n^{[l]},1)\end{array} W[l]: (n[l],n[l−1])b[l]: (n[l],1)
其中, l = 1 , ⋯ , L l=1,\cdots,L l=1,⋯,L, n [ l ] n^{[l]} n[l]和 n [ l − 1 ] n^{[l-1]} n[l−1]分别表示第 l l l层和 l − 1 l-1 l−1层的所含单元个数。 - n [ 0 ] = n x n^{[0]}=n_x n[0]=nx,表示输入层特征数目。
-
W
[
l
]
W^{[l]}
W[l]和
b
[
l
]
b^{[l]}
b[l]的维度分别是:
- 反向传播
-
d
W
[
l
]
dW^{[l]}
dW[l]和
d
b
[
l
]
db^{[l]}
db[l]的维度分别是:
d W [ l ] : ( n [ l ] , n [ l − 1 ] ) d b [ l ] : ( n [ l ] , 1 ) \begin{array}{l}dW^{[l]}:\ (n^{[l]},n^{[l-1]})\\ db^{[l]}:\ (n^{[l]},1)\end{array} dW[l]: (n[l],n[l−1])db[l]: (n[l],1)注意: W [ l ] \color{red}W^{[l]} W[l]与 d W [ l ] \color{red}dW^{[l]} dW[l]维度 相 同 \color{red}相同 相同, b [ l ] \color{red}b^{[l]} b[l]与 d b [ l ] \color{red}db^{[l]} db[l]维度 相 同 \color{red}相同 相同。
-
z
[
l
]
z^{[l]}
z[l]和
a
[
l
]
a^{[l]}
a[l]的维度分别是:
z [ l ] : ( n [ l ] , 1 ) a [ l ] : ( n [ l ] , 1 ) \begin{array}{l}z^{[l]}:\ (n^{[l]},1)\\ a^{[l]}:\ (n^{[l]},1)\end{array} z[l]: (n[l],1)a[l]: (n[l],1)- z [ l ] \color{red}z^{[l]} z[l]和 a [ l ] \color{red}a^{[l]} a[l]的维度 相 同 \color{red}相同 相同;
- d z [ l ] \color{red}dz^{[l]} dz[l]和 d a [ l ] \color{red}da^{[l]} da[l]的维度均与 z [ l ] \color{red}z^{[l]} z[l]和 a [ l ] \color{red}a^{[l]} a[l]的维度 相 同 \color{red}相同 相同。
-
d
W
[
l
]
dW^{[l]}
dW[l]和
d
b
[
l
]
db^{[l]}
db[l]的维度分别是:
- 正向传播
-
m
m
m个训练样本
对于 m m m个训练样本,输入矩阵X的维度是 ( n [ 0 ] , m ) (n^{[0]},m) (n[0],m)。-
W
[
l
]
W^{[l]}
W[l]和
b
[
l
]
b^{[l]}
b[l]的维度与单个样本的维度
相
同
\color{red}相同
相同:
W [ l ] : ( n [ l ] , n [ l − 1 ] ) b [ l ] : ( n [ l ] , 1 ) \begin{array}{l}W^{[l]}:\ (n^{[l]},n^{[l-1]})\\ b^{[l]}:\ (n^{[l]},1)\end{array} W[l]: (n[l],n[l−1])b[l]: (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]中, b [ l ] b^{[l]} b[l]会被当成 ( n [ l ] , m ) (n^{[l]},m) (n[l],m)矩阵进行运算(python的广播),且 b [ l ] b^{[l]} b[l]每一列向量都是一样的。
注: d W [ l ] \color{red}dW^{[l]} dW[l]和 d b [ l ] \color{red}db^{[l]} db[l]的维度分别与 W [ l ] \color{red}W^{[l]} W[l]和 b [ l ] \color{red}b^{[l]} b[l]的 相 同 \color{red}相同 相同。
-
Z
[
l
]
Z^{[l]}
Z[l]和
A
[
l
]
A^{[l]}
A[l]的维度与单个样本的维度不同:
Z [ l ] : ( n [ l ] , m ) A [ l ] : ( n [ l ] , m ) \begin{array}{l}Z^{[l]}:\ (n^{[l]},m)\\ A^{[l]}:\ (n^{[l]},m)\end{array} Z[l]: (n[l],m)A[l]: (n[l],m)注: d Z [ l ] \color{red}dZ^{[l]} dZ[l]和 d A [ l ] \color{red}dA^{[l]} dA[l]的维度分别与 Z [ l ] \color{red}Z^{[l]} Z[l]和 A [ l ] \color{red}A^{[l]} A[l]的 相 同 \color{red}相同 相同。
-
W
[
l
]
W^{[l]}
W[l]和
b
[
l
]
b^{[l]}
b[l]的维度与单个样本的维度
相
同
\color{red}相同
相同:
在做深度神经网络的反向传播时,一定要确认所有的矩阵维数是前后一致的!!!!
4.4 为什么使用深层表示?(Why deep representations?)
深度神经网络能解决好多问题,并不需要很大的神经网络,但是得有深度,得有比较多的隐藏层,这是为什么呢?
- 特征复杂(认知科学)的角度
-
例子:人脸识别
假设有四层神经网络,经过训练:- 神经网络第一层是从原始图片中提取出人脸的轮廓与边缘,即边缘检测。这样每个神经元得到的是一些边缘信息。
- 神经网络第二层是将前一层的边缘进行组合,组合成人脸一些局部特征,比如眼睛、鼻子、嘴巴等。
- 神经网络第三层是将这些局部特征组合起来,融合成人脸的模样。
可以看出:随着层数由浅到深,神经网络提取的特征也是从边缘到局部特征到整体,由简单到复杂。 可见,如果隐藏层足够多,那么能够提取的特征就越丰富、越复杂,模型的准确率就会越高。
-
例子:语音识别
- 浅层的神经元能够检测一些简单的音调;
- 较深的神经元能够检测出基本的音素;
- 更深的神经元就能够检测出单词信息。
- 如果网络够深,还能对短语、句子进行检测。
-
总 结 \color{red}总结 总结:
- 神经网络从左到右,神经元提取的特征从简单到复杂。
- 特征复杂度与神经网络层数正相关。
- 特征越来越复杂,功能也越来越强大。
-
计算量(电路理论) 的角度
计算逻辑输出:
y = x 1 ⊕ x 2 ⊕ x 3 ⊕ ⋯ ⊕ x n y=x_1\oplus x_2\oplus x_3\oplus\cdots\oplus x_n y=x1⊕x2⊕x3⊕⋯⊕xn
其中, ⊕ \oplus ⊕表示异或操作。对于这个逻辑运算。用下图两种方法:
-
左图:深度网络,深度网络的结构是每层将前一层的两两单元进行异或,最后到一个输出。这样,整个深度网络的层数是 l o g 2 ( n ) log_2(n) log2(n),不包含输入层。总共使用的神经元个数为:
1 + 2 + ⋯ + 2 l o g 2 ( n ) − 1 = 1 ⋅ 1 − 2 l o g 2 ( n ) 1 − 2 = 2 l o g 2 ( n ) − 1 = n − 1 1+2+\cdots+2^{log_2(n)-1}=1\cdot\frac{1-2^{log_2(n)}}{1-2}=2^{log_2(n)}-1=n-1 1+2+⋯+2log2(n)−1=1⋅1−21−2log2(n)=2log2(n)−1=n−1
可见,输入个数是 n n n,这种深层网络所需的神经元个数仅仅是 n − 1 n-1 n−1个。 -
右图:单个隐藏层,那么需要的神经元个数将是指数级别那么大。由于包含了所有的逻辑位(0和1),则需要 2 n − 1 2^{n}-1 2n−1个神经元。也就是 O ( 2 n ) O(2^{n}) O(2n)。
比较下来,处理同一逻辑问题,深层网络所需的神经元个数比浅层网络要少很多。这也是深层神经网络的优点之一。
-
尽管深度学习有着非常显著的优势,对实际问题进行建模时,尽量先选择层数少的神经网络模型,这也符合奥卡姆剃刀定律(Occam’s Razor)。对于比较复杂的问题,再使用较深的神经网络模型。
4.5 搭建神经网络块(Building blocks of deep neural networks)
本节用流程块图来解释神经网络正向传播和反向传播过程。
-
对于第 l l l层的流程快
- 正向传播
- 输入: a [ l − 1 ] a^{[l-1]} a[l−1]
- 输出: a [ l ] a^{[l]} a[l]
- 参数: W [ l ] , b [ l ] W^{[l]},b^{[l]} W[l],b[l]
- 缓存变量: z [ l ] z^{[l]} z[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]
- 参数: W [ l ] , b [ l ] , d z [ l ] W^{[l]},b^{[l]},dz^{[l]} W[l],b[l],dz[l]
- 缓存变量: d W [ l ] , d b [ l ] dW^{[l]},db^{[l]} dW[l],db[l]
- 正向传播
-
神经网络整体的流程块图
- 正向传播(单个样本)
z [ l ] = W [ l ] ⋅ a [ l − 1 ] + b [ l ] a [ l ] = g [ l ] ( z [ l ] ) l = 0 , . . , L \begin{array}{l}{z}^{[l]}={W}^{[l]}\cdot {a}^{[l-1]}+{b}^{[l]}\\ {a}^{[l]}={g}^{[l]}({z}^{[l]})\;\; l=0,..,L\end{array} z[l]=W[l]⋅a[l−1]+b[l]a[l]=g[l](z[l])l=0,..,L - 反向传播(单个样本)
d z [ l ] = d a [ l ] ∗ g [ l ] ′ ( z [ l ] ) d w [ l ] = d z [ l ] ⋅ a [ l − 1 ] d b [ l ] = d z [ l ] d a [ l − 1 ] = w [ l ] T ⋅ d z [ l ] d z [ l ] = w [ l + 1 ] T d z [ l + 1 ] ⋅ g [ l ] ′ ( z [ l ] ) \begin{array}{l}d{{z}^{[l]}}=d{{a}^{[l]}}*{{g}^{[l]}}'( {{z}^{[l]}})\\ d{{w}^{[l]}}=d{{z}^{[l]}}\cdot{{a}^{[l-1]}}\\ d{{b}^{[l]}}=d{{z}^{[l]}}\\ d{{a}^{[l-1]}}={{w}^{\left[ l \right]T}}\cdot {{dz}^{[l]}}\\ d{{z}^{[l]}}={{w}^{[l+1]T}}d{{z}^{[l+1]}}\cdot \text{ }{{g}^{[l]}}'( {{z}^{[l]}})\end{array} 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]Tdz[l+1]⋅ g[l]′(z[l])
其中 g [ l ] ′ ( ) {g^{[l]}}'() g[l]′()表示激活函数的导数。 - 最后整体迭代
从 a [ 0 ] a^{[0]} a[0]开始,也就是 x x x 然后经过一系列正向传播计算得到 y ^ \hat y y^,之后再用输出值计算这个(第二行最后方块),再实现反向传播,计算每次迭代的 W , b W,b W,b。
W = W − α d W b = b − α d b \begin{array}{l}W=W-αdW\\ b=b-αdb\end{array} W=W−αdWb=b−αdb
- 正向传播(单个样本)
4.6 前向传播和反向传播(Forward and backward propagation)
接着上一部分流程块图的内容,列出单样本和 m m m个样本的式子。
-
正向传播
- 单样本
输入是 a [ l − 1 ] a^{[l-1]} a[l−1],输出是 a [ l ] a^{[l]} a[l],缓存变量是 z [ l ] z^{[l]} z[l]。其表达式如下:
z [ l ] = W [ l ] a [ l − 1 ] + b [ l ] a [ l ] = g [ l ] ( z [ l ] ) l = 1 , . . , L \begin{array}{l}z^{[l]}=W^{[l]}a^{[l-1]}+b^{[l]}\\ a^{[l]}=g^{[l]}(z^{[l]})\;\; l=1,..,L\end{array} z[l]=W[l]a[l−1]+b[l]a[l]=g[l](z[l])l=1,..,L -
m
m
m个训练样本
向量化形式为:
Z [ l ] = W [ l ] A [ l − 1 ] + b [ l ] A [ l ] = g [ l ] ( Z [ l ] ) \begin{array}{l}Z^{[l]}=W^{[l]}A^{[l-1]}+b^{[l]}\\ A^{[l]}=g^{[l]}(Z^{[l]})\end{array} Z[l]=W[l]A[l−1]+b[l]A[l]=g[l](Z[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 ] ) d W [ l ] = d z [ l ] ⋅ a [ l − 1 ] d b [ l ] = d z [ l ] d a [ l − 1 ] = W [ l ] T ⋅ d z [ l ] \begin{array}{l}dz^{[l]}=da^{[l]}\ast g^{[l]’}(z^{[l]})\\ dW^{[l]}=dz^{[l]}\cdot a^{[l-1]}\\ db^{[l]}=dz^{[l]}\\ da^{[l-1]}=W^{[l]T}\cdot dz^{[l]}\end{array} 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]
上述 ‘表达式4’ 可得 d a [ l ] = W [ l + 1 ] T ⋅ d z [ l + 1 ] da^{[l]}=W^{[l+1]T}\cdot dz^{[l+1]} da[l]=W[l+1]T⋅dz[l+1],将 d a [ l ] da^{[l]} da[l]代入 ‘表达式1’ 中可得:
d z [ l ] = W [ l + 1 ] T ⋅ d z [ l + 1 ] ∗ g [ l ] ’ ( z [ l ] ) \color{red}dz^{[l]}=W^{[l+1]T}\cdot dz^{[l+1]}\ast g^{[l]’}(z^{[l]}) dz[l]=W[l+1]T⋅dz[l+1]∗g[l]’(z[l])
该式反映了 d z [ l + 1 ] \color{red}dz^{[l+1]} dz[l+1]与 d z [ l ] \color{red}dz^{[l]} dz[l]的递推关系。 - m个训练样本
向量化形式为:
d Z [ l ] = d A [ l ] ∗ g [ l ] ’ ( Z [ l ] ) d W [ l ] = 1 m d Z [ 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 = T r u e ) d A [ l − 1 ] = W [ l ] T ⋅ d Z [ l ] d Z [ l ] = W [ l + 1 ] T ⋅ d Z [ l + 1 ] ∗ g [ l ] ’ ( Z [ l ] ) \begin{array}{l}dZ^{[l]}=dA^{[l]}\ast g^{[l]’}(Z^{[l]})\\ dW^{[l]}=\frac1mdZ^{[l]}\cdot A^{[l-1]T}\\ db^{[l]}=\frac1mnp.sum(dZ^{[l]},axis=1,keepdim=True)\\ dA^{[l-1]}=W^{[l]T}\cdot dZ^{[l]}\\ dZ^{[l]}=W^{[l+1]T}\cdot dZ^{[l+1]}\ast g^{[l]’}(Z^{[l]})\end{array} dZ[l]=dA[l]∗g[l]’(Z[l])dW[l]=m1dZ[l]⋅A[l−1]Tdb[l]=m1np.sum(dZ[l],axis=1,keepdim=True)dA[l−1]=W[l]T⋅dZ[l]dZ[l]=W[l+1]T⋅dZ[l+1]∗g[l]’(Z[l])
其中 g [ l ] ′ ( ) {g^{[l]}}'() g[l]′()表示激活函数的导数。
- 单样本
4.7 参数VS超参数(Parameters vs Hyperparameters)
- 什么是超参数?
- 在前面算法中的learning rate a a a(学习率)、iterations(梯度下降法循环的数量)、 L L L(隐藏层数目)、 n [ l ] {{n}^{[l]}} n[l](隐藏层单元数目)、choice of activation function(激活函数的选择)都需要你来设置,这些数字实际上控制了最后的参数 W W W和 b b b的值,所以它们被称作 超 参 数 \color{red}超参数 超参数。
- 之后我们也会介绍一些其他的超参数,如momentum、mini batch size、regularization parameters等。
- 寻找超参数的最优值
- 总思路
走Idea—Code—Experiment—Idea这个循环,尝试各种不同的参数。 - 刚开始应用于新问题的人们,去试一定范围的值看看结果如何。
- 常用最优模型的参数,也可能会因为电脑CPU、GPU、网络和数据都在变化,最优参数也会发生变化。因此每隔一段时间也要进行调节。
- 总思路
4.8 深度学习和大脑的关联性(What does this have to do with the brain?)
根据以前降低内容进行了更正,不对地方请指正。
- 人脑神经元的结构和处理方式要复杂的多,神经网络模型只是非常简化的模型。人脑如何进行学习?是否也是通过反向传播和梯度下降算法现在还不清楚,可能会更加复杂。
- 也许发现重要的新的人脑学习机制后,让我们的神经网络模型抛弃反向传播和梯度下降算法,能够实现更加准确和强大的神经网络模型!
总结
- 左上: 神经网络的参数化容量随层数增加而指数式地增长,即某些深度神经网络能解决的问题,浅层神经网络需要相对的指数量级的计算才能解决。
- 左下: CNN 的深度网络可以将底层的简单特征逐层组合成越来越复杂的特征,深度越大,其能分类的图像的复杂度和多样性就越大。RNN 的深度网络也是同样的道理,可以将语音分解为音素,再逐渐组合成字母、单词、句子,执行复杂的语音到文本任务。
- 右边: 深度网络的特点是需要大量的训练数据和计算资源,其中涉及大量的矩阵运算,可以在 GPU 上并行执行。还包含了大量的超参数,例如学习率、迭代次数、隐藏层数、激活函数选择、学习率调整方案、批尺寸大小、正则化方法等。