5.4 BP 神经网络的基本原理
BP(Back Propagation)网络是 1986 年由 Rumelhart 和
McCelland 为首的科学家小组提出,是一种按误差逆传播算
法训练的多层前馈网络,是目前应用最广泛的神经网络模型
之一。BP 网络能学习和存贮大量的输入-输出模式映射关系,
而无需事前揭示描述这种映射关系的数学方程。它的学习规
则是使用最速下降法,通过反向传播来不断调整网络的权值
和阈值,使网络的误差平方和最小。BP 神经网络模型拓扑结
构包括输入层(input)、隐层(hide layer)和输出层(output layer)(如图 5.2 所示)。
5.4.1 BP 神经元
图 5.3 给出了第 j 个基本 BP 神经元(节点),它只模仿了生物神经元所具有的三个最基本
也是最重要的功能:加权、求和与转移。其中 x1、x2…xi…xn 分别代表来自神经元 1、2…i…n
的输入;wj1、wj2…wji…wjn 则分别表示神经元 1、2…i…n 与第 j 个神经元的连接强度,即权
值;bj 为阈值;f(·)为传递函数;yj 为第 j 个神经元的输出。
第 j 个神经元的净输入值 为:
(5.12)
其中:
若视
,
,即令 及 包括 及 ,则
于是节点 j 的净输入 可表示为:
净输入 通过传递函数(Transfer Function)f (·)后,便得到第 j 个神经元的
输出 :
(5.13)
式中 f(·)是单调上升函数,而且必须是有界函数,因为细胞传递的信号不可能无限增加,
(5.14)
必有一最大值。
5.4.2 BP 网络
BP 算法由数据流的前向计算(正向传播)和误差信号的反向传播两个过程构成。正向传播
时,传播方向为输入层→隐层→输出层,每层神经元的状态只影响下一层神经元。若在输
出层得不到期望的输出,则转向误差信号的反向传播流程。通过这两个过程的交替进行,
在权向量空间执行误差函数梯度下降策略,动态迭代搜索一组权向量,使网络误差函数达
到最小值,从而完成信息提取和记忆过程。
5.4.2.1 正向传播
设 BP 网络的输入层有 n 个节点,隐层有 q 个节点,输出层有 m 个节点,输入层与隐层之间
的权值为 ,隐层与输出层之间的权值为 ,如图 5.4 所示。隐层的传递函数为 f1(·),
输出层的传递函数为 f2(·),则隐层节点的输出为(将阈值写入求和项中):
k=1,2,……q
(5.15)
输出层节点的输出为:
j=1,2,……m
(5.16)
至此 B-P 网络就完成了 n 维空间向量对 m 维空间的近似映射。
5.4.2.2 反向传播
1) 定义误差函数
输入 个学习样本,用
来表示。第 个样本输入到网络后得到输出
(j=1,2,…m)。采用平方型误差函数,于是得到第 p个样本的误差 Ep:
式中: 为期望输出。
对于 个样本,全局误差为:
2)输出层权值的变化
采用累计误差 BP 算法调整 ,使全局误差 变小,即
式中: —学习率
定义误差信号为:
(5.17)
(5.18)
(5.19)
其中第一项:
第二项:
是输出层传递函数的偏微分。
于是:
由链定理得:
于是输出层各神经元的权值调整公式为:
3)隐层权值的变化
定义误差信号为:
(5.20)
(5.21)
(5.22)
(5.23)
(5.24)
(5.25)
(5.26)
其中第一项:
依链定理有:
第二项:
是隐层传递函数的偏微分。
于是:
由链定理得:
从而得到隐层各神经元的权值调整公式为:
5.4.3 BP 算法的改进
(5.27)
(5.28)
(5.29)
(5.30)
(5.31)
(5.32)
(5.33)
BP 算法理论具有依据可靠、推导过程严谨、精度较高、通用性较
好等优点,但标准 BP 算法存在以下缺点:收敛速度缓慢;容易
陷入局部极小值;难以确定隐层数和隐层节点个数。在实际应用
中,BP 算法很难胜任,因此出现了很多改进算法。
1) 利用动量法改进 BP 算法
标准 BP 算法实质上是一种简单的最速下降静态寻优方法,在修
正 W(K)时,只按照第 K 步的负梯度方向进行修正,而没有考虑到以前积累的经验,即以前
时刻的梯度方向,从而常常使学习过程发生振荡,收敛缓慢。动量法权值调整算法的具体
做法是:将上一次权值调整量的一部分迭加到按本次误差计算所得的权值调整量上,作为
本次的实际权值调整量,即:
(5.34)
其中:α为动量系数,通常 0<α<0.9;η—学习率,范围在 0.001~10 之间。这种方法
所加的动量因子实际上相当于阻尼项,它减小了学习过程中的振荡趋势,从而改善了收敛
性。动量法降低了网络对于误差曲面局部细节的敏感性,有效的抑制了网络陷入局部极小。
2) 自适应调整学习速率
标准 BP 算法收敛速度缓慢的一个重要原因是学习率选择不当,学习率选得太小,收敛太慢;
学习率选得太大,则有可能修正过头,导致振荡甚至发散。可采用图 5.5 所示的自适应方
法调整学习率。
调整的基本指导思想是:在学习收敛的情况下,增大η,以缩短学习时间;当η偏大致使不能收敛时,要及时减小η,
直到收敛为止。
3) 动量-自适应学习速率调整算法
采用动量法时,BP 算法可以找到更优的解;采用自适应学习速率法时,BP 算法可以缩短训
练时间。将以上两种方法结合起来,就得到动量-自适应学习速率调整算法。
4) L-M 学习规则
L-M(Levenberg-Marquardt)算法比前述几种使用梯度下降法的 BP 算法要快得多,但对于
复杂问题,这种方法需要相当大的存储空间。L-M(Levenberg-Marquardt)优化方法的权值
调整率选为:
(5.35)
其中:e—误差向量;J—网络误差对权值导数的雅可比(Jacobian)矩阵;μ—标量,当
μ很大时上式接近于梯度法,当μ很小时上式变成了 Gauss-Newton 法,在这种方法中,μ
也是自适应调整的。
综合考虑,拟采用 L-M 学习规则和动量法分别作为神经网络的训练函数和学习函数。
5.5 BP 神经网络的训练策略及结果
本文借助于 MATLAB 神经网络工具箱来实现多层前馈 BP 网络(Multi-layer feed-forward
backpropagation network)的颜色空间转换,免去了许多编写计算机程序的烦恼。神经网
络的实际输出值与输入值以及各权值和阈值有关,为了使实际输出值与网络期望输出值相
吻合,可用含有一定数量学习样本的样本集和相应期望输出值的集合来训练网络。训练时
仍然使用本章 5.2 节中所述的实测样本数据。
另外,目前尚未找到较好的网络构造方法。确定神经网络的结构和权系数来描述给定的映
射或逼近一个未知的映射,只能通过学习方式得到满足要求的网络模型。神经网络的学习
可以理解为:对确定的网络结构,寻找一组满足要求的权系数,使给定的误差函数最小。
设计多层前馈网络时,主要侧重试验、探讨多种模型方案,在实验中改进,直到选取一个
满意方案为止,可按下列步骤进行:对任何实际问题先都只选用一个隐层;使用很少的隐
层节点数;不断增加隐层节点数,直到获得满意性能为止;否则再采用两个隐层重复上述
过程。
训练过程实际上是根据目标值与网络输出值之间误差的大小反复调整权值和阈值,直到此
误差达到预定值为止。
5.5.1 确定 BP 网络的结构
确定了网络层数、每层节点数、传递函数、初始权系数、学习算法等也就确定了 BP 网络。
确定这些选项时有一定的指导原则,但更多的是靠经验和试凑。
1)隐层数的确定:
1998 年 Robert Hecht-Nielson 证明了对任何在闭区间内的连续函数,都可以用一个隐层的
BP 网络来逼近,因而一个三层的 BP 网络可以完成任意的 n 维到 m 维的映照。因此我们从含
有一个隐层的网络开始进行训练。
2) BP 网络常用传递函数:
BP 网络的传递函数有多种。Log-sigmoid 型函数的输入值可取任意值,输出值在 0 和 1 之
间;tan-sigmod 型传递函数 tansig 的输入值可取任意值,输出值在-1 到+1 之间;线性传
递函数 purelin 的输入与输出值可取任意值。BP 网络通常有一个或多个隐层,该层中的神
经元均采用 sigmoid 型传递函数,输出层的神经元则采用线性传递函数,整个网络的输出
可以取任意值。各种传递函数如图 5.6 所示。
只改变传递函数而其余参数均固定,用本章 5.2 节所述的样本集训练 BP 网络时发现,传递
函数使用 tansig 函数时要比 logsig 函数的误差小。于是在以后的训练中隐层传递函数改
用 tansig 函数,输出层传递函数仍选用 purelin 函数。
3) 每层节点数的确定:
使用神经网络的目的是实现摄像机输出 RGB 颜色空间与 CIE-XYZ 色空间转换,因此 BP 网络
的输入层和输出层的节点个数分别为 3。下面主要介绍隐层节点数量的确定。
对于多层前馈网络来说,隐层节点数的确定是成败的关键。若数量太少,则网络所能获取
的用以解决问题的信息太少;若数量太多,不仅增加训练时间,更重要的是隐层节点过多
还可能出现所谓“过渡吻合”(Overfitting)问题,即测试误差增大导致泛化能力下降,
因此合理选择隐层节点数非常重要。关于隐层数及其节点数的选择比较复杂,一般原则是:
在能正确反映输入输出关系的基础上,应选用较少的隐层节点数,以使网络结构尽量简单。
本论文中采用网络结构增长型方法,即先设置较少的节点数,对网络进行训练,并测试学
习误差,然后逐渐增加节点数,直到学习误差不再有明显减少为止。
5.5.2 误差的选取
在神经网络训练过程中选择均方误差 MSE 较为合理,原因如下:
① 标准 BP 算法中,误差定义为: