BP神經(jīng)網(wǎng)絡(luò)算法原理--精選文檔_第1頁(yè)
BP神經(jīng)網(wǎng)絡(luò)算法原理--精選文檔_第2頁(yè)
已閱讀5頁(yè),還剩11頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、BP網(wǎng)絡(luò)模型處理信息的基本原理是:輸入信號(hào)Xi通過(guò)中間節(jié)點(diǎn)(隱層點(diǎn))作用于輸出節(jié)點(diǎn),經(jīng)過(guò)非線形變換,產(chǎn)生輸出信號(hào)Yk,網(wǎng)絡(luò)訓(xùn)練的每個(gè)樣本包括輸入向量X和期望輸出量t,網(wǎng)絡(luò)輸出值Y與期望輸出值t之間的偏差,通過(guò)調(diào)整輸入節(jié)點(diǎn)與隱層節(jié)點(diǎn)的聯(lián)接強(qiáng)度取值Wij和隱層節(jié)點(diǎn)與輸出節(jié)點(diǎn)之間的聯(lián)接強(qiáng)度Tjk以及閾值,使誤差沿梯度方向下降,經(jīng)過(guò)反復(fù)學(xué)習(xí)訓(xùn)練,確定與最小誤差相對(duì)應(yīng)的網(wǎng)絡(luò)參數(shù)(權(quán)值和閾值),訓(xùn)練即告停止。此時(shí)經(jīng)過(guò)訓(xùn)練的神經(jīng)網(wǎng)絡(luò)即能對(duì)類似樣本的輸入信息,自行處理輸出誤差最小的經(jīng)過(guò)非線形轉(zhuǎn)換的信息。 一 BP神經(jīng)網(wǎng)絡(luò)模型BP網(wǎng)絡(luò)模型包括其輸入輸出模型、作用函數(shù)模型、誤差計(jì)算模型和自學(xué)習(xí)模型。(1)節(jié)點(diǎn)輸出

2、模型隱節(jié)點(diǎn)輸出模型:Oj=f(Wij×Xi-q j)    (1)輸出節(jié)點(diǎn)輸出模型:Yk=f(Tjk×Oj-q k) (2)f-非線形作用函數(shù);q -神經(jīng)單元閾值。(2)作用函數(shù)模型作用函數(shù)是反映下層輸入對(duì)上層節(jié)點(diǎn)刺激脈沖強(qiáng)度的函數(shù)又稱刺激函數(shù),一般取為(0,1)內(nèi)連續(xù)取值Sigmoid函數(shù):                     &#

3、160;  f(x)=1/(1+e-x)                   (3)(3)誤差計(jì)算模型誤差計(jì)算模型是反映神經(jīng)網(wǎng)絡(luò)期望輸出與計(jì)算輸出之間誤差大小的函數(shù):                    Ep=1/2&

4、#215;(tpi-Opi)2                (4)tpi- i節(jié)點(diǎn)的期望輸出值;Opi-i節(jié)點(diǎn)計(jì)算輸出值。(4)自學(xué)習(xí)模型神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)過(guò)程,即連接下層節(jié)點(diǎn)和上層節(jié)點(diǎn)之間的權(quán)重拒陣Wij的設(shè)定和誤差修正過(guò)程。BP網(wǎng)絡(luò)有師學(xué)習(xí)方式-需要設(shè)定期望值和無(wú)師學(xué)習(xí)方式-只需輸入模式之分。自學(xué)習(xí)模型為            

