反向传播(Back Propagation)

本文深入解析了反向传播算法在神经网络训练中的应用,详细介绍了如何通过链式法则计算损失函数对权重参数的偏导数,实现梯度下降法的优化。

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

反向传播

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

参考上图,
① 对于一个神经元jjj,它的输出被定义为,
(1.1)Oj=φ(netj)=φ(∑k=1NwkjOk) O_j = \varphi(net_j)=\varphi(\sum_{k=1}^N w_{kj}O_k) \tag{1.1} Oj=φ(netj)=φ(k=1NwkjOk)(1.1)
其中,wkjw_{kj}wkj表示神经元kkkjjj之间的权重,OkO_kOk是上一层神经元的输出。φ\varphiφ为激活函数,这里取为logisticlogisticlogistic函数,
(1.2)φ(z)=11+e−z \varphi(z)=\frac{1}{1+ e^{-z} } \tag{1.2} φ(z)=1+ez1(1.2)
logisticlogisticlogistic函数的求导公式为,
(1.3)dφ(z)dz=φ(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=12(t−y)2 E=\dfrac {1}{2}\left( t-y\right) ^{2} \tag{1.4} E=21(ty)2(1.4)
其中,yyy为输出层的输出,ttt为期望输出。

考虑wkjw_{kj}wkj对于EEE的影响,是OjO_jOj间接影响的,因此可得下面的公式(这里假设jjj前一层神经元为iii,即求对wijw_{ij}wij的偏导数),
(1.5)∂E∂wij=∂E∂Oj∂Oj∂netj∂netj∂wij \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} wijE=OjEnetjOjwijnetj(1.5)
其中,后两个偏导数可以直接求出,∂Oj∂netj\frac{\partial O_{j}}{\partial net_{j}}netjOj参考公式1.3{1.3}1.3∂netj∂wij=Oi\dfrac {\partial net_{j}}{\partial w_{ij}}=O_iwijnetj=Oi。但是此时,∂E∂Oj\dfrac{\partial E}{\partial {O_j}}OjE,依然无法求出。不过如果jjj是输出层,因为Oj=yO_j=yOj=y,此时可求出EEEOjO_jOj的偏导数,
(1.6)∂E∂Oj=∂E∂y=∂∂y12(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} OjE=yE=y21(ty)2=yt(1.6)
下面就到了最关键的一步,此时对于非输出层,我们无法直接求出∂E∂Oj\frac{\partial E}{\partial {O_j}}OjE,考虑将OjO_jOjEEE的作用向jjj的下一层迭代,我们把EEE考虑成一个输入由L=u,v…,wL=u,v \dots,wL=u,v,w这些神经元组成的函数,OjO_jOju,v,wu,v,wu,v,w这些神经元的输入,OjO_jOj直接构成了对netu,netv,netwnet_u,net_v,net_wnetu,netv,netw的影响。
(1.7)∂E(Oj)∂Oj=∂E(netu,netv,…,netw)∂Oj \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} OjE(Oj)=OjE(netu,netv,,netw)(1.7)
利用全微分形式,可以获取到一个递归方程,
(1.8)∂E∂Oj=∑l∈L(∂E∂netl∂netl∂Oj)=∑l∈L(∂E∂Ol∂Ol∂netlwjl) \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} OjE=lL(netlEOjnetl)=lL(OlEnetlOlwjl)(1.8)

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

一个例子

下面以一个简单的网络来对上面的反向传播结果进行验证,如下图所示,
在这里插入图片描述
(1.9)∂E∂wj−1,j=∂E∂Oj∂Oj∂netj∂netj∂wj−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} wj1,jE=OjEnetjOjwj1,jnetj(1.9)

其中,上式∂E∂Oj=∂E∂y\dfrac {\partial E}{\partial O_j}=\dfrac {\partial E}{\partial y}OjE=yE,三项偏导数都可求出。接着求∂E∂wj−2,j−1\dfrac {\partial E}{\partial w_{j-2,j-1}}wj2,j1E

(1.10)∂E∂wj−2,j−1=∂E∂Oj−1∂Oj−1∂netj−1∂netj−1∂wj−2,j−1=∂E∂Oj∂Oj∂netj∂netj∂Oj−1∂Oj−1∂netj−1∂netj−1∂wj−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} wj2,j1E=Oj1Enetj1Oj1wj2,j1netj1=OjEnetjOjOj1netjnetj1Oj1wj2,j1netj1(1.10)

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值