误差反向传播算法(BP网络)
1、引言
误差反向传播网络(Error Back Propagtion,),简称为BP神经网络,是一种多层神经网络,与之相关的另一个概念是多层感知器(Multi-Layer Perceptron,MLP)。多层感知器除了输入层和输出层以外,还具有若干个隐含层。多层感知器强调神经网络在结构上由多层组成,BP神经网络则强调网络采用误差反向传播的学习算法。大部分情况下多层感知器采用误差反向传播的算法进行权值调整,因此两者一般指的是同一种网络。
2、结构
BP神经网络的隐含层可以为一层或多层,一个包含2层隐含层的BP神经网络的拓扑结构如图(1)所示。
图1 BP神经网络的结构
BP神经网络的特点:
- 网络由多层构成,层与层之间全连接,同一层之间的神经元无连接。多层的网络设计,使BP网络能够从输入中挖掘更多的信息,完成更复杂的任务。
- BP网络的传递函数必须可微。因此,感知器的传递函数——二值函数在这里没有用武之地。BP网络一般使用Sigmoid函数或线性函数作为传递函数。
- 采用误差反向传播算法(Back-Propagation Algorithm)进行学习。在BP网络中,数据从输入层经隐含层逐层向后传播,训练网络权值时,则沿着减少误差的方向,从输出层经过中间各层逐层向前修正网络的连接权值。随着学习的不断进行,最终的误差越来越小。
注意:
在BP网络中,“反向传播”指的是误差信号反向传播,修正权值时,网络根据误差从后向前逐层进行修正。BP神经网络属于多层前向网络,工作信号始终正向流动,没有反馈结构。
3、BP神经网络的学习算法
3.1 最速下降法
最速下降法的原理:对于实值函数F(x)F(x)F(x),如果F(x)F(x)F(x)在某点x0x_0x0出有定义切可微,则函数在该店处沿着梯度相反的方向−Δ-\Delta−ΔF(x0)F(x_0)F(x0)下降最快。
因此,在使用最速下降法时,应首先计算函数在某点处的梯度,再沿梯度的反方向以一定的步长调整自变量的值。
假设x1=x0−ηΔF(X0)x_1=x_0-\eta\Delta F(X_0)x1=x0−ηΔF(X0),当步长η\etaη足够小时,F(x1)<F(x0)F(x_1)<F(x_0)F(x1)<F(x0)必成立。因此,只需要给定一个初始x0x_0x0和步长η\etaη,根据xn+1=xn−ηΔF(xn)x_{n+1}=x_n-\eta \Delta F(x_n)xn+1=xn−ηΔF(xn),就可以得到一个自变量xxx的序列,并满足F(xn+1)<F(xn)<⋅⋅⋅<F(x1)<F(x0)F(x_{n+1})<F(x_{n})<···<F(x_{1})<F(x_{0})F(xn+1)<F(xn)<⋅⋅⋅<F(x1)<F(x0).
只需要反复迭代,就可以求出函数的最小值。
最速下降法的不足:
- 目标函数必须可微。对于不满足这个条件的函数,无法使用最速下降法进行求解。
- 如果最小值附近比较平坦,算法会在最小值附近停留很久,收敛缓慢。可能出现“之”字形下降。
- 对于包含多个极小值的函数,所获得的结果依赖于初始值。算法有可能陷入局部极小值点,而没有达到全局最小值点。
3.2 最速下降BP法
标准的BP网络使用最速下降法来调制各层权值。下面以三层BP网络来推导标准BP网络的权值学习算法。
- 1变量定义
在三层BP网络中,假设输入神经元个数为M,隐含层神经元个数为I,输出层神经元个数为J。输入层第m个神经元记为xmx_mxm,隐含层第i个神经元记为kik_iki,输出层第j个神经元记为yjy_jyj。从xmx_mxm到kik_iki,的连接权值为wmiw_{mi}wmi,从kik_iki到yjy_jyj,的连接权值为wijw_{ij}wij。隐含层传递函数为Sigmoid函数,输出层传递函数为线性函数,网络结构如图6所示。
图2 三层BP网络
上述网络接受一个长为MMM的向量作为输入,最终输出一个长为JJJ的向量。用uuu和vvv分别表示每一层的输入与输出,如uI1u^1_IuI1出表示III层(即隐含层)第一个神经元的输入。网络的实际输出为:
网络的期望输出为:
其中,n为迭代次数。第n次迭代的误差信号定义为:
则,误差能量可以定义为:
这里前面系数1/21/21/2是为了后面的求导方便。
2.工作信号正向传播
输入层的输出即为整个网络的输入信号:vMm(n)=x(n)v^m_M(n)=x(n)vMm(n)=x(n)
隐含层第i个神经元的输入等于vMm(n)v^m_M(n)vMm(n)的加权和:
隐含层第iii个神经元的输出等于:
输出层第jjj个神经元的输入等于vIi(n)v^i_I(n)vIi(n)的加权和:
输出层第jjj个神经元的输出等于:
输出层第jjj个神经元的误差:
网络的总误差:
3.误差信号反向传播(关键)
在权值调整阶段,沿着网络逐层反向进行调整。
(1)受限调整隐含层与输出层之间的权值wijw_{ij}wij。根据最速下降法,计算误差对wijw_{ij}wij的梯度,再沿着该放下反向进行调整:
根据微分的链式法则,有
由于e(n)e(n)e(n)是ej(n)e_j(n)ej(n)的二次函数,气微分为一次函数:
输出层传递函数的导数:
因此,梯度值为
权值修正量为:
引入局部梯度的定义:
因此,权值修正量可表示为:
局部梯度指明权值所需要的变化。神经元的局部梯度等于该神经元的误差信号与传递函数乘积。在输出层,传递函数一般为线型函数,因此其导数为1:
代入上式,可得:
输出神经元的权值修正相对简单。
(2)误差信号向前传播,对输入层与隐含层之间的权值wmiw_{mi}wmi进行调整,与上一步类似,应有
vMm(n)v^m_M(n)vMm(n)为输入神经元的输出,vMm(n)=xm(n)v^m_M(n)=x^m(n)vMm(n)=xm(n).
δIi\delta^i_IδIi为局部梯度,定义为
由于隐含层不可见,因此无法直接求解误差对该层出书值得偏导数,这里需要使用上一步计算中求得的输出层节点的局部梯度:
因此,有
三层BP网络的一轮权值调整就完成了。总结为:
权值调整量Δw\Delta wΔw=学习率η\etaη*局部梯度δ\deltaδ*上一层输出信号 vvv。
当输出层传递函数为线性函数时,输出层与隐含层之间权值调整的规则类似于线性神经网络的权值调整规则。BP网络的复杂之处在于,隐含层与隐含层之间、隐含层与输入层之间调整权值时,局部梯度的计算需要用到上一步计算的结果。前一层的局部梯度是后一层局部梯度的加权和。也正是因为这个原因,BP网络学习权值时只能从后向前依次计算。
误差反向传播算法(BP网络)相关推荐
- 误差反向传播算法笔记
复习一下基础. 一.机器学习模型的处理方法 (1) 数据预处理: 经过数据的预处理,如去除噪声等.比如在文本分类中,去除停用词等. (2) 特征提取:从原始数据中提取一些有效的特征.比如在图像分类中, ...
- TensorFlow基础10-(误差反向传播算法以及实现多层神经网络)
记录TensorFlow听课笔记 文章目录 记录TensorFlow听课笔记 一,误差反向传播算法 二,链式求导法则 三,隐含层有多个神经元的误差反向传播 四,激活函数 五,实现多层神经网络 一,误差 ...
- 深度学习入门笔记(六):误差反向传播算法
专栏--深度学习入门笔记 推荐文章 深度学习入门笔记(一):机器学习基础 深度学习入门笔记(二):神经网络基础 深度学习入门笔记(三):感知机 深度学习入门笔记(四):神经网络 深度学习入门笔记(五) ...
- 神经网络之误差反向传播算法推导
原理 误差反向传播算法是通过误差函数计算实际输出值与期望输出值之间的误差,把误差从最后的输出层依次传播到之前各层,最后通过调整各层连接权重与偏置达到减小误差的目的.而权重和偏置的调整一般使用梯度下降法 ...
- 深度学习-误差反向传播算法
文章目录 一.误差反向传播算法是干什么的? 二.计算图 (一) 了解计算图的写法 (二)局部计算 (三) 计算图的优点 三. 误差反向传播算法的具体实现 一.误差反向传播算法是干什么的? 通过数值微分 ...
- 深度学习 --- BP算法详解(误差反向传播算法)
本节开始深度学习的第一个算法BP算法,本打算第一个算法为单层感知器,但是感觉太简单了,不懂得找本书看看就会了,这里简要的介绍一下单层感知器: 图中可以看到,单层感知器很简单,其实本质上他就是线性分类器 ...
- 神经网络与机器学习 笔记—反向传播算法(BP)
先看下面信号流图,L=2和M0=M1=M2=M3=3的情况,上面是前向通过,下面部分是反向通过. 1.初始化.假设没有先验知识可用,可以以一个一致分布来随机的挑选突触权值和阈值,这个分布选择为均值等于 ...
- 深度学习---反向传播算法BP
BP神经网络的数学原理及其算法实现: http://blog.csdn.net/zhongkejingwang/article/details/44514073 脉络清晰的BP神经网络讲解:http: ...
- 深度神经网络(DNN)反向传播算法(BP)
在深度神经网络(DNN)模型与前向传播算法中,我们对DNN的模型和前向传播算法做了总结,这里我们更进一步,对DNN的反向传播算法(Back Propagation,BP)做一个总结. 1. DNN反向 ...
最新文章
- MATLAB从入门到精通系列之MATLAB常见问题集锦-(二)
- 【C语言练习】求两个数m和n的最大公约数(辗转相除法)
- aem 渲染_AEM中的单元测试(大声思考)
- JAVA逆向反混淆-追查Burpsuite的破解原理
- About MS Reporting Service
- 【路由和交换之H3C自导自演】
- Vue.js2.0从入门到放弃---入门实例(一)
- FileZilla,读取目录列表失败(425 Can‘t open data connection.)的解决办法
- 大电流dcdc降压芯片20a_基于MC34063芯片DC-DC(20-5)降压型变换电路
- Scikit Learn-聚类方法
- python基础之文件处理
- JS-JavaScript_简介及基本使用
- python模拟手机按键_Appium+Python-模拟手机按键操作
- UE在.CS文件中打印Log(日志)
- JAVA NIO实现客户端与服务端通信
- 可执行文件的装载与进程
- 12个学习 CSS3 网站布局设计的优秀案例
- 用Microsoft Excel打开编辑CSV文件
- Photoshop-滤镜库的详细使用方法
- 如何正确地还原一个3阶魔方