神经网络正向与反向传播

一、神经网络的前向传播原理

在全连接神经网络中,每一层的每个神经元都会与前一层的所有神经元或者输入数据相连,例如图中的 f 1 ( e ) f _1 ( e ) f1(e)就与 x 1 x_1 x1 x 2 x_2 x2 分别相连。因此,在计算的时候,每一个神经元的输出=使用激活函数激活前一层函数的累加和。
在这里插入图片描述
下面将通过一个具体例子来理解反向传播的具体流程。下图是一个神经网络的结构图,其中: 输入数据:i1=0.05,i2=0.10 ;权重系数:w1=0.15,w2=0.20,w3=0.25,w4=0.30,w5=0.40,w6=0.45,- w7=0.50,w8=0.55 ;隐藏层神经元:h1,h2 ;输出层神经元:o1,o2 ;偏置项(bias):b1=0.35,b2=0.60 ;激活函数:sigmoid
目标:给出输入数据i1, i2(0.05和0.10),使输出尽可能与原始输出o1,o2(0.01和0.99)接近。
在这里插入图片描述

输入层——>隐藏层
计算神经元h1的加权和 n e t h 1 n e t_{h 1} neth1(未经激活函数激活):
在这里插入图片描述
计算h1的输出 o u t h 1 out_{h1} outh1(激活后):
在这里插入图片描述

同理可以计算出h2的输出 o u t h 2 out_{h2} outh2
在这里插入图片描述
同理可以计算出隐藏层——>输出层
在这里插入图片描述
至此前向传播就结束了,我们得到的输出结果是 [ o u t o 1 = 0.75136079 , o u t o 2 = 0.772928465 ] [out_{o1} =0.75136079 ,out_{o2}=0.772928465] [outo1=0.75136079,outo2=0.772928465], 与目标的[0.01, 0.99]还差的很远。因此,有必要计算误差,更新权重,使预测值接近真实值。

二、神经网络的反向传播原理

Step2 更新输出层权重
由于隐藏层需要将相连接的多个神经元的权重求和,因此为了方便理解,这里先从一个神经元的输出层开始讲解。
1.计算误差
在我们的神经网络中,有两个输出,因此计算误差的时候需要把这两个输出的误差求和。这里计算总误差时,我们采用输出与期望的误差的平方和,即mse的计算方法来计算。
计算误差公式:

在这里插入图片描述
根据此公式,输出1、输出2、总误差的计算如下所示:
在这里插入图片描述
2.更新权重
更新权重时,我们需要知道这个权重对全体产生了多少影响,这个影响的大小可以用偏导数求出来。
例:对于输出层权重w5,我们可以用整体的误差对w5求偏导

