數(shù)學(xué)建模之人工神經(jīng)網(wǎng)絡(luò)

1.基本概念

人工神經(jīng)網(wǎng)絡(luò)(Artificial Neutral Network,ANN)是由大量簡單的基本元件——神經(jīng)元魂贬,相互連接,通過模擬人的大腦神經(jīng)處理信息的方式衣陶,進行信息并行處理以及自學(xué)習(xí)能力溶浴。前向反饋網(wǎng)絡(luò)(Back Propagation,BP)徑向基網(wǎng)絡(luò)(Radical Basis Function,RBF)是目前技術(shù)較為成熟、應(yīng)用較為廣泛的兩種網(wǎng)絡(luò)廷粒。

2.常用激活函數(shù)

3.BP網(wǎng)絡(luò)

BP網(wǎng)絡(luò)是一種多層前饋神經(jīng)網(wǎng)絡(luò),它的名字源于在網(wǎng)絡(luò)訓(xùn)練中红且,調(diào)整網(wǎng)絡(luò)權(quán)值的訓(xùn)練算法是反向傳播算法(即BP學(xué)習(xí)算法)
下圖的BP網(wǎng)絡(luò)包括輸入層涤姊、中間層(隱藏層)暇番、輸出層,每一層之間實現(xiàn)全連接思喊,而同一層的神經(jīng)元之間無連接壁酬。
輸入層神經(jīng)元和隱含層神經(jīng)元之間的是網(wǎng)絡(luò)的權(quán)值,即兩個神經(jīng)元之間的連接強度恨课。
隱含層或輸出層任一神經(jīng)元將前一層所有神經(jīng)元傳來的信息進行整合舆乔,通常還會添加閾值,這主要是模仿生物學(xué)中神經(jīng)元必須達到一定的閾值才會觸發(fā)的原理剂公,然后將整合過的信息作為該層神經(jīng)元輸入希俩。

誤差反向傳播算法(BP算法):當(dāng)一對學(xué)習(xí)樣本提供給輸入神經(jīng)元后,該層神經(jīng)元的輸出值經(jīng)過各隱含層向輸出層傳播纲辽,而輸出層的神經(jīng)元會接收到這些輸入颜武,同時璃搜,為了減少網(wǎng)絡(luò)輸出與預(yù)期輸出值之間的誤差,該網(wǎng)絡(luò)會從輸出層反向經(jīng)過各隱藏層回到輸入層鳞上,從而逐步修正各連接權(quán)值这吻。隨著這種誤差逆向傳播修正的反復(fù)進行,網(wǎng)絡(luò)對輸入模式響應(yīng)的正確率也不斷上升篙议。

BP網(wǎng)絡(luò)求解過程
①原始數(shù)據(jù)的輸入
②數(shù)據(jù)歸一化
③網(wǎng)絡(luò)訓(xùn)練
④對原始數(shù)據(jù)進行仿真
⑤將原始數(shù)據(jù)仿真的結(jié)果與已知樣本進行對比
⑥對新數(shù)據(jù)進行仿真

4.BP網(wǎng)絡(luò)應(yīng)用實例

