第一步、向前传播得到预测数据:向前传播的过程,即数据从输入层输入,经过隐含层,输出层的计算得到预测值,预测值为输出层的输出结果。网络层的输出即,该层中所有节点(神经元)的输出值的集合。我们以图一的神经网络结构为例,分析向前传播过程。
1.得到隐含层的输出y1,y2,y3:
2.获取到第二层的隐含层输出y4,y5,输入的数据也就是第一层隐含层的输出数据y1,y2,y3。
3、通过输出层,得到最后的预测值y。
第二步、反向传播更新权重:根据样本的真实类标,计算模型预测的结果与真实类标的误差。然后将该误差反向传播到各个隐含层。计算出各层的误差,再根据各层的误差,更新权重。
1.计算输出层的误差:其中z为该样本的类标
2计算第二层隐含层的误差
3.计算第一次隐含层的误差:
4、更新权重:新的权值=原权值+学习速率×该节点的误差×激励函数的导函数的值(f(e)的倒数)×与该节点相连的输入值
4.1更新输入层与第一层隐含层之间的权值:
4.2更新第一层隐含层与第二层隐含层之间的权值
4.3更新第二层隐含层与输出层之间的权值
以上就是反向传播的过程。误差从输出层反向的传到输入层,然后再从输入层向前更新权值。
(一)BP神经网络的设计
1.设计网络的结构:
本次实验采用java语言实现。设计了包含一个隐含层的神经网络,即一个2层的神经网络。
每层都含有一个一维X特征矩阵即为输入数据,一个二维W权值矩阵,一个一维的误差矩阵error,同时该神经网络中还包含了一个一维的目标矩阵target,记录样本的真实类标。
X特征矩阵:第一层隐含层的X矩阵的长度为输入层输入数据的特征个数+1,隐含层的X矩阵的长度则是上一层的节点的个数+1,X[0]=1。
W权值矩阵:第一维的长度设计为节点(即神经元)的个数,第二维的长度设计为上一层节点的个数+1;W[0][0]为该节点的偏置量
error误差矩阵:数组长度设计为该层的节点个数。
目标矩阵target:输出层的节点个数与其一致。
激活函数:采用sigmoid函数:1/1+e-x
2.神经网络的计算过程
按照以上的设计,向前传播得到下一层的输出结果,如图所示:
求误差过程,如图所示:
反向传播过程,调整权值,如图所示:
(二)BP神经网络的实现
一、向前传播得到预测数据:
1.初始化权值2.训练数据集:2.1、导入训练数据集和目标值;2.2、向前传播得到输出值;2.2.1、获取隐含层的输出2.2.2、获取输出层的输出二、反向传播更新权重1、获取输出层的误差;2、获取隐含层的误差;3、更新隐含层的权值;4、更新输出层的权值;三.测试神经网络3.3向前传播得到预测值;
代码如下:
(二)BP神经网络的测试
用上面实现的BP神经网络来训练模型,自动判断它是正数还是复数,奇数还是偶数.