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