袁冰清,程 功,鄭柳剛
(國家無線電監(jiān)測(cè)中心上海監(jiān)測(cè)站,上海 201419)
機(jī)器學(xué)習(xí)中,神經(jīng)網(wǎng)絡(luò)算法可以說是當(dāng)下使用最廣泛的算法。神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)模仿生物神經(jīng)網(wǎng)絡(luò),生物神經(jīng)網(wǎng)絡(luò)中的每個(gè)神經(jīng)元與其他神經(jīng)元相連,當(dāng)它“興奮”時(shí),向下一級(jí)相連的神經(jīng)元發(fā)送化學(xué)物質(zhì),改變這些神經(jīng)元的電位;如果某神經(jīng)元的電位超過一個(gè)閾值,則被激活,否則不被激活。其中誤差逆?zhèn)鞑ィ╡rror BackPropagation)算法是神經(jīng)網(wǎng)絡(luò)中最有代表性的算法,也是迄今為止使用最多、最成功的算法。
誤差逆?zhèn)鞑ニ惴?,簡稱BP網(wǎng)絡(luò)算法,而一般說到BP網(wǎng)絡(luò)算法時(shí),默認(rèn)指用BP算法訓(xùn)練的多層前饋神經(jīng)網(wǎng)絡(luò)。BP神經(jīng)網(wǎng)絡(luò)模型的拓?fù)浣Y(jié)構(gòu)包括輸入層(input)、隱含層(hide layer)和輸出層(Output layer)。本文就以最簡單的BP神經(jīng)網(wǎng)絡(luò),只包含一層隱含層為例來推導(dǎo)理解BP原理。
我們知道在神經(jīng)網(wǎng)絡(luò)信號(hào)的正向傳(forward-propagation)中,神經(jīng)元接收到來自其他神經(jīng)元的輸入信號(hào),這些信號(hào)乘以權(quán)重累加到神經(jīng)元接收的總輸入值上,隨后與當(dāng)前神經(jīng)元的閾值進(jìn)行比較,然后通過激活函數(shù)處理,產(chǎn)生神經(jīng)元的輸出。理想的激活函數(shù)是階躍函數(shù):,“0”對(duì)應(yīng)神經(jīng)元抑制,“1”對(duì)應(yīng)神經(jīng)元興奮。然而階躍函數(shù)的缺點(diǎn)是不連續(xù),不可導(dǎo),所用常用sigmoid函數(shù):,sigmoid函數(shù)及其導(dǎo)數(shù)如圖1所示。使用sigmoid函數(shù)作為激活函數(shù)時(shí)BP網(wǎng)絡(luò)輸入與輸出關(guān)系:
圖1 sigmoid函數(shù)及其導(dǎo)數(shù)
因此BP的核心思想就是:通過調(diào)整各神經(jīng)元之間的權(quán)值,將誤差由隱含層向輸入層逐層反傳,也就是先實(shí)現(xiàn)信號(hào)的正向傳播到誤差的反向傳播過程。所以BP算法的核心步驟如下:
(1)求得在特定輸入下實(shí)際輸出與理想輸出的平方誤差函數(shù)(誤差函數(shù)或者叫代價(jià)函數(shù))。(2)利用誤差函數(shù)對(duì)神經(jīng)網(wǎng)絡(luò)中的閾值以及連接權(quán)值進(jìn)行求導(dǎo),求導(dǎo)原則就是導(dǎo)數(shù)的“鏈?zhǔn)角髮?dǎo)”法則。(3)根據(jù)梯度下降算法,對(duì)極小值進(jìn)行逼近,當(dāng)滿足條件時(shí),跳出循環(huán)。
有監(jiān)督的BP模型訓(xùn)練表示我們有一個(gè)訓(xùn)練集,它包括了:input X和它被期望擁有的輸出output Y。所以對(duì)于當(dāng)前的一個(gè)BP模型,我們能夠獲得它針對(duì)于訓(xùn)練集的誤差。正向傳播:輸入樣本—輸入層—各隱層—輸出層;若輸出層的實(shí)際輸出與期望的輸出不符,則誤差反傳:誤差表示—修正各層神經(jīng)元的權(quán)值;直到網(wǎng)絡(luò)輸出的誤差減少到可以接受的程度,或者進(jìn)行到預(yù)先設(shè)定的學(xué)習(xí)次數(shù)為止。
以最簡單的BP神經(jīng)網(wǎng)絡(luò)為例來推導(dǎo)原理,如圖2所示:假設(shè)網(wǎng)絡(luò)結(jié)構(gòu)輸入層有n個(gè)神經(jīng)元,隱含層有p個(gè)神經(jīng)元,輸出層有q個(gè)神經(jīng)元。
圖2 BP網(wǎng)絡(luò)結(jié)構(gòu)圖
定義變量如下:
輸入向量 :x=(x1,x2,…,xn)
隱含層輸入向量:hi=(hi1,hi2,…,hip)
隱含層輸出向量:ho=(ho1,ho2,…,hop)
輸出層輸入向量:yi=(yi1,yi2,…,yiq)
輸出層輸出向量:yo=(yo1,yo2,…,yoq)
期望輸出向量:d=(d1,d2,…,dq)
輸入層與中間層的連接權(quán)值:wih
隱含層與輸出層的連續(xù)權(quán)值:who
隱含層各神經(jīng)元的閾值:bh
輸出層各神經(jīng)元的閾值:bo
樣本數(shù)據(jù)個(gè)數(shù):k=1,2…m
激活函數(shù) :f(.)
第一步,網(wǎng)絡(luò)初始化-給各連接值分別賦值,在區(qū)間(-1,1)內(nèi)的隨機(jī)數(shù),設(shè)定誤差函數(shù)e,給定計(jì)算精度值ε和最大學(xué)習(xí)次數(shù)M。
第二步,隨機(jī)選取第K個(gè)輸入樣本及對(duì)應(yīng)期望輸出:
第三步,計(jì)算隱含層各個(gè)神經(jīng)元的輸入和輸出:
第四步,利用網(wǎng)絡(luò)期望輸出和實(shí)際輸出,計(jì)算誤差函數(shù)對(duì)輸出層的各神經(jīng)元的偏導(dǎo)數(shù)根據(jù)復(fù)合函數(shù)求導(dǎo)法則:
第六步,利用輸出層各神經(jīng)元的δo(k)和隱含層各神經(jīng)元的輸出來修正連接權(quán)值who(k):
第七步,利用隱含層各神經(jīng)元的δh(k)和輸入層各神經(jīng)元的輸入修正連接權(quán)值。
特別說明,最終公式中的μ、η代表學(xué)習(xí)率,為了調(diào)整步長,防止數(shù)值過大造成不收斂,無限逼近最優(yōu)解。
第八步,計(jì)算全局誤差:
第九步,判斷網(wǎng)絡(luò)誤差是否滿足要求,當(dāng)誤差達(dá)到預(yù)設(shè)精度或者學(xué)習(xí)次數(shù)大于設(shè)定的最大次數(shù),則結(jié)束算法。否則,選取下一個(gè)學(xué)習(xí)樣本及對(duì)應(yīng)的期望輸出,返回到第三步,進(jìn)入下一輪學(xué)習(xí)。
實(shí)際上BP算法的最終目的是找到最優(yōu)解,即是累積誤差最小的解。通過算法的優(yōu)化,可以找到最優(yōu)解,在機(jī)器學(xué)習(xí)中最常用的優(yōu)化算法就是梯度下降法。但是在實(shí)際過程中,會(huì)出現(xiàn)多個(gè)局部最優(yōu)解(對(duì)應(yīng)梯度為零的地方),如圖3展示的可視化圖形中,有一個(gè)局部最優(yōu)解,一個(gè)全局最優(yōu)解。通常情況下找不到全局最優(yōu)解,能找到局部最優(yōu)解也不錯(cuò),也足夠優(yōu)秀地完成任務(wù)。
圖3 全局最小與局部極小
通過上述文章對(duì)BP算法的理論推導(dǎo),我們對(duì)神經(jīng)網(wǎng)絡(luò)的參數(shù)及優(yōu)化有了一定的了解,希望能給利用神經(jīng)網(wǎng)絡(luò)或者深度學(xué)習(xí)算法解決無線電監(jiān)測(cè)工作中的問題的同事提供一點(diǎn)思路與想法。■