BP神经网络——Error back Propagtion

BP网络属于多层前向神经网络,BP网络是前向神经网络的核心部分,也是整个人工神经网络体系的精华,解决非线性问题**广泛应用在分类识别,逼近,回归,压缩等领域。**matlab只是一个计算工具,我们学习需要掌握其关键的原理。

BP神经网络的结构

BP神经网络一般是多层的网络,与之相关的另一个概念是多层感知器(MLP)。也就是说BP神经网络具有多个隐含层,BP网络采用误差反向传播的学习算法。

特点

网络由多层构成,层与层之间全连接,同一层之间的神经元无连接。
BP函数的传递函数必须可微。因此感知器的传递函数——二值函数在这里并没有用;
BP网络一般使用sigmoid函数或者线性函数作为传递函数;

根据输出值是否有负值,sigmoid函数有分为两种函数

Log-Sigmoid
Tan-sigmoid



当然输出层也可以采用sigmoid函数,这时候输出层的输出被限制在(0.-1)或者是(-1,1)之间

误差反向传播算法

采用误差反向算法进行学习。在BP网络中,数据从输入层经过隐含层输出层传播,
训练网络的权值时,则是需要沿着减少误差方向进行。从输出层经过中间各层向前修正网络的连接权值,随着学习的不断进行,不断修正,最终误差越来越小;这里并不是说存在反馈环节,只是计算顺序的选择,每修改一次隐含层中的连接层级,就会进行样本训练,然后在判断是否条件;

BP网络的学习算法

BP网络的学习属于有监督学习,需要一组已知目标输出的学习样本集。训练时先使用随机值作为权值,输入学习样本得到网络的输出,然后根据输出值与目标输出计算误差,再由误差根据适当的准则去修改所有的权值,直到误差不再变化,网络就训练完成。
修改权值有不同的规则:
比如标准的BP网络神经沿着误差性能函数梯度的反方向修改权值,即从误差性能函数出发,根据误差变化,不断修改权值

最速下降法
动量最速下降法 属于改进算法
拟牛顿法       属于改进算法

最速下降法

①最速下降法又称梯度下降法,是一种可微函数的最优化算法;
②而前面一篇文章提到的LMS算法体现了纠错原则,与最速下降法本质上没有差别。最速下降法可以求目标函数的最小值,若把目标函数取为均方误差,就得到LMS算法;

反复迭代就可以求出函数的最小值,根据梯度值可以在函数中画出一系列的等值线或等值面,在等值线或等值面上,函数相等。梯度下降法相当于沿着垂直于等值线的方向向着最小值所在位置移动,对于可微函数来说,最速下降法是求最小哦安置或极小值最有效的一种方法。

最速下降BP法

标准的BP网络使用最速下降法来调制各层权值。下面以三层BP网络为例推导标准BP网络的权值学习算法。

输入层有m个神经元(m维输入)——xm
隐含层有i个神经元——ki
输出层有j个神经元-yj

值得注意的是:与单层感知器和线性神经网络的结构不同,从隐含层到输出层之间,BP网络是有连接权值的计算,而前两者则默认为一;

输出层与隐含层之间的连接权值为W(mi);
隐含层与输出层之间的连接权值为W(ij);

而且隐含层中使用的计算传递函数是Sigmoid函数,以及输出层的传递函数是线性函数;
以三层网络为例,设定输入为二维,样本为4个,隐含层神经元有三个,输出神经元有一个

用x(n)来表示输入;
实际是一个[2x4]的矩阵,
考虑偏置后,变成一个[3x4]的矩阵,但是输出层神经元的个数并没变,还是两个
用s来表示隐含层的输入;
s=w(im)*x(n);  隐含层的神经元有三个,现在的输入层神经元变成了三维,所以w(ij)是一个[3x3]的矩阵
用U来表示隐含层的输出;
u=g(s)         g()是Sigmoid函数,其输出是一个[3x4]的矩阵;
用v来表示输出层的输入计算;
v=w(ij)*u;   作为输出层神经元的输入,若是考虑偏置,也是要变形的[4x4],但是实际上隐含层神经元的个数并没有变,还是三个。若w(ij)的值发生变化的话,影响隐含层神经元的只是其[3x3]的子式;
用y来表示最后的实际输出;
y=f(v);                  f是线性函数;
期望输出用d来表示,误差用e表示;
e(j)=d-y;
用均方误差mse作为性能判断指标;
e(n)=0.5*e(j)^2;  这个用于串行训练
e(n)=e(j)^2;     这个用于批量训练

