误差反传算法(BP算法)推导

反向传播(Error Back Proragation,BP)算法应用对象:具有非线性连续变换函数的多层感知器(多层前馈网络)。

BP 算法的基本思想是,学习过程由信号的正向传播与误差的反向传播两个过程组成。正向传播时,输入样本从输入层传入,经各隐层逐层处理后,传向输出层。若输出层的实际输出与期望的输出(教师信号)不符,则传入误差的反向传播阶段。误差反传是将输出误差以某种形式通过隐层向输出层逐层反传,并将误差分摊给各层的所有单元,从而获得各层单元的误差信号,此误差信号即作为修正各单元权值的依据。这种信号正向传播与误差发向传播的各层权值调整过程,是周而复始地进行的。权值不断调整的过程,也就是网络的学习训练过程。此过程已知进行到网络输出的误差减少到可接受的程度,或进行到预先设定的学习次数为止。

采用 BP 算法的多层感知器是至今为止应用最广泛的神经网络,在多层感知器的应用中,以下图所示的单隐层网络的应用最为普遍。一般习惯将但单隐层前馈网称为三层感知器,所谓三层包括了输入层、隐层和输出层。

三层 BP 网

x_{0}=-1 是为隐层神经元引入阈值而设置的
y_{0}=-1 是为输出层神经元阈值而设置的
输入向量为 X=(x_{1},x_{2},...,x_{i},...,x_{n})^{T} 
隐层输出向量 Y=(y_{1},y_{2},...,y_{j},...,y_{m})^{T}
输出层输出向量 O=(o_{1},...,o_{k},...,o_{l})^{T}
期望输出向量为 d=(d_{1},d_{2},...,d_{k},...,d_{l})^{T}
输入层到隐层之间的权值矩阵 V=(V_{1},V_{2},...,V_{j},...,V_{m}),其中列向量 V_{j} 为隐层第 j 个神经元对应的权向量
隐层到输出层之间的权值矩阵 W=(W_{1},W_{2},...,W_{k},...,W_{l}), 其中列向量 W_{k} 为输出层第 k 个神经元对应的权向量
对于输出层均有 j=0,1,2,..,m;\: k=1,2,..,l
对于隐层均有 i=0,1,2,..,n;\: j=1,2,..,m

下面分析各信号之间的数学关系
(注:下面蓝色字体表示输出层紫色字体表示隐层红色表示输入层

对于输出层,有

                                     {\color{Blue} o_{k}=f(net_{k})\: \: \: \: \: \: \: \: \: k=1,2,...,l}                                                                          (1)
                                     {\color{Blue} net_{k}=\sum_{j=0}^{m}w_{jk}y_{j}\: \: \: \: \: \: \: \: \: k=1,2,...,l}                                                                   (2)

对于隐层,有

                                     {\color{Magenta} y_{j}=f(net_{j})\: \: \: \: \: \: \: \: \: j=1,2,...,m}                                                                         (3)
                                     {\color{Magenta} net_{j}=\sum_{i=0}^{n}v_{ij}x_{j}\: \: \: \: \: \: \: \: \: j=1,2,...,m}                                                                   (4)

以上两式中,变换函数 f(x) 均为单极性 Sigmoid 函数

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

f(x) 具有连续、可导的特点,且有

                                    f'(x)=f(x)[1-f(x)]                                                                                         (6)

式(1)~ 式(5)共同构成了三层感知器的数学模型。

当网络输出与期望输出不等时,存在输出误差 E,定义如下

                                    E=\frac{1}{2}(d-O)^{2}=\frac{1}{2}\sum_{k=1}^{l}(d_{k}-o_{k})^{2}                                                                     (7)

以上误差定义式展开至隐层

                                    {\color{Magenta} 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}}                                   (8)

进一步展开至输入层

                                    {\color{Red} E=\frac{1}{2}\sum_{k=0}^{l}\left \{ d_{k}-f[\sum_{j=0}^{m}w_{jk}f(net_{j})] \right \}^{2}=\frac{1}{2}\sum_{k=0}^{l}\left \{ d_{k}-f[\sum_{j=0}^{m}w_{jk}f(\sum_{i=0}^{n}v_{ij}x_{i})] \right \}^{2}}     (9)