5、;           Wij(n+1)= h ×i×Oj+a×Wij(n) (5)h -學(xué)習(xí)因子;i-輸出節(jié)點(diǎn)i的計(jì)算誤差;Oj-輸出節(jié)點(diǎn)j的計(jì)算輸出;a-動(dòng)量因子。二 BP網(wǎng)絡(luò)模型的缺陷分析及優(yōu)化策略(1)學(xué)習(xí)因子h 的優(yōu)化采用變步長(zhǎng)法根據(jù)輸出誤差大小自動(dòng)調(diào)整學(xué)習(xí)因子,來(lái)減少迭代次數(shù)和加快收斂速度。h =h +a×(Ep(n)- Ep(n-1)/ Ep(n) a為調(diào)整步長(zhǎng),01之間取值 (6)(2)隱層節(jié)點(diǎn)數(shù)的優(yōu)化   &

6、#160; 隱 節(jié)點(diǎn)數(shù)的多少對(duì)網(wǎng)絡(luò)性能的影響較大,當(dāng)隱節(jié)點(diǎn)數(shù)太多時(shí),會(huì)導(dǎo)致網(wǎng)絡(luò)學(xué)習(xí)時(shí)間過(guò)長(zhǎng),甚至不能收斂;而當(dāng)隱節(jié)點(diǎn)數(shù)過(guò)小時(shí),網(wǎng)絡(luò)的容錯(cuò)能力差。利用逐步回歸分析 法并進(jìn)行參數(shù)的顯著性檢驗(yàn)來(lái)動(dòng)態(tài)刪除一些線形相關(guān)的隱節(jié)點(diǎn),節(jié)點(diǎn)刪除標(biāo)準(zhǔn):當(dāng)由該節(jié)點(diǎn)出發(fā)指向下一層節(jié)點(diǎn)的所有權(quán)值和閾值均落于死區(qū)(通常取±0.1、±0.05等區(qū)間)之中,則該節(jié)點(diǎn)可刪除。最佳隱節(jié)點(diǎn)數(shù)L可參考下面公式計(jì)算:L=(m+n)1/2+c (7)m-輸入節(jié)點(diǎn)數(shù);n-輸出節(jié)點(diǎn)數(shù);c-介于110的常數(shù)。(3)輸入和輸出神經(jīng)元的確定利用多元回歸分析法對(duì)神經(jīng)網(wǎng)絡(luò)的輸入?yún)?shù)進(jìn)行處理,刪除相關(guān)性強(qiáng)的輸入?yún)?shù),來(lái)減少輸入節(jié)點(diǎn)數(shù)

7、。(4)算法優(yōu)化由于BP算法采用的是剃度下降法,因而易陷于局部最小并且訓(xùn)練時(shí)間較長(zhǎng)。用基于生物免疫機(jī)制地既能全局搜索又能避免未成熟收斂的免疫遺傳算法IGA取代傳統(tǒng)BP算法來(lái)克服此缺點(diǎn)。該程序?qū)崿F(xiàn)神經(jīng)網(wǎng)絡(luò)的BP算法,輸入節(jié)點(diǎn)數(shù),輸出節(jié)點(diǎn)數(shù),隱層數(shù),隱層節(jié)點(diǎn)數(shù)任意,由用戶決定。其中隱層數(shù)指的是總共曾數(shù)包含輸出層,比如說(shuō)異或算法為2層,第一層節(jié)點(diǎn)數(shù)為2,第二層也即輸出層節(jié)點(diǎn)數(shù)為1,輸入點(diǎn)數(shù)為2 。但是該程序?qū)Ξ惢蛩惴▽?shí)現(xiàn)并不理想,對(duì)多層多節(jié)點(diǎn)的神經(jīng)網(wǎng)絡(luò)有較好的結(jié)果。#include "iostream.h"#include <time.h> #include <

8、stdlib.h> #include<fstream>#include <math.h>#include "stdio.h "#define MAXCOUNT 1e5 /迭代訓(xùn)練次數(shù)上限/ 精度0.001的隨機(jī)浮點(diǎn)數(shù),范圍在-0.50.5float randf()return (float)(rand() % 1001) * 0.001f-0.5);/高斯隨機(jī)數(shù)產(chǎn)生函數(shù)double gaussrand()   static double V1, V2, S;     static in

9、t phase = 0;     double X;     if(phase = 0)    do       double U1 = (double)rand() / RAND_MAX;      double U2 = (double)rand() / RAND_MAX;      V1 = 2 * U1 - 1;  &#

10、160;   V2 = 2 * U2 - 1;      S = V1 * V1 + V2 * V2;   while(S >= 1 | S = 0);   X = V1 * sqrt(-2 * log(S) / S);     else   X = V2 * sqrt(-2 * log(S) / S);     phase = 1 - phase;  

