天天看点

BP算法改进BP算法的问题BP算法的改进

BP算法的问题

  1. 权值初始化

       用于权值 初始化 的一个普遍方法是设置为:区间 [−0.5N,0.5N] 内,均匀分布的随机数,其中N表示权值为馈入层中神经元的总数量。

       对于单隐层的情况,Nguyen和Widrow认为下列算法能显著提高网络的训练速度。

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

      4.对于隐层第i个神经元,设置偏置为一个 [−ωij,ωij] 之间的随机值。

  2. 网络设置和网络泛化能力

       多层感知器神经网络的设置由隐层的数量、每个隐层的神经元数量以及激活函数的类型决定。已经证实:网络的性能并不十分依靠激活函数的类型,隐层的数量、每个隐层的神经元数量的选择是关键。

  3. 独立检验

       将数据划分为训练集和测试集。训练集用于更新网络权值,测试集用于评估训练性能。

  4. 收敛速度

       学习率的取值在某种程度上决定了BP算法的收敛性(速度和稳定性)。为了确保网络收敛和避免训练过程的振荡,学习率必须设置为相对较小的值。

       除了BP学习的修改,输入数据的预处理和简化也可使性能改善和加速训练。即:网络规模的减小将削减它的复杂性,并能大大提高收敛速度。数据预处理的方法有:主成分分析法、部分最小二乘回归、傅里叶变换和小波变换等。

BP算法的改进

改进的BP算法可以分为两类:

1. 启发式算法:如动量算法和自适应算法。

2. 数值优化算法:如共轭梯度法和牛顿法。

启发式算法

动量方法

   在BP算法中,步长 η 的选择很重要, η 大则收敛快,但是过大则可能引起不稳定。( η 最大不能超过 2λmax , λmax 为输入向量x的自相关阵的最大特征值)

   η 小可避免振荡,但收敛速度变慢,解决这一矛盾的最简单方法就是加入“动量项”,即令:

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

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

   其作用简单分析如下:

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

Δωji(n)=η∑t=0nαn−1δj(t)yj(t)=−η∑t=0nαn−1∂E(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 代表初始学习率参数, c 和k0 是恰当选择的常量。典型的, 1<c/η0<100 且 100<k0<500 。

   当 k≪k0 时,学习率参数近似为常量 η0 ,这对应于 搜索阶段。

   当 k≫k0 时,学习率按比例减小。

   已经证明,恰当选择参数 c 和k0,搜索然后收敛策略能显著提高BP算法的速度。

自适应BP算法

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

   学习率 η 的自适应律可设计为:

Δη(k)=⎧⎩⎨⎪⎪+a,−bη(k−1),0,C1(k)C2(k)else

   式中, a>0,b>0 ,条件 C1(k) 和 C2(k) 分别定义为:

   C1(k) 表示BP网络前 i 次迭代的平方误差函数梯度值ΔE(k−i)<0;

   C2(k) 表示BP网络前 i 次迭代的平方误差函数梯度值ΔE(k−i)>0;

数值优化算法

共轭梯度BP法

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

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

1.初始化。设置 k=0 和 i=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)∥2∥g(i−1)∥2

10.计算方向 d(i) :若 i<N ( N 为BP算法的迭代次数上限),则d(i)=−g(i)+βid(i−1),并转步骤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.

继续阅读