神经网络反向传播BP算法

0. 前言

前面提到了神经网络结构中比较主要的3部分:拓扑结构、激活(激励)函数、求解权重 w w w 的优化算法,而BP就是与第三部分相关的 !

1. BP算法说明

网络的训练过程:在输入数据后,先是一个正向传播(FP)的过程,之后可以求得损失,再反向传播(BP)回传误差,根据误差调整每层的权重 w w w ,再重复这个过程(迭代) 。

以下图网络结构为例,对反向传播的过程进行说明:

在这里插入图片描述
在上图的每个神经元中实际有两部分的处理,线性变化+非线性变化,即先是 w x + b wx+b wx+b 变换,再通过激活函数(此处假设隐藏层和输出层的激活函数相同) f ( w x + b ) f(wx+b) f(wx+b),对于 w x + b wx+b wx+b 也可以写成 w x + w 0 x 0 = w x wx+w_0x_0 = wx wx+w0x0=wx x 0 = 1 x_0=1 x0=1);除此之外,假设输入层与隐藏层之间的权重用符号 v v v 表示,隐藏层与输出层之间的权重用符号 w w w 表示

首先,正向传播后计算误差

  • 输出层误差

E = 1 2 ( d − O ) 2 = 1 2 ∑ k = 1 ℓ ( d k − O k ) 2 E=\frac{1}{2}(d-O)^{2}=\frac{1}{2} \sum_{k=1}^{\ell}\left(d_{k}-O_{k}\right)^{2} E=21(dO)2=21k=1(dkOk)2

其中 , d d d 表示真实值 , O O O 表示模型输出值,系数 1 2 \frac{1}{2} 21 求导之后可以消掉;

  • 隐藏层误差

E = 1 2 ∑ k = 1 c ( d k − f ( n e t k ) ) 2 = 1 2 ∑ k = 1 ℓ ( d k − f ( ∑ j = 1 m w j k y j ) ) 2 E=\frac{1}{2} \sum_{k=1}^{c}\left(d_{k}-f\left(n e t_{k}\right)\right)^{2}=\frac{1}{2} \sum_{k=1}^{\ell}\left(d_{k}-f\left(\sum_{j=1}^{m} w_{j k} y_{j}\right)\right)^{2} E=21k=1c(dkf(netk))2=21k=1(dkf(j=1mwjkyj))2

其中, n e t k net_k netk 就是上一层每个神经元线性求和

  • 输入层误差

E = 1 2 ∑ k = 1 c ( d k − f [ ∑ j = 0 m w j k f ( n e t j ) ] ) 2 = 1 2 ∑ k = 1 ℓ ( d k − f [ ∑ j = 0 m w j k f ( ∑ i = 1 n v i j x i ) ] ) 2 E=\frac{1}{2} \sum_{k=1}^{c}\left(d_{k}-f\left[\sum_{j=0}^{m} w_{j k} f\left(n e t_{j}\right)\right]\right)^{2}=\frac{1}{2} \sum_{k=1}^{\ell}\left(d_{k}-f\left[\sum_{j=0}^{m} w_{j k} f\left(\sum_{i=1}^{n} v_{i j} x_{i}\right)\right]\right)^{2} E=21k=1c(dkf[j=0mwjkf(netj)])2=21k=1(dkf[j=0mwjkf(i=1nvijxi)])2

接着,根据误差反向调整权重

为了使得误差E变小,采用随机梯度下降的方式对 w w w v v v 进行调整,即找到合适的 w w w v v v 使得误差最小。

Δ ω j k = − η ∂ E ∂ ω j k j = 0 , 1 , 2 , … , m ; κ = 1 , 2 , … , ℓ \Delta \omega_{j \mathrm{k}}=-\eta \frac{\partial E}{\partial \omega_{j \mathrm{k}}} j=0,1,2, \ldots, m ; \quad \kappa=1,2, \ldots, \ell Δωjk=ηωjkEj=0,1,2,,m;κ=1,2,,

Δ v i j = − η ∂ E ∂ v i j i = 0 , 1 , 2 , … , n ; j = 1 , 2 , … , m \Delta v_{i j}=-\eta \frac{\partial E}{\partial v_{i j}} i=0,1,2, \ldots, n ; \quad j=1,2, \ldots, m Δvij=ηvijEi=0,1,2,,n;j=1,2,,m

以上是一个算法步骤的大致说明,下篇博客将通过一个例子来模拟这个算法的过程。

猜你喜欢

转载自blog.csdn.net/weixin_41857483/article/details/110201687