在调整权值阶段,沿着网络逐层反向进行调整。
①首先调整隐含层与输出层之间的权值:

反方向进行调整;梯度Δ可以由偏导求出;根据微分链式法则:
值得注意的是,公式计算时,有时候需要用到点乘;

de(n)/dW(ij)  =  de(n)/de(j)  de(j)/dy  dy/dv  dv/dW(ij);

接下来就是分布计算:

de(n)/de(j)=e(j);   是指n个训练样本的性能指标的变化量,
de(j)/dy=-1;        是指网络的误差关于输出的导数,即样本的误差实际的变化
dy/dv=f'(v);       在输出层中,传递函数一般为线性函数,所以可以得到: dy/dv=f'(v)=1,n个样本输出层的传递过程变化量
dv/dW(ij)=u;        输出层的输入量的变化,输出层的输入变化量是隐含层的输出变化量

所以可以得到这部分的Δ梯度值

de(n)/dW(ij)=-e(j)f'(v)u=e(j)u

那么权值的修正量为:

Δw(ij)=n*e(j)*u;

详细的计算过程看实例
同样与上一步类似,也可以求出输入层与隐含层之间的权值调整量ΔWmi:
先求出梯度值Δ

de(n)/dW(mi)  =  de(n)/du  du/ds   ds/dW(mi);

分步计算:

de(n)/du=de(n)/de(j)de(j)/dydy/dvdv/du=-e(j)f'(v)w(ij);        f'(v)=1
上面有这条式子v=w(ij)*u,
值得注意的是,这里w(ij)一定是一个矩阵,在计算前面的梯度值时,若其本身是偏置值的计算的,则需要考虑。
但是在计算这一层时,就算w(ij)矩阵中有偏置值的存在,但是是不需要考虑的,因为隐含层的输出并不包括偏置值,不过呢,也是可以考虑的;做法是将值为1作为一个隐含层的神经元,这样的话,隐含层中W(mi)矩阵的大小会发生改变,需要自己理清楚。我后面的计算,不是采用添加多一个神经元的做法。
不过在计算神经元的输入时,会把权值考虑上。
du/ds=g'(s);       由于g为Sidmoid函数,无法像线性函数一样,求导数是一个常量,所以就写成这种形式;
ds/dW(mi)=x(n)    x(n)为输入向量;

将上面三条式子代入得:

de(n)/dW(mi) =-e(j)f'(v)w(ij)g'(s)*xi;

然后就能得到这部分的权值修正量:
Δw(mi)=n(e(j)w(ij)g’(s)xi);
值得注意的是,需要随时注意一个样本对应一组的权值矩阵,一个样本对应一种误差变化。

串行与批量学习方式

在串行运行方式中,每个样本依次输入,需要存储的空间更少,训练的样本是随机的,可以降低网络陷入局部最优的可能性;
批量学习方式闭串行方式更容易实现并行化,由于所有样本同时参与运算,因此批量方式的学习速度往往远优于串行方法;

设计网络的方法

1.网络层数:对于大部分应用场合,单个隐含层即可满足需求。
2.输入层节点数:节点数取决于输入向量的维数, 例如输入的是64x64的图像,则输入向量应为图像中所有的像素形成的4096维向量。
3.隐含层节点数:对BP网络的性能有很大的影响,一般教的隐含层节点数可以带来更好的性能,但是可能导致训练时间过长。通常的做法是经验公式:

