袁冰清,陸悅斌,張 杰
(國(guó)家無(wú)線電監(jiān)測(cè)中心上海監(jiān)測(cè)站,上海 201419)
2016 年3月份,以深度增強(qiáng)學(xué)習(xí)為核心技術(shù)的人工智能圍棋程序AlphaGo以4∶1擊敗了圍棋界的小李子-曾經(jīng)的圍棋第一人李世石,深度學(xué)習(xí)(Deep Learning,DL)徹底火起來(lái)。到如今人工智能(Arti fi cial Intelligence,AI)遍地開花,AI除了可以做我們熟知的人臉識(shí)別、語(yǔ)音識(shí)別之外,還可以做很多有趣的事情,只是在圖像及語(yǔ)音識(shí)別上面取得了全面的突破。目前,深度學(xué)習(xí)在算法領(lǐng)域可謂是大紅大紫,現(xiàn)在不只是互聯(lián)網(wǎng)、人工智能,生活中的各大領(lǐng)域都能反映出深度學(xué)習(xí)引領(lǐng)的巨大變革。要學(xué)習(xí)深度學(xué)習(xí),那么首先要熟悉神經(jīng)網(wǎng)絡(luò)(Neural Networks,NN)的一些基本概念。這里所說(shuō)的神經(jīng)網(wǎng)絡(luò)指的是人工神經(jīng)網(wǎng)絡(luò)(Ar tif icial Neural Networks,ANN)。神經(jīng)網(wǎng)絡(luò)最早是人工智能領(lǐng)域的一種算法或者說(shuō)是模型,目前神經(jīng)網(wǎng)絡(luò)已經(jīng)發(fā)展成為一類多學(xué)科交叉的學(xué)科領(lǐng)域,特別是隨著Hinton在深度學(xué)習(xí)上取得的進(jìn)展,神經(jīng)網(wǎng)絡(luò)再次受到人們的關(guān)注。本文以神經(jīng)網(wǎng)絡(luò)為主,介紹一些相關(guān)的基礎(chǔ)知識(shí),引出深度學(xué)習(xí)的概念。
神經(jīng)元是神經(jīng)網(wǎng)絡(luò)中最基本的結(jié)構(gòu),也是神經(jīng)網(wǎng)絡(luò)的基本單元。它的設(shè)計(jì)靈感完全來(lái)源于生物學(xué)上神經(jīng)元的信息傳播機(jī)制。我們知道一個(gè)神經(jīng)元通常由樹突、軸突,軸突末梢組成,樹突通常有多個(gè),主要用來(lái)傳遞信號(hào),而軸突只有一條,軸突尾端有很多軸突末梢可以用來(lái)給其他神經(jīng)元傳遞信息。軸突末梢跟其他神經(jīng)元的樹突產(chǎn)生連接,連接的位置在生物學(xué)上叫著突觸。神經(jīng)元有兩種狀態(tài):興奮和抑制,一般情況下,大多數(shù)的神經(jīng)元是處于抑制狀態(tài),但是一旦某個(gè)神經(jīng)元收到刺激,導(dǎo)致它的電位超過(guò)一個(gè)閾值,那么這個(gè)神經(jīng)元就會(huì)被激活,處于“興奮”狀態(tài),進(jìn)而向其他的神經(jīng)元傳播化學(xué)物質(zhì)(其實(shí)就是信息),神經(jīng)元之間的信息傳輸是通過(guò)突觸來(lái)完成的。
1943年,McCulloch和Pitts將圖1的神經(jīng)元結(jié)構(gòu)用一種簡(jiǎn)單的模型進(jìn)行了表示,構(gòu)成了一種人工神經(jīng)元模型,也就是我們現(xiàn)在經(jīng)常用到的“M-P神經(jīng)元模型”,如圖2所示:
從圖2可以看出,神經(jīng)元的輸出:
式中,θ為神經(jīng)元的激活閾值;函數(shù)f(·)也被稱為激活函數(shù);ω是權(quán)值。如圖2所示,函數(shù)f(·)可以用一個(gè)階躍方程表示,大于閾值激活;否則就抑制。但是階躍函數(shù)不光滑,不連續(xù),不可導(dǎo),因此我們更常用的方法是用sigmoid函數(shù)來(lái)表示函數(shù)f(·)。sigmoid 函數(shù)的表達(dá)式和分布圖如圖3所示:
圖1 神經(jīng)元結(jié)構(gòu)圖
圖2 M-P神經(jīng)元模型
圖3 sigmoid函數(shù)分布圖
感知機(jī)(percept ron)是由兩層神經(jīng)元組成的結(jié)構(gòu),輸入層用于接受外界輸入信號(hào),輸出層(也被稱為是感知機(jī)的功能層)就是M-P神經(jīng)元。圖4表示了一個(gè)輸入層具有三個(gè)神經(jīng)元(分別表示為x0,x1,x2)的感知機(jī)結(jié)構(gòu):
由圖4可知,感知機(jī)模型可表示為:
式中,ω為感知機(jī)輸入層到輸出成的權(quán)重;b代表輸出層的偏置。實(shí)際上由于它只有一層功能神經(jīng)元,所以學(xué)習(xí)能力非常有限,事實(shí)也證明,單層感知機(jī)無(wú)法解決最簡(jiǎn)單的非線性可分問題,而我們?nèi)粘I钪写蠖鄶?shù)問題都是非線性可分的。既然單層感知機(jī)解決不了,我們就采用多層感知機(jī),試驗(yàn)證明多層感知機(jī)確實(shí)能很好地解決非線性可分問題,我們通常將多層感知機(jī)這樣的多層結(jié)構(gòu)稱之為神經(jīng)網(wǎng)絡(luò)。但是在解決實(shí)際問題時(shí),我們往往要構(gòu)建多層網(wǎng)絡(luò),而對(duì)于多層網(wǎng)絡(luò)采用什么樣的學(xué)習(xí)方法又是一項(xiàng)巨大的挑戰(zhàn),如圖5所示的具有4層隱含層的網(wǎng)絡(luò)結(jié)構(gòu)至少有33個(gè)參數(shù)(神經(jīng)元之間的輸入x與權(quán)重ω,不計(jì)偏置b),我們?nèi)绾蔚玫阶顑?yōu)化的參數(shù),涉及到圖5的算法。
圖4 M-P結(jié)構(gòu)
圖5 4層隱含層神經(jīng)網(wǎng)絡(luò)參數(shù)
所謂神經(jīng)網(wǎng)絡(luò)的訓(xùn)練或者是學(xué)習(xí),其主要目的在于通過(guò)學(xué)習(xí)算法得到神經(jīng)網(wǎng)絡(luò)解決指定問題所需的參數(shù),這里的參數(shù)包括各層神經(jīng)元之間的連接權(quán)重以及偏置等。我們通常是根據(jù)實(shí)際問題來(lái)構(gòu)造出網(wǎng)絡(luò)結(jié)構(gòu),參數(shù)的確定則需要神經(jīng)網(wǎng)絡(luò)通過(guò)訓(xùn)練樣本和學(xué)習(xí)算法來(lái)迭代找到最優(yōu)參數(shù)組。說(shuō)起神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)算法,不得不提其中最杰出、最成功的代表—誤差逆?zhèn)鞑ィ‥rror Back Propagation,BP)算法。BP學(xué)習(xí)算法通常用在最為廣泛使用的多層前饋神經(jīng)網(wǎng)絡(luò)中。
BP算法的主要流程可以總結(jié)如下:以有監(jiān)督的BP模型為例:首先我們有一個(gè)訓(xùn)練集D,它包括了輸入xk、與被期望輸出的yk,即D=(xk,yk);學(xué)習(xí)過(guò)程:
⊙ 在(0,1)范圍內(nèi)隨機(jī)初始化網(wǎng)絡(luò)中所有連接權(quán)和閾值。
⊙ 對(duì)所有的(xk,yk)∈D,根據(jù)當(dāng)前參數(shù)計(jì)算當(dāng)前樣本的輸出。
⊙ 計(jì)算輸出層神經(jīng)元的梯度項(xiàng)。
⊙ 計(jì)算隱含層神經(jīng)元的梯度項(xiàng)。
⊙ 更新連接權(quán)與閾值。
⊙ 循環(huán),直到達(dá)到條件(與期望值誤差最小)。
⊙ 最后確定神經(jīng)網(wǎng)絡(luò)的連接權(quán)和閾值。
神經(jīng)網(wǎng)絡(luò)的種類越來(lái)越多,可以根據(jù)實(shí)際的應(yīng)用選擇合適的神經(jīng)網(wǎng)絡(luò)模型,比如上面介紹的一些簡(jiǎn)單的神經(jīng)網(wǎng)絡(luò)模型如:感知機(jī)、BP神經(jīng)網(wǎng)絡(luò)。下面再簡(jiǎn)單介紹幾類常用的神經(jīng)網(wǎng)絡(luò)模型。
RBF(Radial Basis Function)徑向基函數(shù)網(wǎng)絡(luò)是一種單隱藏層前饋神經(jīng)網(wǎng)絡(luò),它使用徑向基函數(shù)作為神經(jīng)元激活函數(shù),而輸出層則是對(duì)隱藏層神經(jīng)元輸出的線性組合,如圖6所示。
由于網(wǎng)絡(luò)的輸出層對(duì)隱含層的線性加權(quán),使得網(wǎng)絡(luò)避免了像BP神經(jīng)網(wǎng)絡(luò)反向傳播那樣繁瑣的計(jì)算,從而使網(wǎng)絡(luò)具有較快的運(yùn)算速度和較強(qiáng)的非線性映射能力。
圖6 RBF神經(jīng)網(wǎng)絡(luò)模型
卷積神經(jīng)網(wǎng)絡(luò)主要用于處理圖像數(shù)據(jù),但可用于其他形式數(shù)據(jù)的處理,如語(yǔ)音數(shù)據(jù)。一個(gè)典型的應(yīng)用就是給它輸入一個(gè)圖形,然后它給出一個(gè)分類結(jié)果。
圖7 CNN神經(jīng)網(wǎng)絡(luò)模型
與前饋神經(jīng)網(wǎng)絡(luò)不同,遞歸神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Networks,RNN)允許網(wǎng)絡(luò)中出現(xiàn)環(huán)形結(jié)構(gòu),從而可以讓一些神經(jīng)元的輸出反饋回來(lái)作為輸入信號(hào),這樣的結(jié)構(gòu)與信息反饋過(guò)程,使得網(wǎng)絡(luò)在t時(shí)刻的輸出狀態(tài)不僅與t時(shí)刻的輸入有關(guān),還與t-1時(shí)刻的網(wǎng)絡(luò)狀態(tài)有關(guān),從而能處理與時(shí)間有關(guān)的動(dòng)態(tài)變化RNN一般的訓(xùn)練算法采用推廣的BP算法。從某種意義上來(lái)講,RNN被視為是時(shí)間深度上的深度學(xué)習(xí)也未嘗不對(duì)。所以RNN是推測(cè)和補(bǔ)全信息很好的選擇。RNN在(t+1)時(shí)刻網(wǎng)絡(luò)的結(jié)果Out(t+1)是該時(shí)刻輸入和所有歷史共同作用的結(jié)果,但是“梯度發(fā)散”同樣也會(huì)發(fā)生在時(shí)間軸上,也就是說(shuō)對(duì)于t時(shí)刻來(lái)說(shuō),它產(chǎn)生的梯度在時(shí)間軸上向歷史傳播幾層之后就消失了,根本無(wú)法影響太遙遠(yuǎn)的過(guò)去。在實(shí)際中,這種影響也就只能維持若干個(gè)時(shí)間戳而已。換句話說(shuō),后面時(shí)間步的錯(cuò)誤信號(hào),往往并不能回到足夠遠(yuǎn)的過(guò)去,像更早的時(shí)間步一樣,去影響網(wǎng)絡(luò),這使它很難以學(xué)習(xí)遠(yuǎn)距離的影響。
圖8 RNN神經(jīng)網(wǎng)絡(luò)模型
為了解決上述時(shí)間軸上的梯度發(fā)散,機(jī)器學(xué)習(xí)領(lǐng)域發(fā)展出了長(zhǎng)短時(shí)記憶單元(Long-Short Term Memory,LSTM),通過(guò)門的開關(guān)實(shí)現(xiàn)時(shí)間上的記憶功能,并防止梯度發(fā)散。其實(shí)除了學(xué)習(xí)歷史信息,RNN和LSTM還可以被設(shè)計(jì)成為雙向結(jié)構(gòu),即雙向RNN、雙向LSTM,同時(shí)利用歷史和未來(lái)的信息。
深度學(xué)習(xí)指的是深度神經(jīng)網(wǎng)絡(luò)模型,一般指網(wǎng)絡(luò)層數(shù)在三層或者三層以上的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)。理論上而言,參數(shù)越多的模型復(fù)雜度越高,“容量”也就越大,也就意味著它能完成更復(fù)雜的學(xué)習(xí)任務(wù)。就像前面多層感知機(jī)帶給我們的啟示一樣,神經(jīng)網(wǎng)絡(luò)的層數(shù)直接決定了它對(duì)現(xiàn)實(shí)的刻畫能力。但是在一般情況下,復(fù)雜模型的訓(xùn)練效率低,易陷入過(guò)擬合,因此難以受到人們的青睞。具體來(lái)講就是,隨著神經(jīng)網(wǎng)絡(luò)層數(shù)的加深,優(yōu)化函數(shù)越來(lái)越容易陷入局部最優(yōu)解(即過(guò)擬合,在訓(xùn)練樣本上有很好的擬合效果,但是在測(cè)試集上效果很差)。同時(shí),不可忽略的一個(gè)問題是隨著網(wǎng)絡(luò)層數(shù)增加,“梯度消失”(或者說(shuō)是梯度發(fā)散diverge)現(xiàn)象更加嚴(yán)重。我們經(jīng)常使用sigmoid函數(shù)作為隱含層的功能神經(jīng)元,對(duì)于幅度為1的信號(hào),在BP反向傳播梯度時(shí),每傳遞一層,梯度衰減為原來(lái)的0.25。層數(shù)一多,梯度指數(shù)衰減后低層基本接收不到有效的訓(xùn)練信號(hào)。
為了解決深層神經(jīng)網(wǎng)絡(luò)的訓(xùn)練問題,其中一種有效的手段就是采取無(wú)監(jiān)督逐層訓(xùn)練,基本思路就是每次訓(xùn)練一層隱節(jié)點(diǎn),訓(xùn)練時(shí)將上一層隱節(jié)點(diǎn)的輸出作為輸入,本層隱節(jié)點(diǎn)的輸出作為下一層的輸入,這種訓(xùn)練被稱為“預(yù)訓(xùn)練”;在預(yù)訓(xùn)練完成后,再對(duì)整個(gè)網(wǎng)絡(luò)進(jìn)行“微調(diào)”。事實(shí)上,“預(yù)訓(xùn)練”+“微調(diào)”的訓(xùn)練方式是將大量參數(shù)分組,對(duì)每組先找到局部看起來(lái)較好的設(shè)置,然后再基于這些局部較優(yōu)的結(jié)果聯(lián)合起來(lái)進(jìn)行全局尋優(yōu),這樣就有效地節(jié)省了訓(xùn)練開銷。
通過(guò)上述文章的簡(jiǎn)單介紹,我們對(duì)神經(jīng)網(wǎng)絡(luò)及深度學(xué)習(xí)有了一定的了解,因此我們希望能建立一些能工作的深度學(xué)習(xí)系統(tǒng)來(lái)解決無(wú)線電監(jiān)測(cè)工作中的一些問題。
[1] 趙申劍,黎彧君,符天凡,李凱譯.深度學(xué)習(xí)[M].北京:人民郵電出版社,2017.
[2] Poll的筆記.https://www.zhihu.com/question/34681168.
[3] 知乎 .https://www.zhihu.com/question/34681168.