BP神经网络原理及Matlab实现(Back Propagation Neural Networks,BPNN)

一、简介

1、BP 神经网络的信息处理方式的特点

  1. 信息分布存储。
  2. 信息并行处理。
  3. 具有容错性。
  4. 具有自学习、自组织、自适应的能力。

2、BP神经网络的主要功能

  • 函数逼近:用输入向量和相应的输出向量训练一个网络以逼近一个函数。
  • 模式识别:用一个待定的输出向量将它与输入向量联系起来。
  • 分类:把输入向量所定义的合适方式进行分类。
  • 数据压缩:减少输出向量维数以便传输或存储。

二、神经网络的训练

1、神经网络拓扑结构(隐含层)的确定

  一般认为,增加隐层数可以降低网络误差(也有文献认为不一定能有效降低),提高精度,但也使网络复杂化,从而增加了网络的训练时间和出现"过拟合"的倾向。
  Hornik等早已证明:若输入层和输出层采用线性转换函数,隐层采用Sigmoid转换函数,则含一个隐层的MLP网络能够以任意精度逼近任何有理函数。显然,这是一个存在性结论。在设计BP网络时可参考这一点,应优先考虑3层BP网络(即有1个隐层)。
  一般地,靠增加隐层节点数来获得较低的误差,其训练效果要比增加隐层数更容易实现。对于没有隐层的神经网络模型,实际上就是一个线性或非线性(取决于输出层采用线性或非线性转换函数型式)回归模型。
  因此,一般认为,应将不含隐层的网络模型归入回归分析中,技术已很成熟,没有必要在神经网络理论中再讨论之。
  在BP 网络中,隐层节点数的选择非常重要,它不仅对建立的神经网络模型的性能影响很大,而且是训练时出现“过拟合”的直接原因,但是目前理论上还没有一种科学的和普遍的确定方法。

目前多数文献中提出的确定隐层节点数的计算公式都是针对训练样本任意多的情况,而且多数是针对最不利的情况,一般工程实践中很难满足,不宜采用。事实上,各种计算公式得到的隐层节点数有时相差几倍甚至上百倍。为尽可能避免训练时出现“过拟合”现象,保证足够高的网络性能和泛化能力,确定隐层节点数的最基本原则是:在满足精度要求的前提下取尽可能紧凑的结构,即取尽可能少的隐层节点数。研究表明,隐层节点数不仅与输入/输出层的节点数有关,更与需解决的问题的复杂程度和转换函数的型式以及样本数据的特性等因素有关。

2、网络的初始连接权值

  BP算法决定了误差函数一般存在(很)多个局部极小点,不同的网络初始权值直接决定了BP算法收敛于哪个局部极小点或是全局极小点。因此,要求计算程序(建议采用标准通用软件,如Statsoft公司出品的Statistica Neural Networks软件和Matlab 软件)必须能够自由改变网络初始连接权值。由于Sigmoid转换函数的特性,一般要求初始权值分布在 -0.5~0.5 之间比较有效。

3、网络模型的性能和泛化能力

  训练神经网络的首要和根本任务是确保训练好的网络模型对非训练样本具有好的泛化能力(推广性),即有效逼近样本蕴含的内在规律,而不是看网络模型对训练样本的拟合能力。从存在性结论可知,即使每个训练样本的误差都很小(可以为零),并不意味着建立的模型已逼近训练样本所蕴含的规律。因此,仅给出训练样本误差(通常是指均方根误差RSME或均方误差、AAE或MAPE等)的大小而不给出非训练样本误差的大小是没有任何意义的。

4、调整参数对bp进行优化

  BP网络的训练就是通过应用误差反传原理不断调整网络权值使网络模型输出值与已知的训练样本输出值之间的误差平方和达到最小或小于某一期望值。

  由于BP网络采用误差反传算法,其实质是一个无约束的非线性最优化计算过程,在网络结构较大时不仅计算时间长,而且很容易限入局部极小点而得不到最优结果。目前虽已有改进BP法、遗传算法(GA)和模拟退火算法等多种优化方法用于BP网络的训练(这些方法从原理上讲可通过调整某些参数求得全局极小点),但在应用中,这些参数的调整往往因问题不同而异,较难求得全局极小点。这些方法中应用最广的是增加了冲量(动量)项的改进BP算法。

三、基于Matlab的BP网络实现

在这里插入图片描述

