神经网络建模及Matlab中重要的BP网络函数一、神经组织的基本特征1.细胞体是一个基本的初等信号处理器,轴突是信号的输出通路,树突是信号的输入通路。
信号从一个神经细胞经过突触传递到另一个细胞。
2.不同的神经元之间有不同的作用强度,称为联接强度。
当某细胞收到信号时,它的电位发生变化,如果电位超过某一阈值时,该细胞处于激发态,否则处于抑制状态。
3.两神经元之间的联接强度随其激发与抑制行为相关性的时间平均值正比变化,也就是说神经元之间的联接强度不是一成不变的。
这就是生物学上的Hebb律。
∑t j ij t S w )(二、人工神经元的M-P 模型(McCulloch 、Pitts,1943)1.构造一个模拟生物神经组织的人工神经网络的三要素:(1).对单个神经元给出定义;(2).定义网络结构:决定神经元数量及连接方式; (3).给出一种方法,决定神经元之间的联接强度。
2.M-P 模型其中,t 表示时间S i (t)表示第i 个神经元在t 时刻的状态,S i (t)=1表示处于激发态,S i (t)=0表示处于抑制态w ij 表示第j 个神经元到第i 个神经元的联接强度,称之为权,可正可负表示第i 个神经元在t 时刻所接收到的所有信号的线性迭加。
μi 表示神经元i 的阈值, 可以在模型中增加一个S k (t)=1神经元k ,并且w ik =-μi ,则阈值可归并到和号中去。
注:1.M-P 神经元虽然简单,但可以完成任何计算。
2.神经元的状态可以取[0,1]中的连续值,如用以下函数代替θ(x):⎩⎨⎧<≥=-=+∑00011x x x t S w t S i jj ij i )())(()(θμθ∑=>+=-j j ij h t S w h eh g )()(0 11 2ββ三、多层前传网络1.特点:➢ 相邻层全互连➢ 同层没有连接➢ 输出与输入没有直接联系2.各层神经元个数的确定输入层、输出层的神经元个数由研究对象的输入、输出信息来确定。
隐含层:101 ≤≤++=l l n n n I O H ,3.符号说明μ:表示一个确定的已知样品的标号;i, j, k :分别对应于输出层、隐含层、输入层的下标;:μi O 将第μ个样品的原始数据输入网络时,相应输出单元状态; :μj H 将第μ个样品的原始数据输入网络时,相应隐含单元状态; :μk I 将第μ个样品的原始数据输入网络时,相应输入单元数据;μi Wi1 ∑ Wi2W i3 I 2 H 2 H 3 I 3 O 1 H 1 I 4I 1 O 2 输出层O i 输入层I k隐含层H j权W jk权W ijw ij :从隐含层第j 个神经元到输出层第i 个神经元的联接强度; w jk :从输入层第k 个神经元到隐含层第j 个神经元的联接强度;4.网络数据流程对应于输入层的输入:μμμI n I I I ,,, 21隐单元j 的输入是:∑=k k jk j I w h μμ对应的输出是:)()(∑==k k jk j j I w g h g H μμμ 输出单元i 收到的迭加信号是:∑∑∑==j kk jk ij j j ij i I w g w H w o )(μμμ 输出单元i 的输出是:))(()()(∑∑∑===j k k jk ij j jij i i I w g w g H w g o g O μμμμ显然输出是所有权w={w ij ,w jk }的函数 四、向后传播算法(Back-Propagation)设样品μ在输出单元i 上的理想输出为μi T ,则函数:∑∑∑∑-=-=μμμμμμ,,))](([][)(i k kjk j ij ii i iI w g w g T O T w E 221221表示了在一定的权下,理想输出与实际输出的差异。
因此,确定权w 的问题化为求E(w)的极小值问题。
可以采用最速下降算法。
最速下降算法步骤:1)任取初始点w 0,计算出w 0的负梯度方向:-▽E(w 0)2)取新点w 1=w 0+△w=w 0-η▽E(w 0),使E (w 1)<E(w 0)3)判断其中△w 的计算如下:对于隐单元到输出单元的权的修正量为μμμμμμμμδηηηj i j i i i w E ij H H h g O T w ij ∑∑='-=-=∂∂)(][∆其中])[(μμμμδi i i i O T h g -'= 对于输入单元到隐单元的权的修正量为μμμμμμμμμμμμμμδηδηηηημμk j k j ij i i k j ij i i i iw H H E w E jk I I h g w I h g w h g O T w jk j jjk ∑∑∑∑='=''-==-=∂∂∂∂∂∂)()()(][,, ∆ 其中μμμδδiij i j j w h g ∑'=)(五、Matlab 中 BP 神经网络的实现1.BP 神经网络的初始化各层神经元个数,各层神经元之间的连接强度, 各层神经元的传递函数1).人工初始化 如下例例 1.有一个三输入两层神经网络,隐层有两个对数S 形神经元,输出层有一个正切S 形神经元,用于预测两个一元目标矢量.p=[0 0.5 -0.2;1 0.2 0.3]';%输入t=[0.5,-0.5];%理想输出r=3;s1=2;s2=1;%输入层、隐层、输出层的神经元个数 w1=rands(s1,r);%输入层到隐层的连接强度b1=rands(s1,1); %隐层的阈值w2=rands(s2,s1); %隐层到输出层的连接强度b2=rands(s2,1);%输出层的阈值lr=1;%学习速率for epoch=1:40 %训练网络40次a1=logsig(w1*p,b1); %隐层的输出a2=tansig(w2*a1,b2); %输出层的输出e=t-a2; %与理想输出的误差d2=deltatan(a2,e); %输出层的δ值d1=deltalog(a1,d2,w2); %隐层的δ值[dw1,db1]=learnbp(p,d1,lr); %进行学习,获取隐层连接强度、阈值的调整值w1=w1+dw1; %调整隐层的连接强度b1=b1+db1; %调整隐层的阈值[dw2,db2]=learnbp(a1,d2,lr); %进行学习,获取输出层连接强度、阈值的调整值w2=w2+dw2; %调整输出层的连接强度 b2=b2+db2; %调整输出层阈值end;a1=logsig(w1*p,b1); %学习后,对网络进行验证a2=tansig(w2*a1,b2)2).调用系统提供的函数➢格式:[w1,b1,w2,b2]=initff(p,s1,f1,s2,f2)[w1,b1,w2,b2]=initff(p,s1,f1,t,f2)➢功能:至多三层的BP网络初始化,得到每层的权值和阈值。
➢说明:1)P为输入向量,P中每一行必须包含网络期望输入的最大值和最小值,这样才能合理地初始化连接强度与阈值。
2)T为理想输出向量3)S1为隐层的神经元数,S2为输出层的神经元数,可用理想输出向量T代替S2,此时S2=T向量的行数4)F1为隐层传递函数名,F2为输出层传递函数名例2例2应用两层BP网络进行函数逼近,其中隐层神经元个数设为5个clf reset;figure(gcf)colordef(gcf,'none')setfsize(500,200);echo onclc%INITFF - Initializes a feed-forware network.%TRAINBP - Trains a feed-forward network with backpropagation.% SIMUFF - Simulates a feed-forward network.% FUNCTION APPROXIMATION WITH TANSIG/PURELIN NETWORK:%Using the above functions two-layer network is trained%to respond to specific inputs with target outputs.% DEFINING A VECTOR ASSOCATION PROBLEM% ====================================%P defines twenty-one 1-element input vectors (column vectors):P = -1:.1:1;% T defines the associated 1-element targets (column vectors):T=[-.9602 -.5770 -.0729 .3771 .6405 .6600 .4609 ....1336 -.2013 -.4344 -.5000 -.3930 -.1647 .0988 ....3072 .3960 .3449 .1816 -.0312 -.2189 -.3201];% PLOTTING THE DATA POINTS% ========================% Here the data points are plotted:plot(P,T,'+');title('Training Vectors');xlabel('Input Vector P');ylabel('Target Vector T');% The function the neural network learns must pass through % these data points.pause % Strike any key to design the network...clc% DESIGN THE NETWORK% ==================% A two-layer TANSIG/PURELIN network will be trained.%The number of hidden TANSIG neurons should reflect the% complexity of the problem.S1 = 5;%INITFF is used to initialize the weights and biases for%the TANSIG/PURELIN network.[w1,b1,w2,b2] = initff(P,S1,'tansig',T,'purelin'); echo off% TRAINING THE NETWORK% ====================%TRAINBP uses backpropagation to train feed-forward networks. df = 10; % Frequency of progress displays (in epochs). me = 8000; % Maximum number of epochs to train.eg = 0.02; % Sum-squared error goal.lr = 0.01; % Learning rate.tp = [df me eg lr];%Training begins...please wait (this takes a while!)... [w1,b1,w2,b2,ep,tr]=trainbp(w1,b1,'tansig',w2,b2,'purelin',P,T,tp); % ...and finally finishes.%TRAINBP has returned new weight and bias values, the number % of epochs trained EP, and a record of training errors TR. pause % Strike any key to see a plot of errors...clc% PLOTTING THE ERROR CURVE% ========================%Here the errors are plotted with respect to training epochs: ploterr(tr,eg);pause % Strike any key to use the function approximator...clc% USING THE PATTERN ASSOCIATOR% ============================% We can now test the associator with one of the origonal% inputs, 0.5, and see if it returns the target, 0.3960.p = 0.5;a = simuff(p,w1,b1,'tansig',w2,b2,'purelin')% The result is fairly close. Training to a lower error % goal would result in a closer approximation.echo offdisp('End of DEMOBP2')2、传递函数➢PURELIN 纯线性形函数格式: PURELIN(Z,B)成批处理向量Z,并提供阈值B➢对数S形LOGSIG函数格式:LOGSIG(Z,B)➢双曲正切S形TANSIG函数格式:TANSIG(Z,B)3.反向传播误差导数函数1)1)DELTALIN(A,E)计算线性输出层的误差导数阵,A、E分别为这一层的输出向量与误差2)2)DELTALIN(A,D,W)3)2)计算线性隐层的误差导数阵,D为下一层的δ向量,W为与下一层的连接强度4)3)DELTALOG(A,E)5)4)DELTALOG(A,D,W)6)5)DELTATAN(A,E)7)6)DELTATAN(A,D,W)4、BP网络的学习规则1)反向传播学习规则格式: LEARNBP(P,D,LR)[DW,DB]=LEARNBP(P,D,LR)其中P为本层的输入向量,D为δ向量(可以通过反向传播误差导数函数计算),LR为学习速率可同时得到连接强度的修正矩阵DW与阈值修正向量DB。