BP网络详解

概述

神经网络是由大量简单的处理单元来模拟真实人脑神经网络的机构和功能以及若干基本特性,是一个高度复杂的非线性自适应动态处理系统。按照连接模式,神经网络模型可分为前馈式神经网络和反馈式神经网络,BP网络属于前馈式。

BP算法的提出:Rumelhart,McClelland于1985年提出了BP网络的误差反向后传BP(Back Propagation)学习算法。利用输出后的误差来估计输出层的直接前导层的误差,再用这个误差估计更前一层的误差,如此一层一层的反传下去,就获得了所有其他各层的误差估计。

BP神经网络的提出:1986年由Rumelhart和McCelland为首的科研小组提出,参见他们发表在Nature上的论文 Learning representations by back-propagating errors。

BP神经网络名字源于网络权值的调整规则采用的是后向传播学习(BP)算法,是一种按误差逆传播算法训练的多层前馈神经网络,是目前应用最广泛的神经网络模型之一。BP神经网络能学习和存贮大量的输入-输出模式映射关系,而无需事前揭示描述这种映射关系的数学方程。BP神经网络的主要思想就是在确定了网络结构后,通过输入和输出样本集对网络进行训练和学习,以使网络实现给定的输入和输出映射关系。

BP神经网络基本原理

BP神经网络属于有监督学习

BP神经网络神经元模型

神经网络神经元模型主要的不同在于传递函数的不同。传递函数是BP网络的重要组成部分,又称激活函数,必须是连续可导的。BP网络常采用的传递函数如下:

  • S型对数函数:logsig 函数。函数公式:
    logsig(n) = 1 / (1 + exp(-n));matlab调用格式:A=logsig(N,FP);使用语法:net.layers{i}.transferFcn = ‘logsig’

N为Q个S维的输入列向量;FP为功能结构参数(可选);A为函数返回值,位于区间(0,1)中。

  • 双曲正切S型传递函数:tansig 函数;函数公式:
    a = tansig(n) = 2/(1+exp(-2*n))-1;matlab调用格式:A=tansig(N,FP);使用语法:net.layers{i}.transferFcn = ‘tansig’

    含义与上述相同,不同在于输出区间(-1,1)中(这也是与logsig函数不同的地方)。

  • 线性传递函数:purelin 函数,调用格式:A = purelin(N,FP)

    含义与上述相同,不同在于其输出等于输入,即A=N。

网络拓扑结构

BP网络是典型的多层网络结构,而多层网络可以解决很多单层网络无法解决的问题,比如多层网络可以用来进行非线性分类、做精度极高的函数逼近。为了描述方便,我们选择三层BP网络,网络结构包含一个输入层、一个隐含层和一个输出层,其网络结构如下图。设n为输入层神经元数, h为隐含层神经元数,m为输出层神经元数。

BPblock

  • 各层的神经元个数确定:

    • 输入层:输入层的神经元个数输入训练集的特征向量的维度。
    • 隐含层:有多种隐含层节点个数确定的方法,常见方法如下图。

      隐含层神经元个数

      对于多层前馈网络来说,隐层节点数的确定是成败的关键。若数量太少,则网络所能获取的用以解决问题的信息太少;若数量太多,不仅增加训练时间,更重要的是隐层节点过多还可能出现所谓“过拟合”(Overfitting)问题,即测试误差增大导致泛化能力下降,因此合理选择隐层节点数非常重要。关于隐层数及其节点数的选择比较复杂,一般原则是:在能正确反映输入输出关系的基础上,应选用较少的隐层节点数,以使网络结构尽量简单。

    • 输出层:输出层的神经元个数为输出类别N的log2(N);或者是N。