下图展示了如何使用链式法则来进行反向传播的:
在这里插入图片描述
可以先想象以下有这样的一个函数。 y = f a ( f b ( w 0 , w 1 ) ) y = f a ( f b ( w 0 , w 1 ) ) y=fa(fb(w0w1)),在这个函数中,由于是函数的嵌套,没法直接对 w 0 w 0 w0求偏导。想要对 w 0 w 0 w0求偏导的话,需要先用整个函数对外层的 f a f_a fa求偏导,然后在使用 f a f_a fa f b ( w 0 , w 1 ) f_b(w_0, w_1) fb(w0,w1)求偏导。链式法则就是针对这种函数嵌套问题的一种解决方法。(可以理解为套娃,想要求得最里面的偏导数就要一层一层拆开这种感觉。
针对图中的神经元,可以将其想象为以下的嵌套方式 ( n e t o 1 ( w 5 , w 6 , w 7 ) ) (net_{o1}(w5,w6,w7)) (neto1(w5w6w7)),因此为了求得w5对整体误差的影响,需要先用整体误差对 o u t o 1 out_{o1} outo1 求偏导,再用 o u t o 1 out_{o1} outo1 n e t o 1 net_{o1} neto1 求偏导,最后使用 o u t o 1 out_{o1} outo1对w5求偏导。
了解了链式法则后,来实际看看使用链式法则对w5来进行求偏导的过程。
具体求解如下:
计算误差公式 ∂ E t o t a l / ∂ o u t o 1 ∂ E_{total}/∂out_{o1} Etotal/outo1
在这里插入图片描述
在这里插入图片描述
这一步相当于是对激活函数sigmoid求导
在这里插入图片描述
最后三项相乘得到最终的w5的偏导:
在这里插入图片描述

在这里插入图片描述
在反向传播中,我们通常使用 δ δ δ来表示误差,因此输出层o1的误差可以表现为 δ o 1 δ_{o1} δo1,可以表示为如下形式:
在这里插入图片描述

因此对于计算w5对整体误差的影响的公式:
在这里插入图片描述
可以表示为:
在这里插入图片描述
如果误差为负数,也可以表示成:
在这里插入图片描述
根据上面的计算式,来更新w5的权重:
在这里插入图片描述
其中η是学习率,这里取0.5,同理更新w6,w7,w8:
在这里插入图片描述
Step3 更新隐藏层权重
更新隐藏层的方法,与更新输出层的权重系数的方法类似,但是有一点需要注意。
在更新输出层权重系数w5的时候,我们使用链式法则,通过out(o1)→net(o1)→w5求出。注意!此时神经元o1的求导路径只有一条!
在更新隐藏层权重系数w1,使用链式法则时,通过out(h1)→net(h1)→w1求出,如下:
在这里插入图片描述
注意!这个时候神经元o1的求导路径有2条(如蓝色箭头所示)!
因此,计算的时候,需要计算这两个地方传来的误差,并求和:
在这里插入图片描述
先计算第一部分的误差:
在这里插入图片描述
同理可以计算第二部分:
在这里插入图片描述
两者相加计算出总误差:
在这里插入图片描述
再计算数 ∂ o u t h 1 ∂ n e t h 1 \frac{\partial out_{h1}}{\partial net_{h1}} neth1outh1在这里插入图片描述
计算第3部分的偏导数 ∂ n e t h 1 ∂ w 1 \frac{\partial net_{h1}}{\partial w_{1}} w1neth1
在这里插入图片描述

三者相乘,计算h1节点对w1的偏导数 ∂ E t o t a l ∂ w 1 \frac{\partial E_{total}}{\partial w_{1}} w1Etotal
在这里插入图片描述
至此,就计算出了神经元h1的误差。
将上面的计算步骤整理,可得如下公式:
在这里插入图片描述
其中,累加符号表示将不同路径的误差相加,此时的路径有两条(图中的两个蓝色箭头)。同时,将计算输出层的误差时说到,计算时使用δ δδ来表示误差,这里的 δ h 1 δ_{h1} δh1代表神经元h1的误差。得到了神经元h1的误差,就可以根据之前的权重系数以及误差来更新权重系数了。更新h1的权重系数:
在这里插入图片描述

至此,1个神经元的权重系数的更新就完成了。其中的η \etaη代表学习率,通常在程序中指定,可以理解为梯度下降法中的步长。
同理,更新w2,w3,w4的权重系数:
在这里插入图片描述
至此,反向传播就结束了。将这个过程不断重复,就可以不断减小误差,提高正确率,获得比较好的模型了。
感谢博主的知识共享:
原文链接:https://blog.csdn.net/fsfjdtpzus/article/details/106256925

  • 9
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
BP(BackPropagaTIon)神经网络是一种神经网络学习算法,全称基于误差反向传播算法的人工神经网络。   如图所示拓扑结构的单隐层前馈网络,一般称为三层前馈网或三层感知器,即:输入层、中间层(也称隐层)和输出层。它的特点是:各层神经元仅与相邻层神经元之间相互全连接,同层内神经元之间无连接,各层神经元之间无反馈连接,够成具有层次结构的前馈型神经网络系统。单计算层前馈神经网络只能求解线性可分问题,能够求解非线性问题的网络必须是具有隐层的多层神经网络。   在人工神经网络发展历史中,很长一段时间里没有找到隐层的连接权值调整问题的有效算法。直到误差反向传播算法(BP算法)的提出,成功地解决了求解非线性连续函数的多层前馈神经网络权重调整问题。   BP(BackPropagaTIon)神经网络,即误差反传误差反向传播算法的学习过程,由信息的正向传播和误差的反向传播两个过程组成。输入层各神经元负责接收来自外界的输入信息,并传递给中间层各神经元;中间层是内部信息处理层,负责信息变换,根据信息变化能力的需求,中间层可以设计为单隐层或者多隐层结构;最后一个隐层传递到输出层各神经元的信息,经进一步处理后,完成一次学习的正向传播处理过程,由输出层向外界输出信息处理结果。当实际输出与期望输出不符时,进入误差的反向传播阶段。误差通过输出层,按误差梯度下降的方式修正各层权值,向隐层、输入层逐层反传。周而复始的信息正向传播和误差反向传播过程,是各层权值不断调整的过程,也是神经网络学习训练的过程,此过程一直进行到网络输出的误差减少到可以接受的程度,或者预先设定的学习次数为止。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值