11、0;  return X;/定義一個(gè)多層前向BP網(wǎng)絡(luò)class BPpublic:double *p;/記錄所有的權(quán)值double *ddp;/記錄所有的權(quán)值增量int *pnode;/記錄每一層的節(jié)點(diǎn)數(shù)double *pnodey;/記錄每組每一層的節(jié)點(diǎn)的輸出值double *ddlj;/記錄每組每一層的節(jié)點(diǎn)的ddljdouble *pX;/記錄輸入樣本double *pY;/記錄輸入理想輸出值int Sidenum;int Inputnodenum;int outputnodenum;int yangbenzushu;BP() Sidenum=0;Inputnodenum=0;o

12、utputnodenum=0;yangbenzushu=0;BP() for(int m=0;m<Sidenum;m+)         for(int n=0;n<pnodem+1;n+)    delete pmn;   delete ddpmn;   delete pm;      delete ddpm;        dele

13、te p;      delete ddp;         p=NULL;      ddp=NULL;if(p=NULL)delete pnode;for(int M=0;M<Sidenum;M+)delete pnodeyM;delete ddljM;delete pnodey;delete ddlj;pnodey=NULL;ddlj=NULL;/完成所有權(quán)值的初始化void getW(int sidenum,in

14、t inputnodenum,int outputnodenum1,int yangbenzu)   Sidenum=sidenum;     yangbenzushu= yangbenzu;    Inputnodenum=inputnodenum;outputnodenum=outputnodenum1;p=new double *sidenum;ddp=new double *sidenum;pnode=new int sidenum+1;/包含輸入層輸出層每一層的節(jié)點(diǎn)數(shù)for(int i=0;i&

15、lt;sidenum+1;i+)int data=0;cout<<"請(qǐng)輸入第"<<i<<"層節(jié)點(diǎn)數(shù)"<<endl;    cin>>data;    pnodei=data;for (int j=0;j<sidenum;j+)    pj=new double* pnodej+1;     ddpj=new double*pnodej+1;  

16、;      for (int k=0;k<pnodej+1;k+)           ddpjk=new doublepnodej+1;            pjk=new doublepnodej+1;           

17、for (int t=0;t<pnodej+1;t+)            ddpjkt=0;/每一層的權(quán)值初始化為0                     if(t=0)pjkt=-fabs(randf();/每一層的閥值初始化     

18、           else pjkt=randf();/每一層的權(quán)值初始化            /為記錄每一層的節(jié)點(diǎn)的輸出值和ddlj的指針開(kāi)辟內(nèi)存pnodey=new double *Sidenum;ddlj=new double *Sidenum;for(int p=0;p<Sidenum;p+) pnodeyp = new double pnodep+1+1; 

19、0;     ddljp=new double pnodep+1;                     pnodeyp0=1;/每組每層的首值為1/*/每個(gè)節(jié)點(diǎn)輸出函數(shù)double fas(double s) double t;t=1.0/(exp(-s)+1);return t;/*/該函數(shù)用來(lái)記錄樣本值和理想輸出值void INPUT(int yangbenz

20、ushu1 )   pY=new double*yangbenzushu1;pX=new double*yangbenzushu1;for(int yu=0;yu<yangbenzushu1;yu+) pXyu=new doubleInputnodenum+1;    pYyu=new doubleoutputnodenum+1;/每組樣本的首值賦為1   for(int yu1=0;yu1<yangbenzushu1;yu1+)   pXyu10=1;   &#

21、160; pYyu10=1;      cout<<"請(qǐng)輸出樣本輸入值"<<endl;for(int yuy=0;yuy<yangbenzushu1;yuy+)for(int yy=1;yy<=Inputnodenum;yy+) if(yy=Inputnodenum) cout<<endl;   cout<<"X"<<yuy<<""<<""<<yy&

22、lt;<"="<<' '   cin>>pXyuyyy;cout<<"請(qǐng)輸出樣本理想輸出值"<<endl;for(int yuy1=0;yuy1<yangbenzushu1;yuy1+)for(int yy1=1;yy1<=outputnodenum;yy1+) /if(yy=Inputnodenum) cout<<endl;   cout<<"Y"<<yuy1<<&

23、quot;"<<""<<yy1<<"="<<' '   cin>>pYyuy1yy1;/*/計(jì)算每個(gè)節(jié)點(diǎn)的輸出值函數(shù)double computeYl(int KK)/KK代表第幾組組號(hào) double sum1=0;/把所有的層的每一個(gè)節(jié)點(diǎn)的輸出值算出來(lái)并記錄在 pnodey里,不包含輸入點(diǎn)值   for(int y=0;y<Sidenum;y+)/層數(shù)       for(i

24、nt r=1;r<pnodey+1+1;r+)/節(jié)點(diǎn)數(shù)    double sum=0;     for(int z=0;z<pnodey+1;z+)/前一層的節(jié)點(diǎn)數(shù)        if(y=0)sum+= pXKKz*pyr-1z;         else         

