2.4.1 BP神经网络
BP神经网络是一种按误差反向传播(简称误差反传)训练的多层前馈网络,其算法称为BP算法。它的基本思想是梯度下降法,利用梯度搜索技术,以期使网络的实际输出值和期望输出值的误差均方差为最小。
基本BP算法包括信号的前向传播和误差的反向传播两个过程,即计算误差输出时按从输入到输出的方向进行,而调整权值和阈值则从输出到输入的方向进行。正向传播时,输入信号通过隐含层作用于输出节点,经过非线性变换,产生输出信号,若实际输出与期望输出不相符,则转入误差的反向传播过程。误差反传是将输出误差通过隐含层向输入层逐层反传,并将误差分摊给各层所有单元,以从各层获得的误差信号作为调整各单元权值的依据。调整输入节点与隐层节点的连接强度和隐层节点与输出节点的连接强度及阈值,使误差沿梯度方向下降,经过反复学习训练,确定与最小误差相对应的网络参数(权值和阈值),训练即告停止。此时经过训练的神经网络即能对类似样本的输入信息,自行处理输出误差最小的经过非线形转换的信息。
如图2.1所示是含有一个隐藏层的神经网络模型。
图2.1 BP网络示例
BP神经网络的过程主要分为两个阶段:第1个阶段是信号的前向传播,从输入层经过隐含层,最后到达输出层;第2个阶段是误差的反向传播,从输出层到隐含层,最后到输入层,依次调节隐含层到输出层的权重和偏置,输入层到隐含层的权重和偏置。
神经网络的基本组成单元是神经元。神经元的通用模型如图2.2所示。其中常用的激活函数有阈值函数、Sigmoid函数和双曲正切函数。
图2.2 神经元模型示例
神经元的输出为:
神经网络是将多个神经元按一定规则连接在一起而形成的网络,如图2.3所示。
图2.3 神经网络示例
从图2.3可以看出,一个神经网络包括输入层、隐含层(中间层)和输出层。输入层神经元个数与输入数据的维数相同,输出层神经元个数与需要拟合的数据个数相同,隐含层神经元个数与层数就需要设计者自己根据一些规则和目标来设定。在深度学习出现之前,隐含层的层数通常为一层,即通常使用的神经网络是三层网络。
BP网络采用的传递函数是非线性变换函数——Sigmoid函数(又称S函数)。其特点是函数本身及其导数都是连续的,因而在处理上十分方便。选择这个函数的缘由将在介绍BP网络的学习算法时进一步介绍。S函数有单极性S型函数和双极性S型函数两种。单极性S型函数定义为
函数曲线如图2.4所示。
图2.4 Sigmoid函数曲线
双极性S型函数定义为
使用S型激活函数时,输入
输出
输出的导数
使用S型激活函数时,BP网络的输出及其导数图形如图2.5所示。
图2.5 BP网络的输出曲线及其导数图形
根据S型激活函数的图形:
net在-5~0时导数值为正,且导数值逐渐增大,说明此时f(x)在逐渐变大且变大的速度越来越快。
net在0~5时导数值为正,且导数值逐渐减小,说明此时f(x)在逐渐变大但是变大的速度越来越慢。
对神经网络进行训练,我们应该尽量将net的值控制在收敛比较快的范围内。
有监督的BP网络的学习过程如图2.6所示。
图2.6 BP网络的学习过程