BP神经网络(Back Propagation)是一种按误差逆传播算法的多层前馈网络,目前在实际应用中8成到9成的神经网络模型采用的是BP网络(或者它的变种)。中间层可以为单隐层或者多隐层。由最后一个隐层传递到输出层。向输出层向外界输出信息处理结果。当实际输出与期望值不相符时,我们就进入误差的反向传播(Back Propagation)阶段。误差通过输出层向隐层和输入层反向传回去,按梯度下降的方式修改各层的权值。不断周而复始这个循环(这也是神经网络学习训练的过程),直到输出层与期望输出的误差减少到目标范围内(比如0.01),或者循环次数达到了预设值(比如500),则参数学习过程停止。这也就是BP神经网络的大致工作原理了。
众所周知,matlab是一款很优秀的处理神经网络的数学软件,它里面自带的一些库和包可以帮助我们很方便的创建神经网络。在Matlab神经网络工具箱中提供了大量的与BP神经网络相关的函数。本文我就介绍一下BP神经网络相关的一些函数的操作和使用。
创建函数有2种方式,一种是newcf, 另一种是newff。我们先来看看newcf。
newcf是用来创建级联前向BP网络函数的,何谓级联呢?在这个例子里的解释很简单,简单地说,就是input连接着第一个隐层又同时连接着第二个隐藏,这就是级联。我这么说可能有点抽象,待会我会截张图大家就能看个明白。
net = newcf ( inputRange, [lay1, lay2,...,layN], {layTran1, layTran2,...,layTranN}, BPTrain, BPLearn, util)
以上便是newcf调用的格式,
第一个参数inputRange是个矩阵,代表没组输入的最大值和最小值
第二个参数是代表每个隐层的长度,一个N个隐层
第三个参数代表各层的传递函数,默认是tansig
第四个参数代表BP网络的训练函数,默认是trainlm
第五个参数是权值的学习算法,默认是learngdm
第六个参数是性能函数,默认是mse
注意一下,我们调用的时候不需要全部调用,有默认值的参数可以省略,比如util这个参数可以省略掉。
举个简单的例子把,大家看看下面这段程序:
clear all;
input = [8 7 6 5 4 3 2 1 0]; %输入
expect = [0 1 2 3 4 5 6 7 8]; %期望输出
net = newcf([0 8], [5,1], {'tansig', 'purelin'}); %创建网络
net = train(net, input, expect); %训练网络
以上代码产生的神经网络如下所示,这也就是我刚刚提到的级联,从图中一目了然可以看到级联的定义。
x = -10:0.2:10;
y = logsig(x);
plot(x,y); grid on
函数图像如下所示:
函数图像如下所示,注意区分它和S函数的区别
该函数用来实现BP的梯度下降学习,主要用来计算权值或者阀值的变化率
该函数是准牛顿BP算法函数,可以训练任意形式的神经网络。很好很强大,强烈推荐使用。
p = [6 4];
t = [1.4 1.8];
wv = -8:0.8:8; bv = wv;
ES = errsurf(p, t, wv, bv, 'logsig');
plotes(wv, bv, ES, [60 30])
好了,至此我们已经入门了matlab的BP神经网络的基本操作,以后我们就能利用这些工具做更加高级的工作了。