在利用梯度下降法对神经网络权重等参数进行训练时,需要利用反向传播去计算损失函数对权重参数的偏导数。
反向传播
下面分析是如何反向传播的(分析时不考虑偏置项),
参考上图,
① 对于一个神经元
j
j
j,它的输出被定义为,
(1.1)
O
j
=
φ
(
n
e
t
j
)
=
φ
(
∑
k
=
1
N
w
k
j
O
k
)
O_j = \varphi(net_j)=\varphi(\sum_{k=1}^N w_{kj}O_k) \tag{1.1}
Oj=φ(netj)=φ(k=1∑NwkjOk)(1.1)
其中,
w
k
j
w_{kj}
wkj表示神经元
k
k
k到
j
j
j之间的权重,
O
k
O_k
Ok是上一层神经元的输出。
φ
\varphi
φ为激活函数,这里取为
l
o
g
i
s
t
i
c
logistic
logistic函数,
(1.2)
φ
(
z
)
=
1
1
+
e
−
z
\varphi(z)=\frac{1}{1+ e^{-z} } \tag{1.2}
φ(z)=1+e−z1(1.2)
l
o
g
i
s
t
i
c
logistic
logistic函数的求导公式为,
(1.3)
d
φ
(
z
)
d
z
=
φ
(
z
)
(
1
−
φ
(
z
)
)
\dfrac {d\varphi \left( z\right) }{dz}=\varphi\left( z\right) \left( 1-\varphi\left( z\right) \right) \tag{1.3}
dzdφ(z)=φ(z)(1−φ(z))(1.3)
② 损失函数定义为,
(1.4)
E
=
1
2
(
t
−
y
)
2
E=\dfrac {1}{2}\left( t-y\right) ^{2} \tag{1.4}
E=21(t−y)2(1.4)
其中,
y
y
y为输出层的输出,
t
t
t为期望输出。
考虑
w
k
j
w_{kj}
wkj对于
E
E
E的影响,是
O
j
O_j
Oj间接影响的,因此可得下面的公式(这里假设
j
j
j前一层神经元为
i
i
i,即求对
w
i
j
w_{ij}
wij的偏导数),
(1.5)
∂
E
∂
w
i
j
=
∂
E
∂
O
j
∂
O
j
∂
n
e
t
j
∂
n
e
t
j
∂
w
i
j
\dfrac {\partial E}{\partial w_{ij}}=\dfrac {\partial E}{\partial O_{j}}\dfrac {\partial O_{j}}{\partial net_{j}}\dfrac {\partial net_{j}}{\partial w_{ij}} \tag{1.5}
∂wij∂E=∂Oj∂E∂netj∂Oj∂wij∂netj(1.5)
其中,后两个偏导数可以直接求出,
∂
O
j
∂
n
e
t
j
\frac{\partial O_{j}}{\partial net_{j}}
∂netj∂Oj参考公式
1.3
{1.3}
1.3,
∂
n
e
t
j
∂
w
i
j
=
O
i
\dfrac {\partial net_{j}}{\partial w_{ij}}=O_i
∂wij∂netj=Oi。但是此时,
∂
E
∂
O
j
\dfrac{\partial E}{\partial {O_j}}
∂Oj∂E,依然无法求出。不过如果
j
j
j是输出层,因为
O
j
=
y
O_j=y
Oj=y,此时可求出
E
E
E对
O
j
O_j
Oj的偏导数,
(1.6)
∂
E
∂
O
j
=
∂
E
∂
y
=
∂
∂
y
1
2
(
t
−
y
)
2
=
y
−
t
\dfrac {\partial E}{\partial O_{j}}=\dfrac {\partial E}{\partial y}=\dfrac {\partial }{\partial y}\dfrac {1}{2}\left( t-y\right) ^{2}=y-t \tag{1.6}
∂Oj∂E=∂y∂E=∂y∂21(t−y)2=y−t(1.6)
下面就到了最关键的一步,此时对于非输出层,我们无法直接求出
∂
E
∂
O
j
\frac{\partial E}{\partial {O_j}}
∂Oj∂E,考虑将
O
j
O_j
Oj对
E
E
E的作用向
j
j
j的下一层迭代,我们把
E
E
E考虑成一个输入由
L
=
u
,
v
…
,
w
L=u,v \dots,w
L=u,v…,w这些神经元组成的函数,
O
j
O_j
Oj是
u
,
v
,
w
u,v,w
u,v,w这些神经元的输入,
O
j
O_j
Oj直接构成了对
n
e
t
u
,
n
e
t
v
,
n
e
t
w
net_u,net_v,net_w
netu,netv,netw的影响。
(1.7)
∂
E
(
O
j
)
∂
O
j
=
∂
E
(
n
e
t
u
,
n
e
t
v
,
…
,
n
e
t
w
)
∂
O
j
\dfrac {\partial E\left( O_{j}\right) }{\partial O_{j}}=\dfrac {\partial E\left( net_u,net_v,\ldots ,net_{w}\right) }{\partial O_{j}} \tag{1.7}
∂Oj∂E(Oj)=∂Oj∂E(netu,netv,…,netw)(1.7)
利用全微分形式,可以获取到一个递归方程,
(1.8)
∂
E
∂
O
j
=
∑
l
∈
L
(
∂
E
∂
n
e
t
l
∂
n
e
t
l
∂
O
j
)
=
∑
l
∈
L
(
∂
E
∂
O
l
∂
O
l
∂
n
e
t
l
w
j
l
)
\dfrac {\partial E}{\partial O_{j}}=\sum _{l\in L}\left( \dfrac {\partial E}{\partial net_{l}}\dfrac {\partial net_{l}}{\partial O_j}\right) =\sum _{l\in L}\left( \dfrac {\partial E}{\partial O_l}\dfrac {\partial O_l}{\partial net_l}w_{jl}\right) \tag{1.8}
∂Oj∂E=l∈L∑(∂netl∂E∂Oj∂netl)=l∈L∑(∂Ol∂E∂netl∂Olwjl)(1.8)
通过递归方程,我们可以从输出层开始对需要求的偏导数进行递归,因此得名反向传播。
一个例子
下面以一个简单的网络来对上面的反向传播结果进行验证,如下图所示,
(1.9)
∂
E
∂
w
j
−
1
,
j
=
∂
E
∂
O
j
∂
O
j
∂
n
e
t
j
∂
n
e
t
j
∂
w
j
−
1
,
j
\dfrac {\partial E}{\partial w_{j-1,j}}=\dfrac {\partial E}{\partial O_j}\dfrac {\partial O_j}{\partial net_j}\dfrac {\partial net_j}{\partial w_{j-1,j}} \tag{1.9}
∂wj−1,j∂E=∂Oj∂E∂netj∂Oj∂wj−1,j∂netj(1.9)
其中,上式 ∂ E ∂ O j = ∂ E ∂ y \dfrac {\partial E}{\partial O_j}=\dfrac {\partial E}{\partial y} ∂Oj∂E=∂y∂E,三项偏导数都可求出。接着求 ∂ E ∂ w j − 2 , j − 1 \dfrac {\partial E}{\partial w_{j-2,j-1}} ∂wj−2,j−1∂E,
(1.10) ∂ E ∂ w j − 2 , j − 1 = ∂ E ∂ O j − 1 ∂ O j − 1 ∂ n e t j − 1 ∂ n e t j − 1 ∂ w j − 2 , j − 1 = ∂ E ∂ O j ∂ O j ∂ n e t j ∂ n e t j ∂ O j − 1 ∂ O j − 1 ∂ n e t j − 1 ∂ n e t j − 1 ∂ w j − 2 , j − 1 \dfrac {\partial E}{\partial w_{j-2,j-1}}=\dfrac {\partial E}{\partial O_{j-1}}\dfrac {\partial O_{j-1}}{\partial net_{j-1}}\dfrac {\partial net_{j-1}}{\partial w_{j-2,j-1}}=\dfrac {\partial E}{\partial O_{j}}\dfrac {\partial O_j}{\partial net_j}\dfrac {\partial net_j}{\partial O_{j-1}}\dfrac {\partial O_{j-1}}{\partial net_{j-1}}\dfrac {\partial net_{j-1}}{\partial w_{j-2,j-1}} \tag{1.10} ∂wj−2,j−1∂E=∂Oj−1∂E∂netj−1∂Oj−1∂wj−2,j−1∂netj−1=∂Oj∂E∂netj∂Oj∂Oj−1∂netj∂netj−1∂Oj−1∂wj−2,j−1∂netj−1(1.10)
在上式中, ∂ E ∂ O j − 1 = ∂ E ∂ O j ∂ O j ∂ n e t j ∂ n e t j ∂ O j − 1 \dfrac {\partial E}{\partial O_{j-1}}=\dfrac {\partial E}{\partial O_{j}}\dfrac {\partial O_j}{\partial net_j}\dfrac {\partial net_j}{\partial O_{j-1}} ∂Oj−1∂E=∂Oj∂E∂netj∂Oj∂Oj−1∂netj,求 ∂ E ∂ O j − 1 \dfrac {\partial E}{\partial O_{j-1}} ∂Oj−1∂E时先求出 E E E对上一层的 O j O_j Oj的偏导数 ∂ E ∂ O j \dfrac {\partial E}{\partial O_{j}} ∂Oj∂E,公式(1.10)和(1.8)完全对应,上述过程充分体现了链式法则。