记录一下反向传播的计算与推导,了解一下loss.backward()里面做的是什么,怎么完成的。
相关定义
经过网络层的计算后:
z
l
=
W
l
a
l
−
1
+
b
l
z^l=W^la^{l-1}+b^l
zl=Wlal−1+bl
σ
\sigma
σ 定义为激活函数,所以有公式:
a
l
=
σ
(
W
l
a
l
−
1
+
b
l
)
a^l=\sigma(W^la^{l-1}+b^l)
al=σ(Wlal−1+bl)
函数计算
向量表示
所以参数中,最主要的是计算 Δ θ C ( θ i ) \Delta_{\theta}C(\theta^i) ΔθC(θi)的值。
链式法则
公式计算1
可得如下公式:
∂
z
i
l
∂
w
i
j
l
=
{
a
j
l
−
1
,
l
>
1
x
j
,
l
=
1
\frac{\partial z_i^l}{\partial w_{ij}^l} = \begin{cases} a_j^{l-1}&,l>1 \\ x_j&, l = 1 \end{cases}
∂wijl∂zil={ajl−1xj,l>1,l=1
a
j
l
−
1
a_j^{l-1}
ajl−1这样的值需要在前向传播(feedward)中进行计算
公式计算2
计算最初的
δ
L
\delta^L
δL:
δ
L
=
σ
′
(
z
L
)
⊙
Δ
C
(
y
)
\delta^L=\sigma'(z^L)\odot\Delta C(y)
δL=σ′(zL)⊙ΔC(y)
得到递推关系式:
δ
i
l
=
σ
′
(
z
i
)
∑
k
w
k
i
l
+
1
δ
k
i
+
1
\delta_i^l=\sigma'(z_i)\sum_kw_{ki}^{l+1}\delta_k^{i+1}
δil=σ′(zi)k∑wkil+1δki+1
矩阵表现形式:
δ
l
=
σ
′
(
z
l
)
⊙
(
W
l
+
1
)
T
δ
l
+
1
\delta^l=\sigma'(z^l)\odot(W^{l+1})^T\delta^{l+1}
δl=σ′(zl)⊙(Wl+1)Tδl+1
结论
所以前向和反向都需要计算,那么是不是意味着会产生不少的中间变量?