神经网络反向传播算法
这是典型的三层神经网络的基本构成,LayerL1是输入层,LayerL1是隐藏层,,LayerL1是隐含层,我们现在手里有一堆数据{x1,x2,x3,…,xn},输出也是一堆数据{y1,y2,y3,…,yn},现在要他们在隐含层做某种变换,让你把数据灌进去后得到你期望的输出。
以下通过具体的例子说明神经网络算法的正向传播和反向传播过程:
假设存在如上的神经网络模型,期望输出O1=0.01,O2=0.99。以下是训练算法的具体细节:
正向传播
- 输入层–>隐藏层计算方式,激活函数采用sigmoid:
neth1outh1neth2outh2=w1∗i1+w2∗i2+b1=0.15∗0.05+0.2∗0.1+0.35=0.3775=1+e−neth11=1+e−0.37751=0.593269992=w3∗i1+w4∗i2+b1=0.25∗0.05+0.3∗0.1+0.35=0.3925=1+e−neth21=1+e−0.39251=0.596884378
其中neti表示神经元i的输入;outi表示神经元i的输出,以下公式通用。
- 隐藏层–>输出层:
neto1outo1neto2outo2=outh1∗w5+outh2∗w6+b2=1.105905967=1+e−neto11=1+e−1.1059059671=0.75136507=outh1∗w7+outh2∗w8+b2=1.2249214039=1+e−neto21=1+e−1.22492140391=0.772928465
3.计算总误差:
Etotal=i=1∑n21(targeti−outoi)2
其中targeti为期望输出,outoi为实际输出;
代入公式如下:
Eo1Eo2Etotal=21(target1−outo1)2=21(0.01−0.75136507)2=0.274811083=21(target2−outo2)2=21(0.99−0.772928465)2=0.023560026=Eo1+Eo2=0.298371109
反向传播
隐藏层–>输出层权值更新:
运用链式求导法则,激活函数采用sigmoid,进行隐藏层–输出层权值的更新:
这里以w5权值更新举例:
∂w5∂Etotal∂outo1∂Etotal∂neto1∂outo1∂w5∂neto1∂w5∂Etotal=∂outo1∂Etotal∗∂neto1∂outo1∗∂w5∂neto1=∂outo1∂(∑i=1n21(targeti−outoi)2)=∂outo1∂Eo1=(target1−out01)∗(−1)=(0.01−0.75136507)∗(−1)=0.74136507=outo1∗(1−outo1)=0.75136507∗(1−0.75136507)=0.1868156602=neth1=0.593269992=0.74136507∗0.1868156602∗0.593269992=0.082167041
总结上述公式:
∂w5∂Etotal=(target1−outo1)∗outo1∗(1−outo1)∗outh1
用δo1来表示输出层的残差:
δo1=∂outo1∂Etotal∗∂neto1∂outo1=∂neto1∂Etotal=(target1−outo1)∗outo1∗(1−outo1)
因此,整体误差对w5的偏导可以记成:
∂w5∂Etotal=δo1∗outh1
如果输出层误差计为负的话,也可以写成:
∂w5∂Etotal=(−1)∗δo1∗outh1
最后,假设我们的学习率η设为0.5,更新w5的权值:
w5+=w5−η∗∂w5∂Etotal=0.4−0.5∗0.082167041=0.35891648
按照上述方法计算w6+,w7+,w8+:
w6+w7+w8+=0.408666186=0.511301276=0.561370121
输入层–>隐藏层权值更新:
方法基本同上述一致,运用反复进行链式求导:
∂w1∂Etotal=∂outh1∂Etotal∗∂neth1∂outh1∗∂w1∂neth1
其中,
∂outh1∂Etotal∂outh1∂Eo1∂outh1∂Eo2∂outh1∂Etotal∂neth1∂outh1∂w1∂neth1∂w1∂Etotal=∂outh1∂Eo1+∂outh1∂Eo2=∂outo1∂Eo1∗∂neto1∂outo1∗∂outh1∂neto1=0.74136507∗0.186815602∗w5=0.055399425=−0.019049119=0.055399425+(−0.019049119)=0.036350306=outh1∗(1−outh1)=0.593269992∗(1−0.593269992)=0.241300709=ii=0.05=0.036350306∗0.241300709∗0.05=0.00438568
为了简化公式,用δh1表示隐含层单元h1的误差:
∂w1∂Etotal=(i=1∑n∂outoi∂Eoi∗∂netoi∂outoi∗∂outh1∂netoi)∗∂neth1∂outh1∗∂w1∂neth1=(i=1∑nδoi∗wh1oi)∗outh1∗(1−outh1)∗i1=δh1∗i1
其中,wh1oi表示隐藏神经元h1到输出神经元oi 的权值。
更新w1的权值:
w1+=w1−η∗∂w1∂Etotal=0.15−0.5∗0.00438568=0.149780716
其他隐藏层中权值的更新方法类似,这里就不再列举了。
以上就是神经网络算法中正向传播和反向传播的内容。