tensorflow入门教程(十一)反向传播BP

1、概述

全连接神经网络和卷积神经网络用的是反向传播(BackPropagation,BP),而卷积神经网络用的是随时间反向传播(BackPropagation Through Time,BPTT),这一节先讲BP。

2、网络结构

假设有如下网络,

tensorflow入门教程(十一)反向传播BP

 

第一层为输入层,输入节点为x1,x2, 偏置为b1,第二层为隐含层,节点为a1,a2,偏置为b2,第三层为输出层,节点为y1,y2,**函数为Sigmoid函数。

3、初始化

目标:

输入x1=0.10,x2=0.50时,输出接近Yout1=0.01,Yout2=0.89

分别对上面网络赋初值,

输入:x1=0.1, x2 = 0.5

权重:w1=0.15, w2=0.30, w3=0.45, w4=0.60

      w5=0.25, w6=0.40, w7=0.55, w8=0.65

偏置:b1=0.54, b2=0.87

 

4、前向传播

4.1、输入层-->隐含层

计算a1的加权和,将上面初始化的值带入运算即可,

NETa1 = x1×w1 + x2×w3 +b1=0.1×0.15+0.5×0.45+0.54=0.78

NETa2 = x1×w2 + x2×w4 +b1=0.1×0.30+0.5×0.60+0.54=0.87

对NETa1和NETa2使用Sigmoid**函数,得到OUTa1,OUTa2,

 

tensorflow入门教程(十一)反向传播BP

 

4.2、隐含层-->输出层

同理可得,

NETy1=OUTa1×w5 + OUTa2×w7 +b2=0.6857×0.25+0.7047×0.55+0.87=1.4290

NETy2=OUTa1×w6 + OUTa2×w8 +b2=0.6857×0.40+0.7047×0.65+0.87=1.6023

对NETy1和NETy2使用Sigmoid**函数,得到OUTy1,OUTy2

 

tensorflow入门教程(十一)反向传播BP

 

5、反向传播

5.1、计算均方误差

tensorflow入门教程(十一)反向传播BP

5.2、隐含层-->输出层权值更新

以更新w5为例,要想知道w5对整体误差产生多少影响,就用整体误差对w求偏导:

tensorflow入门教程(十一)反向传播BP

对上面每个式子分别计算:

 

  • 解 tensorflow入门教程(十一)反向传播BP

tensorflow入门教程(十一)反向传播BP

tensorflow入门教程(十一)反向传播BP

 

  •  解tensorflow入门教程(十一)反向传播BP

tensorflow入门教程(十一)反向传播BP

tensorflow入门教程(十一)反向传播BP

 

  • tensorflow入门教程(十一)反向传播BP

由NETy1=OUTa1×w5 + OUTa2×w7 + b2

tensorflow入门教程(十一)反向传播BP

 

  • 所以得到

tensorflow入门教程(十一)反向传播BP

假设β为学习率,β=0.1

tensorflow入门教程(十一)反向传播BP

同理可更新w6,w7,w8的值。

 

5.3、输入层-->隐含层权值更新

上面计算总误差对w5的偏导时,是从out(y1)->net(y1)->w5,而输入层到隐含层之间的权值更新,是out(a1)->net(a1)->w1,out(a1)会接收E(y1)和E(y2)传来的误差,也要计算在内。

得式:

tensorflow入门教程(十一)反向传播BP

计算tensorflow入门教程(十一)反向传播BP

tensorflow入门教程(十一)反向传播BP

先计算:

tensorflow入门教程(十一)反向传播BP

再计算tensorflow入门教程(十一)反向传播BP

tensorflow入门教程(十一)反向传播BP

然后计算tensorflow入门教程(十一)反向传播BPtensorflow入门教程(十一)反向传播BP相加得到总值tensorflow入门教程(十一)反向传播BP

接着计算tensorflow入门教程(十一)反向传播BPtensorflow入门教程(十一)反向传播BP,最后三者相乘,然后根据学习率更新权值。

 

总结:

 

  • 对于隐含层到输出层的权值更新,想更新哪个权值w,就用整体误差通过链式法则对其求偏导,再用该权值减去该偏导和学习率的乘积。
  •  对于输入层到隐含层的权值更新,与上面的方式类似,但是还需要考虑输出层传来的误差。