z
[
1
]
=
W
[
1
]
x
+
b
[
1
]
z^{[1]}=W^{[1]}x+b^{[1]}
z[1]=W[1]x+b[1]
a
[
1
]
=
σ
(
z
[
1
]
)
a^{[1]}=\sigma(z^{[1]})
a[1]=σ(z[1])
z
[
2
]
=
W
[
2
]
a
[
1
]
+
b
[
2
]
z^{[2]}=W^{[2]}{a^{[1]}}+b^{[2]}
z[2]=W[2]a[1]+b[2]
a
[
2
]
=
σ
(
z
[
2
]
)
a^{[2]}=\sigma (z^{[2]})
a[2]=σ(z[2])
L
o
s
s
(
a
[
2
]
,
y
)
Loss(a^{[2]},y)
Loss(a[2],y)这里的损失函数使用的是逻辑回归的损失函数。
d
a
[
2
]
=
d
L
o
s
s
d
a
[
2
]
=
−
y
a
[
2
]
+
1
−
y
1
−
a
[
2
]
da^{[2]}=\frac{dLoss}{da^{[2]}}=-\frac{y}{a^{[2]}}+\frac{1-y}{1-a^{[2]}}
da[2]=da[2]dLoss=−a[2]y+1−a[2]1−y
d
a
[
2
]
d
z
[
2
]
=
a
[
2
]
(
1
−
a
[
2
]
)
\frac{da^{[2]}}{dz^{[2]}}=a^{[2]}(1-a^{[2]})
dz[2]da[2]=a[2](1−a[2])
d
z
[
2
]
=
d
L
o
s
s
d
z
[
2
]
=
d
L
o
s
s
d
a
[
2
]
∗
d
a
[
2
]
d
z
[
2
]
=
a
[
2
]
−
y
dz^{[2]}=\frac{dLoss}{dz^{[2]}}=\frac{dLoss}{da^{[2]}}*\frac{da^{[2]}}{dz^{[2]}}=a^{[2]}-y
dz[2]=dz[2]dLoss=da[2]dLoss∗dz[2]da[2]=a[2]−y
d
W
[
2
]
=
d
z
[
2
]
a
[
1
]
.
T
=
(
a
[
2
]
−
y
)
a
[
1
]
.
T
dW^{[2]}=dz^{[2]}a^{[1].T}=(a^{[2]}-y)a^{[1].T}
dW[2]=dz[2]a[1].T=(a[2]−y)a[1].T
d
b
[
2
]
=
d
z
[
2
]
=
(
a
[
2
]
−
y
)
db^{[2]}=dz^{[2]}=(a^{[2]}-y)
db[2]=dz[2]=(a[2]−y)这就完成了反向传播的一半。
d
z
(
2
)
d
a
[
1
]
=
W
[
2
]
.
T
\frac{dz^{(2)}}{da^{[1]}}=W^{[2].T}
da[1]dz(2)=W[2].T
d
a
[
1
]
d
z
[
1
]
=
g
′
[
1
]
(
z
[
1
]
)
\frac{da^{[1]}}{dz^{[1]}}=g^{'[1]}(z^{[1]})
dz[1]da[1]=g′[1](z[1])
d
z
[
1
]
=
W
[
2
]
.
T
d
z
[
2
]
g
′
[
1
]
(
z
[
1
]
)
dz^{[1]}=W^{[2].T}dz^{[2]}g^{'[1]}(z^{[1]})
dz[1]=W[2].Tdz[2]g′[1](z[1])
d
W
[
1
]
=
d
z
[
1
]
.
x
.
T
dW^{[1]}=dz^{[1]}.x^{.T}
dW[1]=dz[1].x.T
d
b
[
1
]
=
d
z
[
1
]
db^{[1]}=dz^{[1]}
db[1]=dz[1]通过推导我们得到六个关键方程,如下图所示
通过向量化表示,可以表示为
在向量化的形式中,假设每一次只有m个训练数据用于进行反向传播,则
d
Z
[
2
]
dZ^{[2]}
dZ[2]的维度为
(
1
,
m
)
(1,m)
(1,m)。设隐层a的节点个数为n个,则
A
[
1
]
A^{[1]}
A[1]的维度为
(
m
,
n
)
(m,n)
(m,n),隐层到输出层的参数
W
W
W的维度为
(
n
,
1
)
(n,1)
(n,1)。通过
d
Z
[
2
]
A
[
1
]
T
dZ^{[2]}A^{[1]T}
dZ[2]A[1]T得到的是m个训练数据反向传播之后的维度为
(
n
,
1
)
(n,1)
(n,1)的关于
W
W
W的参数的导数。
对于参数 b b b,由于 b b b不是一个向量,只是一个值,因此在进行反向求导时需要用到 n p . s u m ( ) np.sum() np.sum()进行 m m m个训练数据的求和。