基本概念
神经网络的代价函数是关于权重和偏置的多元函数且为复合函数,为求代价函数的最小值,可以使用求多元函数极小值的方法进行求解,因为最小值比如存在于极小值中。本文暂不讨论如何避免陷入局部最小值的方法,只讨论求极小值的方法。毫无疑问,代价函数在各个参数的偏导数为0的位置才是极小值位置。因此,反向传播的最终含义是求: ∂ C ∂ w j k l \frac{\partial C}{\partial w_{jk}^l} ∂wjkl∂C, ∂ C ∂ b j l \frac{\partial C}{\partial b_{j}^l} ∂bjl∂C。即代价函数对第 l − 1 l-1 l−1层上第 k k k个神经元连接第 l l l层第 j j j个神经元上的权重的偏导数、代价函数对 l l l层上第 j j j个神经元偏置的偏导数。
符号含义
- 第
l
l
l层上第
j
j
j个神经元的激活值(输出)为:
a i l = σ ( ∑ k w j k l a k l − 1 + b j l ) a_i^l = \sigma(\sum_k w_{jk}^l a_k^{l-1} + b_j^l) ail=σ(k∑wjklakl−1+bjl)
⇓ \Downarrow ⇓
a l = σ ( w l a l − 1 + b l ) a^l = \sigma(w^l a^{l-1} + b^l) al=σ(wlal−1+bl)
其中 σ \sigma σ表示激活函数,常用的有sigmoid、relu、softmax、tanh等。 ⇓ \Downarrow ⇓ 表示转化为向量形式。 - 带权输入,即神经元激活函数的输入值:
z l = w l a l − 1 + b l z^l = w^l a^{l-1} + b^l zl=wlal−1+bl - 第
l
l
l层上第
j
j
j个神经元的误差(误差对该神经元激活函数输入的偏导数):
δ j l = ∂ C ∂ z j l \delta_j^l=\frac{\partial C}{\partial z_j^l} δjl=∂zjl∂C
四个基本方程
某个神经元上对该神经元的带权输入偏导数就是对该参数的误差
某个神经元上对某个参数的偏导数就是对该参数的变化率
1. 输出层误差方程(
B
P
1
BP1
BP1):(第
j
j
j个输出神经元的误差)
δ
j
o
u
t
p
u
t
=
∂
C
∂
a
j
o
u
t
p
u
r
σ
′
(
z
j
o
u
t
p
u
t
)
\delta^{output}_{j}=\frac{\partial C}{\partial a_j^{outpur}}\sigma^\prime(z^{output}_j)
δjoutput=∂ajoutpur∂Cσ′(zjoutput)
⇓
\Downarrow
⇓
δ
o
u
t
p
u
t
=
∇
a
C
⨀
σ
′
(
z
j
o
u
t
p
u
t
)
\delta^{output}= \nabla_{a}C \bigodot \sigma^\prime(z^{output}_j)
δoutput=∇aC⨀σ′(zjoutput)
其中
∇
a
C
\nabla_{a}C
∇aC被定义为一个向量,其元素就是代价函数对输出神经元激活值的偏导数。
⨀
\bigodot
⨀ 为Hadamard乘积,表示为各个元素的乘积,两个向量的Hadamard乘积依然是向量。
2. 使用
δ
l
+
1
\delta^{l+1}
δl+1来表示当前层误差
δ
l
\delta^{l}
δl(
B
P
2
BP2
BP2):
δ
l
=
(
(
ω
l
+
1
)
T
δ
l
+
1
)
⨀
σ
′
(
z
l
)
\delta^l = ((\omega^{l+1})^T\delta^{l+1})\bigodot \sigma^\prime(z^l)
δl=((ωl+1)Tδl+1)⨀σ′(zl)
推导:
∵
δ
l
+
1
=
∂
C
∂
z
l
+
1
\because \delta^{l+1}=\frac{\partial C}{\partial z^{l+1}}
∵δl+1=∂zl+1∂C
z
l
+
1
=
∑
i
n
(
w
i
l
+
1
a
i
l
+
b
i
l
+
1
)
z^{l+1}= \sum_i^n(w^{l+1}_i a^{l}_i + b^{l+1}_i)
zl+1=i∑n(wil+1ail+bil+1)
a
l
=
σ
(
z
l
)
a^l =\sigma(z^l)
al=σ(zl)
根据链式法则带入下列公式可得
B
P
2
BP2
BP2:
δ
l
=
∂
C
∂
z
l
\delta^{l}=\frac{\partial C}{\partial z^{l}}
δl=∂zl∂C
3.代价函数关于网络任意偏置的改变率(BP3):
δ
j
l
=
∂
C
∂
b
j
l
\delta^{l}_j=\frac{\partial C}{\partial b^{l}_j}
δjl=∂bjl∂C
4.代价函数关于网络任意权重的改变率(BP3):
第
l
l
l层上第
j
j
j个神经元与前一层第
k
k
k神经元连接的权重的偏导数
∂
C
∂
w
j
k
l
=
a
k
l
−
1
δ
j
i
\frac{\partial C}{\partial w^{l}_{jk}}=a_k^{l-1} \delta_j^i
∂wjkl∂C=akl−1δji
综述
综上所述,所谓反向传播过程也就是多元复合函数求导的过程,引入了误差的概念,使得计算梯度更便捷,而误差也就是代价函数对某个神经元的带权输出的偏导数,通过计算发现前后两层网络误差直接的关系,实现误差的由后往前传播。这种方式只需计算一次前向传播就可以计算出所有神经元的误差和梯度。