简介

BP人工神经网络算法(BcakPropagation Artificial Neural Network)简称BPANN,是由Rumelhart和McCelland为首的科学家小组在1986年提出,是一种按误差反向传播算法训练的多层前馈网络,也是如今应用最广泛的神经网络模型之一。
BPANN是基于人工神经网络系统而产生的算法,相较于后者有大规模并行处理、分布式信息储存、良好的自组织学习能力,前者在它的基础上具有更强的非线性映射能力和泛化能力以及容错能力,而且网络的中间层数、各层单元数及学习率参数可根据实际情况而定,灵活性更大,因而在许多应用领域起到了重要作用。

BPANN的简单原理

BPANN有着前传回传两个流程。输入数据通过神经网络的处理得到一个输出值,当实际输出与期望输出不符时,由期望值减去输出值,得到误差值。误差值回传,计算各层的梯度值,通过计算不断更新修正各层权重,向隐含层和输入层逐层反转。迭代的过程也就是神经网络学习训练的过程,这个过程将持续到输出值的误差减少到可以接受的程度,或者达到预先设定的学习次数为止。

BPANN的基本结构

人工神经网络是由大量的“神经元”(节点)相互连接构成。而每个节点都代表了一个特定的输出函数,被称为激活函数(Activation Function)。每两个节点之间的连接都代表了一个此连接信号的加权值,被称作权重(Weight)。于是,网络的输出则以此连接方式,因权重和激励函数的不同而不同。激活函数主要有两种,分别是sigmoid和relu函数,本章使用sigmoid函数。
公式为:

BP神经网络是一个三层的网络:

  • 输入层(Input Layer):输入层各神经元负责接收来自外界的输入信息,并传递给中间各层神经元;
  • 隐含层(Hidden Layer):也被称为中间层,负责处理信息,根据实际情况,中间层可以设定为单隐含层或者多隐含层结构;
  • 输出层(Output Layer):接收最后一个隐含层传递的信息,经过处理向外界输出;

BPANN简单模型

神经元

神经网络中最基本的单元就是神经元模型,在生物神经网络中,每个神经元由多个树突、一个轴突,和一个细胞体构成。树突用于传入来自其它神经元的神经冲动,而轴突则把神经冲动传出到其它神经元。
在BPANN中,每个神经元都接受来自其它神经元输入,每个输入都通过一个带有权重的连接传递,神经元把这些信号加起来得到一个总输入值然后通过一个“激活函数”处理得到最终的输出,这个输出又会作为之后神经元的输入一层一层传递下去。
如图所示:

网络

在BPANN中,网络分为三个部分:输入层、隐含层、输出层。而隐含层可以设定单/多层隐含层。
如图所示:

流程

BPANN简单应用:奇偶数识别

  • BPANN的设定
    在这里我们设定输入层的神经元节点为32个,单隐含层且节点为15个,输入层节点为1个,使用sigmoid函数,学习率参数为0.1。
  • 初始化数据
    首先将传入的每一个整数都转换为32位的二进制数;然后我们把各层各个神经元的权重初始化,使用的是0到1之间的随机数。
  • 前向传播
    在前传过程中,初始化的数据通过输入层传给隐含层,计算出每个神经元v值,经过sigmoid函数的处理得到隐含层每一个神经元的输出;隐含层的输出作为输出层的输入,通过相同的计算,得到网络的输出。
  • 计算误差
    我们可以根据一个整数所转换成的32位二进制数的最后一位数来判断这个整数的奇偶:若最后一位是0则该整数位偶数,若最后一位是1则该整数位奇数。所以我们将32位二进制数的最后一位数作为期望值,用来与网络输出比较,计算出误差。公式为:误差 = 预期值 - 输出值
  • 误差容忍
    误差不在容忍范围内则进行反向传播,若在容忍范围内则固定权重。
  • 反向传播
    在回传过程中,我们要计算出输出层与隐含层的局域梯度,用于更新各层的权重。公式如下:

  • 迭代训练数据
    在这里我们训练1000个整数,100次迭代,通过比较得到正确率,模型训练完成,得到最后的权重
  • 测试数据
    传入10000个整数,计算正确率是否符合要求。
Last modification:July 20th, 2020 at 08:37 am
请随意~