BP神经网络的学习算法

  • 学习的过程:神经网络在外界输入样本的刺激下不断改变网络的连接权值,以使网络的输出不断地接近期望的输出。
    • 信号的正向传播:输入样本--输入层--各隐层--输出层
    • 误差的反向传播:若输出层的实际输出与期望的输出不符,误差以某种形式在各层表示,即修正各层单元的权值,最后当网络输出的误差减少到可接受的程度进行到预先设定的学习次数为止。
  • 学习的本质:对各连接权值的动态调整。
  • 学习规则:权值调整规则,即在学习过程中网络中各神经元的连接权变化所依据的一定的调整规则。
  • BP神经网络常用的训练函数

    • Levenberg-Marquardt算法训练函数trainlm();特点:收敛速度和网络精度,对于中等规模的BP神经网络有最快的收敛速度,是系统默认的算法。由于其避免了直接计算赫赛矩阵,从而减少了训练中的计算量,但需要较大内存量。

    • 梯度下降BP算法函数traingd(),沿网络性能参数的负梯度方向调整网络的权值和阈值。

    • 梯度下降动量BP算法函数traingdm(),是一种批处理的前馈神经网络训练方法,不但具有更快的收敛速度,而且引入了一个动量项,有效避免了局部最小问题在网络训练中出现。

    • BFGS准牛顿BP算法函数trainbfg();特点:收敛速度介于梯度下降法和牛顿法之间,适用于小规模数据,具有收敛速度快,精度高等特点。除了BP网络外,该函数也可以训练任意形式的神经网络,只要它的传递函数对于权值和输入存在导函数即可。参考

