《神經網絡編程》 化學工業出版社 讀書筆記
第四章 前向型神經網絡 4.3 BP傳播網絡
本文是《神經網絡編程》書籍的閱讀筆記,其中涉及的源碼、公式、原理都來自此書,若有不理解之處請參閱原書
一,BP網絡的限制
在人工神經網絡的應用中,絕大部分的神經網絡模型采用了BP網絡及其變化形式,但這并不說明BP網絡是完美的,其各種算法依然存在一定的局限性。BP網絡的局限性主要有以下幾個方面。
1,學習速率與穩定性的矛盾。
梯度算法進行穩定學習要求的學習速率較小,所以通常學習過程的收斂速度較慢。附加動量法通常比簡單的梯度算法快,因為在保證穩定學習的同時,其可以采用很高的學習速率,但是對于許多實際應用仍然太慢。以上兩種方法通常只適用于希望增加訓練次數的情況。如果有足夠的存儲空間,即對于中、小規模的神經網絡通??刹捎?算法:如果存儲空間不足,則可采用其他多種快速算法,如對于大規模神經網絡采用或者算法更合適。
2,學習速率的選擇缺乏有效的方法。
對于非線性網絡,選擇學習速率是一件十分困難的事情。對于現行網絡,學習速率選擇的太大,會容易導致學習不穩定;反之,學習速率選擇的太小,則可能導致無法容忍的過長的訓練時間。不同于線性網絡,還沒有找到一個簡單易行的方法以解決非線性網絡選擇學習速率的問題。對于快速訓練算法,其默認參數值通常有裕量。
3,訓練過程可能陷于局部最小
從理論上說,多層BP網絡可以實現任意可實現的線性和非線性函數的映射,從而克服了感知器和線性神經網絡的局限性。但是在實際應用中,BP網絡通常在訓練過程中也可能找不到某個具體問題的解,比如在訓練過程中陷入局部最小的情況。當BP網絡在訓練過程中陷入誤差性能函數的局部最小時多層神經網絡bp算法權值更新過程,可以通過改變其初始值和經過多次訓練來獲得全局最小。
4,沒有確定隱層神經元個數的有效方法
確定多層神經網絡隱層神經元數也是一個很重要的問題,太少的神經元會導致網絡“欠適配”,太多的隱層神經元會導致“過適配”。
二,BP方法的改進。
由于在人工神經網絡中,反向傳播法占了非常重要的地位,所以最近十幾年來,許多研究人員對其做了深入的研究,提出了許多改進方法。主要目標是為了加快訓練速度、避免陷入局部最小和改善其他能力。本文主要討論前面兩種性能的改建方法。
1,附加動量法
附加動量法使網絡在修正其權值時,不僅考慮誤差在梯度上的作用,還考慮在誤差曲面上變化趨勢的影響,其作用如同一個低通濾波器,其允許網絡忽略網絡上的微小變化特性。在沒有附加動量的作用下,網絡可能陷入淺的局部極小值,利用附加動量的作用則可能劃過這些極小值。
該方法是在反向傳播法的基礎上,在每一個權值的變化上加上一項正比于前次權值變化量的值,并根據反向傳播法來產生新的權值變化。帶有附加動量因子的權值調節公式為:
其中,k為訓練次數;mc為動量因子,一般取值0.95左右。
附加動量法的實質是將最后一次權值變化的影響通過一個動量因子來傳遞。**當動量因子取值為0時,權值的變化根據梯度下降法產生;當動量因子取值為1時,新的權值變化則設置為最后一次權值的變化,而依據梯度法產生的變化部分則被忽略了。**以此方式,當增加了動量項后,促使權值的調節向著誤差曲面底部的平均方向變化,當網絡權值進入誤差曲面底部的平坦區時,δi將會變得很小,于是 :
從而防止了:Δw_ij(k)=0的出現,有助于使網絡從誤差曲面局部極小值中跳出。
根據附加動量法的設計原則,當修正的權值在誤差中導致太大的增長結果時,新的權值應該被取消而不被采用,并使動量停止下來,以使網絡不進入較大的誤差曲面;當新的誤差變化率對于其舊值超過一個事先設定的最大誤差變化率時,也得取消所計算的權值變化。 其最大誤差變化率可以是任何大于或等于1的值,典型值取1.04。所以在進行附加動量法的訓練程序設計時必須加進條件判斷以正確使用其權值修正公式。
訓練過程中對采用動量法的判斷條件是:
所有這些判斷過程的細節均包含在工具箱的函數中,只要在調用 train的算法項中選用“”即可,另外需要對 動量因子賦值:
net..mc=0.95
如果不賦值,表示函數的默認值為0.9。其他值不用賦。
【例4-36】采用附加動量法的反向傳播網絡的訓練。
源碼:
clear all;
% 初始化
P=[-6.0 -6.1 -4.1 -4.05 5.0 -5.1 6.0 6.1];
T=[0 0 0.97 0.99 0.01 0.03 1.0 1.0];
[R,Q]=size(P);
[S,Q]=size(T);
disp('The bias B is fixed at 3.0 and will not learn');
Z1=menu('Intialize Weight with:',... %作菜單
'W0=[-0.9]; B0=3;',... %按給定的初始值
'Pick Values with Mouse/Arrow Keys',... %用鼠標在圖上任點初始值
'Random Intial Condition [Default];') %隨機初始值(缺省情況)
disp('');