function main()
    clc                         % 清屏
    clear all;                  % 清除內(nèi)存以便加快運算速度
    close all;                  % 關(guān)閉當(dāng)前所有figure圖像
    SamNum=20;                  % 輸入樣本數(shù)量為20
    TestSamNum=20;              % 測試樣本數(shù)量也是20
    ForcastSamNum=2;            % 預(yù)測樣本數(shù)量為2
    HiddenUnitNum=8;            % 中間層隱節(jié)點數(shù)量取8,比工具箱程序多了1個
    InDim=3;                    % 網(wǎng)絡(luò)輸入維度為3
    OutDim=2;                   % 網(wǎng)絡(luò)輸出維度為2

    % 原始數(shù)據(jù) 
    % 人數(shù)(單位:萬人)
    sqrs=[20.55 22.44 25.37 27.13 29.45 30.10 30.96 34.06 36.42 38.09 39.13 39.99 41.93 44.59 47.30 52.89 55.73 56.76 59.17 60.63];
    % 機動車數(shù)(單位:萬輛)
    sqjdcs=[0.6 0.75 0.85 0.9 1.05 1.35 1.45 1.6 1.7 1.85 2.15 2.2 2.25 2.35 2.5 2.6 2.7 2.85 2.95 3.1];
    % 公路面積(單位:萬平方公里)
    sqglmj=[0.09 0.11 0.11 0.14 0.20 0.23 0.23 0.32 0.32 0.34 0.36 0.36 0.38 0.49 0.56 0.59 0.59 0.67 0.69 0.79];
    % 公路客運量(單位:萬人)
    glkyl=[5126 6217 7730 9145 10460 11387 12353 15750 18304 19836 21024 19490 20433 22598 25107 33442 36836 40548 42927 43462];
    % 公路貨運量(單位:萬噸)
    glhyl=[1237 1379 1385 1399 1663 1714 1834 4322 8132 8936 11099 11203 10524 11115 13320 16762 18673 20724 20803 21804];
    p=[sqrs;sqjdcs;sqglmj];    % 輸入數(shù)據(jù)矩陣(3 x 20)
    t=[glkyl;glhyl];           % 目標(biāo)數(shù)據(jù)矩陣(2 x 20)

    % 原始數(shù)據(jù)歸一化處理唾糯,可能提高模型精度,也可能讓模型更快收斂(如果使用梯度下降法求解最優(yōu)解)
    % mapminmax可將數(shù)據(jù)歸一化鬼贱,將數(shù)據(jù)映射到[-1,1]的范圍中
    [SamIn,ps1]=mapminmax(p);
    minp=ps1.xmin;
    maxp=ps1.xmax;
    [tn,ps2]=mapminmax(t);
    mint=ps2.xmin; % ps2是結(jié)構(gòu)體移怯,蘊含原始數(shù)據(jù)中的最小值和最大值
    maxt=ps2.xmax;
    
    rng('shuffle','twister')                % 依據(jù)系統(tǒng)時鐘種子產(chǎn)生隨機數(shù)
    NoiseVar=0.01;                          % 噪聲強度為0.01(添加噪聲的目的是為了防止網(wǎng)絡(luò)過度擬合)
    Noise=NoiseVar*randn(2,SamNum);         % 生成噪聲
    SamOut=tn + Noise;                      % 將噪聲添加到輸出樣本上
    
    TestSamIn=SamIn;                        % 這里取輸入樣本與測試樣本相同因為樣本容量偏少
    TestSamOut=SamOut;                      % 也取輸出樣本與測試樣本相同
    
    MaxEpochs=50000;                        %最多訓(xùn)練次數(shù)為50000
    lr=0.035;                               %學(xué)習(xí)速率為0.035
    E0=0.65*10^(-3);                        %目標(biāo)誤差為0.65*10^(-3)
    W1=0.5*rand(HiddenUnitNum,InDim)-0.1;   %初始化輸入層與隱含層之間的權(quán)值,返回一個8x3隨機數(shù)矩陣
    B1=0.5*rand(HiddenUnitNum,1)-0.1;       %初始化輸入層與隱含層之間的閾值吩愧,返回一個8x1隨機數(shù)矩陣
    W2=0.5*rand(OutDim,HiddenUnitNum)-0.1;  %初始化輸出層與隱含層之間的權(quán)值芋酌,返回一個2x8隨機數(shù)矩陣              
    B2=0.5*rand(OutDim,1)-0.1;              %初始化輸出層與隱含層之間的閾值,返回一個2x1隨機數(shù)矩陣
    
    ErrHistory=[];                          %給中間變量預(yù)先占據(jù)內(nèi)存
    for i=1:MaxEpochs        
        HiddenOut=logsig(W1*SamIn+repmat(B1,1,SamNum)); % 隱含層網(wǎng)絡(luò)輸出雁佳,logsig表示Sigmoid激活函數(shù)
        NetworkOut=W2*HiddenOut+repmat(B2,1,SamNum);    % 輸出層網(wǎng)絡(luò)輸出
        Error=SamOut-NetworkOut;                        % 實際輸出與網(wǎng)絡(luò)輸出之差
        SSE = sumsqr(Error);                            % 能量函數(shù)(誤差平方和)
    
        ErrHistory=[ErrHistory SSE];
    
        if SSE<E0, break, end      %如果達到誤差要求則跳出學(xué)習(xí)循環(huán)
        
        % 以下六行是BP網(wǎng)絡(luò)最核心的程序
        % 他們是權(quán)值(閾值)依據(jù)能量函數(shù)負梯度下降原理所作的每一步動態(tài)調(diào)整量
        Delta2=Error;
        Delta1=W2'*Delta2.*HiddenOut.*(1-HiddenOut);       
        dW2=Delta2*HiddenOut';
        dB2=Delta2*ones(SamNum,1);
        dW1=Delta1*SamIn';
        dB1=Delta1*ones(SamNum,1);
        %對輸出層與隱含層之間的權(quán)值和閾值進行修正
        W2=W2+lr*dW2;
        B2=B2+lr*dB2;
        %對輸入層與隱含層之間的權(quán)值和閾值進行修正
        W1=W1+lr*dW1;
        B1=B1+lr*dB1;
    end