4.输出层神经元个数:输出层神经元的个数同样需要根据实际问题中得到抽象模型来确定。
5.传递函数的选择:一般隐含层使用Sigmoid函数,而输出层则使用线性函数。如果输出层也采用sigmoid函数,则输出值会被限制在(0,1)或(-1 1)之间;
6.初始权值的确定:BP网络采用迭代更新的方式确定权值,因此需要一个初始值,一般初始值都是随机给定的;
经验值为(-2.4/F,2.4/F)或者是(-3/F^0.5,3/F^0.5),其中F为权值输入端连接的神经元个数;

BP神经网络相关函数详解

logsig  Log-Sigmoid函数
tansig  Tan-Sigmoid函数
newff   创建一个BP网络
feedforwardnet       创建一个BP网络
newcf                创建级联的前向神经网络
cascadeforwardnet    创建级联的前向神经网络
newfftd              创建前馈输入延迟的BP网络

实例

①logsig函数
这个函数的特点是(-∞,+∞)范围的数据被映射到区间(0,1)。

logsig是一个神经元传递函数,x为神经元节点的输入,函数返回每一个输入数据对应的函数值。

x=-4:4;
y=logsig(x);
plot(x,y,'-o')

②tansig函数
tansig是双曲正切Sigmoid函数,调用形式于logsig函数相同,同样作为神经元传递函数。不过其输出的范围是(-1,1)。

上图可以看出两种函数的不同之处。

x=-4:4;
y=logsig(x);
plot(x,y,'-o')
hold on
y=tansig(x);
plot(x,y,'-r')

③newff——创建一个BP网络
这是BP网络中最常用的函数,可以用于创建一个误差反向传播的前向网络。新版用feedforwardnet函数来代替。

net=newff(P,T,S)
P:输入矩阵
T:输出层节点数,即输出层的维数
S:用于指定隐含层神经元的个数
net=newff(P,T,S,TF,BTF,BLF,PF,IPF,OPF,ODF)
TF:第i层的传递函数,隐含层默认为tansig,输出层默认为purelin;
BTF:BP网络的训练函数,默认值为trainlm,表示采用LM法进行训练;
BLF:BP网络的权值和偏置的学习函数,默认为learngdm
PF:性能函数  默认值为mse
net=feedforwardnet(hiddenSizes,trainfcn)
hiddenSizes为隐含层的神经元个数,如果有多个隐含层,则hiddenSizes是一个行向量,默认值为10.
trainfcn为训练函数,默认值为“trainlm".
该函数并未确定输入层和输出层的维数,系统将这一步交给train函数。
x=-4:4;           %输入向量
y=x.^2;           %目标函数
plot(x,y,'-o')    %目标曲线
net=feedforwardnet;  %看一下隐含层有多少个神经元
net1=train(net,x,y);       %训练BP网络
Z=sim(net1,x)             %输入任意相同长度的向量,可以看到输出值与目标函数基本一致
hold on;
plot(x,Z,'-r')


可以看到的是隐含层有十个神经元,输出层有一个神经元。

net=cascadeforwardnet(hiddenSizes,trainFcn)
这个函数是指级联前向BP网络:指的是不同层的网络自荐,不只存在这相邻层的连接。例如,输入层除了与隐含层有权值相连以外,还与输出层有直接的联系。

x=-4:4;           %输入向量
y=x.^2;           %目标函数
plot(x,y,'-o')    %目标曲线
net=cascadeforwardnet([4]);  %看一下隐含层有多少个神经元
net1=train(net,x,y);       %训练BP网络
Z=sim(net1,x)             %输入任意相同长度的向量,可以看到输出值与目标函数基本一致
hold on;
plot(x,Z,'-r')

也是使用前面的列子,我们将其换成是级联前向BP神经网络。

上面是一些创建BP网络比较常见的函数;
④dlogsig/dtansig——sigmoid函数的导数
这个函数对于我们手算BP神经网络有很大的帮助

x=dlogsig(N,A)
其中N是指自变量,A是指logsig函数的结果;
以及
x=dtansig(N,A)

x=-4:4;
y=logsig(x);
dy=dlogsig(x,y);
plot(x,y,'-o')
hold on;
plot(x,dy,'-r')
x=-4:4;
y=tansig(x);
dy=dtansig(x,y);
plot(x,y,'-o')
hold on;
plot(x,dy,'-r')


