BP神经网络推导
一、BP算法的思想
BP算法的思想是,学习过程由信号的正向传播与误差的反向传播两个过程组成。
正向传播时,输入样本从输入层传入,经各隐层逐层处理后,传向输出层。若输出层的实际输出与期望的输出不符,则转入误差的反向传播阶段。
误差反传是将输出误差以某种形式通过隐层向输入层逐层反传,并将误差分摊给各层的所有单元,从而获得各层单元的误差信号,此误差信号即作为修正各个单元权值的依据。
这种信号正向传播与误差反向传播的各层权值调整过程是周而复始地进行的。权值的不断调整的过程,也就是网络的学习训练过程。次过程一直进行到网络输出的误差减小到可接受的程度,或进行到预先设定的学习次数为止。
二、BP网络结构
三层神经网络层:输入层、隐藏层、输出层
三层感知器中,输入向量为X=(x1,x2,....xi,....xn)T图中x0=−1是为隐层神经元引入阈值而设置的;隐层输出向量为Y=(y1,y2,...yi,....ym)T图中y0=−1是为输出层神经元引入阈值而设置的输出层输出向量为O=(o1,o2,...,oi,,..ol)T期望输出向量为d=(d1,d2,...,dk,...dl)T输入层到隐层之前的权值矩阵用V表示,V=(V1,V2,...Vj,...Vm),其中列向量Vj为隐层第j个神经元对应的权向量隐层到输出层之间的权重矩阵用W表示,W=(W1,W2,...Wk,..,Wi),其中列向量Wk为输出层第k个神经元对应的权向量
三层感知器中,输入向量为X = (x_1, x_2, ....x_i,....x_n)^{T} \\
图中x_0=-1是为隐层神经元引入阈值而设置的;\\
隐层输出向量为Y=(y_1, y_2,...y_i,....y_m)^{T}\\
图中y_0=-1是为输出层神经元引入阈值而设置的\\
输出层输出向量为O = (o_1, o_2,...,o_i,,..o_l)^{T}\\
期望输出向量为d=(d_1, d_2,...,d_k,...d_l)^{T}\\
输入层到隐层之前的权值矩阵用V表示,V=(V_1,V_2,...V_j,...V_m),其中列向量V_j为隐层第j个神经元对应的权向量\\
隐层到输出层之间的权重矩阵用W表示,W=(W_1, W_2,...W_k,..,W_i),其中列向量W_k为输出层第k个神经元对应的权向量
三层感知器中,输入向量为X=(x1,x2,....xi,....xn)T图中x0=−1是为隐层神经元引入阈值而设置的;隐层输出向量为Y=(y1,y2,...yi,....ym)T图中y0=−1是为输出层神经元引入阈值而设置的输出层输出向量为O=(o1,o2,...,oi,,..ol)T期望输出向量为d=(d1,d2,...,dk,...dl)T输入层到隐层之前的权值矩阵用V表示,V=(V1,V2,...Vj,...Vm),其中列向量Vj为隐层第j个神经元对应的权向量隐层到输出层之间的权重矩阵用W表示,W=(W1,W2,...Wk,..,Wi),其中列向量Wk为输出层第k个神经元对应的权向量
下面分析各层信号之间的数学关系:
对于输出层,有:
ok=f(netk)k=1,2,....,l
o_k = f(net_k) \quad k=1,2,....,l
ok=f(netk)k=1,2,....,l
netk=∑j=0mwjkyjk=1,2,...,l net_k = \sum_{j=0}^{m}w_{jk}y_{j} \quad k=1,2,...,l netk=j=0∑mwjkyjk=1,2,...,l
对于隐层,有:
yj=f(netj)j=1,2,...,m
y_j = f(net_j) \quad j=1,2,...,m
yj=f(netj)j=1,2,...,m
netj=∑i=0nvijxij=1,2,...,m net_j = \sum_{i=0}^{n}v_{ij}x_{i} \quad j=1,2,...,m netj=i=0∑nvijxij=1,2,...,m
以上两式中,转移函数f(x)均为单极性Sigmoid函数:
f(x)=11+e−x
f(x) = \frac{1}{1+e^{-x}}
f(x)=1+e−x1
f(x)具有连续、可导的特点,且有:
f′(x)=f(x)[1−f(x)]
f^\prime(x) = f(x)[1-f(x)]
f′(x)=f(x)[1−f(x)]
根据应用需要,也可以采用双极性Sigmoid函数
f(x)=1−e−x1+e−x
f(x) = \frac{1-e^{-x}}{1+e^{-x}}
f(x)=1+e−x1−e−x
三、BP学习算法
3.1 网络误差定义与权值调整思路
当网络输出与期望输出不等时,存在输出误差E,定义如下:
E=12(d−O)2=12∑k=1l(dk−ok)2
E = \frac{1}{2}(\boldsymbol d- \boldsymbol O)^2 = \frac{1}{2}\sum_{k=1}^{l}(d_{k} - o_{k})^{2}
E=21(d−O)2=21k=1∑l(dk−ok)2
将以上误差定义式展开至隐层,有:
E=12∑k=1l(dk−f(netk))2=12∑k=1l(dk−f(∑j=0mwjkyj))2
E = \frac{1}{2}\sum_{k=1}^{l}(d_k - f(net_k))^2 \\
= \frac{1}{2}\sum_{k=1}^{l}(d_k - f(\sum_{j=0}^{m}w_{jk}y_j))^2
E=21k=1∑l(dk−f(netk))2=21k=1∑l(dk−f(j=0∑mwjkyj))2
进一步展开至输出层,有:
E=12∑k=1m(dk−f[∑j=0mwjkf(netj)])2=12∑k=1m(dk−f[∑j=0mwjkf(∑i=0nvijxi)])2
E = \frac{1}{2}\sum_{k=1}^{m}(d_k - f[\sum_{j=0}^{m}w_{jk}f(net_{j})])^2 \\
= \frac{1}{2}\sum_{k=1}^{m}(d_k-f[\sum_{j=0}^{m}w_{jk}f(\sum_{i=0}^{n}v_{ij}x_i)])^2
E=21k=1∑m(dk−f[j=0∑mwjkf(netj)])2=21k=1∑m(dk−f[j=0∑mwjkf(i=0∑nvijxi)])2
由上式可知,网络误差是各层权值wjk、vij的函数,因此调整权值可以改变误差E。
显然,调整权值的原则是使错误不断的减小,因此应使权值的调整量与误差的梯度的下降成正比,即:
Δwjk=−η∂E∂wjkj=0,1,2,...,m;k=1,2,....,l
\Delta w_{jk} = -\eta\frac{\partial E}{\partial w_{jk}} \quad j=0,1,2,...,m; k=1,2,....,l
Δwjk=−η∂wjk∂Ej=0,1,2,...,m;k=1,2,....,l
Δvij=−η∂E∂viji=0,1,2,...,n;j=1,2,...,m \Delta v_{ij} = -\eta\frac{\partial E}{\partial v_{ij}} \quad i=0,1,2,...,n;j=1,2,...,m Δvij=−η∂vij∂Ei=0,1,2,...,n;j=1,2,...,m
式子中,负号表示梯度下降,常数η∈(0,1)表示比例系数,在训练中反映了学习速率。可以看出,BP算法属于δ学习规则类,这类算法常被称为误差的梯度下降算法。
3.2 BP算法推导
进行BP算法推导之前,先了解一下得了δ学习规则
δ学习规则
1986年,认知心理学家McClelland和Rumelhart在神经网络训练中引入了δ规则,该规则也可以称为连续感知器学习规则。
δ学习规则是一种利用梯度下降法的一般性的学习规则。11
以二次代价函数为例:
E=12(t−y)2=12[t−f(WX)]2
E = \frac{1}{2}(t-y)^{2} = \frac{1}{2}[t-f(WX)]^2
E=21(t−y)2=21[t−f(WX)]2
误差E是权向量W的函数,我们可以使用梯度下降法来最小化E的值:
ΔW=−ηE′=ηXT(t−y)f′(WX)=ηXTδ
\Delta W = -\eta E^\prime = \eta X^T(t-y)f^\prime(WX) = \eta X^T\delta
ΔW=−ηE′=ηXT(t−y)f′(WX)=ηXTδ
Δwi=−ηE′=ηxi(t−y)f′(WX)=ηxiδ \Delta w_i = -\eta E^\prime = \eta x_i(t-y)f^\prime(WX)=\eta x_i\delta Δwi=−ηE′=ηxi(t−y)f′(WX)=ηxiδ
BP算法推导
公式12仅是对权值调整思路的数学表达,而不是具体的权值调整的计算式。下面推导三层BP算法权值调整的计算式。事先约定,在全部推导过程中,对输出层均有j=0, 1, 2,…,m,k=1,2,…,l;对隐层均有i=0,1,2,…n,j=1,2,…,m
对于输出层,公式12可写成
Δwjk=−η∂E∂wjk=−η∂E∂netk∂netk∂wjk
\Delta w_{jk} = -\eta \frac{\partial E}{\partial w_{jk}} = -\eta \frac{\partial E}{\partial net_{k}}\frac{\partial net_{k}}{\partial w_{jk}}
Δwjk=−η∂wjk∂E=−η∂netk∂E∂wjk∂netk
对隐层,公式13可以写成
Δvij=−η∂E∂vij=−η∂E∂netj∂netj∂vij
\Delta v_{ij} = -\eta\frac{\partial E}{\partial v_{ij}} = -\eta \frac{\partial E}{\partial net_j}\frac{\partial net_{j}}{\partial v_{ij}}
Δvij=−η∂vij∂E=−η∂netj∂E∂vij∂netj
对输出层和隐层各定义一个误差信号,令:
δko=−∂E∂netk
\delta_{k}^{o} = -\frac{\partial E}{\partial net_k}
δko=−∂netk∂E
δjy=−∂E∂netj \delta_j^y= -\frac{\partial E}{\partial net_j} δjy=−∂netj∂E
综合公式10和公式19,将公式17的权值调整公式改写为:
Δwjk=ηδkoyj
\Delta w_{jk} = \eta \delta_k^{o}y_j
Δwjk=ηδkoyj
综合公式11和公式20,将公式18的权值调整公式改写为:
Δvij=ηδjyxi
\Delta v_{ij} = \eta\delta_j^yxi
Δvij=ηδjyxi
可以看出,只要计算出公式21和22中的误差信号,权值调整量的计算推导即可完成
对于输出层,δko可以展开为:
δko=−∂E∂netk=−∂E∂ok∂ok∂netk=−∂E∂okf′(netk)
\delta_k^{o} = -\frac{\partial E}{\partial net_k} = -\frac{\partial E}{\partial o_k}\frac{\partial o_k}{\partial net_k} = -\frac{\partial E}{\partial o_k}f^\prime(net_k)
δko=−∂netk∂E=−∂ok∂E∂netk∂ok=−∂ok∂Ef′(netk)
对于隐层,δjy可以展开为
δjy=−∂E∂netj=−∂E∂yj∂yj∂netj=−∂E∂yjf′(netj)
\delta_j^y = -\frac{\partial E}{\partial net_j} = -\frac{\partial E}{\partial y_j}\frac{\partial y_j}{\partial net_j} = -\frac{\partial E}{\partial y_j}f^\prime(net_j)
δjy=−∂netj∂E=−∂yj∂E∂netj∂yj=−∂yj∂Ef′(netj)
下面求式子23和24中网络误差对各层输出的偏导。
对于输出层,利用公式9,可得
∂E∂ok=−(dk−ok)
\frac{\partial E}{\partial o_k} = -(d_k - o_k)
∂ok∂E=−(dk−ok)
对于隐层,利用公式10,可得
∂E∂yj=−∑k=1l(dk−ok)f′(netk)wjk
\frac{\partial E}{\partial y_j} = -\sum_{k=1}^l(d_k - o_k)f^\prime(net_k)w_{jk}
∂yj∂E=−k=1∑l(dk−ok)f′(netk)wjk
将结果带入到公式23和公示24中,并利用公式7
δko=(dk−ok)f′(netk)=(dk−ok)ok(1−ok)
\delta_k^o = (d_k-o_k)f^\prime(net_k) = (d_k-o_k)o_k(1-o_k)
δko=(dk−ok)f′(netk)=(dk−ok)ok(1−ok)
δjy=[∑k=1l(dk−ok)f′(netk)wjk]f′(netj)=(∑k=1lδkowjk)yj(1−yj) \delta_j^y = [\sum_{k=1}^l(d_k -o_k)f^\prime(net_k)w_{jk}]f^\prime(net_j) = (\sum_{k=1}^l\delta_k^ow_{jk})y_j(1-y_j) δjy=[k=1∑l(dk−ok)f′(netk)wjk]f′(netj)=(k=1∑lδkowjk)yj(1−yj)
至此,两个误差信号的推导已经完成,将式子27和28代回到公式21和22中,得到三层感知器的BP学习算法权值调整计算公式为
{Δwjk=ηδkoyj=η(dk−ok)ok(1−ok)yjΔvij=ηδjyxi=η(∑k=1lδkowjk)yj(1−yj)xi
\begin{cases}
\Delta w_{jk} = \eta \delta_k^{o}y_j = \eta(d_k-o_k)o_k(1-o_k)y_j\\
\Delta v_{ij} = \eta\delta_j^yxi = \eta(\sum_{k=1}^l\delta_k^ow_{jk})y_j(1-y_j)x_i
\end{cases}
{Δwjk=ηδkoyj=η(dk−ok)ok(1−ok)yjΔvij=ηδjyxi=η(∑k=1lδkowjk)yj(1−yj)xi