1. 各参数的向量化表示
L
L
L表示神经网络的层数,输入层的索引为0,对于每层
l
l
l 都用
a
[
l
]
a^{[l]}
a[l]。
用
w
[
l
]
w^{[l]}
w[l] 来记作在
l
l
l 层计算
z
[
l
]
z^{[l]}
z[l] 的权重,再通过用激活函数
g
g
g 计算
a
[
l
]
a^{[l]}
a[l]。
(1)
输
入
变
量
A
[
0
]
=
X
=
[
⋮
⋮
⋮
⋮
x
(
1
)
x
(
2
)
⋯
x
(
m
)
⋮
⋮
⋮
⋮
]
维
度
为
_
∗
m
,
m
为
样
本
数
输入变量A^{[0]}=X = \left[ \begin{matrix} \vdots & \vdots & \vdots &\vdots \\ x^{(1)} & x^{(2)} & \cdots & x^{(m)} \\ \vdots & \vdots & \vdots &\vdots \\ \end{matrix} \right] 维度为 \_*m ,m为样本数\tag{1}
输入变量A[0]=X=⎣⎢⎢⎡⋮x(1)⋮⋮x(2)⋮⋮⋯⋮⋮x(m)⋮⎦⎥⎥⎤维度为_∗m,m为样本数(1)
(2) 输 入 变 量 W [ l ] = [ ⋯ w ( 1 ) ⋯ ⋯ w ( 2 ) ⋯ ⋮ ⋯ w ( h ) ⋯ ] 维 度 为 h ∗ _ , h 为 隐 藏 层 节 点 数 输入变量W^{[l]}=\left[ \begin{matrix} \cdots & w^{(1)} & \cdots \\ \cdots & w^{(2)} & \cdots \\ & \vdots &\\ \cdots & w^{(h)} &\cdots\\ \end{matrix} \right] 维度为 h*\_ ,h为隐藏层节点数\tag{2} 输入变量W[l]=⎣⎢⎢⎢⎡⋯⋯⋯w(1)w(2)⋮w(h)⋯⋯⋯⎦⎥⎥⎥⎤维度为h∗_,h为隐藏层节点数(2)
2. 前向传播
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])
3. 反向传播
d
Z
[
l
]
=
d
A
[
l
]
∗
g
[
l
]
′
(
Z
[
l
]
)
dZ^{[l]}=dA^{[l]}*g^{[l]'}(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]T∗dZ[l]
4. 核对矩阵维数
吴恩达:当实现深度神经网络的时候,其中一个我常用的检查代码是否有错的方法就是拿出一张纸过一遍算法中矩阵的维数。
w
w
w的维度是(下一层的维数,前一层的维数),即
w
[
l
]
:
(
n
[
l
]
,
n
[
l
−
1
]
)
w^{[l]}:(n^{[l]},n^{[l-1]})
w[l]:(n[l],n[l−1]);
b
b
b的维度是(下一层的维数,1),即
b
[
l
]
:
(
n
[
l
]
,
1
)
b^{[l]}:(n^{[l]},1)
b[l]:(n[l],1);
z
z
z和
a
a
a的维度是,
z
[
l
]
,
a
[
l
]
:
(
n
[
l
]
,
1
)
z^{[l]},a^{[l]}:(n^{[l]},1)
z[l],a[l]:(n[l],1)
d
w
[
l
]
dw^{[l]}
dw[l]和
w
[
l
]
w^{[l]}
w[l]维度相同,
d
b
[
l
]
db^{[l]}
db[l]和
b
[
l
]
b^{[l]}
b[l]维度相同
向量化后:
w
w
w和
b
b
b向量化维度不变,但
z
z
z,
a
a
a以及
x
x
x的维度会向量化后发生变化。
Z
[
l
]
Z^{[l]}
Z[l]可以看成由每一个单独的
z
[
l
]
z^{[l]}
z[l]叠加而得到,即
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
Z
Z和
A
A
A的维度是,
Z
[
l
]
,
A
[
l
]
:
(
n
[
l
]
,
m
)
Z^{[l]},A^{[l]}:(n^{[l]},m)
Z[l],A[l]:(n[l],m)