1、引言
误差反向传播网络(Error Back Propagtion,),简称为BP神经网络,是一种多层神经网络,与之相关的另一个概念是多层感知器(Multi-Layer Perceptron,MLP)。多层感知器除了输入层和输出层以外,还具有若干个隐含层。多层感知器强调神经网络在结构上由多层组成,BP神经网络则强调网络采用误差反向传播的学习算法。大部分情况下多层感知器采用误差反向传播的算法进行权值调整,因此两者一般指的是同一种网络。
2、结构
BP神经网络的隐含层可以为一层或多层,一个包含2层隐含层的BP神经网络的拓扑结构如图(1)所示。
BP神经网络的特点:
- 网络由多层构成,层与层之间全连接,同一层之间的神经元无连接。多层的网络设计,使BP网络能够从输入中挖掘更多的信息,完成更复杂的任务。
- BP网络的传递函数必须可微。因此,感知器的传递函数——二值函数在这里没有用武之地。BP网络一般使用Sigmoid函数或线性函数作为传递函数。
- 采用误差反向传播算法(Back-Propagation Algorithm)进行学习。在BP网络中,数据从输入层经隐含层逐层向后传播,训练网络权值时,则沿着减少误差的方向,从输出层经过中间各层逐层向前修正网络的连接权值。随着学习的不断进行,最终的误差越来越小。
注意:
在BP网络中,“反向传播”指的是误差信号反向传播,修正权值时,网络根据误差从后向前逐层进行修正。BP神经网络属于多层前向网络,工作信号始终正向流动,没有反馈结构。
3、BP神经网络的学习算法
3.1 最速下降法
最速下降法的原理:对于实值函数 F ( x ) F(x) F(x),如果 F ( x ) F(x) F(x)在某点 x 0 x_0 x0出有定义切可微,则函数在该店处沿着梯度相反的方向 − Δ -\Delta −Δ F ( x 0 ) F(x_0) F(x0)下降最快。
因此,在使用最速下降法时,应首先计算函数在某点处的梯度,再沿梯度的反方向以一定的步长调整自变量的值。
假设 x 1 = x 0 − η Δ F ( X 0 ) x_1=x_0-\eta\Delta F(X_0) x1=x0−ηΔF(X0),当步长 η \eta η足够小时, F ( x 1 ) < F ( x 0 ) F(x_1)<F(x_0) F(x1)<F(x0)必成立。因此,只需要给定一个初始 x 0 x_0 x0和步长 η \eta η,根据 x n + 1 = x n − η Δ F ( x n ) x_{n+1}=x_n-\eta \Delta F(x_n) xn+1=xn−ηΔF(xn),就可以得到一个自变量 x x x的序列,并满足 F ( x n + 1 ) < F ( x n ) < ⋅ ⋅ ⋅ < F ( x 1 ) < F ( x 0 ) F(x_{n+1})<F(x_{n})<···<F(x_{1})<F(x_{0}) F(xn+1)<F(xn)<⋅⋅⋅<F(x1)<F(x0).
只需要反复迭代,就可以求出函数的最小值。
最速下降法的不足:
- 目标函数必须可微。对于不满足这个条件的函数,无法使用最速下降法进行求解。
- 如果最小值附近比较平坦,算法会在最小值附近停留很久,收敛缓慢。可能出现“之”字形下降。
- 对于包含多个极小值的函数,所获得的结果依赖于初始值。算法有可能陷入局部极小值点,而没有达到全局最小值点。
3.2 最速下降BP法
标准的BP网络使用最速下降法来调制各层权值。下面以三层BP网络来推导标准BP网络的权值学习算法。
- 1变量定义
在三层BP网络中,假设输入神经元个数为M,隐含层神经元个数为I,输出层神经元个数为J。输入层第m个神经元记为 x m x_m xm,隐含层第i个神经元记为 k i k_i ki,输出层第j个神经元记为 y j y_j yj。从 x m x_m xm到 k i k_i ki,的连接权值为 w m i w_{mi} wmi,从 k i k_i ki到 y j y_j yj,的连接权值为 w i j w_{ij} wij。隐含层传递函数为Sigmoid函数,输出层传递函数为线性函数,网络结构如图6所示。
上述网络接受一个长为
M
M
M的向量作为输入,最终输出一个长为
J
J
J的向量。用
u
u
u和
v
v
v分别表示每一层的输入与输出,如
u
I
1
u^1_I
uI1出表示
I
I
I层(即隐含层)第一个神经元的输入。网络的实际输出为:
网络的期望输出为:
其中,n为迭代次数。第n次迭代的误差信号定义为:
则,误差能量可以定义为:
这里前面系数
1
/
2
1/2
1/2是为了后面的求导方便。
-
2.工作信号正向传播
输入层的输出即为整个网络的输入信号: v M m ( n ) = x ( n ) v^m_M(n)=x(n) vMm(n)=x(n)
隐含层第i个神经元的输入等于 v M m ( n ) v^m_M(n) vMm(n)的加权和:
隐含层第 i i i个神经元的输出等于:
输出层第 j j j个神经元的输入等于 v I i ( n ) v^i_I(n) vIi(n)的加权和:
输出层第 j j j个神经元的输出等于:
输出层第 j j j个神经元的误差:
网络的总误差:
-
3.误差信号反向传播(关键)
在权值调整阶段,沿着网络逐层反向进行调整。
(1)受限调整隐含层与输出层之间的权值 w i j w_{ij} wij。根据最速下降法,计算误差对 w i j w_{ij} wij的梯度,再沿着该放下反向进行调整:
根据微分的链式法则,有
由于 e ( n ) e(n) e(n)是 e j ( n ) e_j(n) ej(n)的二次函数,气微分为一次函数:
输出层传递函数的导数:
因此,梯度值为
权值修正量为:
引入局部梯度的定义:
因此,权值修正量可表示为:
局部梯度指明权值所需要的变化。神经元的局部梯度等于该神经元的误差信号与传递函数乘积。在输出层,传递函数一般为线型函数,因此其导数为1:
代入上式,可得:
输出神经元的权值修正相对简单。
(2)误差信号向前传播,对输入层与隐含层之间的权值 w m i w_{mi} wmi进行调整,与上一步类似,应有
v M m ( n ) v^m_M(n) vMm(n)为输入神经元的输出, v M m ( n ) = x m ( n ) v^m_M(n)=x^m(n) vMm(n)=xm(n).
δ I i \delta^i_I δIi为局部梯度,定义为
由于隐含层不可见,因此无法直接求解误差对该层出书值得偏导数,这里需要使用上一步计算中求得的输出层节点的局部梯度:
因此,有
三层BP网络的一轮权值调整就完成了。总结为:
权值调整量 Δ w \Delta w Δw=学习率 η \eta η*局部梯度 δ \delta δ*上一层输出信号 v v v。
当输出层传递函数为线性函数时,输出层与隐含层之间权值调整的规则类似于线性神经网络的权值调整规则。BP网络的复杂之处在于,隐含层与隐含层之间、隐含层与输入层之间调整权值时,局部梯度的计算需要用到上一步计算的结果。前一层的局部梯度是后一层局部梯度的加权和。也正是因为这个原因,BP网络学习权值时只能从后向前依次计算。