网络输入误差是各层权值 w_{jk}v_{jk} 的函数,调整权值可改变误差 E,调整权值的原则是使误差不断减小,因此应使权值的调整量与误差的梯度下降成正比,即

                                  \Delta w_{jk}=-\eta \frac{\partial E}{\partial w_{jk}}\: \: \: \: \: \: \: \: j=0,1,2,...,m;\: \: k=1,2,...,l                                       (10 a)
                                  \Delta v_{ij}=-\eta \frac{\partial E}{\partial v_{ij}}\: \: \: \: \: \: \: \: j=0,1,2,...,m;\: \: k=1,2,...,l                                          (10 b)

式中,负号表示梯度下降,常数 \eta \in (0,1) 表示比例系数,在训练中反映了学习速率。

对于输出层,式(10 a) 可写为

                                   {\color{Blue} \Delta w_{jk}=-\eta \frac{\partial E}{\partial w_{jk}}=-\eta \frac{\partial E}{\partial net_{k}}\frac{\partial net_{k}}{\partial w_{jk}}}                                                                    (11 a)

对于隐层,式(10 b) 可写为

                                    {\color{Magenta} \Delta v_{ij}=-\eta \frac{\partial E}{\partial v_{ij}}=-\eta \frac{\partial E}{\partial net_{j}}\frac{\partial net_{j}}{\partial v_{ij}}}                                                                       (11 b)

对输出层和隐层各定义一个误差信号,令

                                    \delta _{k}^{o}=-\frac{\partial E}{\partial net_{k}}
                                    \delta _{j}^{y}=-\frac{\partial E}{\partial net_{j}}

综合式(2)和式(11 a),可将式(10 a)权值调整改写为

                                   \Delta w_{ij}=\eta \delta _{k}^{o}y_{j}                                                                                                          (12 a)

综合式(3)和式(11 b),可将式(10 b)权值调整改写为

                                   \Delta v_{ij}=\eta \delta _{j}^{y}x_{i}                                                                                                           (12 b)

下面继续推导如何计算 \delta _{k}^{o} 和 \delta _{j}^{y}

对于输出层,\delta _{k}^{o} 可展开为

                                   {\color{Blue} \delta _{k}^{o}=-\frac{\partial E}{\partial net_{k}}=\frac{\partial E\partial o_{k}}{\partial o_{k}\partial net_{k}}=-\frac{\partial E}{\partial o_{k}}f'(net_{k})}                                                        (13 a)

对于隐层,\delta _{j}^{y} 可展开为

                                   {\color{Magenta} \delta _{j}^{y}=-\frac{\partial E}{\partial net_{j}}=\frac{\partial E\partial y_{j}}{\partial y_{j}\partial net_{j}}=-\frac{\partial E}{\partial y_{j}}f'(net_{j})}                                                         (13 b)

下面求式(13)中网络误差对各层输出的偏导。

对于输出层,利用式(7),可得

                                   {\color{Blue} \frac{\partial E}{\partial o_{k}}=-(d_{k}-o_{k})}                                                                                                    (14 a)

对于隐层,利用式(8),可得

                                 {\color{Magenta} \frac{\partial E}{\partial y_{i}}=-\sum_{k=1}^{l}(d_{k}-o_{k})f'(net_{k})w_{jk}}                                                                             (14 b)

将以上结果带入式(13),并应用式(6),得

                               \delta _{k}^{o}=(d_{k}-o_{k})o_{k}(1-o_{k})                                                                                              (15 a)
                              \delta _{j}^{y}=[\sum_{k=1}^{l}(d_{k}-o_{k})f'(net_{k})w_{jk}]f'(net_{j})=(\sum_{k=1}^{l}\delta _{k}^{o}w_{jk})y_{j}(1-y_{j})                             (15 b)

至此两个误差信号的推导已完成,将式(15)带回到式(12),得到三层感知器的 BP 算法权值调整计算公式为                                                     

                               \left\{\begin{matrix} \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}^{y}x_{i}=\eta (\sum_{k=1}^{l}\delta _{k}^{o}w_{jk})y_{j}(1-y_{j})x_{i} \end{matrix}\right.

猜你喜欢

转载自blog.csdn.net/IT_charge/article/details/108698051