BP神经网络

首先来学习一下BP神经网络

BP神经网络是一种多层前馈神经网络,该网络的主要特点是信号前向传递,误差反向传播。

在前向传递中,输入信号从输入层经隐含层逐层处理,直至输出层。如果输出层得不到期望输出,则转入反向传播,根据预测误差调整权值和阈值。从而使BP神经网络预测输出不断逼近期望输出。BP神经网络的拓扑结构如下图。

                                           

X是输入值,Y是预测值,W是权值,BP神经网络就是表达了从N个自变量到M个因变量的函数映射关系。

下面来学习一下BP神经网络的训练过程:

  1. 网络初始化。(确定输入层节点数n,隐含层节点数l,输出层节点数m,初始化权值,阈值,学习速率和神经元激励函数)
  2. 隐含层输出计算(以三层BP网络来看,这是第一层与第二层之间的计算,H是隐含层输出)                                                                                                                                                                           其中f是激励函数,可以自己选择,常用的有非线性与线性两种:线性函数常用的有阈值函数hardlim与斜面函数purelin,非线性函数常用的是s型函数sigmoid,包括对数s型logsig与正切s型tansig。线性函数一般用于线性拟合问题,非线性函数一般用于分类问题。
  3. 输出层输出计算。(计算预测输出O)                                                                                                                                                                                                 
  4. 误差计算。(根据O与期望输出Y计算误差e)                                                                                                                                                                                       
  5. 权值更新。   η是学习速率                                                                                                                                                                                                       
  6. 阈值更新。                                                                                                                                                                                                                                   
  7. 判断算法迭代是否结束,若没有结束,返回步骤2.

 

在使用MATLAB实现BP神经网络还需要一些前导知识

  • 数据归一化处理。

        我们需要对输入输出数据进行归一化处理。因为无论对于建模还是对于计算来说,首先需要保证基本度量单位是相同的,如果存在单位不一样的输入数据,有些数据的范围可能会特别大,而存在这种数据可能导致网络训练时间增加,并可能引起网络无法收敛。 .由于神经网络输出层的激活函数的值域也是有限制的,因此需要将网络训练的目标数据.映射到激活函数的值域。例如神经网络的输出层若采用 S 形激活函数,由于 S 形函数的.值域限制在 (0,1) ,也就是说神经网络的输出只能限制在 (0,1) ,所以这时训练数据的输出就要归一化到[ ] 0,1 区间。

        数据归一化处理把所有数据都转化为[0,1]之间的数, 其目的是取消各维数据间数量级差别, 避免因为输入输出数据
数量级差别较大而造成网络预测误差较大。数据归一化分方法主要有两种:
         1)最大最小法。x  =(x - 最小)/  (最大 - 最小)

         2)平均数方差法。x  =(x - 平均)/ 方差

         MATLAB自带了一种归一化函数mapminmax,该函数还可以反归一化。

  • 隐含层数目和节点数的确定。

        为了提高误差精度,常用的方法主要就是增加隐藏数或增加隐藏层节点数。一般来说,只要能够能正确反应神经网络输入
输出的关系,应选用较少的隐藏层节点数,使网络结构尽量简单,而增加节点数更容易观察和调整,且理论上已经证明,一个三层的 BP 神经网络可以逼近任意非线性函数,因此一般都选择三层网络。而这一层隐藏层中所包含的节点数目前还没有很好的方法来确定,一般通过增加隐藏层节点数可以使神经网络的模型更精确,神经网络能够更充分地描述输出和输入变量之间的关系;但若隐藏层神经元过多可能出现过拟合导致无法分辨,并且网络结构复杂导致训练时间变长,所以一般是希望在能正确反映输入输出关系的基础上选用较少的隐藏层节点数,因此隐藏层节点数的选择要适中。

        通常我们依靠经验法或者尝试法。经验法就是根据经验自行定义,尝试法就是先依据一个公式得出一个范围再进行一个一个尝试,最终选择最优的一个。

  1.  按梯度下降方向修正权值的traingd函数(最基本,对权值的微分=学习步长*(性能函数对权值的微分) ,性能函数在matlab中默认是平方误差MSE。按梯度下降法来修正权值时网络训练的收敛速度很慢,因此正确选择学习步长很重要,如果设置过大的步长,那么容易引起网络震荡,收敛过程中无法达到步长之间较深的极小点,而如果设置较小的步长则网络训练过程中容易收敛缓慢,网络容易陷入局部极小。)
  2.  带附加动量且按梯度下降方向修正权值的traingdm函数(在梯度下降方法的基础上,在每一次权值变化时加上一项正比于上一次权值变化的值)
  3.  利用导数符号来表示权值更新方向的trainrp函数(弹性BP算法,这种方法只利用导数的符号来表示权更新的方向,而不考虑这个导数的大小,因此消除了偏导数的大小对权值的有害影响。)
  4.  使用levenberg-marquardt优化算法修正取值的trainlm函数
  • 学习率(BP 神经网络学习率η 的取值在[0,1] 之间, 学习率η 越大, 对权值的修改越大, 网络学习速度越快。 但过大的学习速率η 将使权值学习过程中产生震荡, 过小的学习概率使网络收敛过慢, 权值难以趋于稳定。 变学习率方法是指学习概率η 在 BP 神经网络进化初期较大, 网络收敛迅速, 随着学习过程的进行, 学习率不断减小, 网络趋于稳定。)

        

 

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值