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