重磅推荐专栏: 《Transformers自然语言处理系列教程》
手把手带你深入实践Transformers,轻松构建属于自己的NLP智能应用!
http://blog.csdn.net/u011239443/article/details/74859614
2.4 反向传播的四个基本方程
( B P 1 ) : δ L = ∇ a C ⊙ σ ′ ( z L ) \large \color{blue}{ (BP1):δ ^L = ∇ _a C ⊙ σ ′ (z ^L ) } (BP1):δL=∇aC⊙σ′(zL)
( B P 2 ) : δ l = ( ( w l + 1 ) T δ l + 1 ) ⊙ σ ′ ( z l ) \large \color{blue}{ (BP2):δ ^l = ((w ^{l+1} ) ^T δ ^{l+1} ) ⊙ σ ′ (z^ l )} (BP2):δl=((wl+1)Tδl+1)⊙σ′(zl)
( B P 3 ) : ∂ C ∂ b l j = δ j l \large \color{blue}{ (BP3): \frac{∂C}{ ∂b_{lj} } = δ_j^l} (BP3):∂blj∂C=δjl
( B P 4 ) : ∂ C ∂ w j k l = a k l − 1 δ j l \large \color{blue}{ (BP4): \frac{∂C}{ ∂w^l_{jk} } = a_k^{l-1}δ_j^l} (BP4):∂wjkl∂C=akl−1δjl
问题一:
另一种反向传播方程的表示方式: 我已经给出了使用 Hadamard 乘积的反向传播的公式(尤其是 (BP1) 和 (BP2))。如果你对这种特殊的乘积不熟悉,可能会有一些困惑。下面还有一种表示方式,那就是基于传统的矩阵乘法,某些读者可能会觉得很有启发。(1)证明(BP1) 可以写成:
δ L = Σ ′ ( z L ) ∇ a C \large \color{blue}{ δ^L = Σ ′ (z^L )∇_a C} δL=Σ′(zL)∇aC
其中$ Σ ′ (z^L ) 是一个方阵 , 其对⻆线的元素是 是一个方阵,其对⻆线的元素是 是一个方阵,其对⻆线的元素是σ ′ (z_j^L )$,其他的元素均是 0。注意,这个矩阵通过一般的矩阵乘法作用在 ∇ a C ∇_a C ∇aC 上。
设:
∇
a
C
=
(
c
1
c
2
.
.
.
c
n
)
\large \color{blue}{ 设 :∇ _a C = \begin{pmatrix} c1\\ c2\\...\\cn \end{pmatrix} }
设:∇aC=
c1c2...cn
σ
′
(
z
L
)
=
(
σ
1
σ
2
.
.
.
σ
n
)
\large \color{blue}{σ ′ (z ^L ) = \begin{pmatrix} σ1\\ σ2\\...\\σn \end{pmatrix} }
σ′(zL)=
σ1σ2...σn
$\large \color{blue}{则: (BP1):δ ^L = ∇ _a C ⊙ σ ′ (z ^L ) = \begin{pmatrix} c1σ1\ c2σ2\…\cnσn \end{pmatrix} } $
$\large \color{blue}{ 由: Σ ′ (z^L ) =
\begin{pmatrix}
σ_1\
&σ_2 & & \text{0}\
&&…\
& \text{0} &&σ_{n-1}\
&&&& σ_n
\end{pmatrix}
} $
得:
Σ
′
(
z
L
)
∇
a
C
=
(
σ
1
σ
2
0
…
0
σ
n
−
1
σ
n
)
(
c
1
c
2
.
.
.
c
n
)
=
(
c
1
σ
1
c
2
σ
2
.
.
.
c
n
σ
n
)
=
δ
L
\large \color{blue}{得: Σ ′ (z^L )∇_a C = \begin{pmatrix} σ_1\\ &σ_2 & & \text{0}\\ &&…\\ & \text{0} &&σ_{n-1}\\ &&&& σ_n \end{pmatrix} \begin{pmatrix} c1\\ c2\\...\\cn \end{pmatrix} = \begin{pmatrix} c1σ1\\ c2σ2\\...\\cnσn \end{pmatrix} = δ^L}
得:Σ′(zL)∇aC=
σ1σ20…0σn−1σn
c1c2...cn
=
c1σ1c2σ2...cnσn
=δL
问题二:
证明 (BP2) 可以写成
δ l = Σ ′ ( z l ) ( w l + 1 ) T δ l + 1 \large \color{blue}{ δ^l = Σ ′ (z^l )(w^l+1 )^T δ^{l+1}} δl=Σ′(zl)(wl+1)Tδl+1
设:
w
=
(
w
1
,
w
2
,
.
.
.
,
w
n
)
\large \color{blue}{ 设 :w = \begin{pmatrix} w1, w2,...,wn \end{pmatrix} }
设:w=(w1,w2,...,wn)
δ
=
(
δ
1
δ
2
.
.
.
δ
n
)
\large \color{blue}{ δ = \begin{pmatrix} δ1\\ δ2\\...\\δn \end{pmatrix} }
δ=
δ1δ2...δn
则:
δ
l
=
(
w
1
δ
1
σ
1
w
2
δ
2
σ
1
.
.
.
w
n
δ
n
σ
n
)
\large \color{blue}{ 则:δ^l = \begin{pmatrix} w1δ1σ1\\ w2δ2σ1\\...\\wnδnσn \end{pmatrix} }
则:δl=
w1δ1σ1w2δ2σ1...wnδnσn
Σ ′ ( z l ) ( w l + 1 ) T δ l + 1 = ( σ 1 σ 2 0 … 0 σ n − 1 σ n ) ( w 1 w 2 . . . w n ) ( δ 1 δ 2 . . . δ n ) = ( w 1 δ 1 σ 1 w 2 δ 2 σ 1 . . . w n δ n σ n ) = δ l \large \color{blue}{ Σ ′ (z^l )(w^l+1 )^T δ^{l+1} = \begin{pmatrix} σ_1\\ &σ_2 & & \text{0}\\ &&…\\ & \text{0} &&σ_{n-1}\\ &&&& σ_n \end{pmatrix} \begin{pmatrix} w1\\ w2\\...\\wn \end{pmatrix}\begin{pmatrix} δ1\\ δ2\\...\\δn \end{pmatrix}= \begin{pmatrix} w1δ1σ1\\ w2δ2σ1\\...\\wnδnσn \end{pmatrix} = δ^l } Σ′(zl)(wl+1)Tδl+1= σ1σ20…0σn−1σn w1w2...wn δ1δ2...δn = w1δ1σ1w2δ2σ1...wnδnσn =δl
问题三
结合(1)和(2)证明
δ l = Σ ′ ( z l ) ( w l + 1 ) T . . . Σ ′ ( z L − 1 ) ( w L ) T Σ ′ ( z L ) ∇ a C δ^l = Σ ′ (z^l )(w^{l+1})^T . . . Σ ′ (z^{L−1} )(w^L )^T Σ ′ (z^L )∇_a C δl=Σ′(zl)(wl+1)T...Σ′(zL−1)(wL)TΣ′(zL)∇aC
δ l = Σ ′ ( z l ) ( w l + 1 ) T δ l + 1 \large \color{blue}{ δ^l = Σ ′ (z^l )(w^{l+1} )^T δ^{l+1}} δl=Σ′(zl)(wl+1)Tδl+1
= Σ ′ ( z l ) ( w l + 1 ) T Σ ′ ( z l + 1 ) ( w l + 2 ) T δ l + 2 \large \color{blue}{= Σ ′ (z^l )(w^{l+1} )^TΣ ′ (z^{l+1} )(w^{l+2} )^T δ^{l+2} } =Σ′(zl)(wl+1)TΣ′(zl+1)(wl+2)Tδl+2
= . . . = Σ ′ ( z l ) ( w l + 1 ) T . . . Σ ′ ( z L − 1 ) ( w L ) T δ L \large \color{blue}{= ... = Σ ′ (z^l )(w^{l+1})^T . . . Σ ′ (z^{L−1} )(w^L )^Tδ^L} =...=Σ′(zl)(wl+1)T...Σ′(zL−1)(wL)TδL
= Σ ′ ( z l ) ( w l + 1 ) T . . . Σ ′ ( z L − 1 ) ( w L ) T Σ ′ ( z L ) ∇ a C \large \color{blue}{ = Σ ′ (z^l )(w^{l+1})^T . . . Σ ′ (z^{L−1} )(w^L )^T Σ ′ (z^L )∇_a C} =Σ′(zl)(wl+1)T...Σ′(zL−1)(wL)TΣ′(zL)∇aC
2.5 四个基本方程的证明
问题一
证明方程 (BP3) 和 (BP4)。
- (BP3)
$\large \color{blue}{ δ_j^l = \frac{∂C}{∂b^l_j} \frac{∂bl_j}{∂zl_j} = \frac{∂C}{∂b^l_j} \frac{∂(z_j^{l} - \sum_kw_{jk}{l}a{l-1}_k)}{∂z^l_j} = \frac{∂C}{∂b^l_j}} $
- (BP4)
∂ C ∂ w j k l = a k l − 1 δ j l = > ∂ C ∂ w j k l = a k l − 1 ∂ C ∂ z j l = > ∂ z j l ∂ w j k l = a k l − 1 \large \color{blue}{ \frac{∂C}{ ∂w^l_{jk} }= a_k^{l-1}δ_j^l => \frac{∂C}{ ∂w^l_{jk} }= a_k^{l-1}\frac{∂C}{∂z^l_j} => \frac{∂z^l_j}{ ∂w^l_{jk} }= a_k^{l-1} } ∂wjkl∂C=akl−1δjl=>∂wjkl∂C=akl−1∂zjl∂C=>∂wjkl∂zjl=akl−1
由于 ∂ z j l ∂ w j k l = ∂ ( ∑ j w j k l a k l − 1 + b j l ) ∂ w j k l = a k l − 1 , 所以命题成立。 \large \color{blue}{ 由于 \frac{∂z^l_j}{ ∂w^l_{jk} }= \frac{∂(\sum_jw_{jk}^la_k^{l-1}+b_j^{l})}{ ∂w^l_{jk} } = a_k^{l-1} ,所以命题成立。} 由于∂wjkl∂zjl=∂wjkl∂(∑jwjklakl−1+bjl)=akl−1,所以命题成立。
#2.6 反向传播算法
问题一
使用单个修正的神经元的反向传播。假设我们改变一个前馈网络中的单个神经元,使得那个神经元的输出是 f ( ∑ j w j x j + b ) f (\sum_j w_j x_j + b) f(∑jwjxj+b),其中 f 是和 S 型函数不同的某一函数。我们如何调整反向传播算法?
把$ σ() 换成 换成 换成f()$
问题二
线性神经元上的反向传播假设我们将非线性神经元的 σ 函数替换为 σ(z) = z。重写反向传播算法。
(2)中
a
l
=
z
l
a^l = z^l
al=zl
(3)中
δ
L
=
∇
a
C
δ^L = ∇_a C
δL=∇aC
(4)中
δ
l
=
(
(
w
l
+
1
)
T
δ
l
+
1
)
δ^l = ((w^l+1 )^T δ^{l+1} )
δl=((wl+1)Tδl+1)