第一门课 神经网络和深度学习(Neural Networks and Deep Learning)
4.1深层神经网络(Deep L-layer neural network)
严格来说,逻辑回归也是一个一层的神经网络。有一个隐藏层的神经网络就是一个两层神经网络。计算神经网络时不计入输入层,只计隐藏层和输出层。
有些函数只有深层的神经网络可以学会,对于任何给定的问题很难提前预测到底需要多深的神经网络,一般先尝试逻辑回归,尝试一层然后两层隐藏层,然后把隐藏层的数量看作是另一个可以自由选择大小的超参数,然后再保留交叉验证数据上评估。
正向传播时,会得到用激活函数
g
g
g计算的第
l
l
l层激活后的结果
g
(
z
[
l
]
)
=
a
[
l
]
g(z^{[l]})=a^{[l]}
g(z[l])=a[l],用
w
[
l
]
w^{[l]}
w[l]记作第
l
l
l层计算
z
[
l
]
z^{[l]}
z[l]的权重。
输入层:
x
=
a
[
0
]
x=a^{[0]}
x=a[0]
输出层:输出结果为
a
[
L
]
a^{[L]}
a[L],其中
L
L
L为神经网络的总层数。
4.2深层神经网络中的前向传播(Forward propagation in a Deep Network)
一个训练样本实现前向传播的过程:
第一层需要计算:
z
[
1
]
=
w
[
1
]
x
+
b
[
1
]
,
a
[
1
]
=
g
[
1
]
(
z
[
1
]
)
z^{[1]}=w^{[1]}x+b^{[1]},\space a^{[1]}=g^{[1]}(z^{[1]})
z[1]=w[1]x+b[1], a[1]=g[1](z[1]) 其中
(
x
=
a
[
0
]
)
(x=a^{[0]})
(x=a[0])
第二层需要计算:
z
[
2
]
=
w
[
2
]
a
[
1
]
+
b
[
2
]
,
a
[
2
]
=
g
[
2
]
(
z
[
2
]
)
z^{[2]}=w^{[2]}a^{[1]}+b^{[2]},\space a^{[2]}=g^{[2]}(z^{[2]})
z[2]=w[2]a[1]+b[2], a[2]=g[2](z[2])
前向传播可以归纳为多次迭代:
z
[
l
]
=
w
[
l
]
a
[
l
−
1
]
+
b
[
l
]
,
a
[
l
]
=
g
[
l
]
(
z
[
l
]
)
z^{[l]}=w^{[l]}a^{[l-1]}+b^{[l]},\space a^{[l]}=g^{[l]}(z^{[l]})
z[l]=w[l]a[l−1]+b[l], a[l]=g[l](z[l])
向量化的实现过程:
Z
[
l
]
=
W
[
l
]
A
[
l
−
1
]
+
b
[
l
]
,
A
[
l
]
=
g
[
l
]
(
Z
[
l
]
)
Z^{[l]}=W^{[l]}A^{[l-1]}+b^{[l]},\space A^{[l]}=g^{[l]}(Z^{[l]})
Z[l]=W[l]A[l−1]+b[l], A[l]=g[l](Z[l])其中
X
=
A
[
0
]
X=A^{[0]}
X=A[0]
只能使用显示for循环,
l
l
l从
0
0
0到
L
L
L
4.3核对矩阵的维数(Getting your matrix dimensions right)
w
w
w的维度是(下一层的维度,前一层的维度),即
w
[
l
]
:
(
n
[
l
]
,
n
[
l
−
1
]
)
w^{[l]}:(n^{[l]},n^{[l-1]})
w[l]:(n[l],n[l−1]),和
d
w
[
l
]
dw^{[l]}
dw[l]的维度相同;
b
b
b的维度是(下一层的维度,1),即
b
[
l
]
:
(
n
[
l
]
,
1
)
b^{[l]}:(n^{[l]},1)
b[l]:(n[l],1),和
d
b
[
l
]
db^{[l]}
db[l]的维度相同;
z
[
l
]
,
a
[
l
]
:
(
n
[
l
]
,
1
)
z^{[l]},a^{[l]}:(n^{[l]},1)
z[l],a[l]:(n[l],1)。
向量化后,
W
,
b
W,b
W,b的维度不变,
Z
,
A
,
X
Z,A,X
Z,A,X维度发生变化:
Z
[
l
]
=
(
z
[
l
]
[
1
]
,
z
[
l
]
[
2
]
,
z
[
l
]
[
3
]
,
.
.
.
,
z
[
l
]
[
m
]
)
Z^{[l]}=(z^{[l][1]},z^{[l][2]},z^{[l][3]},...,z^{[l][m]})
Z[l]=(z[l][1],z[l][2],z[l][3],...,z[l][m])
,
m
,m
,m为训练集大小 ,
Z
[
l
]
,
A
[
l
]
:
(
n
[
l
]
,
m
)
Z^{[l]},A^{[l]}:(n^{[l]},m)
Z[l],A[l]:(n[l],m),
A
[
0
]
=
X
:
(
n
[
l
]
,
m
)
A^{[0]}=X:(n^{[l]},m)
A[0]=X:(n[l],m)。
4.4为什么使用深层表示?(Why deep representations?)
深度神经网络的这许多隐藏层中,较早的前几层能学习一些低层次的简单特征,后几层就能把简单的特征结合起来,去探测更加复杂的东西。
Small:隐藏单元的数量相对较少
Deep:隐藏层数目比较多
深层的网络隐藏单元数量相对较少,隐藏层数目较多,如果浅层的网络想要达到同样的计算结果则需要指数级增长的单元数量才能达到。
4.5搭建神经网络块(Building blocks of deep neural networks)
4.6前向传播和反向传播(Forward and backward propagation)
前向传播:
Input
a
[
l
−
1
]
a^{[l-1]}
a[l−1],Output
a
[
l
]
=
g
[
l
]
(
z
[
l
]
)
a^{[l]}=g^{[l]}(z^{[l]})
a[l]=g[l](z[l]),cache
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]
向量化实现:
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])
反向传播:
(
1
)
d
z
[
l
]
=
d
a
[
l
]
∗
g
[
l
]
′
(
z
[
l
]
)
(1)dz^{[l]}=da^{[l]}*g^{[l]'}(z^{[l]})
(1)dz[l]=da[l]∗g[l]′(z[l])
(
2
)
d
w
[
l
]
=
d
z
[
l
]
⋅
a
[
l
−
1
]
(2)dw^{[l]}=dz^{[l]}·a^{[l-1]}
(2)dw[l]=dz[l]⋅a[l−1]
(
3
)
d
b
[
l
]
=
d
z
[
l
]
(3)db^{[l]}=dz^{[l]}
(3)db[l]=dz[l]
(
4
)
d
a
[
l
−
1
]
=
w
[
l
]
T
⋅
d
z
[
l
]
(4)da^{[l-1]}=w^{[l]T}·dz^{[l]}
(4)da[l−1]=w[l]T⋅dz[l]
(
5
)
d
z
[
l
]
=
w
[
l
+
1
]
T
d
z
[
l
+
1
]
⋅
g
[
l
]
′
(
z
[
l
]
)
(5)dz^{[l]}=w^{[l+1]T}dz^{[l+1]}·g^{[l]'}(z^{[l]})
(5)dz[l]=w[l+1]Tdz[l+1]⋅g[l]′(z[l])式4代入式1得到
向量化实现:
(
1
)
d
Z
[
l
]
=
d
A
[
l
]
∗
g
[
l
]
′
(
Z
[
l
]
)
(1)dZ^{[l]}=dA^{[l]}*g^{[l]'}(Z^{[l]})
(1)dZ[l]=dA[l]∗g[l]′(Z[l])
(
2
)
d
W
[
l
]
=
1
m
d
Z
[
l
]
⋅
A
[
l
−
1
]
T
(2)dW^{[l]}=\frac{1}{m}dZ^{[l]}·A^{[l-1]T}
(2)dW[l]=m1dZ[l]⋅A[l−1]T
(
3
)
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
)
(3)db^{[l]}=\frac{1}{m}np.sum(dz^{[l]},axis=1,keepdims=True)
(3)db[l]=m1np.sum(dz[l],axis=1,keepdims=True)
(
4
)
d
A
[
l
−
1
]
=
W
[
l
]
T
⋅
d
Z
[
l
]
(4)dA^{[l-1]}=W^{[l]T}·dZ^{[l]}
(4)dA[l−1]=W[l]T⋅dZ[l]
隐藏层如果有三层,第一层的激活函数可以使用ReLU,第二层可以使用ReLU,第三层可以使用sigmoid(如果做二分类)。
4.7参数VS超参数(Parameters vs Hyperparameters)
想要深度神经网络起很好的效果,需要规划参数以及超参数。
什么是超参数?比如算法中的learning rate α \alpha α(学习率)、iterations(梯度下降法循环的数量)、 L L L(隐藏层数目)、 n [ l ] n^{[l]} n[l](隐藏层单元数目)、choice of activation function(激活函数的选择)都需要设置,这些数字实际上控制了最后的参数和的值,所以它们被称作超参数。
如何寻找超参数的最优值?走Idea—Code—Experiment—Idea这个循环,尝试各种不同的参数,实现模型并观察是否成功,然后再迭代。
4.8深度学习和大脑的关联性(What does this have to do with the brain?)
关联不大