B0=3;
if Z1==1
W0=[-0.9];
elseif Z1==3
W0=rand(S,R);
end
% 作權值-誤差關系圖并標注初始值
% 作網絡誤差曲線圖
error1=[];
net=newcf(minmax(P),[1],{'logsig'}); %創建非線性單層網絡
net.b{1}=B0;
j=[-1:0.1:1];
for i=1:21
net.iw{1,1}=j(i);
y=sim(net,P);
err=sumsqr(y-T);
error1=[error1 err]
end
plot(j,error1) %網絡誤差曲線圖
hold on;
Z2=menu('Use momentiurn constant of:',... %作菜單

'0.0',...
'0.95 [Default]');
if Z1==2
[W0,dummy]=ginput(1);
end
disp('');
% 訓練網絡
if Z2==1
momentum=0;
else
momentum=0.95;
end
ls=[]; error=[];w=[];
max_epoch=500; err_goal=0.01;
lp.lr=0.05; lp.mc=momentum; %賦初值
err_ratio=1.04;
W=W0; B=B0;
A=logsig(W0*P+B0*ones(1,8));
E=T-A; SSE=sumsqr(E);
for epoch=1:max_epoch
if SSE
epoch=epoch-1;
break;
end
D=A.*(1-A).*E;
gW=D*P';
dw=learngdm([],[],[],[],[],[],[],gW,[],[],lp,ls); %權值的增量
ls.dw=dw; %賦學習狀態中的權值增量
TW=W+dw; %變化后的權值
TA=logsig(TW*P+B*ones(1,8));
TE=T-TA; TSSE=sumsqr(TE); %求輸出結果
if TSSE>SSE*err_ratio %判斷賦動量因子
mc=0;
elseif TSSE
disp('按任意鍵繼續'); pause;
figure; plot(error); %訓練誤差圖
誤差曲線如下:
可見誤差曲面上有兩個誤差最小值,左邊的是局部極小值,右邊的是全局最小值。
如果動量因子mc取值為0,網絡以純梯度法進行訓練,此時訓練結果如下:
其誤差的變化趨勢是以簡單的方式”滾到“局部極小值的底部就停止再也不動了。
當采用附加動量法之后,網絡的訓練則可以自動的避免陷入這個局部極小值。這個結果如下圖:
左邊是誤差記錄,右邊的是帶有附加動量的訓練結果。網絡的訓練誤差先是落入局部極小值,在附加動量的作用下,繼續向前產生一個正向斜率的運動,并跳出較淺的峰值,落入全局最小值。然后,仍然在附加動量的作用下,達到一定的高度后(即產生一個SSE>1.04*SSE)自動返回,并像彈子滾動一樣來回左右擺動,直至停留在最小值點上。
2,自適應學習速率
對于一個特定的問題,要選擇適當的學習速率不是一件容易的事情。通常是憑借經驗獲?。ń涷炇亲铍y的地方)多層神經網絡bp算法權值更新過程,即使這樣,訓練開始初期功效較好的學習速率,不見得對后來的訓練也合適。為了解決這一問題,人們自然回想到使網絡在訓練過程中自動調整學習速率。通常調整學習速率的準則是:檢查權值的修正值是否真正降低了誤差函數,如果的確如此,說明所選取的學習速率值小了,可以對其增加一個量;如果不是這樣,則產生了過調,那么就應該減小學習速率的值。 與采用附加動量法時的判斷條件相仿**,當新的誤差超過舊的誤差一定的倍數時,學習速率將減少;否則其學習速率保持不變;當新的誤差小于舊的誤差時,學習速率將被增加**。 此方法可以保證網絡穩定學習,使其誤差繼續下降,提高學習速率,使其以更大的學習速率進行學習。一旦學習速率調的過大,而不能保證誤差繼續減小,即應該減小學習速率,直到其學習過程穩定為止。
下式是一種自適應學習速率的調整公式:
初始學習速率η(0)的選取范圍可以有很大的隨意性。
實踐證明,采用自適應學習速率的網絡訓練次數只是固定學習速率網絡訓練次數的幾十分之一,所以具有自適應學習速率的網絡訓練是極有效的訓練方法。
3,彈性BP算法
BP網絡通常采用S型激活函數的隱含層。S型函數常被稱為”壓扁“函數它把一個無限的輸入范圍壓縮到 一個有限的輸出范圍。其特點是當輸入很大時,斜率接近0,這將導致算法中的梯度幅值很小,可能使得對網絡權值的修正過程幾乎 停頓下來。
彈性BP算法只取偏導數的符號,而不考慮偏導數的幅值。偏導數的符號決定權值更新的方向 ,而權值變化的大小由一個獨立的”更新值“確定。如如果在兩次連續的迭代中,目標 函數對某個權值的偏導數的符號不變號,則增大相應的”更新值“(如在前一次”更新值“的基礎上乘以1.3);若變號,則減少相應的“更新值”(如在前一次“更新值”的基礎上乘以0.5)。
**在彈性BP算法中,當訓練發生振蕩時,權值的變化量將會減少;當在幾次迭代過程中權值都朝一個方向變化時,權值的變化量將增大。**因此,一般來說,彈性BP算法的收斂速度要比前述幾種方法快得多,而且算法也不復雜,更不需要消耗更多的內存。
上述三種改進算法的存取量要求相差不大,各個算法的收斂速度依次加快,其中彈性BP收斂速度遠遠大于前面兩者。大量實際應用已經證明彈性BP算法非常有效。因此,在實際應用的網絡訓練中,當采用附加動量法乃至可變學習速率的BP算法仍然達不到訓練要求時,可以采用彈性BP算法。