1、ANN-BP分类器设计摘要:BP(Back Propagation)是一种按误差逆传播算法训练的多层前馈网络,是目前应用最广泛的神经网络模型之一。由于这种算法在本质上是一种神经网络学习的数学模型,所以有时也称为 BP 模型。BP 算法是为了解决多层前向神经网络的权系数优化而提出来的,所以 BP 算法也通常暗示着神经网络的拓扑结构是一种无反馈的多层前向网络,故而有时也称无反馈多层前向网络为BP 模型。BP 网络能学习和存贮大量的输入 -输出模式映射关系,而无需事前揭示描述这种映射关系的数学方程。本文详细介绍了 BP 算法的原理及 matlab 上的实现。关键词:BP 原理 matlab 实现1
2、引言含有隐层的多层前馈网络能大大提高神经网络的分类能力,但长期以来没有提出解决权值调整问题的游戏算法。1986 年,Rumelhart 和 McCelland 领导的科学家小组在Parallel Distributed Processing一书中,对具有非线性连续转移函数的多层前馈网络的误差反向传播(Error Back Proragation,简称 BP)算法进行了详尽的分析,实现了 Minsky 关于多层网络的设想。BP 算法的基本思想是,学习过程由信号的正向传播与误差的反向传播两个过程组成。正向传播时,输入样本从输入层传入,经各隐层逐层处理后,传向输出层。若输出层的实际输出与期望的输出(
3、教师信号)不符,则转入误差的反向传播阶段。误差反传是将输出误差以某种形式通过隐层向输入层逐层反传,并将误差分摊给各层的所有单元,从而获得各层单元的误差信号,此误差信号即作为修正各单元权值的依据。这种信号正向传播与误差反向传播的各层权值调整过程,是周而复始地进行的。权值不断调整的过程,也就是网络的学习训练过程。此过程一直进行到网络输出的误差减少到可接受的程度,或进行到预先设定的学习次数为止。2 基本原理ANN-BP 网络是一种模仿人脑处理信息的系统,先用样本数据训练神经网络时,它自动地将输出值与期望值进行比较,得到误差信号,再根据误差信号,从后向前调节各神经网络层神经元之间的连接强度,然后再进行
4、运算,使误差减小,再将新的输出值与期望值进行比较,得到新的比先前小的误差信号,再根据较小的误差信号,从后向前重新调节各神经网络层神经元之间的连接强度,依此不断地多次进行,直到误差满足要求为止。反向传播(BP)网络含有输人层、输出层以及处于输入输出层之间的中间层。中间层有单层或多层,由于它们和外界没有直接的联系,故也称为隐层。在隐层中的神经元也称隐单元。隐层虽然和外界不连接但是,它们的状态则影响输入输出之间的关系。这也是说,改变隐层的权系数,可以改变整个多层神经网络的性能。3 BP在matlab中的具体应用(1 ) net=newff(P,T,S )或者 net = newff(P,T,S,TF
5、,BTF,BLF,PF,IPF,OPF,DDF)P:输入参数矩阵。 (RxQ1) T:目标参数矩阵。(SNxQ2)S: N-1 个隐含层的数目(S(i )到 S(N-1) ) ,输出层的单元数目取决于 T,默认为空矩阵。TF:相关层的传递函数,默认隐含层为 tansig 函数,输出层为 purelin 函数。BTF:BP 神经网络学习训练函数,默认值为 trainlm 函数。BLF:权重学习函数,默认值为 learngdm。PF:性能函数,默认值为 mse。IPF, OPF,DDF 均为默认值即可。(2 )传递函数purelin 线性传递函数tansig 正切 S 型传递函数logsig 对数
6、 S 型传递函数隐含层和输出层函数的选择对 BP 神经网络预测精度有较大影响,一般隐含层节点转移函数选用 tansig 函数或 logsig 函数,输出层节点转移函数选用 tansig 函数或 purelin 函数。(3 )学习训练函数神经网络的学习分为有导师学习和无导师学习。最速下降 BP 算法:traingd动量 BP 算法:traingdm学习率可变的 BP 算法:trainda (学习率可变的最速下降 BP 算法) ;traindx(学习率可变的动量 BP 算法)弹性算法:trainrp变梯度算法:traincgf(Fletcher-Reeves 修正算法)traincgp(Polak
7、_Ribiere 修正算法)traincgb(Powell-Beale 复位算法)trainbfg(BFGS 拟牛顿算法)trainoss(OSS 算法)trainlm(LM 算法)参数说明:通过 net.trainParam 可以查看参数Show Training Window Feedback showWindow: trueShow Command Line Feedback showCommandLine: falseCommand Line Frequency show: 两次显示之间的训练次数Maximum Epochs epochs: 训练次数Maximum Training T
8、ime time: 最长训练时间(秒)Performance Goal goal: 网络性能目标Minimum Gradient min_grad: 性能函数最小梯度Maximum Validation Checks max_fail: 最大验证失败次数Learning Rate lr: 学习速率Learning Rate Increase lr_inc: 学习速率增长值Learning Rate lr_dec: 学习速率下降值Maximum Performance Increase max_perf_inc:Momentum Constant mc: 动量因子(4 ) BP 神经网络预测函数
9、SimOut = sim(model, Parameters) & y=sim(net,x)函数功能:用训练好的 BP 神经网络预测函数输出net:训练好的网络x:输入数据y:网络预测数据(5)训练函数net,tr = train(Net,P,T,Pi,Ai)其中,Net 待训练的网络P 输入数据矩阵T 输出数据矩阵 (default = zeros)Pi 初始化输入层条件 (default = zeros)Ai 初始化输出层条件 (default = zeros)net 训练好的网络tr 训练过程记录注意:P Ni-by-TS cell array Each element Pi,j,ts
10、is an Ni-by-Q matrix.T Nl-by-TS cell array Each element Ti,ts is a Ui-by-Q matrix. BP 网络的常用函数表函数类型 函数名称 函数用途newcf 创建级联前向网络前向网络创建函数Newff 创建前向 BP 网络logsig S 型的对数函数tansig S 型的正切函数传递函数purelin 纯线性函数learngd 基于梯度下降法的学习函数学习函数learngdm 梯度下降动量学习函数mse 均方误差函数性能函数msereg 均方误差规范化函数plotperf 绘制网络的性能plotes 绘制一个单独神经元的误
11、差 曲面plotep 绘制权值和阈值在误差曲面 上的位置显示函数errsurf 计算单个神经元的误差曲面4 运行结果第 1 个 len 长度的测试数据被正确分到第一类的个数为 cl1 = 12第 2 个 len 长度的测试数据被正确分到第二类的个数为 cl2 = 8第 3 个 len 长度的测试数据被正确分到第三类的个数为 cl3 = 12第 4 个 len 长度的测试数据被正确分到第四类的个数为 cl4 = 12第 5 个 len 长度的测试数据被正确分到第五类的个数为 cl5 = 12第 6 个 len 长度的测试数据被正确分到第六类的个数为 cl6 = 0第 7 个 len 长度的测试数据被正确分到第七类的个数为 cl7 = 11第 8 个 len 长度的测试数据被正确分到第八类的个数为 cl8 = 12第 9 个 len 长度的测试数据被正确分到第九类的个数为 cl9 = 11第 10 个 len 长度的测试数据被正确分到第十类的个数为 cl01 = 11第 11 个 len 长度的测试数据被正确分到第十一类的个数为 cl11 = 10第 12 个 len 长度的测试数据被正确分到第十二类的个数为 cl12 = 10分类正确率 ratio = 84.0278%