深度神经网络的前向传播
1. 前向传播的公式推导
下图中红色标注的是层间的递推公式。
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])
正向传播的输入的是
a
[
l
−
1
]
a^{[l-1]}
a[l−1],输出的是
a
[
l
]
a^{[l]}
a[l], 计算中间的
w
[
l
]
w^{[l]}
w[l]和
b
[
l
]
b^{[l]}
b[l],并缓存
z
[
l
]
z^{[l]}
z[l]。
多层就会得到下图:
反向传播
更新反向传播的方法是:
d
z
[
l
]
=
d
z
[
l
]
∗
(
g
[
l
]
)
′
(
z
[
l
]
)
dz^{[l]} = dz^{[l]} * (g^{[l]})^{'} (z^{[l]})
dz[l]=dz[l]∗(g[l])′(z[l])
d
w
[
l
]
=
d
z
[
l
]
∗
a
[
l
−
1
]
dw^{[l]} = dz^{[l]} * a^{[l-1]}
dw[l]=dz[l]∗a[l−1]
d
b
[
l
]
=
d
z
[
l
]
db^{[l]} = dz^{[l]}
db[l]=dz[l]
d
z
[
l
−
1
]
=
(
w
[
l
]
)
T
∗
d
z
[
l
]
dz^{[l-1]} = (w^{[l]}) ^ {T} * dz^{[l]}
dz[l−1]=(w[l])T∗dz[l]
综合上面4个式子,得到
d
z
[
l
]
=
(
w
[
l
+
1
]
)
T
∗
d
z
[
l
+
1
]
∗
(
g
[
l
]
)
′
(
z
[
l
]
)
dz^{[l]} = (w^{[l+1]}) ^ {T} * dz^{[l+1]} * (g^{[l]})^{'}(z^{[l]})
dz[l]=(w[l+1])T∗dz[l+1]∗(g[l])′(z[l])
输入的是
d
a
[
l
]
d_a^{[l]}
da[l],输出的是
d
a
[
l
−
1
]
d_a^{[l-1]}
da[l−1],并记录下当前的
d
w
l
d_w^{l}
dwl和
d
b
[
l
]
d_b^{[l]}
db[l]。
多层就会得到: