BP算法改进

来源:互联网 发布:linux 查看文件内容 编辑:程序博客网 时间:2024/06/05 20:28

BP算法的问题

  1. 权值初始化
       用于权值 初始化 的一个普遍方法是设置为:区间[0.5N,0.5N]内,均匀分布的随机数,其中N表示权值为馈入层中神经元的总数量。
       对于单隐层的情况,Nguyen和Widrow认为下列算法能显著提高网络的训练速度。

    算法1

    1. 计算缩放因子:γ=0.7n1n0,其中,n0为输入层分量个数,n1为隐层神经元个数。
    2. 初始化任一层的权值ωij[ 0.5,0.5]之间的随机值。
    3. 按照下列公式重新初始化权值:
      ωij=γωijn1i=1ω2ij

      4.对于隐层第i个神经元,设置偏置为一个[ωij,ωij]之间的随机值。
  2. 网络设置和网络泛化能力
       多层感知器神经网络的设置由隐层的数量、每个隐层的神经元数量以及激活函数的类型决定。已经证实:网络的性能并不十分依靠激活函数的类型,隐层的数量、每个隐层的神经元数量的选择是关键。

  3. 独立检验
       将数据划分为训练集和测试集。训练集用于更新网络权值,测试集用于评估训练性能。
  4. 收敛速度
       学习率的取值在某种程度上决定了BP算法的收敛性(速度和稳定性)。为了确保网络收敛和避免训练过程的振荡,学习率必须设置为相对较小的值。
       除了BP学习的修改,输入数据的预处理和简化也可使性能改善和加速训练。即:网络规模的减小将削减它的复杂性,并能大大提高收敛速度。数据预处理的方法有:主成分分析法、部分最小二乘回归、傅里叶变换和小波变换等。

BP算法的改进

改进的BP算法可以分为两类:
1. 启发式算法:如动量算法和自适应算法。
2. 数值优化算法:如共轭梯度法和牛顿法。

启发式算法

动量方法

   在BP算法中,步长η的选择很重要,η大则收敛快,但是过大则可能引起不稳定。(η最大不能超过2λmax,λmax为输入向量x的自相关阵的最大特征值)
   η小可避免振荡,但收敛速度变慢,解决这一矛盾的最简单方法就是加入“动量项”,即令:

Δωji(n)=αΔωji(n1)+ηδj(n)yj(n),0<α<1

   此式被称为广义delta规则。式中第二项是常规BP算法的修正量;第一项称为动量项,其通过在权值更新中引入稳定性来提高标准反向传播的速度;α称为遗忘因子,通常在0,1之间取值。


   其作用简单分析如下:
   当顺序加入训练样本时,公式可写成以t为变量的时间序列,因此上式可看做是Δωji的一阶差分方程,对Δωji(n)求解,可得:

Δωji(n)=ηt=0nαn1δj(t)yj(t)=ηt=0nαn1E(t)ωji(t)

   当本次E(t)ωji(t)与前一次同符号时,其加权求和值增大,使 Δωji(n) 较大,从而在稳定调节时增加了ω的调节速度;
   当本次E(t)ωji(t)与前一次符号相反时,说明有一定振荡,此时指数加权和结果使Δωji(n)减小,起到了稳定作用。

批量更新

   标准BP算法假定权值由每一输入输出训练对更新,而批量更新方法在执行更新之前累计几个训练模式的权值修正。
   批量更新的优点如下:

  1. 运用几个训练对,对误差曲面给出比用于标准BP的瞬时值更好的估计。
  2. 通过修正平均的处理,批量更新步骤提供某种固有的训练数据低通滤波。
  3. 批量算法适用于更复杂的优化过程,如共轭梯度法或牛顿法。

   对于在整个训练集执行平均的批量更新和标准BP之间的一个良好折中是在更新权值之前累积几个训练对的变化。

搜索然后收敛方法

   Darken等人提出的用于加速BP学习的搜索然后收敛方法是相对简单的启发式策略。
   两个通用的学习率下降策略:

η(k)=η011+k/k0

η(k)=η01+(c/η0)(k/k0)1+(c/η0)(k/k0)+k0(k/k0)2

   式中,η0>0代表初始学习率参数,ck0 是恰当选择的常量。典型的,1<c/η0<100100<k0<500
   当kk0时,学习率参数近似为常量η0,这对应于 搜索阶段。
   当kk0时,学习率按比例减小。
   已经证明,恰当选择参数ck0,搜索然后收敛策略能显著提高BP算法的速度。

自适应BP算法

   自适应BP算法的含义在于自适应地改变BP学习中的学习率,以控制BP学习中的梯度下降速度,以改善原始BP算法的收敛特性。
   学习率η的自适应律可设计为:

Δη(k)=+a,bη(k1),0,C1(k)C2(k)else

   式中,a>0,b>0,条件C1(k)C2(k)分别定义为:
   C1(k)表示BP网络前i次迭代的平方误差函数梯度值ΔE(ki)<0;
   C2(k)表示BP网络前i次迭代的平方误差函数梯度值ΔE(ki)>0;

数值优化算法

共轭梯度BP法

   共轭梯度法不能直接地应用于BP网络。

算法2 :基于Fletcher-Revees 共轭梯度法的BP学习算法


1.初始化。设置k=0i=0,设置学习率上限C>0和优化目标ε>0,随机生成初始权值序列ω(0)
2.通过局部梯度δ(l)j(0),计算梯度g(0)=E(ω(0))
3.选择搜索方向d(0)d(0)=g(0)
4.计算学习率ηi,采用一维搜索选择ηi使下式成立:

E(ω(i)+ηid(i))=min0ηCE(ω(i)+ηd(i))

5. 调节BP网络参数
ωi+1=ω(i)+ηid(i)

6.置k=k+1,i=i+1
7.若E(ω(i))<ε,算法终止。
8.通过局部梯度δ(l)j(i),计算梯度g(i)=E(ω(i))
9.计算方向因子βi=g(i)2g(i1)2
10.计算方向d(i):若i<N(N为BP算法的迭代次数上限),则d(i)=g(i)+βid(i1),并转步骤4,否则,i>0,ω(0)=ω(i)g(0)=g(i),并转步骤3

Levenberg-Marquardt 算法

   Levenberg-Marquardt 算法是为了能将牛顿法应用于Hesse矩阵非正定的情形下的一种改进方法,其迭代过程为:

x(k+1)=x(k)+ηkd(k)d(k)={H^(k)}1g(k)H^(k)=H(k)+ηkQ^(k)

其中,Q^(k)是给定的正定矩阵。

算法3 基于Levenberg-Marquardt 的BP学习算法
1.初始化:设置k=0,β0>0,α>1,设置正定矩阵Q^(k),设置优化目标ε>0,随机生成初始权值序列ω(0)
2.计算梯度g(k)=E(ω(k)):通过局部梯度δ(l)j(i),根据BP算法计算公式,求梯度E(ω(k))
3.计算近似Hesse矩阵H(ω(k))
4.计算估计Hesse矩阵H^(ω(k)):H^(ω(k))=H(ω(k))+βkQ^
5.H^1(ω(k))存在性测试:若H^1(ω(k))不存在,则置βk=αβk并转向步骤4。
6.选择搜索方向d(k)=H^1(ω(k))1g(ω(k))
7.计算学习率ηk,采用一维搜索法。
8.学习率有效性测试,若ηk=0,则置βk=αβk并转向步骤4。
9.调节BP网络参数

ω(k+1)=ω(k)+ηkd(k)

10.停机测试:若E(ω(k))<ε,则停机;否则,置k=k+1,并转置步骤2.


参考文献

[1] 史忠植. 神经网络[M]. 北京:高等教育出版社,2009:54-63.

0 0
原创粉丝点击