机器学习入门:第十三章 BP神经网络

学习是神经网络一种最重要也最令人注目的特点。在神经网络的发展进程中,学习算法的研究有着十分重要的地位。目前,人们所提出的神经网络模型都是和学习算法相应的。所以,有时人们并不去祈求对模型和算法进行严格的定义或区分。有的模型可以有多种算法。而有的算法可能可用于多种模型。不过,有时人们也称算法为模型。

自从40年代Hebb提出的学习规则以来,人们相继提出了各种各样的学习算法。其中以在1986年Rumelhart等提出的误差反向传播法,即BP(error BackPropagation)法影响最为广泛。直到今天,BP算法仍然是自动控制上最重要、应用最多的有效算法。

神经网络的学习机理和机构

在神经网络中,对外部环境提供的模式样本进行学习训练,并能存储这种模式,则称为感知器;对外部环境有适应能力,能自动提取外部环境变化特征,则称为认知器。
神经网络在学习中,一般分为有教师和无教师学习两种。感知器采用有教师信号进行学习,而认知器则采用无教师信号学习的。在主要神经网络如BP网络,Hopfield网络,ART网络和Kohonen网络中;BP网络和Hopfield网络是需要教师信号才能进行学习的;而ART网络和 Kohonen网络则无需教师信号就可以学习。所谓教师信号,就是在神经网络学习中由外部提供的模式样本信号。

感知器的学习结构

感知器的学习是神经网络最典型的学习。
目前,在控制上应用的是多层前馈网络,这是一种感知器模型,学习算法是BP法,故是有教师学习算法。
一个有教师的学习系统可以用图1-7表示。这种学习系统分成三个部分:输入部,训练部和输出部。

在这里插入图片描述

图 神经网络学习系统框图

输入部接收外来的输入样本X,由训练部进行网络的权系数W调整,然后由输出部输出结果。在这个过程中,期望的输出信号可以作为教师信号输入,由该教师信号与实际输出进行比较,产生的误差去控制修改权系数W。

学习机构可用图所示的结构表示。

在图中, X 1 , X 2 , . . . , X n X_1,X_2,...,X_n X1,X2,...,Xn ,是输入样本信号, W 1 , W 2 , . . . , W n W_1,W_2,...,W_n W1,W2,...,Wn 是权系数。输入样本信号 X i X_i Xi可以取离散值“0”或“1”。输入样本信号通过权系数作用,在u产生输出结果 ∑ W i X i \sum W_iX_i WiXi ,即有:

u = ∑ W 1 X 1 + W 2 X 2 + . . . + W n X n u=\sum W_1X_1+ W_2X_2+...+ W_nX_n u=W1X1+W2X2+...+WnXn

再把期望输出信号 Y ( t ) Y(t) Y(t)和u进行比较,从而产生误差信号e。即权值调整机构根据误差e去对学习系统的权系数进行修改,修改方向应使误差e变小,不断进行下去,使到误差e为零,这时实际输出值u和期望输出值完全一样,则学习过程结束。

在这里插入图片描述

神经网络的学习一般需要多次重复训练,使误差值逐渐向零趋近,最后到达零。则这时才会使输出与期望一致。故而神经网络的学习是消耗一定时期的,有的学习过程要重复很多次,甚至达万次级。原因在于神经网络的权系数W有很多分量 W 1 , W 2 , . . , W n W_1,W_2,..,W_n W1,W2,..,Wn;也即是一个多参数修改系统。系统的参数的调整就必定耗时耗量。目前,提高神经网络的学习速度,减少学习重复次数是十分重要的研究课题,也是实时控制中的关键问题。

感知器的学习算法

感知器是有单层计算单元的神经网络,由线性元件及阀值元件组成。感知器如图所示。

在这里插入图片描述

感知器结构

感知器的数学模型:

Y = f ( ∑ i = 1 n W i X I − θ ) Y=f(\sum_{i=1}^nW_iX_I-\theta) Y=f(i=1nWiXIθ)

其中:f[.]是阶跃函数,并且有

