BP神經(jīng)網(wǎng)絡(luò)實(shí)驗(yàn)報(bào)告
一、實(shí)驗(yàn)?zāi)康?、熟悉MATLAB中神經(jīng)網(wǎng)絡(luò)工具箱的使用方法;
2、通過在MATLAB下面編程實(shí)現(xiàn)BP網(wǎng)絡(luò)逼近標(biāo)準(zhǔn)正弦函數(shù),來加深對(duì)BP網(wǎng)絡(luò)的了解和認(rèn)識(shí),理解信號(hào)的正向傳播和誤差的反向傳遞過程。
二、實(shí)驗(yàn)原理
由于傳統(tǒng)的感知器和線性神經(jīng)網(wǎng)絡(luò)有自身無法克服的缺陷,它們都不能解決線性不可分問題,因此在實(shí)際應(yīng)用過程中受到了限制。而BP網(wǎng)絡(luò)卻擁有良好的繁泛化能力、容錯(cuò)能力以及非線性映射能力。因此成為應(yīng)用最為廣泛的一種神經(jīng)網(wǎng)絡(luò)。
BP算法的基本思想是把學(xué)習(xí)過程分為兩個(gè)階段:第一階段是信號(hào)的正向傳播過程;輸入信息通過輸入層、隱層逐層處理并計(jì)算每個(gè)單元的實(shí)際輸出值;第二階段是誤差的反向傳遞過程;若在輸入層未能得到期望的輸出值,則逐層遞歸的計(jì)算實(shí)際輸出和期望輸出的差值(即誤差),以便根據(jù)此差值調(diào)節(jié)權(quán)值。這種過程不斷迭代,最后使得信號(hào)誤差達(dá)到允許或規(guī)定的范圍之內(nèi)。
基于BP算法的多層前饋型網(wǎng)絡(luò)模型的拓?fù)浣Y(jié)構(gòu)如上圖所示。
BP算法的數(shù)學(xué)描述:三層BP前饋網(wǎng)絡(luò)的數(shù)學(xué)模型如上圖所示。三層前饋網(wǎng)中,輸入向量為:;隱層輸入向量為:;輸出層輸出向量為:;期望輸出向量為:。輸入層到隱層之間的權(quán)值矩陣用V表示,其中列向量為隱層第j個(gè)神經(jīng)元對(duì)應(yīng)的權(quán)向量;隱層到輸出層之間的權(quán)值矩陣用W表示,其中列向量為輸出層第k個(gè)神經(jīng)元對(duì)應(yīng)的權(quán)向量。
下面分析各層信號(hào)之間的數(shù)學(xué)關(guān)系。
對(duì)于輸出層,有
對(duì)于隱層,有
以上兩式中,轉(zhuǎn)移函數(shù)f(x)均為單極性Sigmoid函數(shù):
f(x)具有連續(xù)、可導(dǎo)的特點(diǎn),且有
以上共同構(gòu)成了三層前饋網(wǎng)了的數(shù)學(xué)模型。
當(dāng)網(wǎng)絡(luò)輸出和期望輸出不相等時(shí),存在輸出誤差E如下:
將以上誤差定義式展開至隱層,有
進(jìn)一步展開至輸入層,有
由上式可以看出,網(wǎng)絡(luò)輸入誤差是兩層權(quán)值W和V的函數(shù),因此調(diào)整權(quán)值可以改變誤差E。
顯然,調(diào)整權(quán)值的原則是使誤差不斷的減小,因此應(yīng)使權(quán)值的調(diào)整量與誤差的負(fù)梯度成正比,即:
式中負(fù)號(hào)表示梯度下降,常數(shù)表示比例系數(shù),在訓(xùn)練中反映了學(xué)習(xí)速率。
容易看出,BP學(xué)習(xí)算法中,各層權(quán)值調(diào)整公式形式上都是一樣的,均有3個(gè)因素決定,即:學(xué)習(xí)速率、本層誤差信號(hào)和本層輸入信號(hào)X/Y。其中輸出層誤差信號(hào)同網(wǎng)絡(luò)的期望輸出與實(shí)際輸出之差有關(guān),直接反映了輸出誤差,而各隱層的誤差信號(hào)與前面各層的誤差信號(hào)都有關(guān),是從輸出層開始逐層反傳過來的。
三、程序
clc
clear
all
k=1;
n=10;
P=[-1:0.05:1];
T=sin(k*pi*P);
plot(P,T,'-');
title('要逼近的非線性函數(shù)');
xlabel('輸入向量');
ylabel('非線性函數(shù)目標(biāo)輸出向量');
net=newff(minmax(P),[n,1],{'tansig','purelin'},'trainlm');
y1=sim(net,P);
net.trainParam.epochs=50;
net.trainParam.goal=0.01;
net=train(net,P,T);
y2=sim(net,P);
figure;
plot(P,T,'-',P,y1,'--',P,y2,'*');
title('訓(xùn)練前后的網(wǎng)絡(luò)仿真結(jié)果對(duì)比');
xlabel('輸入向量');
ylabel('輸出向量');
legend('目標(biāo)函數(shù)輸出向量','未訓(xùn)練BP網(wǎng)絡(luò)輸出','已訓(xùn)練BP網(wǎng)絡(luò)輸出');
仿真結(jié)果如下圖:
由仿真結(jié)果圖可以看出,未經(jīng)訓(xùn)練的BP網(wǎng)絡(luò)輸出與目標(biāo)函數(shù)差距很大,逼近效果不理想,而對(duì)BP網(wǎng)絡(luò)訓(xùn)練之后的輸出可以較精確的逼近目標(biāo)函數(shù),并且BP網(wǎng)絡(luò)的訓(xùn)練迭代次數(shù)僅約1.2次,網(wǎng)絡(luò)的輸出目標(biāo)誤差就達(dá)到了精度要求,收斂速度很快。函數(shù)逼近效果、網(wǎng)絡(luò)訓(xùn)練的收斂速度與原始非線性函數(shù)的頻率、BP網(wǎng)絡(luò)隱含層單元神經(jīng)元的數(shù)目以及BP網(wǎng)絡(luò)訓(xùn)練函數(shù)有關(guān)。
四、實(shí)驗(yàn)結(jié)論
通過編程實(shí)現(xiàn)使用BP網(wǎng)絡(luò)對(duì)函數(shù)進(jìn)行逼近,對(duì)BP網(wǎng)絡(luò)的信號(hào)和誤差傳遞的原理以及隱層、輸出層權(quán)值調(diào)整的規(guī)則有了充分的理解和認(rèn)識(shí)。
BP網(wǎng)絡(luò)是一個(gè)強(qiáng)大的工具,它是應(yīng)用最為廣泛的網(wǎng)絡(luò)。用于文字識(shí)別、模式分類、文字到聲音的轉(zhuǎn)換、圖像壓縮、決策支持等。
但是,通過實(shí)驗(yàn)看出,它還是存在一定的不足。由于本實(shí)驗(yàn)中采用的學(xué)習(xí)率是固定不變的,從而使得在函數(shù)逼近的時(shí)候在有些地方出現(xiàn)了偏離,如果能自適應(yīng)的調(diào)整學(xué)習(xí)率,使網(wǎng)絡(luò)在學(xué)習(xí)初期具有較大的學(xué)習(xí)率,以快速逼近函數(shù),當(dāng)已經(jīng)逼近理想輸出時(shí)再使用較小的學(xué)習(xí)率,來更加精準(zhǔn)的去逼近函數(shù),這樣會(huì)得到更好的逼近效果和更小的錯(cuò)誤率。
另外,BP網(wǎng)絡(luò)還具有收斂速度慢、容易陷入局部極小值的問題。這些問題通過對(duì)標(biāo)準(zhǔn)BP算法的改進(jìn)能得到一定程度的解決。