25、        sum+=pnodeyy-1z*pyr-1z;                    pnodeyyr=fas(sum);          for(int j=1;j<=outputnodenum;j+)sum1+=pow(pYKKj-pnodeySidenum-1

26、j,2);return sum1;/*/Compute Back-Propagation-Errorsvoid ComputeBackPropagationErrors(int gf)/gf代表組號(hào)/計(jì)算所有的ddlj/for(int gf=0;gf<yangbenzushu;gf+)/組數(shù)for(int q=Sidenum-1;q>=0;q-)/從最后一層開(kāi)始    if (q=Sidenum-1)/如果是最外一層的話      for(int rt=0;rt<pnodeq+1;rt+)/每層的節(jié)點(diǎn)數(shù) &

27、#160;             ddljqrt=pnodeyqrt+1*(1-pnodeyqrt+1)*(pYgfrt+1-pnodeyqrt+1) ;          else         for(int ry=0;ry<pnodeq+1;ry+)      &

28、#160; double sumtemp=0;      for(int fg=0;fg<pnodeq+2;fg+)       sumtemp+=ddljq+1fg*pq+1fgry+1;                    ddljqry = pnodeyqry+1*(1-pnodeyq

29、ry+1)* sumtemp;                /計(jì)算所有的ddp/for(int gf1=0;gf1<yangbenzushu;gf1+)/組數(shù)   for(int l=0;l<Sidenum;l+)/層數(shù)    for(int JJ=0;JJ<pnodel+1;JJ+)/每一層的節(jié)點(diǎn)數(shù)     for(int i=0;i<pnodel+1;i+)

30、/前一層的節(jié)點(diǎn)數(shù)     if(l=0)/如果是第一層的話,y值為輸入的X值        ddplJJi=ddljlJJ*pXgfi;       else      ddplJJi=ddljlJJ*pnodeyl-1i;     /*/void UpdatetheWeightsusingBPAlgorithm() for(int ce

31、nt=0;cent<Sidenum;cent+)/層數(shù)    for(int J=0;J<pnodecent+1;J+)/每一層的節(jié)點(diǎn)數(shù)       for(int i=0;i<pnodecent+1;i+)/前一層的節(jié)點(diǎn)數(shù)      pcentJi+=0.2*ddpcentJi;/*/double xunlianErrors()/定義訓(xùn)練誤差函數(shù) double error=0;   double sum=0; 

32、60; double temp=0;   double temp1=0;for(int gf1=0;gf1<yangbenzushu;gf1+)/組數(shù)temp= computeYl(gf1);   /temp1=zhengquelv(gf1);   /sum+=temp1;for(int jj=1;jj<=outputnodenum;jj+)      cout<<pnodeySidenum-1jj;      

33、 error+=temp;/ sum=sum/yangbenzushu;     cout<<"用訓(xùn)練集所得到的正確率:"<<sum<<endl;return error/yangbenzushu;/*/double jiaoyanErrors(int yangbenzushu1 )/定義校驗(yàn)誤差函數(shù)double error=0;   double sum=0;   double temp=0;   double temp1=0;for(i

34、nt gf1=0;gf1<yangbenzushu1;gf1+)/組數(shù)temp= computeYl(gf1);   for(int jj=1;jj<=outputnodenum;jj+)      cout<<pnodeySidenum-1jj;   /temp1=zhengquelv(gf1);   /sum+=temp1;       error+=temp;/sum=sum/yangbenzushu1;&