f ( u ) = { 1 , u = ∑ i = 1 n W i X i − θ ≥ 0 − 1 , u = ∑ i = 1 n W i X i − θ ≤ 0 f(u) = \begin{cases} 1, & u=\sum_{i=1}^nW_iX_i-\theta \ge0 \\ -1, & u=\sum_{i=1}^nW_iX_i-\theta \le0 \end{cases} f(u)={1,1,u=i=1nWiXiθ0u=i=1nWiXiθ0

θ是阀值。
感知器的最大作用就是可以对输入的样本分类,故它可作分类器,感知器对输入信号的分类如下:

Y = { 1 , A 类 − 1 , B 类 Y=\begin{cases} 1,&A类\\ -1,&B类 \end{cases} Y={1,1,AB

即是,当感知器的输出为1时,输入样本称为A类;输出为-1时,输入样本称为B类。从上可知感知器的分类边界是:

∑ i = 1 n W i X I − θ = 0 \sum_{i=1}^nW_iX_I-\theta=0 i=1nWiXIθ=0

在输入样本只有两个分量X1,X2时,则有分类边界条件:

∑ i = 1 2 W i X I − θ = 0 \sum_{i=1}^2W_iX_I-\theta=0 i=12WiXIθ=0

W 1 X 1 + W 2 X 2 − θ = 0 W_1X_1+W_2X_2-\theta=0 W1X1+W2X2θ=0

也可写成

X 2 = − W 1 W 2 X 1 + θ W 2 X_2=-\frac{W_1}{W_2}X_1+\frac{\theta}{W_2} X2=W2W1X1+W2θ

这时的分类情况如图所示。

在这里插入图片描述

感知器的学习算法目的在于找寻恰当的权系数 W = ( W 1 , W 2 , . . . , W n ) W=(W_1,W_2,...,W_n) W=(W1,W2,...,Wn),使系统对一个特 定的样本 X = ( X 1 , X 2 , . . . , X n ) X=(X_1,X_2,...,X_n) X=(X1,X2,...,Xn)产生期望值d。

当X分类为A类时,期望值d=1;
X为B类 时,d=-1。

为了方便说明感知器学习算法,把阀值θ 并人权系数W中,同时,样本X也相应增加一个分量 X n + 1 X_{n+1} Xn+1。故令:

W n + 1 = − θ , X n + 1 = 1 W_{n+1}=-\theta,X_{n+1}=1 Wn+1=θ,Xn+1=1

则感知器的输出可表示为:

Y = f [ ∑ i = 1 n + 1 W i X i ] Y=f[\sum_{i=1}^{n+1}W_iX_i] Y=f[i=1n+1WiXi]

感知器学习算法步骤如下:

  • 对权系数W置初值
    对权系数 W = ( W 1 , W 2 , . . . , W n + 1 ) W=(W_1,W_2,...,W_{n+1}) W=(W1,W2,...,Wn+1)的各个分量置一个较小的零随机值,但 W n + 1 = − θ W_{n+1}=-\theta Wn+1=θ。并记为 W 1 ( 0 ) , W 2 ( 0 ) , . . . , W n ( 0 ) W_1(0),W_2(0),...,W_n(0) W1(0),W2(0),...,Wn(0),同时有 W n + 1 = − θ W_{n+1}=-\theta Wn+1=θ。这里 W i ( t ) W_{i}(t) Wi(t)为t时刻从第i个输入上的权系数, i = 1 , 2 , . . . , n i=1,2,...,n i=1,2,...,n W n + 1 ( t ) W_{n+1}(t) Wn+1(t)为t时刻时的阀值。

  • 输入一样本 X = ( X 1 , X 2 , . . . , X n + 1 ) X=(X_1,X_2,...,X_{n+1}) X=(X1,X2,...,Xn+1)以及它的期望输出d。
    期望输出值d在样本的类属不同时取值不同。如果是A类,则取d=1,如果是B类,则取-1。期望输出d也即是教师信号。

  • 计算实际输出值Y

Y ( t ) = F [ ∑ i = 1 n + 1 W i ( t ) X I ] Y(t)=F[\sum_{i=1}^{n+1}W_i(t)X_I] Y(t)=F[i=1n+1Wi(t)XI]

  • 根据实际输出求误差e

e = d − Y ( t ) e=d-Y(t) e=dY(t)

  • 用误差e去修改权系数

W i ( t + 1 ) = W i ( t ) + η e X i , i = 1 , 2 , . . . , n , n + 1 W_i(t+1)=W_i(t)+\eta eX_i,i=1,2,...,n,n+1 Wi(t+1)=Wi(t)+ηeXi,i=1,2,...,n,n+1

其中, η \eta η称为权重变化率, 0 < η < 1 0<\eta<1 0<η<1
在式中,η的取值不能太大.如果1取值太大则会影响 W i ( t ) W_i(t) Wi(t)的稳定;η的取值也不能太小,太小则会使 W i ( t ) W_i(t) Wi(t)的求取过程收敛速度太慢。

当实际输出和期望值d相同时有:

W i ( t + 1 ) = W i ( t ) W_i(t+1)=W_i(t) Wi(t+1)=Wi(t)

  • 转到第2点,一直执行到一切样本均稳定为止。

从上面式可知,感知器实质是一个分类器,它的这种分类是和二值逻辑相应的。 因此,感知器可以用于实现逻辑函数。下面对感知器实现逻辑函数的情况作一些介绍。

例:用感知器实现逻辑函数 X 1 , X 2 X_1,X_2 X1,X2的真值:

X10011
X20101
Y0111

X 1 ⋃ X 2 = 1 X_1\bigcup X_2=1 X1X2=1为A类,以 X 1 ⋃ X 2 = 0 X_1\bigcup X_2=0 X1X2=0为B类,则有方程组

Y = { W 1 ∙ 0 + W 2 ∙ 0 − θ ≤ 0 W 1 ∙ 0 + W 2 ∙ 1 − θ ≥ 0 W 1 ∙ 1 + W 2 ∙ 0 − θ ≥ 0 W 1 ∙ 1 + W 2 ∙ 1 − θ ≥ 0 Y=\begin{cases} W_1\bullet 0 +W_2\bullet 0 -\theta \le 0\\ W_1\bullet 0 +W_2\bullet 1 -\theta \ge 0\\ W_1\bullet 1 +W_2\bullet 0 -\theta \ge 0\\ W_1\bullet 1 +W_2\bullet 1 -\theta \ge 0 \end{cases} Y=W10+W20θ0W10+W21θ0W11+W20θ0W11+W21θ0

即有:

Y = { θ ≥ 0 W 2 ≥ 0 W 1 ≥ θ W 1 + W 2 ≥ θ Y=\begin{cases} \theta \ge 0\\ W_2 \ge 0\\ W_1 \ge \theta\\ W_1 +W_2 \ge \theta \end{cases} Y=θ0W20W1θW1+W2θ

从式有:$W_1 \ge \theta , W_2 \ge \theta , 令 ,令 ,W_1=1,W_2=2$ ,,则有 θ ≤ 1 \theta \le 1 θ1: 取 θ = 0.5 \theta = 0.5 θ=0.5则有 X 1 + X 2 − 0.5 = 0 X_1+X_2-0.5=0 X1+X20.5=0:,
分类情况如图所示。

在这里插入图片描述

神经网络学习的梯度算法

从感如器的学习算法可知,学习的目的是在于修改网络中的权系数,使到网络对于所输入的模式样本能正确分类。当学习结束时,也即神经网络能正确分类时,显然 权系数就反映了同类输人模式样本的共同特征。换句话讲,权系数就是存储了的输人模式。由于权系数是分散存在的,故神经网络自然而然就有分布存储的特点。

前面的感知器的传递函数是阶跃函数,所以,它可以用作分类器。前面一节所讲的感知器学习算法因其传递函数的简单而存在局限性。

感知器学习算法相当简单,并且当函数线性可分时保证收敛。但它也存在问题:即函数不是线性可分时,则求不出结果;另外,不能推广到一般前馈网络中。

为了克服存在的问题,所以人们提出另一种算法——梯度算法(也即是LMS法)。

为了能实现梯度算法,故把神经元的激发函数改为可微分函数,例如Sigmoid函数,非对称Sigmoid函数为 f ( x ) = 1 1 + e − x f(x)=\frac{1}{1+e^{-x}} f(x)=1+ex1,对称Sigmoid函数f(X)= f ( x ) = 1 − e − x 1 + e − x f(x)=\frac{1-e^{-x}}{1+e^{-x}} f(x)=1+ex1ex;而不采用阶跃函数。

对于给定的样本集 X i ( I = 1 , 2 , . . . , n ) X_i(I=1,2,...,n) Xi(I=1,2,...,n),梯度法的目的是寻找权系数W ,使得 f [ W ∙ X i ] f[W\bullet X_i] f[WXi]与期望输出 Y i Y_i Yi尽可能接近。

设误差e采用下式表示:

e = 1 2 ∑ 1 2 ( Y i − Y ^ i ) 2 e=\frac{1}{2}\sum_1^2(Y_i-\hat Y_i)^2 e=2112(YiY^i)2

其中, Y i = f [ W ∗ X i Y_i=f[W*X_i Yi=f[WXi是对应第i个样本Xi 的实时输出
Y i Y_i Yi 是对应第i个样本$X_i的期望输出。
要使误差e最小,可先求取e的梯度:

g r a d w e = ∂ e ∂ W = ∑ k = 1 n ∂ e k ∂ W , 其 中 e k = 1 2 ( Y k − Y ^ k ) 2 grad_we=\frac{\partial e}{\partial W}=\sum_{k=1}^n\frac {\partial e_k}{\partial W},其中 e_k=\frac{1}{2}(Y_k-\hat Y_k)^2 gradwe=We=k=1nWekek=21(YkY^k)2

U k = W X k U_k=WX_k Uk=WXk ,则有:

∂ e k ∂ W = ∂ e k ∂ U k ∙ ∂ U k ∂ W = ∂ e k ∂ Y ^ k ) ∙ ∂ Y ^ k ∂ U k ∙ X k \frac {\partial e_k}{\partial W}=\frac{\partial e_k}{\partial U_k}\bullet \frac{\partial U_k}{\partial W} = \frac{\partial e_k}{\partial \hat Y_k)}\bullet \frac{\partial \hat Y_k}{\partial U_k}\bullet X_k Wek=UkekWUk=Y^k)ekUkY^kXk

即有:

e k = 1 2 ( Y i − Y ^ i ) 2 ⇒ ∂ e k ∂ Y ^ i = − ( Y i − Y ^ i ) e_k=\frac{1}{2}(Y_i-\hat Y_i)^2 \Rightarrow \frac {\partial e_k}{\partial \hat Y_i}=-(Y_i-\hat Y_i) ek=21(YiY^i)2Y^iek=(YiY^i)

Y ^ i = f ( t ) ⇒ ∂ Y ^ i ∂ U k = f ′ ( U k ) \hat Y_i=f(t)\Rightarrow \frac {\partial \hat Y_i}{\partial U_k}=f \prime (U_k) Y^i=f(t)UkY^i=f(Uk)

∂ e k ∂ W = − ( Y k − Y ^ k ) ∙ f ′ ( U k ) ∙ X k \frac {\partial e_k}{\partial W}=-(Y_k- \hat Y_k)\bullet f \prime (U_k) \bullet X_k Wek=(YkY^k)f(Uk)Xk

最后有按负梯度方向修改权系数W的修改规则:

W k + 1 = W k + μ ∑ i = 1 n ( Y k − Y ^ k ) ∙ f ′ ( U k ) ∙ X k W_{k+1}=W_{k} + \mu \sum_{i=1}^n(Y_k- \hat Y_k)\bullet f \prime (U_k) \bullet X_k Wk+1=Wk+μi=1n(YkY^k)f(Uk)Xk

也可写成:

W k + 1 = W K + μ ( − ∂ e ∂ W ) ∣ w = w k W_{k+1}=W_K+\mu (-\frac{\partial e}{\partial W})|_{w=w_k} Wk+1=WK+μ(We)w=wk

在上式(1—30),式(1—31)中,μ 是权重变化率,它视情况不同而取值不同,一般取0-1之间的小数。很明显,梯度法比原来感知器的学习算法进了一大步。其关键在于两点:

  • 神经元的传递函数采用连续的s型函数,而不是阶跃函数;

  • 对权系数的修改采用误差的梯度去控制,而不是采用误差去控制。故而有更好的动态特能,即加强了收敛进程。

但是梯度法对于实际学习来说,仍然是感觉太慢;所以,这种算法仍然是不理想的。

反向传播学习的BP算法

反向传播算法也称BP算法。由于这种算法在本质上是一种神经网络学习的数学模型,所以,有时也称为BP模型。

BP算法是为了解决多层前向神经网络的权系数优化而提出来的;所以,BP算法也通常暗示着神经网络的拓扑结构是一种无反馈的多层前向网络。故而.有时也称无反馈多层前向网络为BP模型。

在这里,并不要求过于严格去争论和区分算法和模型两者的有关异同。感知机学习算法是一种单层网络的学习算法。在多层网络中.它只能改变最后权系数。因此, 感知机学习算法不能用于多层神经网络的学习。1986年,Rumelhart提出了反向传播学习算法,即BP(backpropagation)算法。这种算法可以对网络中各层的权系数进行修正,故适用于多层网络的学习。BP算法是目前最广泛用的神经网络学习算法之一,在自动控制中是最有用的学习算法。

BP算法的原理

BP算法是用于前馈多层网络的学习算法,前馈多层网络的结构一般如图1—12所示:

在这里插入图片描述

它含有输人层、输出层以及处于输入输出层之间的中间层。中间层有单层或多层,由于它们和外界没有直接的联系,故也称为隐层。在隐层中的神经元也称隐单元。 隐层虽然和外界不连接.但是,它们的状态则影响输入输出之间的关系。这也是说,改变隐层的权系数,可以改变整个多层神经网络的性能。

设有一个m层的神经网络,并在输入层加有样本X;设第k层的i神经元的输入总和表示为Ui k ,输出Xi k ;从第k—1层的第j个神经元到第k层的第i个神经元的权系数为Wij 各个神经元的激发函数为f,则各个变量的关系可用下面有关数学式表示:

X i k = f ( U i k ) , U i k = ∑ j W i j X j k − 1 X_i^k=f(U_i^k),U_i^k=\sum_jW_{ij}X_j{k-1} Xik=f(Uik),Uik=jWijXjk1

反向传播算法分二步进行,即正向传播和反向传播。这两个过程的工作简述如下。

1.正向传播

输入的样本从输入层经过隐单元一层一层进行处理,通过所有的隐层之后,则传向输出层;在逐层处理的过程中,每一层神经元的状态只对下一层神经元的状态产生影响。在输出层把现行输出和期望输出进行比较,如果现行输出不等于期望输出,则进入反向传播过程。

2.反向传播

反向传播时,把误差信号按原来正向传播的通路反向传回,并对每个隐层的各个神经元的权系数进行修改,以望误差信号趋向最小。

BP算法的数学表达

BP算法实质是求取误差函数的最小值问题。这种算法采用非线性规划中的最速下降方法,按误差函数的负梯度方向修改权系数。

为了说明BP算法,首先定义误差函数e。取期望输出和实际输出之差的平方和为误差函数,则有:

e = 1 2 ∑ i ( X i m − Y i ) 2 e=\frac{1}{2}\sum_i(X_i^m-Y_i)^2 e=21i(XimYi)2

其中:是输出单元的期望值;它也在这里用作教师信号;
Xi m 是实际输出;因为第m层是输出层。

由于BP算法按误差函数e的负梯度方向修改权系数,故权系数 W i j W_{ij} Wij的修改量$\nabla W_{ij} $,和e

∇ W i j ∈ − ∂ e ∂ W i j \nabla W_{ij} \in - \frac{\partial e}{\partial W_{ij}} WijWije

也可写成

∇ W i j ∈ − η ∂ e ∂ W i j \nabla W_{ij} \in - \eta \frac{\partial e}{\partial W_{ij}} WijηWije

其中: η \eta η为学习速率,即步长。

很明显,根据BP算法原则,求 ∂ e ∂ W i j \frac{\partial e}{\partial W_{ij}} Wije最关键的。下面求 ∂ e ∂ W i j \frac{\partial e}{\partial W_{ij}} Wije;有

∂ e k ∂ W i j = ∂ e k ∂ U i k ∙ ∂ U i k ∂ W i j \frac {\partial e_k}{\partial W_{ij}}=\frac{\partial e_k}{\partial U_i^k}\bullet \frac{\partial U_i^k}{\partial W_{ij}} Wijek=UikekWijUik

由于

∂ U i k ∂ W i j = ∂ ∑ i W i l X j k − 1 ∂ W i j = X j k − 1 ∣ i = j \frac{\partial U_i^k}{\partial W_{ij}}=\frac{\partial \sum_iW_{il}X_j^{k-1}}{\partial W_{ij}}=X_j^{k-1}|_{i=j} WijUik=WijiWilXjk1=Xjk1i=j

故而

∂ e ∂ W i j = ∂ e k ∂ U i k ∙ X j k − 1 \frac{\partial e}{\partial W_{ij}}=\frac{\partial e_k}{\partial U_i^k}\bullet X_j^{k-1} Wije=UikekXjk1

从而有

∇ W i j = − η ∂ e ∂ W i j = − η ∂ e ∂ U i k ∙ X j k − 1 \nabla W_{ij} = - \eta \frac{\partial e}{\partial W_{ij}} = -\eta \frac{\partial e}{\partial U_{i}^k}\bullet X_j^{k-1} Wij=ηWije=ηUikeXjk1

d i k = ∂ e ∂ U i k = ∂ e ∂ X i k ∙ ∂ X ∂ U i k d_i^k=\frac{\partial e}{\partial U_i^k}=\frac{\partial e}{\partial X_i^k}\bullet \frac{\partial X}{\partial U_i^k} dik=Uike=XikeUikX

∂ X ∂ U i k = f ′ ( U i k ) \frac{\partial X}{\partial U_i^k}=f \prime (U_i^k) UikX=f(Uik)

为了方便进行求导,取f为连续函数。一般取非线性连续函数,例如Sigmoid函数。当取f为非对称Sigmoid函数时,有:

f ( x ) = 1 1 + e − x f(x)=\frac{1}{1+e^{-x}} f(x)=1+ex1

f ′ ( x ) = ( ( 1 + e − x ) − 1 ) ′ = − 1 ( 1 + e − x ) − 2 ∙ ( − e − x ) = ( 1 − 1 1 + e − x ) ∙ 1 1 + e − x = f ( x ) ∙ ( 1 − f ( x ) ) f\prime (x)=((1+e^{-x})^{-1})\prime = -1(1+e^{-x})^{-2}\bullet (-e^{-x})\\ =(1-\frac{1}{1+e^{-x}})\bullet \frac{1}{1+e^{-x}}\\ =f(x)\bullet (1-f(x)) f(x)=((1+ex)1)=1(1+ex)2(ex)=(11+ex1)1+ex1=f(x)(1f(x))

f ( U i k ) = 1 1 + e x p − U i k f(U_i^k)=\frac{1}{1+exp^{-U_i^k}} f(Uik)=1+expUik1

则有: f ( U i k ) ′ = f ( U i k ) ∙ ( 1 − f ( U i k ) ) f(U_i^k)\prime=f(U_i^k)\bullet (1-f(U_i^k)) f(Uik)=f(Uik)(1f(Uik))
= $X_i^k \bullet (1-X_i^k) $ (1-45)

再考虑式中的偏微分项 ∂ e ∂ X i k \frac{\partial e}{\partial X_i^k} Xike,有两种情况需考虑的:

  • 如果k=m,则是输出层,这时有Yi 是输出期望值,它是常数。从式 e = 1 2 ∑ i ( X i m − Y i ) 2 e=\frac{1}{2}\sum_i(X_i^m-Y_i)^2 e=21i(XimYi)2

∂ e ∂ X i k = ∂ e ∂ X i m = ( X I M − y I ) \frac{\partial e}{\partial X_i^k}=\frac{\partial e}{\partial X_i^m}=(X_I^M-y_I) Xike=Xime=(XIMyI)

从而有 d i m = X i m ∙ ( 1 − X i m ) ( X i m − Y i ) d_i^m=X_i^m\bullet (1-X_i^m)(X_i^m-Y_i) dim=Xim(1Xim)(XimYi)

  • 如果 k < m k \lt m k<m,则该层是隐层.这时应考虑上一层对它的作用,故有:

∂ e ∂ X i k = ∑ l ∂ e ∂ U l k + 1 ∙ ∂ U l k + 1 ∂ X i k \frac{\partial e}{\partial X_i^k}=\sum_l \frac{\partial e}{\partial U_l^{k+1}}\bullet \frac{\partial U_l^{k+1}}{\partial X_i^k} Xike=lUlk+1eXikUlk+1

可知有:

∂ e ∂ U l k + 1 = d l k + 1 \frac{\partial e}{\partial U_l^{k+1}}=d_l^{k+1} Ulk+1e=dlk+1

可知有:

∂ U l k + 1 ∂ X i k = ∂ ∑ W i j X j k ∂ X l k = W l i ∣ j = i \frac{\partial U_l^{k+1}}{\partial X_i^{k}}=\partial \frac{ \sum W_{ij} X_j^k}{\partial X_l^{k}}=W_{li}|_{j=i} XikUlk+1=XlkWijXjk=Wlij=i

故而有

∂ e ∂ X i k = ∑ l W l i ∙ d l k + 1 \frac{\partial e}{\partial X_i^{k}}=\sum_l W_{li} \bullet d_l^{k+1} Xike=lWlidlk+1

最后有:

d i k = X i k ( 1 − X i k ) ∙ ∑ W l i ∙ d l k + 1 d_i^k=X_i^k(1-X_i^k)\bullet \sum W_{li}\bullet d_l^{k+1} dik=Xik(1Xik)Wlidlk+1

从上述过程可知:多层网络的训练方法是把一个样本加到输入层,并根据向前传播的规则 X I K = F ( U i k ) X_I^K=F(U_i^k) XIK=F(Uik)不断一层一层向输出层传递,最终在输出层可以得到输出 X i m X_i^m Xim

X i m X_i^m Xim和期望输出 Y i Y_i Yi进行比较.如果两者不等,则产生误差信号e,接着则按下面公式反向传播修改权系数:

∇ W i j = − η d i k ∙ X j k − 1 \nabla W_{ij} = -\eta d_i^k \bullet X_j^{k-1} Wij=ηdikXjk1

其中 d i m = X I M ∙ ( 1 − X i m ) ( X i m − Y i ) , d i k = X i k ( 1 − X i k ) ∙ ∑ l W l i ∙ d l k + 1 d_i^m=X_I^M\bullet (1-X_i^m)(X_i^m-Y_i),d_i^k=X_i^k(1-X_i^k)\bullet \sum_lW_{li}\bullet d_l{k+1} dim=XIM(1Xim)(XimYi),dik=Xik(1Xik)lWlidlk+1

上面公式中,求取本层 d i k d_i^k dik时,要用到高一层的 d i k + 1 d_i^{k+1} dik+1 ;可见,误差函数的求取是从输出层开始,到输入层的反向传播过程。在这个过程中不断进行递归求误差。

通过多个样本的反复训练,同时向误差渐渐减小的方向对权系数进行修正,以达最终消除误差。从上面公式也可以知道,如果网络的层数较多时,所用的计算量就相当可观,故而收敛速度不快。

为了加快收敛速度,一般考虑上一次的权系数,并以它作为本次修正的依据之一,故而有修正公式:

∇ W i j ( t + 1 ) = − η d i k ∙ X j k − 1 + α ∇ W i j ( t ) \nabla W_{ij}(t+1) = -\eta d_i^k \bullet X_j^{k-1} + \alpha \nabla W_{ij}(t) Wij(t+1)=ηdikXjk1+αWij(t)

其中:η 为学习速率,即步长,η =0.1-0.4左右
ɑ 为权系数修正常数,取0.7-0.9左右。

在上面,式(1—53)也称为一般化的Delta法则。对于没有隐层的神经网络,可取

∇ W i j = − η ( Y i − X j ) ∙ X i \nabla W_{ij} = -\eta (Y_i-X_j) \bullet X_i Wij=η(YiXj)Xi

其中: Y i Y_i Yi为期望输出; X i X_i Xi为输出层的实际输出; X i X_i Xi为输入层的输入。

这显然是一种十分简单的情况,式(1-55)也称为简单Delta法则。

在实际应用中,只有一般化的Delta法则式(1-53)或式(1-54)才有意义。简单Delta法则式(1—55)只在理论推导上有用。

BP算法的执行步骤

在反向传播算法应用于前馈多层网络时,采用Sigmoid为激发面数时,可用下列步骤对网络的权系数 W i j W_{ij} Wij进行递归求取。注意对于每层有n个神经元的时候,即有 i = 1 , 2 , . . . , n ; j = 1 , 2 , . . . , n i=1,2,...,n;j=1,2,...,n i=1,2,...,n;j=1,2,...,n。对于第k层的第i个神经元,则有n个权系数 W i 1 , W i 2 , . . . , W i n W_{i1},W_{i2},...,W_{in} Wi1,Wi2,...,Win,另外取多—个 W i n + 1 W_{in+1} Win+1用于表示阀值 θ i \theta_{i} θi;并且在输入样本X时,取 X = ( X 1 , X 2 , . . . , X n ) X=(X_1,X_2,...,X_n) X=(X1,X2,...,Xn)

算法的执行的步骤如下:

1.对权系数 置初值。

对各层的权系数置一个较小的非零随机数,但其中 W i , n + 1 = − θ W_{i,n+1}=-\theta Wi,n+1=θ

2.输入一个样本 X = ( X 1 , X 2 , . . , X n ) X=(X_1,X_2,..,X_n) X=(X1,X2,..,Xn),以及对应期望输出Y=(Y_1,Y_2,…,Y_n)。

3.计算各层的输出
对于第k层第i个神经元的输出 X i k X_i^k Xik,有:

U i k = ∑ j = 1 n + 1 W i j X J K − 1 , X n + 1 k − 1 = 1 , W t , n + 1 = − θ U_i^k=\sum_{j=1}^{n+1}W_{ij}X_J^{K-1},X_{n+1}^{k-1}=1,W_{t,n+1}=-\theta Uik=j=1n+1WijXJK1,Xn+1k1=1,Wt,n+1=θ

X i k = f ( U i k ) X_i^k=f(U_i^k) Xik=f(Uik)

4.求各层的学习误差d_i^m,对于输出层有k=m,有

d i m = X i m ∙ ( 1 − X i m ) ( X i m − Y i ) d_i^m=X_i^m \bullet (1-X_i^m)(X_i^m-Y_i) dim=Xim(1Xim)(XimYi)

对于其他各层,有

d i k = X i k ( 1 − X i k ) ∙ ∑ i W l i ∙ d l k + 1 d_i^k=X_i^k(1-X_i^k)\bullet \sum_i W_{li} \bullet d_l^{k+1} dik=Xik(1Xik)iWlidlk+1

5.修正权系数Wij和阀值θ

用式(1-53)时有:

W i j ( t + 1 ) = W i j ( t ) − η d i k ∙ X j k − 1 W_{ij}(t+1)=W_{ij}(t) -\eta d_i^k \bullet X_j^{k-1} Wij(t+1)=Wij(t)ηdikXjk1

用式(1-54)时有:

W i j ( t + 1 ) = W i j ( t ) − η d i k ∙ X j k − 1 + α ∇ W i j ( t ) W_{ij}(t+1)=W_{ij}(t) -\eta d_i^k \bullet X_j^{k-1} + \alpha \nabla W_{ij}(t) Wij(t+1)=Wij(t)ηdikXjk1+αWij(t)

其中:

∇ W i j ( t ) = − η d i k ∙ X j k − 1 + α ∇ W i j ( t ) = W i j ( t ) − W i j ( t − 1 ) \nabla W_{ij}(t)=-\eta d_i^k \bullet X_j^{k-1} +\alpha \nabla W_{ij}(t)=W_{ij}(t) - W_{ij}(t-1) Wij(t)=ηdikXjk1+αWij(t)=Wij(t)Wij(t1)

6.当求出了各层各个权系数之后,可按给定品质指标判别是否满足要求。如果满足要求,则算法结束;如果未满足要求,则返回(3)执行。

这个学习过程,对于任一给定的样本 X p = ( X p 1 , X p 2 , . . . , X p n , 1 ) X_p=(X_{p1},X_{p2},...,X_{pn},1) Xp=(Xp1,Xp2,...,Xpn,1)和期望输出 Y p = ( Y p 1 , Y p 2 , . . . , Y p n ) Y_p=(Y_{p1},Y_{p2},...,Y_{pn}) Yp=(Yp1,Yp2,...,Ypn)都要执行,直到满足所有输入输出要求为止。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

go2coding

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值