1、前向网络创建函数 newff

  该函数用于创建一个BP网络。调用格式为:

	net = newff
	net = newff(PR,[S1 S2..SN1],{TF1 TF2..TFN1},BTF,BLF,PF)

  其中,

  • net=newff;用于在对话框中创建一个BP网络。
  • net为创建的新BP神经网络;
  • PR为网络输入向量取值范围的矩阵;
  • [S1 S2…SNl]表示网络隐含层和输出层神经元的个数;
  • {TFl TF2…TFN1}表示网络隐含层和输出层的传输函数,默认为‘tansig’;
  • BTF表示网络的训练函数,默认为‘trainlm’;
  • BLF表示网络的权值学习函数,默认为‘learngdm’;
  • PF表示性能数,默认为‘mse’。

2、传递函数

1、logsig(sigmoid)

  该传递函数为S型的对数函数。
y = log ⁡ s i g ( x ) = 1 1 + e − x y = \log sig(x) = \frac{1}{{1 + {e^{ - x}}}} y=logsig(x)=1+ex1

  图像如下:
在这里插入图片描述
  调用格式为:

	A=logsig(N)

	info=logsig(code)

  其中,

  • N:Q个S维的输入列向量;

  • A:函数返回值,位于区间(0,1)

2、tansig

  该函数为双曲正切S型传递函数。
y = tan ⁡ s i g ( x ) = 2 1 + e − 2 x − 1 y = \tan sig(x) = \frac{2}{{1 + {e^{ - 2x}}}} - 1 y=tansig(x)=1+e2x21
  图像如下:
在这里插入图片描述
  调用格式为:

	A=tansig(N)

	info=tansig(code)

  其中,

  • N:Q个S维的输入列向量;

  • A:函数返回值,位于区间(-1,1)。

3、purelin

  该函数为线性传递函数。
y = p u r e l i n ( x ) = x y=purelin(x)=x y=purelin(x)=x

  图像如下:
在这里插入图片描述
  调用格式为:

	A=purelin(N)

	info=purelin(code)

4、poslin

  该函数为正线性传递函数。
