學習是神經網絡一種最重要也最令人注目的特點。在神經網絡的發展程序中,學習算法的研究有着十分重要的地位。目前,人們所提出的神經網絡模型都是和學習算 法相應的。是以,有時人們并不去祈求對模型和算法進行嚴格的定義或區分。有的模型可以有多種算法.而有的算法可能可用于多種模型。不過,有時人們也稱算法 為模型。
自從40年代Hebb提出的學習規則以來,人們相繼提出了各種各樣的學習算法。其中以在1986年Rumelhart等提出的誤差反向傳播法,即BP(error BackPropagation)法影響最為廣泛。直到今天,BP算法仍然是自動控制上最重要、應用最多的有效算法。
1.2.1 神經網絡的學習機理和機構
在神經網絡中,對外部環境提供的模式樣本進行學習訓練,并能存儲這種模式,則稱為感覺器;對外部環境有适應能力,能自動提取外部環境變化特征,則稱為認知器。
神經網絡在學習中,一般分為有教師和無教師學習兩種。感覺器采用有教師信号進行學習,而認知器則采用無教師信号學習的。在主要神經網絡如BP網 絡,Hopfield網絡,ART網絡和Kohonen網絡中;BP網絡和Hopfield網絡是需要教師信号才能進行學習的;而ART網絡和 Kohonen網絡則無需教師信号就可以學習。所謂教師信号,就是在神經網絡學習中由外部提供的模式樣本信号。
一、感覺器的學習結構
感覺器的學習是神經網絡最典型的學習。
目前,在控制上應用的是多層前饋網絡,這是一種感覺器模型,學習算法是BP法,故是有教師學習算法。
一個有教師的學習系統可以用圖1—7表示。這種學習系統分成三個部分:輸入部,訓練部和輸出部。
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIml2ZuITM0hmLy4CNvw1cldWYtl2Lc5kTsFGdnlGRvw1av9mQvwVSB9CXt92YukWY55mb1ZmL3d3dvw1LcpDc0RHaiojIsJye.gif)
圖1-7 神經網絡學習系統框圖
輸入部接收外來的輸入樣本X,由訓練部進行網絡的權系數W調整,然後由輸出部輸出結果。在這個過程中,期望的輸出信号可以作為教師信号輸入,由該教師信号與實際輸出進行比較,産生的誤差去控制修改權系數W。
學習機構可用圖1—8所示的結構表示。
在圖中,Xl ,X2 ,…,Xn ,是輸入樣本信号,W1 ,W2 ,…,Wn 是權系數。輸入樣本信号Xi 可以取離散值“0”或“1”。輸入樣本信号通過權系數作用,在u産生輸出結果 ∑Wi Xi ,即有:
u=∑Wi Xi =W1 X1 +W2 X2 +…+Wn Xn
再把期望輸出信号Y(t)和u進行比較,進而産生誤差信号e。即權值調整機構根據誤差e去對學習系統的權系數進行修改,修改方向應使誤差e變小,不斷進行下去,使到誤差e為零,這時實際輸出值u和期望輸出值Y(t)完全一樣,則學習過程結束。
神經網絡的學習一般需要多次重複訓練,使誤內插補點逐漸向零趨近,最後到達零。則這時才會使輸出與期望一緻。故而神經網絡的學習是消耗一定時期的,有的學習過程要重複很多次,甚至達萬次級。原因在于神經網絡的權系數W有很多分量W1 ,W2 ,----Wn ;也即是一個多參數修改系統。系統的參數的調整就必定耗時耗量。目前,提高神經網絡的學習速度,減少學習重複次數是十分重要的研究課題,也是實時控制中的關鍵問題。
二、感覺器的學習算法
感覺器是有單層計算單元的神經網絡,由線性元件及閥值元件組成。感覺器如圖1-9所示。
圖1-9 感覺器結構
感覺器的數學模型:
(1-12)
其中:f[.]是階躍函數,并且有
(1-13)
θ是閥值。
感覺器的最大作用就是可以對輸入的樣本分類,故它可作分類器,感覺器對輸入信号的分類如下:
(1-14)
即是,當感覺器的輸出為1時,輸入樣本稱為A類;輸出為-1時,輸入樣本稱為B類。從上可知感覺器的分類邊界是:
(1-15)
在輸入樣本隻有兩個分量X1,X2時,則有分類邊界條件:
(1-16)
即
W1 X1 +W2 X2 -θ=0 (1-17)
也可寫成
(1-18)
這時的分類情況如固1—10所示。
感覺器的學習算法目的在于找尋恰當的權系數w=(w1.w2,…,Wn),使系統對一個特 定的樣本x=(xt,x2,…,xn)熊産生期望值d。當x分類為A類時,期望值d=1;X為B類 時,d=-1。為了友善說明感覺器學習算法,把閥值θ 并人權系數w中,同時,樣本x也相應增加一 個分量xn+1 。故令:
Wn+1 =-θ,Xn+1 =1 (1-19)
則感覺器的輸出可表示為:
(1-20)
感覺器學習算法步驟如下:
1.對權系數w置初值
對權系數w=(W1 .W2 ,…,Wn ,Wn+1 )的各個分量置一個較小的零随機值,但Wn+1 =
—g。并記為Wl (0),W2 (0),…,Wn (0),同時有Wn+1(0)=-θ 。這裡Wi (t)為t時刻從第i個
輸入上的權系數,i=1,2,…,n。Wn+1 (t)為t時刻時的閥值。
圖1-10 感覺器的分類例子
2.輸入一樣本X=(X1 ,X2 ,…,Xn+1 )以及它的期望輸出d。
期望輸出值d在樣本的類屬不同時取值不同。如果x是A類,則取d=1,如果x是B類,則取-1。期望輸出d也即是教師信号。
3.計算實際輸出值Y
4.根據實際輸出求誤差e
e=d—Y(t) (1-21)
5.用誤差e去修改權系數
i=1,2,…,n,n+1 (1-22)
其中,η稱為權重變化率,0<η≤1
在式(1—22)中,η的取值不能太大.如果1取值太大則會影響wi (t)的穩定;的取值也不能太小,太小則會使Wi (t)的求取過程收斂速度太慢。
當實際輸出和期望值d相同時有:
Wi (t+1)=Wi (t)
6.轉到第2點,一直執行到一切樣本均穩定為止。
從上面式(1—14)可知,感覺器實質是一個分類器,它的這種分類是和二值邏輯相應的。是以,感覺器可以用于實作邏輯函數。下面對感覺器實作邏輯函數的情況作一些介紹。
例:用感覺器實作邏輯函數X1 VX2 的真值:
X1
0011
X2
0101
X1 V X2
0111
以X1VX2=1為A類,以X1VX2=0為B類,則有方程組
(1-23)
即有:
(1-24)
從式(1—24)有:
W1 ≥θ,W2 ≥θ
令 W1 =1,W2 =2
則有: θ ≤1
取 θ=0.5
則有:X1+X2-0.5=0,分類情況如圖1—11所示。
圖1-11 邏輯函數X1 VX2 的分類
1.2.2 神經網絡學習的梯度算法
從感如器的學習算法可知,學習的目的是在于修改網絡中的權系數,使到網絡對于所輸入的模式樣本能正确分類。當學習結束時,也即神經網絡能正确分類時,顯然 權系數就反映了同類輸人模式樣本的共同特征。換句話講,權系數就是存儲了的輸人模式。由于權系數是分散存在的,故神經網絡自然而然就有分布存儲的特點。
前面的感覺器的傳遞函數是階躍函數,是以,它可以用作分類器。前面一節所講的感覺器學習算法因其傳遞函數的簡單而存在局限性。
感覺器學習算法相當簡單,并且當函數線性可分時保證收斂。但它也存在問題:即函數不是線性可分時,則求不出結果;另外,不能推廣到一般前饋網絡中。
為了克服存在的問題,是以人們提出另一種算法——梯度算法(也即是LMS法)。
為了能實作梯度算法,故把神經元的激發函數改為可微分函數,例如Sigmoid函數,非對稱Sigmoid函數為f(X)=1/(1+e-x ),對稱Sigmoid函數f(X)=(1-e-x )/(1+e-x );而不采用式(1—13)的階躍函數。
對于給定的樣本集Xi (i=1,2,,n),梯度法的目的是尋找權系數W* ,使得f[W*. Xi ]與期望輸出Yi盡可能接近。
設誤差e采用下式表示:
(1-25)
其中,Yi =f〔W* ·Xi ]是對應第i個樣本Xi 的實時輸出
Yi 是對應第i個樣本Xi 的期望輸出。
要使誤差e最小,可先求取e的梯度:
(1-26)
其中:
(1-27)
令 Uk =W. Xk ,則有:
(1-28)
(1-29)
最後有按負梯度方向修改權系數W的修改規則:
(1-30)
也可寫成:
(1-31)
在上式(1—30),式(1—31)中,μ 是權重變化率,它視情況不同而取值不同,一般取0-1之間的小數。
很明顯,梯度法比原來感覺器的學習算法進了一大步。其關鍵在于兩點:
1.神經元的傳遞函數采用連續的s型函數,而不是階躍函數;
2.對權系數的修改采用誤差的梯度去控制,而不是采用誤差去控制。故而有更好的動态特能,即加強了收斂程序。
但是梯度法對于實際學習來說,仍然是感覺太慢;是以,這種算法仍然是不理想的。
1.2.3 反向傳播學習的BP算法
反向傳播算法也稱BP算法。由于這種算法在本質上是一種神經網絡學習的數學模型,是以,有時也稱為BP模型。
BP算法是為了解決多層前向神經網絡的權系數優化而提出來的;是以,BP算法也通常暗示着神經網絡的拓撲結構是一種無回報的多層前向網絡。故而.有時也稱無回報多層前向網絡為BP模型。
在這裡,并不要求過于嚴格去争論和區分算法和模型兩者的有關異同。感覺機學習算法是一種單層網絡的學習算法。在多層網絡中.它隻能改變最後權系數。是以, 感覺機學習算法不能用于多層神經網絡的學習。1986年,Rumelhart提出了反向傳播學習算法,即BP(backpropagation)算法。這 種算法可以對網絡中各層的權系數進行修正,故适用于多層網絡的學習。BP算法是目前最廣泛用的神經網絡學習算法之一,在自動控制中是最有用的學習算法。
一、BP算法的原理
BP算法是用于前饋多層網絡的學習算法,前饋多層網絡的結構一般如圖1—12所示
圖1-12 網絡學習結構
它含有輸人層、輸出層以及處于輸入輸出層之間的中間層。中間層有單層或多層,由于它們和外界沒有直接的聯系,故也稱為隐層。在隐層中的神經元也稱隐單元。 隐層雖然和外界不連接配接.但是,它們的狀态則影響輸入輸出之間的關系。這也是說,改變隐層的權系數,可以改變整個多層神經網絡的性能。
設有一個m層的神經網絡,并在輸入層加有樣本X;設第k層的i神經元的輸入總和表示為Ui k ,輸出Xi k ;從第k—1層的第j個神經元到第k層的第i個神經元的權系數為Wij 各個神經元的激發函數為f,則各個變量的關系可用下面有關數學式表示:
Xi k =f(Ui k )
(1-32)
(1-33)
反向傳播算法分二步進行,即正向傳播和反向傳播。這兩個過程的工作簡述如下。
1.正向傳播
輸入的樣本從輸入層經過隐單元一層一層進行處理,通過所有的隐層之後,則傳向輸出層;在逐層處理的過程中,每一層神經元的狀态隻對下一層神經元的狀态産生影響。在輸出層把現行輸出和期望輸出進行比較,如果現行輸出不等于期望輸出,則進入反向傳播過程。
2.反向傳播
反向傳播時,把誤差信号按原來正向傳播的通路反向傳回,并對每個隐層的各個神經元的權系數進行修改,以望誤差信号趨向最小。
二、BP算法的數學表達
BP算法實質是求取誤差函數的最小值問題。這種算法采用非線性規劃中的最速下降方法,按誤差函數的負梯度方向修改權系數。
為了說明BP算法,首先定義誤差函數e。取期望輸出和實際輸出之差的平方和為誤差函數,則有:
(1-34)
其中:Yi 是輸出單元的期望值;它也在這裡用作教師信号;
Xi m 是實際輸出;因為第m層是輸出層。
由于BP算法按誤差函數e的負梯度方向修改權系數,故權系數Wij 的修改量Awij ,和e
(1-35)
(1-36)
其中:η 為學習速率,即步長。
很明顯,根據BP算法原則,求ae/aWij 最關鍵的。下面求ae/aWij ;有
(1-37)
由于
(1-38)
故而
(1-39)
進而有
(1-40)
令
(1-41)
則有學習公式:
(1-42)
其中:η 為學習速率,即步長,一般取0-1間的數。
從上面可知,di k 實際仍末給出明顯的算法公式,下面求di k 的計算公式。
(1-43)
從式(1-32)可知在式(1-43)中,有
(1-44)
為了友善進行求導,取f為連續函數。一般取非線性連續函數,例如Sigmoid函數。當取f為非對稱Sigmoid函數時,有:
則有:f'(Ui k )=f'(Ui k )(1-f(Ui k ))
=Xi k (1-Xi k ) (1-45)
再考慮式(1—43)中的偏微分項ae/aXi k ,有兩種情況需考慮的:
如果k=m,則是輸出層,這時有Yi 是輸出期望值,它是常數。從式(1-34)有
(1-46)
進而有 di m =Xi m (1-Xi m )(Xi m -Yi )
(1-47)
2.如果k<m,則該層是隐層.這時應考慮上一層對它的作用,故有:
(1-48)
從式(1—41)中,可知有:
(1-49)
從式(1—33)中,可知有:
(1-50)
故而有
(1-51)
最後有:
(1-52)
從上述過程可知:多層網絡的訓練方法是把一個樣本加到輸入層,并根據向前傳播的規則:
Xi k =f(Ui k )
不斷一層一層向輸出層傳遞,最終在輸出層可以得到輸出Xi m 。
把Xim和期望輸出Yi進行比較.如果兩者不等,則産生誤差信号e,接着則按下面公式反向傳播修改權系數:
(1-53)
其中
di m =Xi m (1-Xi m )(Xi m -Yi )
上面公式中,求取本層di k 時,要用到高一層的di k+1 ;可見,誤差函數的求取是從輸出層開始,到輸入層的反向傳播過程。在這個過程中不斷進行遞歸求誤差。
通過多個樣本的反複訓練,同時向誤差漸漸減小的方向對權系數進行修正,以達最終消除誤差。從上面公式也可以知道,如果網絡的層數較多時,所用的計算量就相當可觀,故而收斂速度不快。
為了加快收斂速度,一般考慮上一次的權系數,并以它作為本次修正的依據之一,故而有修正公式:
(1-54)
其中:η 為學習速率,即步長,η =0.1—0.4左右
ɑ 為權系數修正常數,取0.7—0.9左右。
在上面,式(1—53)也稱為一般化的Delta法則。對于沒有隐層的神經網絡,可取
(1-55)
其中:,Yi 為期望輸出;
Xj 為輸出層的實際輸出;
Xi 為輸入層的輸入。
這顯然是一種十分簡單的情況,式(1—55)也稱為簡單Delta法則。
在實際應用中,隻有一般化的Delta法則式(1—53)或式(1—54)才有意義。簡單Delta法則式(1—55)隻在理論推導上有用。
三、BP算法的執行步驟
在反向傳播算法應用于前饋多層網絡時,采用Sigmoid為激發面數時,可用下列步驟對網絡的權系數Wij 進行遞歸求取。注意對于每層有n個神經元的時候,即有i=1,2,…,n;j=1,2,…,n。對于第k層的第i個神經元,則有n個權系數Wi1 ,Wi2 ,…,Win ,另外取多—個Win+1 用于表示閥值θi ;并且在輸入樣本X時,取x=(X1 ,X2 ,…,Xn ,1)。
算法的執行的步驟如下:
1.對權系數Wij 置初值。
對各層的權系數Wij 置一個較小的非零随機數,但其中Wi ,n+1=-θ 。
2.輸入一個樣本X=(xl ,x2 ,…,xn ,1),以及對應期望輸出Y=(Y1 ,Y2 ,…,Yn )。
3.計算各層的輸出
對于第k層第i個神經元的輸出Xi k ,有:
4.求各層的學習誤差di k
對于輸出層有k=m,有
對于其他各層,有
5.修正權系數Wij和閥值θ
用式(1—53)時有:
用式(1—54)時有:
6.當求出了各層各個權系數之後,可按給定品質名額判别是否滿足要求。如果滿足要求,則算法結束;如果未滿足要求,則傳回(3)執行。
這個學習過程,對于任一給定的樣本Xp =(Xp1 ,Xp2 ,…Xpn ,1)和期望輸出Yp =(Yp1 ,Yp2 ,…,Ypn )都要執行,直到滿足所有輸入輸出要求為止。
本文轉自程式設計小翁部落格園部落格,原文連結:http://www.cnblogs.com/wengzilin/archive/2013/04/24/3041019.html,如需轉載請自行聯系原作者