1 概述
反向传播其实是对权重和偏置变化影响代价函数过程的理解。最终极的含义就是计算偏导数 ∂ C ∂ ω j k l \frac{\partial C}{\partial\omega_{jk}^{l}} ∂ωjkl∂C和 ∂ C ∂ b j l \frac{\partial C}{\partial b_{j}^{l}} ∂bjl∂C。为了计算这些只,引入中间变量 δ j l \delta_j^l δjl,它表示在第 l l l层的第 j j j个神经元上的误差。反向传播将给出误差计算的流程,然后将其关联到 ∂ C ∂ ω j k l \frac{\partial C}{\partial\omega_{jk}^{l}} ∂ωjkl∂C和 ∂ C ∂ b j l \frac{\partial C}{\partial b_{j}^{l}} ∂bjl∂C上。因此,切确的说它应该叫做误差反向传播。由于人工神经网络的输出结果与实际结果存在误差,即计算估计值与实际值之间的误差,并将该误差从输出层向隐藏层反向传播,直至传播到输入层。
2 定义
定义第
l
l
l层的第
j
j
j个神经元上的误差为
δ
j
l
\delta_j^l
δjl,则有:
δ
j
l
=
∂
C
∂
z
j
l
\delta_j^l=\frac{\partial C}{\partial z_j^l}
δjl=∂zjl∂C
然后用下一层的误差
δ
l
+
\delta^{l+}
δl+表示成当前层的误差
δ
l
\delta^l
δl:
δ
l
=
(
(
ω
l
+
1
)
T
δ
l
+
1
)
σ
′
(
z
l
)
\delta^l=((\omega^{l+1})^T\delta^{l+1})\sigma^{\prime}(z^l)
δl=((ωl+1)Tδl+1)σ′(zl)
有了上述公式,我们可以将反向传播算法显式的表达出来:
- 输入样本 x x x,为输入层设置对应的激活值 α l \alpha^l αl;
- 前向传播:对于每一层
l
=
1
,
2
,
.
.
.
,
L
l=1,2,...,L
l=1,2,...,L,计算加权输出
z
z
z和激活值
α
\alpha
α:
z l = ω l α l − 1 + b l α l = σ ( z l ) z^l=\omega^l\alpha^{l-1}+b^l \\ \alpha^l=\sigma(z^l) zl=ωlαl−1+blαl=σ(zl) - 输出层误差
δ
L
\delta^L
δL:
δ L = ∂ C ∂ α ⨀ σ ( z ) \delta^L=\frac{\partial C}{\partial \alpha}\bigodot \sigma(z) δL=∂α∂C⨀σ(z) - 反向误差传播:对每一层,
L
=
L
−
1
,
L
−
2
,
.
.
.
,
2
L=L-1,L-2,...,2
L=L−1,L−2,...,2,计算:
δ l = ( ( ω l + 1 ) T δ l + 1 ) σ ′ ( z l ) \delta^l=((\omega^{l+1})^T\delta^{l+1})\sigma^{\prime}(z^l) δl=((ωl+1)Tδl+1)σ′(zl) - 输出:代价函数的梯度由 ∂ C ∂ ω j k l = α k l − 1 ⋅ δ j l \frac{\partial C}{\partial\omega_{jk}^{l}}=\alpha_k^{l-1}\cdot\delta_j^l ∂ωjkl∂C=αkl−1⋅δjl和 ∂ C ∂ b j l = δ j l \frac{\partial C}{\partial b_j^l}=\delta_j^l ∂bjl∂C=δjl给出。
3原理推导
如图所示,变量解释如下:
- ω j k l \omega_{jk}^{l} ωjkl:是指从 l − 1 l-1 l−1层的第 k k k个神经元到第 l l l层的第 j j j个神经元的权重;
- b l j b_l^j blj:是指第 l l l层的第 j j j个神经元的偏置;
- z j l z_j^l zjl:是指第 l l l层的第 j j j个神经元的加权输入;
-
α
j
l
\alpha_j^l
αjl:是指第
l
l
l层的第
j
j
j个神经元的加权激活值。
变量之间的关系如下: -
z
j
l
+
1
=
∑
k
ω
j
k
l
+
1
α
k
l
+
b
j
l
+
1
z_j^{l+1}=\sum_k\omega_{jk}^{l+1}\alpha_k^l+b_j^{l+1}
zjl+1=∑kωjkl+1αkl+bjl+1
指第 l + 1 l+1 l+1层的第 j j j个神经元的加权输入等于上一层所有激活值乘以对应第 l l l层对应神经元到第 l + 1 l+1 l+1层的第 j j j个神经元的权重加上第 l + 1 l+1 l+1层的第 j j j个神经元的偏置。 -
α
j
l
=
σ
(
z
j
l
)
\alpha_j^l=\sigma(z_j^l)
αjl=σ(zjl)
指第 l l l层的第 j j j个神经元的激活值等于第 l l l层的第 j j j个神经元的带权输入在激活函数上的作用值。
误差计算
即:
δ
L
=
∂
C
∂
α
⋅
σ
′
(
z
)
\delta^L=\frac{\partial C}{\partial \alpha}\cdot \sigma^{\prime}(z)
δL=∂α∂C⋅σ′(z)
证明:
因为
δ
j
l
=
∂
C
∂
z
j
l
\delta_j^l=\frac{\partial C}{\partial z_j^l}
δjl=∂zjl∂C
即第
;
;
;层的第
j
j
j个神经元的误差等于代价函数对第
l
l
l层的第
j
j
j个神经元带权输入的偏导数。这是因为带权输入直接与实际的输入相关联,如果带权输入产生了
Δ
z
j
l
\Delta z_j^l
Δzjl的变化,那么激活值则由
σ
(
z
j
l
)
\sigma(z_j^l)
σ(zjl)变为
σ
(
z
j
l
+
Δ
z
j
l
)
\sigma(z_j^l+\Delta z_j^l)
σ(zjl+Δzjl)。这个变化会向⽹络后⾯的层进⾏传播,最终导致整个代价产生
∂
C
∂
z
j
l
Δ
z
j
l
\frac{\partial C}{\partial z_j^l}\Delta z_j^l
∂zjl∂CΔzjl的变化,因此由此启发使用
∂
C
∂
z
j
l
\frac{\partial C}{\partial z_j^l}
∂zjl∂C来表征误差。根据链式法则:
δ
j
l
=
∂
C
∂
z
j
l
=
∂
C
∂
α
j
l
∂
α
j
l
∂
z
j
l
=
∂
C
∂
α
j
l
σ
′
z
j
l
\delta_j^l=\frac{\partial C}{\partial z_j^l}=\frac{\partial C}{\partial \alpha_j^l}\frac{\partial \alpha_j^l}{\partial z_j^l}=\frac{\partial C}{\partial \alpha_j^l}\sigma^{\prime}{z_j^l}
δjl=∂zjl∂C=∂αjl∂C∂zjl∂αjl=∂αjl∂Cσ′zjl
这是对于一个神经元而言的,那么推广之,得到公式:
δ
L
=
∂
C
∂
α
σ
′
(
z
)
\delta^L=\frac{\partial C}{\partial \alpha}\sigma^{\prime}(z)
δL=∂α∂Cσ′(z)
误差传播
即:
δ
l
=
(
(
ω
l
+
1
)
T
δ
l
+
1
)
σ
′
(
z
l
)
\delta^l=((\omega^{l+1})^T\delta^{l+1})\sigma^{\prime}(z^l)
δl=((ωl+1)Tδl+1)σ′(zl)
证明:
因为
δ
j
l
=
∂
C
∂
z
j
l
\delta_j^l=\frac{\partial C}{\partial z_j^l}
δjl=∂zjl∂C
由链式法则:
δ
j
l
=
∑
k
∂
C
∂
z
k
l
+
1
∂
z
k
l
+
1
∂
α
j
l
∂
α
j
l
∂
z
j
l
=
∑
k
δ
k
l
+
1
∂
(
ω
k
j
l
+
1
α
j
l
+
b
k
l
+
1
)
∂
α
j
l
σ
′
(
z
j
l
)
=
∑
k
δ
k
l
+
1
ω
k
j
l
+
1
σ
′
(
z
j
l
)
\delta_j^l=\sum_k \frac{\partial C}{\partial z_k^{l+1}}\frac{\partial z_k^{l+1}}{\partial \alpha_j^l}\frac{\partial \alpha_j^l}{\partial z_j^l}=\sum_k \delta_k^{l+1} \frac{\partial(\omega_{kj}^{l+1}\alpha_j^l+b_k^{l+1})}{\partial \alpha_j^l}\sigma^{\prime}(z_j^l)=\sum_k \delta_k^{l+1} \omega_{kj}^{l+1}\sigma^{\prime}(z_j^l)
δjl=k∑∂zkl+1∂C∂αjl∂zkl+1∂zjl∂αjl=k∑δkl+1∂αjl∂(ωkjl+1αjl+bkl+1)σ′(zjl)=k∑δkl+1ωkjl+1σ′(zjl)
最后推广到矩阵形式,得到:
δ
l
=
(
(
ω
l
+
1
)
T
δ
l
+
1
)
σ
′
(
z
l
)
\delta^l=((\omega^{l+1})^T\delta^{l+1})\sigma^{\prime}(z^l)
δl=((ωl+1)Tδl+1)σ′(zl)
代价函数对权重的偏导数
即:
∂
C
∂
ω
j
k
l
=
α
k
l
−
1
⋅
δ
j
l
\frac{\partial C}{\partial\omega_{jk}^{l}}=\alpha_k^{l-1}\cdot\delta_j^l
∂ωjkl∂C=αkl−1⋅δjl
证明:
∂
C
∂
ω
j
k
l
=
∂
C
∂
z
j
l
∂
z
j
l
∂
ω
j
k
l
=
δ
j
l
∂
(
ω
j
k
l
α
k
l
−
1
+
b
j
l
)
∂
ω
j
k
l
=
δ
j
l
α
k
l
−
1
\frac{\partial C}{\partial\omega_{jk}^{l}}=\frac{\partial C}{\partial z_j^l}\frac{\partial z_j^l}{\partial\omega_{jk}^{l}}=\delta_j^l\frac{\partial(\omega_{jk}^l\alpha_k^{l-1}+b_j^l)}{\partial\omega_{jk}^{l}}=\delta_j^l\alpha_k^{l-1}
∂ωjkl∂C=∂zjl∂C∂ωjkl∂zjl=δjl∂ωjkl∂(ωjklαkl−1+bjl)=δjlαkl−1
代价函数对偏置的偏导数
即:
∂
C
∂
b
j
l
=
δ
j
l
\frac{\partial C}{\partial b_j^l}=\delta_j^l
∂bjl∂C=δjl
证明:
由链式法则,并且已知
z
l
=
ω
l
α
l
−
1
+
b
l
z^l=\omega^l\alpha^{l-1}+b^l
zl=ωlαl−1+bl,得到:
∂
C
∂
b
j
l
=
∂
C
∂
z
j
l
∂
z
j
l
∂
b
j
l
=
δ
j
l
∂
(
ω
j
k
l
α
k
l
−
1
+
b
j
l
)
∂
b
j
l
=
δ
j
l
\frac{\partial C}{\partial b_j^l}=\frac{\partial C}{\partial z_j^l}\frac{\partial z_j^l}{\partial b_j^l} =\delta_j^l\frac{\partial(\omega_{jk}^l\alpha_k^{l-1}+b_j^l)}{\partial b_j^l}=\delta_j^l
∂bjl∂C=∂zjl∂C∂bjl∂zjl=δjl∂bjl∂(ωjklαkl−1+bjl)=δjl
感谢阅读。
如果觉得文章对你有所帮助,欢迎打赏哦~