y = p o s l i n ( x ) = { x x ≥ 0 0 x < 0 y = poslin(x) = \left\{ \begin{array}{l} x\quad \quad x \ge {\rm{0}}\\ 0\quad \quad x < 0 \end{array} \right. y=poslin(x)={xx00x<0

  图像如下:

5、其他训练函数

  1. traingdx:有动量和自适应lr的梯度下降法

  2. trainlm Levenberg:Marquardt方法

  3. traingd:梯度下降法

3、BP网络学习函数

1. learngd

  该函数为梯度下降权值/阈值学习函数,它通过神经元的输入和误差,以及权值和阈值的学习效率,来计算权值或阈值的变化率。调用格式为:

	[dW,ls]=learngd(W,P,Z,N,A,T,E,gW,gA,D,LP,LS)

	[db,ls]=learngd(b,ones(1,Q),Z,N,A,T,E,gW,gA,D,LP,LS)

	info=learngd(code)

2. learngdm

  函数为梯度下降动量学习函数,它利用神经元的输入和误差、权值或阈值的学习速率和动量常数,来计算权值或阈值的变化率。

4、BP网络训练与仿真

  1. net=train(net,inputs, targets) %训练神经网络

  2. simtest_y=sim(net,test_x) %对训练好的神经网络net进行仿真;test就是要拟合的,测试的话可以直接用input

5、数据预处理

在这里插入图片描述

常用函数:premnmx、tramnmx、postmnmx、mapminmax

(1)premnmx、tramnmx

  • premnmx函数用于将网络的输入数据或输出数据进行归一化,归一化后的数据将分布在[-1,1]区间内。
    premnmx语句的语法格式是: (其中P,T分别为原始输入和输出数据)
	[Pn,minp,maxp,Tn,mint,maxt]=premnmx(P,T)
  • 在训练网络时如果所用的是经过归一化的样本数据,那么以后使用网络时所用的新数据也应该和样本数据接受相同的预处理,这就要用到tramnmx函数:
    tramnmx语句的语法格式是:(其中P和PN分别为变换前、后的输入数据,maxp和minp分别为premnmx函数找到的最大值和最小值)
	[PN]=tramnmx(P,minp,maxp)
  • 网络输出结果需要进行反归一化还原成原始的数据,常用的函数是postmnmx。
    postmnmx语句的语法格式是:[PN] = postmnmx(P,minp,maxp)
    其中P和PN分别为变换前、后的输入数据,maxp和minp分别为premnmx函数找到的最大值和最小值。

(2)mapminmax:该函数可以把矩阵的每一行归一到[-1 1].

mapminmax语句的语法格式是:(其中x1 是需要归一的矩阵 y1是结果)

	[y1,PS] = mapminmax(x1)

当需要对另外一组数据做归一时,就可以用下面的方法做相同的归一了

	y2 = mapminmax('apply',x2,PS)

当需要把归一的数据还原时,可以用以下命令:

	x1_again = mapminmax('reverse',y1,PS)

其中:pminp和maxp分别为P中的最小值和最大值。mint和maxt分别为T的最小值和最大值。

6、性能评价

平均绝对误差(MAE)
M A E = 1 m ∑ j = 1 m ∣ y j ^ − y j ∣ MAE=\frac{{\rm{1}}}{m}\sum\limits_{j = 1}^m {\left| {\widehat {{y_j}} - {y_j}} \right|} MAE=m1j=1myj yj
平均绝对百分误差(MAPE)
M A P E = 1 m ∑ j = 1 m ∣ y j ^ − y j y j ∣ MAPE = \frac{{\rm{1}}}{m}\sum\limits_{j = 1}^m {\left| {\frac{{\widehat {{y_j}} - {y_j}}}{{{y_j}}}} \right|} MAPE=m1j=1myjyj yj
均方根误差(RMSE)
R M S E = 1 n ∑ i = 1 n ( y j ^ − y j ) 2 RMSE = \sqrt {\frac{1}{n}\sum\limits_{i = 1}^n {{{(\widehat {{y_j}} - {y_j})}^2}} } RMSE=n1i=1n(yj yj)2
相关系数( R 2 R^2 R2)
R 2 = [ ∑ j = 1 m ( y j − y ‾ ) ( y j ^ − y ‾ ) ] 2 ∑ j = 1 m ( y j − y ‾ ) 2 ∑ j = 1 m ( y j ^ − y ‾ ) 2 {R^2} = \frac{{{{\left[ {\sum\limits_{j = 1}^m {({y_j} - \overline y )(\widehat {{y_j}} - \overline y )} } \right]}^2}}}{{\sum\limits_{j = 1}^m {{{({y_j} - \overline y )}^2}} \sum\limits_{j = 1}^m {{{(\widehat {{y_j}} - \overline y )}^2}} }} R2=j=1m(yjy)2j=1m(yj y)2[j=1m(yjy)(yj y)]2

  • 4
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
BP神经网络原理推导是通过反向传播算法来调整网络的权值和阈值,以使网络的输出与实际输出之间的误差最小化。BP神经网络的推导过程可以分为以下几个步骤: 1. 变量说明:首先,我们需要定义一些变量来表示神经网络的各个部分。通常,我们使用下面的符号来表示这些变量: - 输入层:输入层的神经元个数记为n,输入层的输出记为x0,其中x0=[x1, x2, ..., xn]T; - 隐藏层:隐藏层的神经元个数记为m,隐藏层的输出记为x1,其中x1=[x11, x12, ..., xm1]T; - 输出层:输出层的神经元个数记为p,输出层的输出记为x2,其中x2=[x21, x22, ..., xp2]T; - 权值矩阵:隐藏层和输出层之间的权值矩阵记为W2,其中W2是一个m×p的矩阵; - 阈值矩阵:隐藏层和输出层之间的阈值矩阵记为θ2,其中θ2是一个p维的列向量;- 隐藏层和输入层之间的权值矩阵记为W1,其中W1是一个n×m的矩阵; - 隐藏层和输入层之间的阈值矩阵记为θ1,其中θ1是一个m维的列向量。 2. 前向传播:首先,我们通过前向传播计算神经网络的输出。具体地,我们有以下公式: - 隐藏层的输入:z1 = W1 * x0 + θ1; - 隐藏层的输出:x1 = f(z1); - 输出层的输入:z2 = W2 * x1 + θ2; - 输出层的输出:x2 = f(z2); 其中,f(·)是一个激活函数,常用的激活函数包括sigmoid函数、ReLU函数等。 3. 反向传播:然后,我们通过反向传播算法来计算网络的误差,并根据误差来调整权值和阈值。具体地,我们有以下步骤: - 计算输出层的误差:δ2 = (x2 - y) ⊙ f'(z2),其中⊙表示元素级别的乘法; - 计算隐藏层的误差:δ1 = (W2^T * δ2) ⊙ f'(z1); - 更新输出层的权值和阈值:W2 = W2 - α * δ2 * x1^T,θ2 = θ2 - α * δ2,其中α是学习率; - 更新隐藏层的权值和阈值:W1 = W1 - α * δ1 * x0^T,θ1 = θ1 - α * δ1; 其中,^T表示转置操作。 4. 重复迭代:通过不断重复前向传播和反向传播的过程,直到网络的输出与实际输出之间的误差满足要求为止。 综上所述,BP神经网络通过反向传播算法来调整网络的权值和阈值,以使网络的输出与实际输出之间的误差最小化。该算法通过迭代的方式不断优化网络的性能,从而实现对非线性问题的解决。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值