35、#160;  / cout<<"用校驗(yàn)集所得到的正確率:"<<sum<<endl;return error/yangbenzushu1;/*/double zhengquelv(int KK)int count=0;     double av=0;/for(int gf1=0;gf1<yangbenzushu;gf1+)/組數(shù)for(int jj=1;jj<=outputnodenum;jj+)if (pnodeySidenum-1jj>0) pnodeySidenum

36、-1jj=1;    else pnodeySidenum-1jj=0;   if(pYKKjj=pnodeySidenum-1jj)count+;    av=(double)count/outputnodenum;return av;/*/void freeINput() if(pX!=NULL)for(int u=0;u<yangbenzushu;u+)            delete pXu;

37、60;    delete pX;      pX=NULL;if(pY!=NULL)for(int u1=0;u1<yangbenzushu;u1+)        delete pYu1;         delete pY;    pY=NULL;/*/輸出所有的權(quán)值void wputout()   for

38、 (int j=0;j<Sidenum;j+)      cout<<"第"<<j+1<<"層權(quán)值為:"<<endl;            for (int k=0;k<pnodej+1;k+)    /if(k=pnodej+1-1) cout<<endl;    

39、;           for (int t=0;t<pnodej+1;t+)                       cout<<pjkt<<' '        if

40、(t=pnodej) cout<<endl;             /*/;void main()BP bp;int count=0;/用來(lái)統(tǒng)計(jì)所用的迭代次數(shù)/FILE *fp;int inputnodenum,outnodenum,sidenum,yangbenzunum;double error;cout<<"請(qǐng)輸入輸入點(diǎn)數(shù),輸出點(diǎn)數(shù),隱層數(shù)"<<endl;cin>>inputnodenum>>outnoden

41、um>>sidenum;cout<<"請(qǐng)輸入樣本組數(shù)"<<endl;cin>>yangbenzunum;/第一步初始化所有的權(quán)值bp.getW(sidenum,inputnodenum,outnodenum,yangbenzunum);/第二步輸入樣本組bp.INPUT(yangbenzunum);for(;count+)double sum=0;    double temp=0;for(int fuzu=0;fuzu<yangbenzunum;fuzu+)   /第三

42、步計(jì)算所有y值temp=puteYl(fuzu);/第四步Compute Back-Propagation-Errorsbp.ComputeBackPropagationErrors(fuzu);/第五步Update the Weights using BP Algorithmbp.UpdatetheWeightsusingBPAlgorithm();    sum+=temp;/第六步判斷是否收斂error=sum/2*yangbenzunum;/freopen("debugout.txt","w",stdout); /f

43、p=freopen( "out.txt", "w", stdout) ;/ cout<<count<<' '<<error<<endl;/ fclose(stdout);/關(guān)閉文件 /*if(count=1000)cout<<error<<endl;    if(count=1500)cout<<error<<endl;if(count=1600)cout<<error<<endl;*/if

44、(count=10000)cout<<error<<endl;if(error<1.02)               cout<<"循環(huán)收斂"<<"迭代次數(shù)為:"<<count<<endl;   /bp.freeINput();/釋放X Y空間   break;cout<<"權(quán)值為:&q