HiddenOut=logsig(W1*SamIn+repmat(B1,1,TestSamNum)); % 隱含層輸出最終結(jié)果
NetworkOut=W2*HiddenOut+repmat(B2,1,TestSamNum);    % 輸出層輸出最終結(jié)果
a=postmnmx(NetworkOut,mint,maxt);                   % 還原網(wǎng)絡(luò)輸出層的結(jié)果
x=1990:2009;                                        % 時間軸刻度
newk=a(1,:);                                        % 網(wǎng)絡(luò)輸出客運量
newh=a(2,:);                                        % 網(wǎng)絡(luò)輸出貨運量
figure ;
subplot(2,1,1);plot(x,newk,'r-o',x,glkyl,'b--+')    %繪值公路客運量對比圖脐帝;
legend('網(wǎng)絡(luò)輸出客運量','實際客運量');
xlabel('年份');ylabel('客運量/萬人');
subplot(2,1,2);plot(x,newh,'r-o',x,glhyl,'b--+')    %繪制公路貨運量對比圖;
legend('網(wǎng)絡(luò)輸出貨運量','實際貨運量');
xlabel('年份');ylabel('貨運量/萬噸');

% 利用訓(xùn)練好的網(wǎng)絡(luò)進行預(yù)測
% 當(dāng)用訓(xùn)練好的網(wǎng)絡(luò)對新數(shù)據(jù)pnew進行預(yù)測時糖权,也應(yīng)作相應(yīng)的處理
pnew=[73.39 75.55
      3.9635 4.0975
      0.9880 1.0268];                            %2010年和2011年的相關(guān)數(shù)據(jù)
pnewn=mapminmax('apply',pnew,ps1);               %利用原始輸入數(shù)據(jù)的歸一化參數(shù)對新數(shù)據(jù)進行歸一化
HiddenOut=logsig(W1*pnewn+repmat(B1,1,ForcastSamNum));   % 隱含層輸出預(yù)測結(jié)果
anewn=W2*HiddenOut+repmat(B2,1,ForcastSamNum);           % 輸出層輸出預(yù)測結(jié)果
%把網(wǎng)絡(luò)預(yù)測得到的數(shù)據(jù)還原為原始的數(shù)量級堵腹;
anew=postmnmx(anewn,mint,maxt)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市星澳,隨后出現(xiàn)的幾起案子疚顷,更是在濱河造成了極大的恐慌,老刑警劉巖禁偎,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件腿堤,死亡現(xiàn)場離奇詭異,居然都是意外死亡如暖,警方通過查閱死者的電腦和手機笆檀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來盒至,“玉大人酗洒,你說我怎么就攤上這事〖纤欤” “怎么了樱衷?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長酒唉。 經(jīng)常有香客問我矩桂,道長,這世上最難降的妖魔是什么痪伦? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任耍鬓,我火速辦了婚禮阔籽,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘牲蜀。我一直安慰自己笆制,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布涣达。 她就那樣靜靜地躺著在辆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪度苔。 梳的紋絲不亂的頭發(fā)上匆篓,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天,我揣著相機與錄音寇窑,去河邊找鬼鸦概。 笑死,一個胖子當(dāng)著我的面吹牛甩骏,可吹牛的內(nèi)容都是我干的窗市。 我是一名探鬼主播,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼饮笛,長吁一口氣:“原來是場噩夢啊……” “哼咨察!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起福青,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤摄狱,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后无午,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體媒役,經(jīng)...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年宪迟,在試婚紗的時候發(fā)現(xiàn)自己被綠了酣衷。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,773評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡踩验,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出商玫,到底是詐尸還是另有隱情箕憾,我是刑警寧澤,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布拳昌,位于F島的核電站袭异,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏炬藤。R本人自食惡果不足惜御铃,卻給世界環(huán)境...
    茶點故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一碴里、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧上真,春花似錦咬腋、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至就珠,卻和暖如春寇壳,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背妻怎。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工壳炎, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人逼侦。 一個月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓匿辩,卻偏偏與公主長得像,于是被迫代替她去往敵國和親偿洁。 傳聞我的和親對象是個殘疾皇子撒汉,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,689評論 2 354

推薦閱讀更多精彩內(nèi)容