参考:[BP神经网络常用函数汇总](http://xzh2012.blog.163.com/blog/static/114980038201101844232346/)

BP神经网络的MATLAB实现

  • 前馈BP神经网络构造函数net = feedforwardnet(h),其中h为隐含层结点个数,如果是多层隐含层,则h=[n1,n2,...,nn]。ni表示各个隐含层对应的结点数。

    老版本的构造函数是newff(),现在使用的是feedforwardnet函数。

  • 常用网络配置参数如下

    1
    2
    3
    4
    5
    6
    net.trainFcn = 'trainbfg';		% 神经网络的训练函数设置
    net.trainParam.epochs=1000; % 最大迭代次数,允许最大训练步数1000步
    % net.trainParam.max_fail = 10; % 验证错误个数,默认为6
    net.trainParam.lr = 0.1; % 学习率
    net.trainparam.goal = 0; % 神经网络训练的目标误差
    net.trainparam.show; % 显示中间结果的周期
  • 实例

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    % 注意训练集及标签为traind,trainl,测试集为testd,其中矩阵的行为样本,列表示特征向量。
    dim = length(traind(1,:)); % 输入向量的维度
    % 创建和训练网络
    net = feedforwardnet(2*dim+1);
    net.trainFcn = 'trainbfg';
    net.trainParam.epochs=1000; %允许最大训练步数1000步
    % net.trainParam.max_fail = 10; % 默认为6
    % view(net); % 查看网络
    net = train(net,traind',trainl'); % 训练网络
    test_out=sim(net,testd'); % 测试集测试网络
    % 结果分析,对数据取整处理
    test_out(test_out>=0.5)=1;
    test_out(test_out<0.5)=0;

BP神经网络的特点

  • 非线性映射能力:能学习和存贮大量输入-输出模式映射关系,而无需事先了解描述这种映射关系的数学方程。只要能提供足够多的样本模式对供网络进行学习训练,它便能完成由n维输入空间到m维输出空间的非线性映射。
  • 自学习和自适应能力:BP神经网络在训练时,能够通过学习自动提取输出、输出数据间的“合理规则”,并自适应的将学习内容记忆于网络的权值中。即BP神经网络具有高度自学习和自适应的能力。
  • 泛化能力:当向网络输入训练时未曾见过的非样本数据时,网络也能完成由输入空间向输出空间的正确映射。这种能力称为泛化能力。
  • 容错能力:输入样本中带有较大的误差甚至个别错误对网络的输入输出规律影响很小。

BP网络的局限性

  • 需要较长的训练时间:这主要是由于学习速率太小所造成的,可采用变化的或自适应的学习速率来加以改进。
  • 完全不能训练:这主要表现在网络的麻痹上,通常为了避免这种情况的产生,一是选取较小的初始权值,而是采用较小的学习速率。
  • 局部最小值:这里采用的梯度下降法可能收敛到局部最小值,采用多层网络或较多的神经元,有可能得到更好的结果。

参考:神经网络学习 之 BP神经网络

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/242450.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Readiness 探测 - 每天5分钟玩转 Docker 容器技术(144)

除了 Liveness 探测&#xff0c;Kubernetes Health Check 机制还包括 Readiness 探测。 用户通过 Liveness 探测可以告诉 Kubernetes 什么时候通过重启容器实现自愈&#xff1b;Readiness 探测则是告诉 Kubernetes 什么时候可以将容器加入到 Service 负载均衡池中&#xff0c;对…

波 特 图

波 特 图 伯德图是系统频率响应的一种图示方法。伯德图由幅值图和相角图组成&#xff0c;两者都按频率的对数分度绘制&#xff0c;故伯德图常也称为对数坐标图。 利用伯德图可以看出在不同频率下&#xff0c;系统增益的大小及相位&#xff0c;也可以看出增益大小及相位随频率变…

CNN相关知识总结

CNN简介卷积神经网络&#xff08;Convolutional Neural Network&#xff0c;CNN&#xff09;是一种深度的监督学习下的机器学习模型&#xff0c;具有极强的适应性&#xff0c;善于挖掘数据局部特征&#xff0c;提取全局训练特征和分类&#xff0c;它的权值共享结构网络使之更类…

被冻结的钱,银行可以私自处理吗?

被冻结的钱&#xff0c;具体要看是什么原因造成的&#xff0c;不同的原因被冻结的钱处理方式是不一样的。首先需要说明的是&#xff0c;银行是没权利私自冻结用户的银行账户&#xff0c;或者私自处理冻结账户的钱&#xff0c;只有被相关执法机构要求冻结并处理&#xff0c;或者…

银行员工会购买自己银行的理财产品吗?

大家去银行的时候是不是经常看到银行工作人员给你推销理财产品&#xff1f;为什么银行这么积极推销理财产品呢&#xff1f;他们会自己购买所推销的理财产品吗&#xff1f;银行工作人员之所以积极推销理财&#xff0c;最根本的原因是银行缺钱&#xff0c;而且银行每个员工几乎都…

借钱,一定要有还钱的素质

电视剧「雍正王朝」里有一段剧情&#xff0c;康熙命雍正负责追回国库欠款&#xff0c;雍正面对那群厚颜无耻的欠债人&#xff0c;说了一句很经典的话&#xff1a;「站着借钱&#xff0c;跪着要债」。皇家要债尚且如此之难&#xff0c;何况是普通的人呢&#xff1f;对于欠债不还…

有了花呗还需要办信用卡吗?

花呗跟信用卡完全不冲突&#xff0c;而且信用卡有些功能是花呗所不具备的。所以有了花呗我觉得信用卡还是有必要申请。我们先来看下花呗和信用卡有哪些共同点和区别。共同点花呗其实是异化的信用卡&#xff0c;跟信用卡功能差不多&#xff0c;都有免息期&#xff0c;都可以分期…

ubuntu常用的操作

命令的格式 命令帮助信息 man命令 命令常用技巧 历史命令 输出重定向 管道 ls tree clear cd pwd cat rm cp mv mkdir touch find grep ln tar gzipg格式 bz2格式

中国央行将发行全球首个法定数字货币,消息是真的吗?

近日央行在发行数字货币方面取得了新进展&#xff0c;央行推动的基于区块链的数字票据交易平台已经测试成功。由央行发行的法定数字货币已经在该平台运行。春节过后央行旗下的数字货币研究所也将正式挂牌&#xff0c;这意味着中国央行将成为全球范围内首个发行数字货币并开展正…

银行加息前存的定期会随着加息吗?

加息之前的定期存款是不会随着加息而自动加息&#xff0c;还是按存入当日的基准利率计算&#xff0c;直到存款期满。如果想加息&#xff0c;除非你提前取出来再存进去&#xff0c;但之前存的时间只能拿活期利息。近段估计很多人和你一样关心加息的事情北京时间3月22日凌晨2点&a…

在 Scale Up 中使用 Health Check - 每天5分钟玩转 Docker 容器技术(145)

对于多副本应用&#xff0c;当执行 Scale Up 操作时&#xff0c;新副本会作为 backend 被添加到 Service 的负责均衡中&#xff0c;与已有副本一起处理客户的请求。考虑到应用启动通常都需要一个准备阶段&#xff0c;比如加载缓存数据&#xff0c;连接数据库等&#xff0c;从容…

Makefile文件

Makefile文件 安装gcc,g,make 输入一行命令就OK sudo apt install build-essential例子 不使用makefile时 精简版

银行错误将10万打给自己,客户有责任退还,银行难道没责任吗?

我们都知道&#xff0c;如果银行多转钱或错转钱给客户&#xff0c;银行肯定会要求客户把钱全额退还&#xff0c;如果客户拒绝不退还的&#xff0c;银行会以不当得利将客户告上法院&#xff0c;搞不好客户还要坐牢。下面给大家举个案例。赵阳是新疆乌鲁木齐市米东区某村的村民&a…

如果央行加息,以前办的房贷利息也会涨吗?

肯定会涨&#xff0c;但具体什么时候涨以银行跟你签订合同时为准。一般央行加息之后银行会有三种处理方式&#xff1a;第一种&#xff1a;约定调整利息所谓约定调整利息是购房者跟银行在签订合同的时候约定好&#xff0c;如果遇到央行加息&#xff0c;会根据合同约定的方式对利…

MATLAB代码转到FPGA代码

MATLAB代码转到FPGA代码 首先需要编写好MATLAB文件。 MATLAB文件包含一个功能实现文件和测试文件。对应FPGA中的功能文件和测试文件。 然后选择APP中的HDL Coder代码 然后取个模块名 然后,将功能文件和测试文件添加到相应位置。 添加完文件之后,需要设置输入的数据类型…

第一次申请信用卡额度太低,怎么办?

最近&#xff0c;我的朋友小麦因为谈恋爱了&#xff0c;开销大&#xff0c;又不想问家里要钱&#xff0c;于是听从了我的建议去银行办了一张信用卡。他是一个很保守的人&#xff0c;不跟随潮流&#xff0c;工作都有5年了&#xff0c;才办人生中的第一张信用卡。卡已经下来&…

办大额信用卡致胜一招

众所周知&#xff0c;银行信用卡的额度取决于申请人和该银行存在多少的利益关系&#xff0c;但是&#xff0c;要在毫无交易关系的银行&#xff0c;办理大额的信用卡&#xff0c;就没办法了呢&#xff1f;其实&#xff0c;信用卡除了网上申请、网点申请等几种常见的方式之外&…

硬件调试-ILA

硬件调试-ILA 先检查时钟和复位。时钟的频率是否正确?是否连接到子模块中(中间是否有拼错的地方)?复位的初始化是否有问题?是否是一直为高?添加ILA

在 Rolling Update 中使用 Health Check - 每天5分钟玩转 Docker 容器技术(146)

上一节讨论了 Health Check 在 Scale Up 中的应用&#xff0c;Health Check 另一个重要的应用场景是 Rolling Update。试想一下下面的情况&#xff1a; 现有一个正常运行的多副本应用&#xff0c;接下来对应用进行更新&#xff08;比如使用更高版本的 image&#xff09;&#x…

编写vivado的仿真代码

编写vivado的仿真代码 仿真步骤 先点击+号图标,选择add or create simulation sources。