45、uot;<<endl;bp.wputout();double XUNLIANER=bp.xunlianErrors();/cout<<"訓(xùn)練誤差為:"<<XUNLIANER<<endl;bp.freeINput();/釋放X Y空間/*cout<<"請(qǐng)輸入校驗(yàn)樣本: "<<endl;int jiaoyannum=0;cin>>jiaoyannum;bp.INPUT(jiaoyannum);double jiaoyanER=bp.jiaoyanErrors(jiaoyann

46、um);cout<<"校驗(yàn)誤差為:"<<jiaoyanER<<endl;/fclose( stdout ) ;*/簡(jiǎn)介:BP(Back Propagation)網(wǎng)絡(luò)是1986年由Rumelhart和McCelland為首的科學(xué)家小組提出,是一種按誤差逆?zhèn)鞑ニ惴ㄓ?xùn)練的多層前饋網(wǎng)絡(luò),是目前應(yīng)用最廣泛的神經(jīng)網(wǎng)絡(luò)模型之一。BP網(wǎng)絡(luò)能學(xué)習(xí)和存貯大量的輸入-輸出模式映射關(guān)系,而無(wú)需事前揭示描述這種映射關(guān)系的數(shù)學(xué)方程。它的學(xué)習(xí)規(guī)則是使用最速下降法,通過(guò)反向傳播來(lái)不斷調(diào)整網(wǎng)絡(luò)的權(quán)值和閾值,使網(wǎng)絡(luò)的誤差平方和最小。BP神經(jīng)網(wǎng)絡(luò)模型拓?fù)浣Y(jié)構(gòu)包括輸入層(inp

47、ut)、隱層(hide layer)和輸出層(output layer)摘 要:神經(jīng)網(wǎng)絡(luò)算法是在神經(jīng)網(wǎng)絡(luò)現(xiàn)有算法的基礎(chǔ)上提出的,是通過(guò)任意選定一組權(quán)值,將給定的目標(biāo)輸出直接作為線性方程的代數(shù)和來(lái)建立線性方程組,解得待求權(quán),不存在傳統(tǒng)方法的局部極小及收斂速度慢的問(wèn)題,且更易理解。關(guān)鍵詞:固定權(quán)值;消元法;算法人工神經(jīng)網(wǎng)絡(luò)( ,)系統(tǒng)是世紀(jì)年代后出現(xiàn)的,它是由眾多的神經(jīng)元可調(diào)的連接權(quán)值連接而成,具有大規(guī)模并行處理、分布式信息存儲(chǔ)、良好的自組織自學(xué)習(xí)能力等特點(diǎn),在信息處理、模式識(shí)別、智能控制及系統(tǒng)建模等領(lǐng)域得到越來(lái)越廣泛的應(yīng)用。尤其誤差反向傳播算法( ,簡(jiǎn)稱網(wǎng)絡(luò))可以逼近任意連續(xù)函數(shù),具有很強(qiáng)的非線

48、性映射能力,而且網(wǎng)絡(luò)的中間層數(shù)、各層的處理單元數(shù)及網(wǎng)絡(luò)的學(xué)習(xí)系數(shù)等參數(shù)可根據(jù)具體情況設(shè)定,靈活性很大,所以它在許多應(yīng)用領(lǐng)域中起到重要作用。近年來(lái),為了解決神經(jīng)網(wǎng)絡(luò)收斂速度慢、不能保證收斂到全局最小點(diǎn),網(wǎng)絡(luò)的中間層及它的單元數(shù)選取無(wú)理論指導(dǎo)及網(wǎng)絡(luò)學(xué)習(xí)和記憶的不穩(wěn)定性等缺陷,提出了許多改進(jìn)算法。 傳統(tǒng)的算法簡(jiǎn)述算法是一種有監(jiān)督式的學(xué)習(xí)算法,其主要思想是:輸入學(xué)習(xí)樣本,使用反向傳播算法對(duì)網(wǎng)絡(luò)的權(quán)值和偏差進(jìn)行反復(fù)的調(diào)整訓(xùn)練,使輸出的向量與期望向量盡可能地接近,當(dāng)網(wǎng)絡(luò)輸出層的誤差平方和小于指定的誤差時(shí)訓(xùn)練完成,保存網(wǎng)絡(luò)的權(quán)值和偏差。具體步驟如下:()初始化,隨機(jī)給定各連接權(quán),及閥值i,t。()由給定的輸

49、入輸出模式對(duì)計(jì)算隱層、輸出層各單元輸出j(wijai-j) t(vjtbjt)式中:j為隱層第個(gè)神經(jīng)元實(shí)際輸出;t為輸出層第個(gè)神經(jīng)元的實(shí)際輸出;wij為輸入層至隱層的連接權(quán);vjt為隱層至輸出層的連接權(quán)。tk(tkt)t(t) jkdtvjt j(j)式中:tk為輸出層的校正誤差;jk為隱層的校正誤差。()計(jì)算新的連接權(quán)及閥值,計(jì)算公式如下:jt()jt()?琢tkj ij()ij()?茁jkikt()t()?琢tk j()=j()?茁jk式中:?琢,?茁為學(xué)習(xí)系數(shù)(?琢,?茁)。()選取下一個(gè)輸入模式對(duì)返回第步反復(fù)訓(xùn)練直到網(wǎng)絡(luò)設(shè)輸出誤差達(dá)到要求結(jié)束訓(xùn)練。傳統(tǒng)的算法,實(shí)質(zhì)上是把一組樣本輸入/輸