## 实例 ——异或采用批量训练,最速下降BP法.分析非线性网络;```bash
clear all
clc
%%参数
eb=0.01;%误差容限
n=0.6;%学习率
maxiter=1000000 ;%最大迭代次数%%初始化网络
nsampNum=4; %输入样本的个数
nsampdim=2; %输入样本的维度
nhidden=3;  %隐含层神经元的个数
nout=1;     %输出层神经元的个数
%权值经验设置  可知输入层到隐含层之间的权值有三组(6个值),偏置也有三组(三值)
w=rand(3,2);
b=rand(3,1);
wex=[w,b];              %是一个3X3的矩阵,行向量w11 w12 b1
%权值经验设置,可知隐含层到输出层之间的权值也有三组(3个值),偏置只有一组(一个值;
W=rand(1,3);
B=rand(1,1);
WEX=[W,B];                                %是一个1X4的矩阵
%%提供训练数据
x=[0 0 1 1;0 1 0 1; 1 1 1,1];      %训练样本   一行代表一维,三行的意思是两种权值加上偏置
t=[0 ,1 ,1 ,0];      %期望输出
%开始训练
iteration=0;  %迭代次数
i=0;
while 1                         %工作信号正向传播hp=wex*x;             %隐含层的权值计算      3X4tau=logsig(hp);       %隐含层的训练后的输出,这个输出是3X4的矩阵tauex=[tau',ones(4,1)]';  %设置好隐含层的输入       4X4hm=WEX*tauex;                    %1x4out=logsig(hm);                  %1x4err=(t-out);      %期望值与输出值做对比  err也是一个矩阵;en(i+1)=sumsqr(err);   iteration=iteration+1;   %迭代次数加一%%%%%%%判断网络是否收敛if (en(i+1)<0.01) %那么系统收敛,跳出whilewex1=wex;WEX1=WEX;break;      end%%%%%%%接下来,计算权值的修正量de和DE%%%%%%%%%%%%%先计算隐含层和输出层之间的权值修正量de=n*2*err.*(dlogsig(hm,out))*tauex';                    %n为学习率 err是误差 err是1X4,taues‘是4X4,最终也是得到1X4;%%%%%%%%%%%%%%%%%在向前极端输入层与隐含层之间的权值修正量DE=n*((W'*[2*err.*(dlogsig(hm,out))]).*[(dlogsig(hp,tau))])*x';   WEX=WEX+de;             %更新权值  wex=wex+DE; W=WEX(:,1:3);i=i+1;if (i>=maxiter)wex1=wex;WEX1=WEX;break;endend
%%%%%%%%%%%%%%%%%%%%%%%%%%%%训练完成后,我们就得到了合适的权值和偏置值,wex和WEX,我们只要设置相同大小的输入矩阵,就能得到输出值;
x1=[0 0 1 0;0 1 1 1;1 1 1 1];
hp1=wex1*x1;
tau1=logsig(hp1);
tauex1=[tau1',ones(4,1)]';
hm1=WEX1*tauex1;
out1=logsig(hm1)
y=out1>=0.5

结束

路漫漫,多回头

神经网络初认识——BP神经网络(7月18,再次认识)相关推荐

  1. 如何提高bp神经网络精度,改进bp神经网络的方案

    1.BP神经网络的核心问题是什么?其优缺点有哪些? 人工神经网络,是一种旨在模仿人脑结构及其功能的信息处理系统,就是使用人工神经网络方法实现模式识别.可处理一些环境信息十分复杂,背景知识不清楚,推理规 ...

  2. bp神经网络预测模型原理,BP神经网络预测模型

    深度学习与神经网络有什么区别 深度学习与神经网络关系2017-01-10最近开始学习深度学习,基本上都是zouxy09博主的文章,写的蛮好,很全面,也会根据自己的思路,做下删减,细化. 五.DeepL ...

  3. 提高bp神经网络预测精度,bp神经网络数据预处理

    bp神经网络对输入数据和输出数据有什么要求 p神经网络的输入数据越多越好,输出数据需要反映网络的联想记忆和预测能力.BP网络能学习和存贮大量的输入-输出模式映射关系,而无需事前揭示描述这种映射关系的数 ...

  4. bp神经网络时间序列预测,bp神经网络数据预处理

    怎么用已经训练好的BP神经网络进行预测下一个值? 谷歌人工智能写作项目:神经网络伪原创 bp神经网络如何用于预测 如何人工神经网络来预测下一个数值 newff函数建立BP神经网络,历史数据作为样本,例 ...

  5. 简述BP神经网络的流程,BP神经网络的实现包括

    (1)BP算法的学习过程中有两个过程是什么?(2)写出BP神经网络的数学模型,并以20 bp(backpropagation)网络是1986年由rumelhart和mccelland为首的科学家小组提 ...

  6. BP神经网络算法基本原理,bp神经网络实例分析

    BP人工神经网络方法 (一)方法原理人工神经网络是由大量的类似人脑神经元的简单处理单元广泛地相互连接而成的复杂的网络系统.理论和实践表明,在信息处理方面,神经网络方法比传统模式识别方法更具有优势. 人 ...

  7. bp神经网络时间序列预测,bp神经网络有几个阶段

    什么是BP神经网络? . BP算法的基本思想是:学习过程由信号正向传播与误差的反向回传两个部分组成:正向传播时,输入样本从输入层传入,经各隐层依次逐层处理,传向输出层,若输出层输出与期望不符,则将误差 ...

  8. bp神经网络的训练方法,bp神经网络训练流程图

    BP人工神经网络方法 (一)方法原理人工神经网络是由大量的类似人脑神经元的简单处理单元广泛地相互连接而成的复杂的网络系统.理论和实践表明,在信息处理方面,神经网络方法比传统模式识别方法更具有优势. 人 ...

  9. bp神经网络训练流程图,BP神经网络训练过程

    (1)BP算法的学习过程中有两个过程是什么?(2)写出BP神经网络的数学模型,并以20 bp(backpropagation)网络是1986年由rumelhart和mccelland为首的科学家小组提 ...

最新文章

  1. 谈谈Java程序员进阶的那些知识和方向
  2. linux   vim配置,打造ide
  3. 开篇语 2008.8.11
  4. mysql 主从复制优化、并行复制
  5. MIT的周博磊博士如何解释深度学习模型(附PPT)
  6. 实现两个Mysql数据库同步
  7. 手机屏大字滚动_LED跑马灯屏-LED跑马灯屏App下载-
  8. sql server 复制_SQL Server复制(合并)–复制什么,什么不复制
  9. 软件因丢失.dll文件(未找到)而无法启动?
  10. Pandas速查手册中文版API
  11. oracle碎片整理
  12. 从零学习算法竞赛3:aabb问题
  13. 计算机实验室安全知识心得体会,计算机实验室安全自查报告(共5篇) .docx
  14. LeetCode(数据库)- 计算税后工资
  15. 【FND】EBS调试模式使用说明
  16. 将图片快速生成其轮廓图
  17. 查看onedrive教育版或企业版的容量(有福利)
  18. stacking集成模型预测回归问题
  19. NLP-文本处理:依存句法分析(主谓、动宾、动补...)【基于“分词后得到的词语列表A”+“A进行词性标注后得到的词性列表B”来进行依存句法分析】【使用成熟的第三方工具包】
  20. anaconda配置h5py===2.10.0

热门文章

  1. 基于微信小程序的二手汽车拍卖系统
  2. 请问我这表该如何遍历呢?
  3. 信息系统项目管理师-项目采购管理
  4. 基于51单片机的智能停车场车位收费系统原理图PCB
  5. 有偏估计 无偏估计matlab,有偏估计和无偏估计
  6. C语言复习 —— const define typedef
  7. 三十八、SAP设置默认语言
  8. 预制墙板一般包括哪些类型?
  9. 老夫整理的Java面经+题目(阿里、腾讯、头条、京东、IBM等等)佛渡有缘人
  10. 2022年最新宠物十二生肖区块系统源码