数学建模-BP神经网络简介

  • Post author:
  • Post category:其他


#前言

大家好,华为杯数学建模大赛也快要开始了,因为一部分同学可能是第一次参加数学建模类的比赛,对数学建模比赛了解的可能比较少,或者是因为专业的原因,平时对数学知识接触的不是很多。我本科是读的信息与计算科学(数学专业中的一个),本着分享和巩固知识的心态,会提供一些基础的建模知识供大家参考,其中如有错误还请大家及时指正

## 神经网络

神经网络其实又名人工神经网络,他是受到人类大脑的信息处理机制的启发二发展出来的。在人类大脑中处理信息的基本单位叫做神经元,人工神经网络的处理信息的基本单位也叫做“神经元”,不过他还有另一个名字那就是信息处理单元。在人脑中,信息传递的本质往往是电化学信号的传递,当一个刺激产生时,由于人脑中的神经元往往是与其他1多个神经元连接形成一个复杂的网络结构,所以一个神经元接收到的刺激可能是从多个不同的神经元传来的,而且每个神经元产生的刺激对这个接受刺激的神经元产生的影响有不一样,人工神经元也是如此,所以每个相互连接的神经元之间往往会有不同的权重,如下图所示:

在这里插入图片描述

其中x_i代表从各个不同神经元传来的刺激,w_i为各个不同神经元之间的权重。

## 神经网络的结构

人脑之所以有强大的信息处理功能,其原因就在于人脑中的神经元相互连接形成了复杂的网络结构,人工神经元收到物理现实的限制,只能是由少量的神经元连接成的有一定规律的网状结构。本文按照神经网络的信息流向简单的介绍一下神经网络的种类。

1、前馈型神经网络,神经元按层排列上一层的输出作为下一层的输入,具体结构如下图所示:

在这里插入图片描述

2、反馈型神经网络,最常见的反馈型神经网络就是BP神经网络。BP神经网络信息传播分为两个阶段。(1)正向传播过程,同前馈型神经网络大概一致,上一层的输出作为下一层的输入。(2)反向传播过程,将神经网络的输出值与期望值或者真实值作比较,如误差过大,则将误差反向传播,调整各个神经元节点的权重,直到误差可接受为止。

注意,在神经网络中,我们通常把接收信息流入的那层神经元叫做输入层,信息流出的叫做输出层,输入层和输出层之间的神经元被称为隐层,隐层神经元具有处理信息的功能。学过机器学习的同学可以看出其实BP神经网络是一种有监督的学习方式。

## BP神经网络

BP神经网络是迄今位置应用最为广泛的神经网络,单隐层的BP神经网络应用更为普遍。最简单的应用便是我们可以通过BP神经网络来解决一些预测问题。单隐层的神经网络的具体结构如下所示:

在这里插入图片描述

单隐层的意思是只有一层隐层节点,所以也可以称为三层BP神经网络。其中输入层接受的输入向量为X=[x0,…,xn],其中x0=-1为引入隐层神经元的阈值(通俗的理解,一个神经元要想兴奋必须收到的刺激达到一定程度才可以)隐层输出向量为Y=[y0,…,ym],y0=-1为引入输出层神经元的阈值。O=[o1,…,ol],期望输出向量d=[d1,…,dl]。其中v_i和w_j分别代表隐层和输出层之间的权重。各层信号的数学关系如下:

在这里插入图片描述

其中f(x)(也被称为激活函数)为

在这里插入图片描述

上面提到,BP神经网络中调节误差是通过调节各层之间的权重而实现的,具体的数学原理这里不再进行推导,有兴趣大家可以参考韩力群的神经网络这本书

在这里插入图片描述



具体实例

如果大家有兴趣来看这篇文章的话,我想很大概率都是想知道BP神经网络具体怎么用,所以本文将介绍matlab中一些常用的神经网络函数并举一个简单的实例给大家,以便没有基础的同学可以更加深刻的理解这些内容

首先关于matlab中神经网络中一些常用的函数:

添加链接描述


大家可以参考这篇博文的里所介绍的内容很全面

具体实例如下:根据表2,预测序号15的跳高成绩

在这里插入图片描述

数据整理

将前14组数据作为指标进行输入:

在这里插入图片描述

将前14组对应的调高数据作为输出

在这里插入图片描述

神经网络模型也是机器学习模型的一种,前面的P和T相当于机器学习模型中的训练样本,有了训练样本,当输入新的样本时才可以对新样本进行预测。

具体代码如下:

P=[3.2 3.2 3 3.2 3.2 3.4 3.2 3 3.2 3.2 3.2 3.9 3.1 3.2;
9.6 10.3 9 10.3 10.1 10 9.6 9 9.6 9.2 9.5 9 9.5 9.7;
3.45 3.75 3.5 3.65 3.5 3.4 3.55 3.5 3.55 3.5 3.4 3.1 3.6 3.45;
2.15 2.2 2.2 2.2 2 2.15 2.14 2.1 2.1 2.1 2.15 2 2.1 2.15;
140 120 140 150 80 130 130 100 130 140 115 80 90 130;
2.8 3.4 3.5 2.8 1.5 3.2 3.5 1.8 3.5 2.5 2.8 2.2 2.7 4.6;
11 10.9 11.4 10.8 11.3 11.5 11.8 11.3 11.8 11 11.9 13 11.1 10.85;
50 70 50 80 50 60 65 40 65 50 50 50 70 70];
T=[2.24 2.33 2.24 2.32 2.2 2.27 2.2 2.26 2.2 2.24 2.24 2.2 2.2 2.35];
[p1,minp,maxp,t1,mint,maxt]=premnmx(P,T);
%创建网络
net=newff(minmax(P),[8,6,1],{ 'tansig' , 'tansig' , 'purelin' }, 'trainlm' );
%设置训练次数
net.trainParam.epochs = 5000;
%设置收敛误差
net.trainParam.goal=0.0000001;
%训练网络
[net,tr]=train(net,p1,t1);
TRAINLM, Epoch 0/5000, MSE 0.533351/1e-007, Gradient 18.9079/1e-010
TRAINLM, Epoch 24/5000, MSE 8.81926e-008/1e-007, Gradient 0.0022922/1e-010
TRAINLM, Performance goal met.
 
%输入数据
a=[3.0;9.3;3.3;2.05;100;2.8;11.2;50];
%将输入数据归一化
a=premnmx(a);
%放入到网络输出数据
b=sim(net,a);
%将得到的数据反归一化得到预测数据
c=postmnmx(b,mint,maxt);
c

最终输出的c便是最终结果。以上例子是参考

https://blog.csdn.net/c_1996/article/details/72793827?utm_source=app&app_version=4.13.0&code=app_1562916241&uLinkId=usr1mkqgl919blen

这篇博文,代码如果有问题可以评论私下讨论交流



总结

BP神经网络虽然应用非常广泛,也由很好的有点,比如可以通过设置隐层神经元节点数来调节误差的大小。但是其缺点也很明显,例如会陷入局部最小,并且当数据稍大时 他处理的速度会比较忙。以上就是BP神经网络的全部内容了,但是想系统的学习神经网络的内容还是推荐大家通过书本对他进行系统的学习。若有错误欢迎指正,批评和交流。



版权声明:本文为m0_52792591原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。