Matlab的NNbox提供了建立神经网络的专用函数newff().用newff函数来确定网络层数,每层中的神经元数和传递函数,其语法为:
net=newff(PR,[S1,S2,… ,SN],{TF1,TF2,… ,TFN},BTF,BLF,PF)
式中:PR表示由每个输入向量的最大最小值构成的Rx2矩阵;Si表示第i层网络的神经元个数;TF表示第i层网络的传递函数,缺省为tansig,可选用的传递函数有tansig,logsig或purelin;BTF表示字符串变量,为网络的训练函数名,可在如下函数中选择:traingd,traingdm,traingdx,trainbfg,trainlm等,缺省为trainlm;BLF表示字符串变量,为网络的学习函数名,缺省为learngdm;BF表示字符串变量,为网络的性能函数,缺省为均方差'mse'.
newff在确定网络结构后会自动调用init函数用缺省参数来初始化网络中各个权重和阈值,产生一个可训练的前馈网络,即该函数的返回值为net.
下面针对以上各参数的确定作简要介绍.
1.1 网络层数
BP网络可以包含不同的隐层,但理论上已经证明,在不限制隐层节点数的情况下,两层(只有一个隐层)的BP网络可以实现任意非线性映射.在模式样本相对较少的情况下,较少的隐层节点,可以实现模式样本空间的超平面划分,此时,选择两层BP网络就可以了;当模式样本数很多时,减小网络规模,增加一个隐层是必要的,但BP网络隐层数一般不超过两层.
1.2 输入层节点数
输入层起缓冲存储器的作用,它接受外部的输入数据,因此其节点数取决于输入矢量的维数.
1.3 输出层节点数
输出层节点数取决于两个方面,输出数据类型和表示该类型所需的数据大小.
1.4 隐层节点数
一个具有无限隐层节点的两层BP网络可以实现任意从输入到输出的非线性映射.但对于有限个输入模式到输出模式的映射,并不需要无限个隐层节点,这就涉及到如何选择隐层节点数的问题,而这一问题的复杂性,使得至今为止,尚未找到一个很好的解析式,隐层节点数往往根据前人设计所得的经验和自己进行试验来确定.一般认为,隐层节点数与求解问题的要求,输入输出单元数多少都有直接的关系.另外,隐层节点数太多会导致学习时间过长;而隐层节点数太少,容错性差,识别未经学习的样本能力低,所以必须综合多方面的因素进行设计.
隐层节点数的初始值可先由以下两个公式中的其中之一来确定[2,3].
(1)
或 (2)
式中:m,n分别为输入结点数目与输出结点数目,a为1~10之间的常数.
隐层结点数可根据式(1)或(2)得出一个初始值,然后利用逐步增长(先从一个较简单的网络开始,若不符合要求则逐步增加隐层单元数到合适为止)或逐步修剪(从一个较复杂的网络开始逐步删除隐层单元)法.
1.5 传输函数
BP网络中的传输函数通常采用S(sigmoid)型函数:
(3)
在某些特定情况下,还可能采用纯线性(pureline)函数.如果BP网络的最后一层是Sigmoid函数,那么整个网络的输出就限制在一个较小的的范围内(0~1之间的连续量);如果BP网络的最后一层是Pureline函数,那么整个网络的输出可以取任意值.
1.6 训练方法及其参数选择
针对不同的应用,BP网络提供了多种训练,学习方法,可供选择.在Matlab中训练网络有两类模式:增加方式(incremental mode)和批处理方式(batch mode).在增加方式中,每提交一次输入数据,权值和阈值都更新一次,增加方式更普遍的应用于动态网络;在批处理方式中,当所有的输入数据都被提交以后,权值和阈值才被更新,使用批处理方式只需为整个网络指定一个训练函数,在样本数比较多时,批处理方式比增加方式收敛速度快,而且许多改进的快速训练算法只能采用批处理方式.故本文只讨论批处理方式,以批处理方式来训练网络的函数是train,其语法主要格式为:
[net,tr]=train(NET,p,t)
式中:p和t分别为输入输出矩阵,NET为由newff产生的要训练的网络,net为修正后的网络,tr为训练的记录(训练步数epoch和性能perf).train根据在newff函数中确定的训练函数来训练,不同的训练函数对应不同的训练算法,详见表1.
训练时直接调用上述的函数名,调用前为下列变量赋初始值:net.trainParam.show——每多少轮显示一次;net.trainParam.lr——学习速度;net.trainParam.epochs——最大训练轮回数;net.trainParam.goal——目标函数误差.
表1 训练算法列表
函数
训练算法
备注
traingd
最速梯度下降算法
收敛速度慢,网络易陷于局部极小,学习过程常发生振荡
traingdm
有动量的梯度下降算法
收敛速度快于traingd
traingdx
学习率可变的BP算法
收敛速度快于traingd,仅用于批量模式训练
trainrp
弹性BP算法
用于批量模式训练,收敛速度快,数据占用存储空间小
traincgf
Fletcher-Reeves变梯度算法
是一种数据占用存储空间最小的变梯度算法,且速度通常比traingdx快得多,在连接权的数量很多时,时常选用该算法
traincgp
Polak-Ribiére变梯度算法
存储空间略大于traincgp,但对有些问题有较快的收敛速度
traincgb
Powell-Beale变梯度算法
性能略好于traincgp,但存储空间较之略大
trainscg
固定变比的变梯度算法
比其他变梯度算法需要更多迭代次数,但无需在迭代中进行线性搜索使每次迭代的计算量大大减小,存储空间与traincgf近似
trainbfg
BFGS拟牛顿算法
每次迭代过程所需的计算量和存储空间大于变梯度算法,数据存储量近似于Hessian矩阵,对规模较小的网络更有效
trainoss
变梯度法与拟牛顿法的折中算法
trainlm
Levenberg-Marquardt算法
对中等规模的前馈网络(多达数百个连接权)的最快速算法
trainbr
贝叶斯归一化法
可使网络具有较强的泛化能力,避免了以尝试的方法去决定最佳网络规模的大小