50、出問(wèn)題轉(zhuǎn)化為一個(gè)非線性優(yōu)化問(wèn)題,并通過(guò)負(fù)梯度下降算法,利用迭代運(yùn)算求解權(quán)值問(wèn)題的一種學(xué)習(xí)方法,但其收斂速度慢且容易陷入局部極小,為此提出了一種新的算法,即高斯消元法。 改進(jìn)的網(wǎng)絡(luò)算法 改進(jìn)算法概述此前有人提出:任意選定一組自由權(quán),通過(guò)對(duì)傳遞函數(shù)建立線性方程組,解得待求權(quán)。本文在此基礎(chǔ)上將給定的目標(biāo)輸出直接作為線性方程等式代數(shù)和來(lái)建立線性方程組,不再通過(guò)對(duì)傳遞函數(shù)求逆來(lái)計(jì)算神經(jīng)元的凈輸出,簡(jiǎn)化了運(yùn)算步驟。沒(méi)有采用誤差反饋原理,因此用此法訓(xùn)練出來(lái)的神經(jīng)網(wǎng)絡(luò)結(jié)果與傳統(tǒng)算法是等效的。其基本思想是:由所給的輸入、輸出模式對(duì)通過(guò)作用于神經(jīng)網(wǎng)絡(luò)來(lái)建立線性方程組,運(yùn)用高斯消元法解線性方程組來(lái)求得未知權(quán)值,而未

51、采用傳統(tǒng)網(wǎng)絡(luò)的非線性函數(shù)誤差反饋尋優(yōu)的思想。 改進(jìn)算法的具體步驟對(duì)給定的樣本模式對(duì),隨機(jī)選定一組自由權(quán),作為輸出層和隱含層之間固定權(quán)值,通過(guò)傳遞函數(shù)計(jì)算隱層的實(shí)際輸出,再將輸出層與隱層間的權(quán)值作為待求量,直接將目標(biāo)輸出作為等式的右邊建立方程組來(lái)求解?,F(xiàn)定義如下符號(hào)(見(jiàn)圖): (p)輸入層的輸入矢量; (p)輸入層輸入為 (p)時(shí)輸出層的實(shí)際輸出矢量; (p)目標(biāo)輸出矢量;,分別為輸入層、隱層和輸出層神經(jīng)元個(gè)數(shù);為隱層與輸入層間的權(quán)矩陣;為輸出層與隱層間的權(quán)矩陣。具體步驟如下:()隨機(jī)給定隱層和輸入層間神經(jīng)元的初始權(quán)值ij。()由給定的樣本輸入i(p)計(jì)算出隱層的實(shí)際輸出j(p)。為方便起見(jiàn)將圖

52、網(wǎng)絡(luò)中的閥值寫(xiě)入連接權(quán)中去,令:隱層閥值jnj,(),則:j(p)=(wiji(p) (,)。()計(jì)算輸出層與隱層間的權(quán)值jr。以輸出層的第個(gè)神經(jīng)元為對(duì)象,由給定的輸出目標(biāo)值r(p)作為等式的多項(xiàng)式值建立方程,用線性方程組表示為:a0(1)v1r+a1(1)v2r+am(1)vmr=tr(1)a0(2)v1r+a1(2)v2r+am(2)vmr=tr(2) a0(p)v1r+a1(p)v2r+am(p)vmr=tr(p) 簡(jiǎn)寫(xiě)為: 為了使該方程組有唯一解,方程矩陣為非奇異矩陣,其秩等于其增廣矩陣的秩,即:()(),且方程的個(gè)數(shù)等于未知數(shù)的個(gè)數(shù),故取,此時(shí)方程組的唯一解為: 0r,2r,mr(,) ()重復(fù)第三步就可以求出輸出層個(gè)神經(jīng)元的權(quán)值,以求的輸出

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論