反向传播(Back Propagation)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lewif/article/details/88053174

在利用梯度下降法对神经网络权重等参数进行训练时,需要利用反向传播去计算损失函数对权重参数的偏导数。

反向传播

下面分析是如何反向传播的(分析时不考虑偏置项),
在这里插入图片描述

参考上图,
① 对于一个神经元 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}
其中, w k j w_{kj} 表示神经元 k k j j 之间的权重, O k O_k 是上一层神经元的输出。 φ \varphi 为激活函数,这里取为 l o g i s t i c logistic 函数,
(1.2) φ ( z ) = 1 1 + e z \varphi(z)=\frac{1}{1+ e^{-z} } \tag{1.2}
l o g i s t i c 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}
② 损失函数定义为,
(1.4) E = 1 2 ( t y ) 2 E=\dfrac {1}{2}\left( t-y\right) ^{2} \tag{1.4}
其中, y y 为输出层的输出, t t 为期望输出。

考虑 w k j w_{kj} 对于 E E 的影响,是 O j O_j 间接影响的,因此可得下面的公式(这里假设 j j 前一层神经元为 i i ,即求对 w i j w_{ij} 的偏导数),
(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}
其中,后两个偏导数可以直接求出, O j n e t j \frac{\partial O_{j}}{\partial net_{j}} 参考公式 1.3 {1.3} n e t j w i j = O i \dfrac {\partial net_{j}}{\partial w_{ij}}=O_i 。但是此时, E O j \dfrac{\partial E}{\partial {O_j}} ,依然无法求出。不过如果 j j 是输出层,因为 O j = y O_j=y ,此时可求出 E E O j O_j 的偏导数,
(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}
下面就到了最关键的一步,此时对于非输出层,我们无法直接求出 E O j \frac{\partial E}{\partial {O_j}} ,考虑将 O j O_j E E 的作用向 j j 的下一层迭代,我们把 E E 考虑成一个输入由 L = u , v , w L=u,v \dots,w 这些神经元组成的函数, O j O_j u , v , w u,v,w 这些神经元的输入, O j O_j 直接构成了对 n e t u , n e t v , n e t w net_u,net_v,net_w 的影响。
(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}
利用全微分形式,可以获取到一个递归方程,
(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}

通过递归方程,我们可以从输出层开始对需要求的偏导数进行递归,因此得名反向传播。

一个例子

下面以一个简单的网络来对上面的反向传播结果进行验证,如下图所示,
在这里插入图片描述
(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}

其中,上式 E O j = E y \dfrac {\partial E}{\partial O_j}=\dfrac {\partial E}{\partial y} ,三项偏导数都可求出。接着求 E w j 2 , j 1 \dfrac {\partial E}{\partial w_{j-2,j-1}}

(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}

在上式中, 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}} ,求 E O j 1 \dfrac {\partial E}{\partial O_{j-1}} 时先求出 E E 对上一层的 O j O_j 的偏导数 E O j \dfrac {\partial E}{\partial O_{j}} ,公式(1.10)和(1.8)完全对应,上述过程充分体现了链式法则

猜你喜欢

转载自blog.csdn.net/lewif/article/details/88053174