胡越,羅東陽,花奎,路海明,張學工,3
(1. 清華大學 自動化系,北京 100084; 2. 清華大學 信息技術(shù)研究院,北京 100084; 3. 清華大學 生命學院,北京100084)
從現(xiàn)象中發(fā)現(xiàn)規(guī)律,是人類智能最核心的能力之一,人們也很早就開始研究如何用數(shù)學方法來分析數(shù)據(jù)中的規(guī)律。從1930年Fisher線性判別和1950年感知器算法開始,誕生了模式識別學科,研究從數(shù)據(jù)中學習分類信息的數(shù)學方法,形成了最早的機器學習研究。“機器學習”這個術(shù)語也是20世紀50年代末提出來的,最初并不專指從數(shù)據(jù)中學習,更多地包括了機器推理等經(jīng)典人工智能問題,直到20世紀后期才逐漸被用來專指從數(shù)據(jù)中學習。現(xiàn)在,這2個術(shù)語的含義已經(jīng)非常接近,模式識別專指對數(shù)據(jù)的分類,機器學習則指學習數(shù)據(jù)中的各種規(guī)律尤其是分類規(guī)律,而“深度學習”是機器學習中最新發(fā)展起來的一類方法的總稱。
很多模式識別方法和統(tǒng)計學習方法,如線性判別、近鄰法、羅杰斯特回歸、決策樹、支持向量機等,已經(jīng)在很廣泛的問題上取得了成功,如廣告點擊率預測[1-3]、希格斯子信號識別[4]、基于基因表達的疾病分型[5-6]等。這些統(tǒng)計學習方法往往直接根據(jù)特征對樣本進行分類,不進行特征變換或只進行一次特征變換或選擇。與深度學習方法相比,這些方法中特征變換較少,或者依賴于上游處理來對特征進行變換,所以被有些人稱作“淺層模型”或“淺層學習方法”。
這些淺層模型在很多應用上取得了成功,但是也存在很大局限,即模型的效果非常依賴于上游提供的特征。一方面,構(gòu)造特征的過程是很困難的,需要對問題有豐富的先驗知識,對原始數(shù)據(jù)詳盡地了解;另一方面,在先驗知識不充分的情況下,需要人為構(gòu)建的特征數(shù)目龐大,如某些廣告點擊率預測算法中人工構(gòu)造的特征維數(shù)高達數(shù)億維[1,7]。
深度學習是一種深層的機器學習模型,其深度體現(xiàn)在對特征的多次變換上。常用的深度學習模型為多層神經(jīng)網(wǎng)絡,神經(jīng)網(wǎng)絡的每一層都將輸入非線性映射,通過多層非線性映射的堆疊,可以在深層神經(jīng)網(wǎng)絡中計算出非常抽象的特征來幫助分類。比如:在用于圖像分析的卷積神經(jīng)網(wǎng)絡中,將原始圖像的像素值直接輸入,第一層神經(jīng)網(wǎng)絡可以視作邊緣的檢測器,而第二層神經(jīng)網(wǎng)絡則可以檢測邊緣的組合,得到一些基本模塊,第三層之后的一些網(wǎng)絡會將這些基本模塊進行組合,最終檢測出待識別目標。深度學習的出現(xiàn)使得人們在很多應用中不再需要單獨對特征進行選擇與變換,而是將原始數(shù)據(jù)輸入到模型中,由模型通過學習給出適合分類的特征表示。
當前,深度學習是機器學習領域最熱門的分支,并且有多個高度集成化的方法平臺可以讓使用者無需對方法原理充分了解就可以搭建程序進行實驗和應用。本文嘗試結(jié)合筆者的理解對最典型的深度學習方法原理進行綜述,對深度學習與以往機器學習方法的關系進行討論,并對未來需要研究的問題進行展望。
深度學習的基礎是人工神經(jīng)網(wǎng)絡,其發(fā)展經(jīng)歷了3次大的起伏。1943年,受生物神經(jīng)元工作模式的啟發(fā),心理學家McCulloch和數(shù)學家Pitts發(fā)表了神經(jīng)元的數(shù)學模型[8]。1949年,Hebb[9]提出神經(jīng)元上連接的強度可以通過訓練調(diào)整的思想。1957年,Rosenblatt[10]提出感知器(perceptron)的概念和模型,提出了用數(shù)據(jù)訓練其參數(shù)的算法并用當時的電子管硬件實現(xiàn),成為第一個可學習的機器。這些工作構(gòu)成了后來人工神經(jīng)網(wǎng)絡的基礎,當時的感知器模型只有一層,1969年Minsky等[11]指出感知器模型無法學習如異或這樣的非線性關系,雖然可以通過試湊多個感知器模型的疊加來實現(xiàn)非線性分類,但對這種多個感知器構(gòu)成的模型如何構(gòu)造和如何訓練其參數(shù)難以解決。而在同一時期,1956年夏天在Dartmouth召開的暑期研討會發(fā)起了以符號主義和知識推理為核心的人工智能(AI)研究,也就是經(jīng)典AI研究,伴隨著這一時期經(jīng)典AI的快速發(fā)展[12-13],人工神經(jīng)網(wǎng)絡尚在萌芽階段(當時還未出現(xiàn)“人工神經(jīng)網(wǎng)絡”這個術(shù)語)就進入了第一次低谷。
人工神經(jīng)網(wǎng)絡(artificial neural networks,ANN)這一術(shù)語被廣泛使用是在20世紀80年代,并很快被簡稱為神經(jīng)網(wǎng)絡(neural networks,NN)。1982年,Hopfield等[14]提出了一個具有完整理論基礎的神經(jīng)網(wǎng)絡模型。20世紀80年代中期,反向傳播(back-propagation,BP)算法被應用于訓練神經(jīng)網(wǎng)絡[15-18],解決了多層感知器無法訓練的問題,從而使神經(jīng)網(wǎng)絡具有了非線性表示能力,以BP算法訓練的多層感知器(multi-layer perceptron,MLP)成為最成功的神經(jīng)網(wǎng)絡模型。同期,Kohonen[19]發(fā)展了自組織映射(self-organizing map,SOM)競爭學習神經(jīng)網(wǎng)絡模型。這些方法在很多模式識別問題上取得了很好的效果,掀起了神經(jīng)網(wǎng)絡研究真正的高潮,現(xiàn)在人們通常稱之為神經(jīng)網(wǎng)絡研究的第二次高潮。限制性玻耳茲曼機(restrictive Boltzman machine,RBM)等非監(jiān)督學習模型也是在這一時期被提出來的[20]。
但神經(jīng)網(wǎng)絡方法也存在很多問題。首先,多層感知器雖然具有極強的非線性表示能力,但也因此導致參數(shù)解空間中存在大量的局部極值,使用梯度下降法進行訓練很容易產(chǎn)生一個并不好的局部極小值,導致多層感知器在很多問題上推廣能力較差。其次,雖然神經(jīng)網(wǎng)絡在理論上可以有很多層,但多層神經(jīng)網(wǎng)絡訓練速度很慢,這既是因為當時的硬件條件限制,也是因為多層神經(jīng)網(wǎng)絡存在梯度消散現(xiàn)象,即誤差在反向傳播過程中會迅速衰減,導致對深層網(wǎng)絡權(quán)值的修正非常緩慢,因此人們實際上只使用二層或三層的神經(jīng)網(wǎng)絡。對這些問題缺乏如何解決或如何避免的理論指導,實際應用中多靠試算和經(jīng)驗,限制了神經(jīng)網(wǎng)絡的進一步發(fā)展,使神經(jīng)網(wǎng)絡研究走向低谷。
與此同時,基于20世紀70年代在蘇聯(lián)開展的統(tǒng)計學習理論研究基礎,Vapnik等[21-22]在1992—1995年發(fā)明了支持向量機(support vector machines,SVM)方法,該方法在小樣本下有較好的推廣能力,幾乎不需要調(diào)參,算法復雜度不依賴于樣本維數(shù),再加上有著較強的理論基礎支持,迅速成為機器學習研究的主流方向[23],在機器學習研究中掀起了SVM熱潮,同時人們對神經(jīng)網(wǎng)絡的研究迅速降溫。
神經(jīng)網(wǎng)絡的再次崛起開始于2006年,Hinton等[24]提出了深度置信網(wǎng)絡(deep belief network,DBN)及限制性波耳茲曼機(RBM)的訓練算法,并將該方法應用于手寫字符的識別,取得了很好的效果。文獻[24]提出,先使用非監(jiān)督學習方法逐層初始化參數(shù),再使用監(jiān)督學習方法微調(diào)整個網(wǎng)絡的訓練方法,有效解決了深層神經(jīng)網(wǎng)絡學習的問題。這樣的訓練方法能夠?qū)⑸窠?jīng)網(wǎng)絡放在一個較好的初始值上,容易收斂到較好的局部極值。之后的幾年中,深度神經(jīng)網(wǎng)絡蓬勃發(fā)展,并被一般化為“深度學習”,許多深度學習的訓練技巧被提出來,比如參數(shù)的初始化方法、新型激活函數(shù)、Dropout(舍棄)訓練方法等,這些技巧較好地解決了當結(jié)構(gòu)復雜時傳統(tǒng)神經(jīng)網(wǎng)絡存在的過擬合、訓練難的問題。與此同時,計算機和互聯(lián)網(wǎng)的發(fā)展也使得在諸如圖像識別這樣的問題中可以積累前所未有的大量數(shù)據(jù)對神經(jīng)網(wǎng)絡進行訓練。2012年的ImageNet競賽中,Krizhevsky等[25]使用卷積神經(jīng)網(wǎng)絡使準確率提升了10%,第一次顯著地超過了手工設計特征加淺層模型進行學習的模式,在業(yè)界掀起了深度學習的熱潮。2015年,Google旗下DeepMind公司研發(fā)的AlphaGo使用深度學習方法在圍棋比賽中擊敗了歐洲圍棋冠軍[26],使得深度學習影響日益廣泛。有人把當前深度學習的大發(fā)展稱作人工智能的第3次熱潮。
深度學習現(xiàn)在已經(jīng)用來泛指各種基于多層網(wǎng)絡結(jié)構(gòu)的機器學習模型,通過多層模型可以實現(xiàn)更復雜的函數(shù)關系。與淺層模型相比,深度學習直接把原始觀測數(shù)據(jù)作為輸入,通過多層模型進行逐級特征提取與變換,實現(xiàn)更有效的特征表示。在此基礎上,往往在最后一級連接一個淺層模型,如Softmax分類器、MLP神經(jīng)網(wǎng)絡、SVM等,實現(xiàn)更好的分類性能。在這個意義上,深度學習方法不能簡單地看作取代了以往的淺層學習方法,而是在原有各種方法基礎上的集成與發(fā)展。
從以上回顧可以看到,所謂人工智能3次浪潮的說法并不十分嚴格。在1957年提出人工智能(AI)這個術(shù)語的時候,其含義并非指現(xiàn)在人們熱議的機器學習,而是以符號主義、知識工程等為核心的狹義的AI。這種狹義的AI研究在20世紀80年代走入低谷,但伴隨著的是神經(jīng)網(wǎng)絡熱潮的出現(xiàn),而與20世紀90年代神經(jīng)網(wǎng)絡逐漸降溫同時出現(xiàn)的是SVM熱潮,這一熱潮一直持續(xù)到2010年前后,深度學習掀起了新的熱潮。與以往的熱潮不同,這一新的熱潮并沒有導致傳統(tǒng)淺層機器學習方法和狹義AI研究更加低落,而是帶動了幾乎所有機器學習相關的研究。同時,人們開始正式把基于數(shù)據(jù)的機器學習納入到人工智能范疇,并使機器學習走到了人工智能的最核心。從這個意義上看,這種人工智能研究從20世紀三四十年代就已經(jīng)開始了,隨后陸續(xù)出現(xiàn)了感知器、符號主義與機器推理、神經(jīng)網(wǎng)絡、支持向量機、深度學習等多個研究熱潮,并未陷入低谷,當前熱潮的最大特點是業(yè)外人士對人工智能的關注達到了前所未有的程度。
深度學習最常用于各種監(jiān)督模式識別問題,比如圖像識別、自然語言識別等。在討論深度學習的典型模型之前,我們先來討論作為各種深度學習模型和算法共同基礎的核心學習算法。一般地,深度神經(jīng)網(wǎng)絡包含輸入層、多個隱含層以及輸出層,傳統(tǒng)多層感知器神經(jīng)網(wǎng)絡訓練的反向傳播(BP)算法仍然是深度神經(jīng)網(wǎng)絡訓練的核心算法,它包括信息的前向傳播過程和誤差梯度的反向傳播過程。
多層感知器的基本結(jié)構(gòu)如圖1所示,每層都包含若干節(jié)點,I是輸入層節(jié)點個數(shù),H1和H2是2個隱含層的節(jié)點個數(shù),O是輸出層的節(jié)點個數(shù),ωij、 ωjk、 ωkl是各層之間的連接權(quán)重, bj、 bk、 bl是各層的偏置, zj、 zk、zl是節(jié)點的輸入與偏置的總和,yj、 yk、 yl是對 zj、 zk、 zl進行sigmoid函數(shù)運算后的輸出。連接的權(quán)重為待訓練參數(shù),通過反向傳播過程進行訓練調(diào)整。
圖 1 多層感知器前向傳播與反向傳播過程Fig. 1 Processes of forward propagation and back propagation of multilayer perceptron
圖1(a)示意了信號在網(wǎng)絡中前向傳播的過程,每個節(jié)點中都包含2步操作,先對上一層節(jié)點輸出值進行線性組合,再對得到的中間值進行非線性變換后輸出。對于1個輸入樣本,經(jīng)過上述2步操作可以得到第1層隱含節(jié)點的輸出值,隱含節(jié)點輸出值就是特征的某種抽象表示,可以重復這個過程得到更深層次的隱含節(jié)點值,越深層次的隱含節(jié)點所表示的特征越抽象,對于最后一層隱含節(jié)點,可以連接到輸出層中進行分類并輸出。實驗表明,將神經(jīng)網(wǎng)絡視作特征提取器,將最后一層特征輸入到如SVM等其他分類器中,也能獲得很好的分類效果[27]。網(wǎng)絡輸出的分類結(jié)果,可以與真實標簽比對計算誤差或損失函數(shù)值。當輸出結(jié)果與真實標簽相等時損失為零,二者相差越大損失函數(shù)值越大,常見的損失函數(shù)有二次損失、對數(shù)損失等。在訓練樣本上的總損失是監(jiān)督學習中的優(yōu)化目標,常用梯度下降法優(yōu)化這個目標,這個過程就是機器的“學習”或用樣本對機器的“訓練”。
要對神經(jīng)網(wǎng)絡各層的參數(shù)進行訓練,需要計算損失對網(wǎng)絡中間各層參數(shù)的梯度,BP算法就是把損失從輸出層逐層往前傳遞,這個過程叫做誤差的反向傳播,如圖1(b)所示,其中E為損失函數(shù),tl為目標輸出, f(yl,tl) 為損失函數(shù)對 yl的偏微分。算法的核心是用鏈式求導法從輸出層逐層向前計算損失函數(shù)對隱含節(jié)點輸出值的梯度和對連接權(quán)重的梯度。將連接權(quán)重向負梯度方向適度調(diào)整得到新一輪的參數(shù)。用大量樣本如此循環(huán)訓練多次,直到損失函數(shù)不再下降或達到設定的迭代次數(shù),就完成了神經(jīng)網(wǎng)絡的訓練過程。
對于一個或兩個隱層的多層感知器網(wǎng)絡來說,可以直接用BP算法進行訓練。但對于有更多層復雜結(jié)構(gòu)的深度學習模型,則需要結(jié)合深層網(wǎng)絡結(jié)構(gòu)設計采用多種訓練技巧。下面就對典型深層網(wǎng)絡結(jié)構(gòu)和對應算法的核心思想進行討論。
深度學習的性能很大程度上取決于網(wǎng)絡的結(jié)構(gòu)。對于不同類型的數(shù)據(jù)和問題,人們發(fā)展了多種不同的網(wǎng)絡結(jié)構(gòu)模型。
自編碼機(auto encoder ,AE)與限制性玻耳茲曼機(RBM)是深度學習中使用較多的2種非監(jiān)督學習的神經(jīng)網(wǎng)絡模型,但它們通常并不直接用于解決非監(jiān)督學習問題,而是通過非監(jiān)督學習找到更好體現(xiàn)數(shù)據(jù)內(nèi)在規(guī)律的特征表示,再用到監(jiān)督學習的深層神經(jīng)網(wǎng)絡模型中,常常被用于神經(jīng)網(wǎng)絡的初始化及學習,適用于下游分類的特征表示。
自編碼機[28-30]是一種特殊的多層感知器,網(wǎng)絡結(jié)構(gòu)包括編碼器與解碼器2部分,如圖2(a)所示。對于給定訓練集 {x1,x2,···,xn},自編碼機的學習目標是輸入本身,即
式中:f代表編碼器,g代表解碼器, hW,b(xi)為在自編碼器中權(quán)值和偏置項分別為W和b情況下輸入為 xi時的輸出值。顯然,如果不對網(wǎng)絡結(jié)構(gòu)進行限制,網(wǎng)絡無法學習到有意義的信息。比如,假設隱含節(jié)點數(shù)目與輸入節(jié)點數(shù)目相同,并定義
即可實現(xiàn)目標,但這樣的網(wǎng)絡僅僅是將輸入復制到了隱含狀態(tài)和輸出,沒有學到任何信息。一種有用的自編碼機結(jié)構(gòu)是隱含節(jié)點的數(shù)目比輸入節(jié)點數(shù)目少,如圖2(a)所示,這樣迫使網(wǎng)絡對數(shù)據(jù)的特征進行壓縮。當各個特征相互獨立時,想用少量隱含狀態(tài)表示所有特征就很困難。但是如果特征之間存在一定的相關性,算法就可以發(fā)現(xiàn)這樣的相關性并學習到特征的一種壓縮表示。實際上,當網(wǎng)絡中連接都為線性連接時,算法的壓縮結(jié)果與主成分分析(PCA)相同;當網(wǎng)絡中連接為非線性時,自編碼機能學到比核主成分分析(KPCA)更靈活的數(shù)據(jù)壓縮表示。自編碼機作為一種特殊的多層感知器,可以用一般的BP算法訓練網(wǎng)絡參數(shù),也可以使用recirculation方法進行訓練[31]。
圖 2 自編碼機與級聯(lián)的自編碼機Fig. 2 Auto-encoder and concatenated auto-encoder
普通的自編碼機存在一些潛在的問題,例如:當編碼器和解碼器的能力過強時,編碼器可以直接將原始數(shù)據(jù) xi映射為i再由解碼器還原,這實際只是實現(xiàn)了對訓練樣本的記憶,沒有發(fā)現(xiàn)數(shù)據(jù)中的內(nèi)在規(guī)律。因此,人們發(fā)展了改進的方法,對編碼器與解碼器的能力進行限制,比如在損失函數(shù)中加入對編碼器、解碼器的懲罰項,以獲取一些好的性質(zhì)。以稀疏自編碼機[32-33]為例,定義sigmoid神經(jīng)元輸出為1時為激活狀態(tài)、輸出為0時為關閉狀態(tài),那么對隱含層中的節(jié)點j,可以定義其輸出的稀疏性為 ρj,且有
式中: aj(xi)是隱含節(jié)點j的輸出值;n是訓練集樣本數(shù)目; ρj就是對整個訓練集取神經(jīng)元輸出的平均值作為稀疏性的衡量指標。我們希望 ρj為一個較小的值ρ,為了衡量稀疏性是否達到標準,通常使用KL散度作為懲罰項,這樣目標函數(shù)就變?yōu)?/p>
式中:s為隱含節(jié)點數(shù)目;左邊第一項是衡量自編碼機能否良好地恢復輸入的損失函數(shù);左邊第二項是針對稀疏性的懲罰項;β是稀疏懲罰項系數(shù),該值越大獲得的稀疏性越強。訓練該目標函數(shù)得到的隱含狀態(tài)將是稀疏的。
另一種改進方法是去噪自編碼機[34],將訓練數(shù)據(jù)進行微小擾動之后輸入,并試圖恢復加入噪聲之前的樣本;而收縮自編碼機[35]對 ?hW,b(x)/?x進行懲罰。2種方法都可以使得自編碼機擁有一定對輸入的抗噪能力。
在深度學習模型中,經(jīng)常把輸入端設計為自編碼器,在進行以上非監(jiān)督訓練后去掉解碼器部分,用中間層的輸出作為對樣本的壓縮表示,接入到下一層神經(jīng)網(wǎng)絡作為輸入。也有些模型采用多個自編碼器進行級聯(lián)來構(gòu)成棧式自編碼機[36],逐級訓練編碼器,實現(xiàn)對樣本更好的表示,如圖2(b)所示。
限制性玻耳茲曼機RBM[20,37-38]是一種能量模型,通過建立概率分布與能量函數(shù)之間的關系,求解能量函數(shù),刻畫數(shù)據(jù)內(nèi)在的規(guī)律。典型的RBM網(wǎng)絡結(jié)構(gòu)如圖3(a)所示。之所以使用能量模型是因為:很多時候無法直接得到數(shù)據(jù)的分布形式,根據(jù)統(tǒng)計力學的結(jié)論,任何概率分布都能用基于能量的模型來描述[39]。通過基于能量的模型,能對數(shù)據(jù)分布進行建模。在能量模型中,數(shù)據(jù)的概率分布可由式(1)計算得到:
式中 E(x)為 樣本 x 的能量,分母為歸一化項。在限制性玻耳茲曼機中,能量函數(shù)的定義為
式中: v,h分 別表示樣本 x中的可見狀態(tài)與隱含狀態(tài),即圖3(a)中節(jié)點;W是可見狀態(tài)與隱含狀態(tài)之間邊的權(quán)重;b與c分別為可見狀態(tài)與隱含狀態(tài)的偏置項。根據(jù)式(1)可以得到 v和 h兩個隨機變量的聯(lián)合分布,也就可以計算隨機變量 v的邊緣分布 p(v) 以及兩個條件分布 p(v|h) 和 p(h|v)。通過條件分布,可以進行可見狀態(tài)與隱含狀態(tài)的相互生成,對觀測數(shù)據(jù)的非監(jiān)督學習達到穩(wěn)定后,可以用隱層狀態(tài)作為原始觀測數(shù)據(jù)的抽象表示。一個訓練良好的RBM能將樣本映射為隱含狀態(tài)之后,使用隱含狀態(tài)大概率地恢復原樣本。在實際使用中,隱含狀態(tài)經(jīng)常作為數(shù)據(jù)的表示輸入到下一階段的分類器中。
圖 3 限制性玻耳茲曼機與深度置信網(wǎng)絡Fig. 3 Restricted Boltzmann machine and deep belief network
為了達到刻畫原數(shù)據(jù)分布的目的,希望理論的邊緣分布 p(v) 與實際觀測到的數(shù)據(jù)分布 q(v)盡可能相吻合,于是應用KL散度作為衡量分布相似程度的指標,也就是我們的訓練目標:
式中:Ω為參數(shù)空間;左邊第一項表示數(shù)據(jù)的熵,為常數(shù)項;左邊第二項可用樣本進行估計,即其中 S 為樣本集。這樣KL散度的優(yōu)化問題可以轉(zhuǎn)化為最大似然問題,求解過程仍然使用梯度下降法更新參數(shù)。與自編碼機類似,限制性玻耳茲曼機也可以通過增加懲罰項的方式來獲取樣本的稀疏特征表示[40]。
在深度學習的應用中,自編碼機與限制性玻耳茲曼機常常用于參數(shù)的預訓練。如圖3(b)所示,可以將自編碼機和限制性玻耳茲曼機堆疊起來構(gòu)成深度置信網(wǎng)絡[41-42]。該網(wǎng)絡可以采用逐層訓練的方式訓練參數(shù),即每輪訓練中,輸入固定不變,訓練網(wǎng)絡得到一層的參數(shù)與輸出,將輸出傳輸?shù)较乱粚泳W(wǎng)絡中并固定,之后訓練得到下一層網(wǎng)絡的參數(shù),如此循環(huán)直至每一層自編碼機與限制性玻耳茲曼機都訓練完成。訓練完成之后,可以將網(wǎng)絡參數(shù)保留組成多層感知器進行監(jiān)督學習任務,使用BP算法對預訓練的參數(shù)初始值進行微調(diào)。這樣初始化多層感知器的方式能夠?qū)⒊跏贾捣旁谝粋€較好的地方,從而收斂到較好的局部最優(yōu)解[36]。也有研究表明,預訓練能夠起到正則化的作用,增強模型的推廣能力(泛化性能)[39]。
卷積神經(jīng)網(wǎng)絡(convolutional neural network ,CNN)是一種深層前饋型神經(jīng)網(wǎng)絡,最常用于圖像領域的監(jiān)督學習問題,比如圖像識別、計算機視覺等。早在1989年,LeCun等[43]就提出了最初的CNN模型,并在之后進行了完善[44],在AlexNet取得2012年ImageNet競賽冠軍之后[25],CNN在圖像識別領域幾乎成為深度學習的代名詞,在其他領域中也得到越來越多的應用。
卷積神經(jīng)網(wǎng)絡通常包含卷積層、降采樣層、全連接層與輸出層,卷積層和降采樣層可以有多個。一個經(jīng)典卷積神經(jīng)網(wǎng)絡LeNet如圖4(a)所示。
卷積層的作用是進行特征提取。對于一幅輸入圖像,一層卷積層中包含多個卷積核,每個卷積核都能與輸入圖像進行卷積運算產(chǎn)生新的圖像,新圖像上的每個像素即卷積核所覆蓋的一小片區(qū)域內(nèi)圖像的一種特征,用多個卷積核分別對圖像進行卷積即可提取不同種類的特征。比如,在圖4(a)的例子中,C2層中輸入為6幅特征圖,包含16個卷積核,最終產(chǎn)生了16幅特征圖的輸出,本層的特征圖是上一層提取到的特征圖的不同組合。
圖 4 多種深度神經(jīng)網(wǎng)絡示意圖Fig. 4 Schematics of different deep neural networks structures
這樣復雜的網(wǎng)絡構(gòu)成,如果直接采用BP算法進行學習將過分復雜,需要適當?shù)脑O計才能有效地進行學習。卷積層設計背后最重要的思想是稀疏連接與權(quán)值共享。稀疏連接即每一個輸出特征圖的像素都只與上一層特征圖的小區(qū)域相關。這一方面契合了動物視覺細胞的感受野現(xiàn)象[45],另一方面能夠保證特征具有平移不變性,這在圖像識別領域是非常重要的。權(quán)值共享指每次都使用同樣的卷積核遍歷整幅輸入圖像,這可以大大減少參數(shù)的數(shù)目,起到正則化的作用。對于大多數(shù)圖像識別問題,如果某一種特征特別重要的話,在全圖中任意位置中出現(xiàn)都應該具有判別效力。
降采樣層會選取輸入特征圖的一個小區(qū)域,比如圖4(a)中S1中即每次選取 2×2的區(qū)域,將其用一個數(shù)值進行表示,最常見的是取平均或選區(qū)域中的最大值。這種機制背后的思想主要包括3個方面:首先,能很快地減小數(shù)據(jù)的空間大小,如S1層的存在使特征從 28×28 維降低到了14×14維,參數(shù)數(shù)目會隨之減小,在一定程度上減輕過擬合;其次,降采樣層保證了CNN具有一定的抗噪能力,如果在輸入圖像加入一定噪聲,降采樣層的輸出未必會發(fā)生變化,因為輸入的微小變化未必會影響區(qū)域內(nèi)的最大值;最后,對圖像的監(jiān)督學習問題,大多數(shù)情況下特征的精確位置并不重要,重要的是特征出現(xiàn)與否以及其相對位置,比如對于人臉識別問題,并不需要知道眼睛的精確位置,只要能夠判斷出左上及右上區(qū)域存在眼睛即可判斷圖像是否為人臉。
CNN最后幾層通常會連接幾個全連接層,在整幅圖像層面進行特征組合與推斷,形成利于分類的特征。全連接層中輸入與輸出的每個節(jié)點之間都有相互連接,因此會帶來大量的待估計參數(shù)。近年來全連接層開始越來越少被使用,比如有研究發(fā)現(xiàn)其作用也可以用所謂的1×1卷積核的卷積層替代[46]。卷積神經(jīng)網(wǎng)絡的訓練本質(zhì)上仍然利用梯度的鏈式傳遞法則。
CNN在圖像領域獲得了極大的成功,也不斷有新的發(fā)展。在網(wǎng)絡架構(gòu)方面,網(wǎng)絡不斷變深,理論上越深層的網(wǎng)絡能夠抓取圖像中越抽象的特征,也就擁有更強的學習能力,當然隨之而來的訓練難度也會變大。2012年,Krizhevsky等[25]提出了AlextNet,包含5層卷積層與3層全連接層,如圖4(b)所示。網(wǎng)絡中采用了新型激活函數(shù)ReLU幫助模型收斂,并提出Dropout方法來減輕過擬合現(xiàn)象。2014年VGGNet[47]出現(xiàn),如圖4(c)所示,網(wǎng)絡中只使用較小的卷積核與降采樣尺寸,但將網(wǎng)絡提升到了最多19層,驗證了網(wǎng)絡層數(shù)加深能夠幫助網(wǎng)絡取得更好的性能。同年,GoogLeNet[48]網(wǎng)絡繼承了“網(wǎng)絡中網(wǎng)絡”思想[49],如圖4(d)所示,采用了Inception結(jié)構(gòu)作為基本單元,如圖4(e)所示,Inception結(jié)構(gòu)中大量使用1×1的卷積核,極大地減少了參數(shù)的數(shù)目,比起AlexNet參數(shù)從6 000萬減少到了500萬個,使得訓練速度與推廣能力都有所增強。另外,網(wǎng)絡中加入了3個輔助分類器來提供梯度,減輕梯度消散的現(xiàn)象。2015年,ResNet[50]中引入了輸入到輸出的直接連接,如圖4(g)所示,認為網(wǎng)絡學習目標值與輸入值的殘差比直接學習目標值更為簡單,通過引入直接連接解決了深層網(wǎng)絡的訓練錯誤率有時反而會比淺層網(wǎng)絡的訓練錯誤率高的問題,網(wǎng)絡深度最多被提升到了152層,如圖4(f)所示。
除了在圖像領域的應用,也有學者嘗試把其他領域的問題轉(zhuǎn)化為類似圖像識別的問題,采用或借鑒CNN方法取得了較好的效果。最為典型的例子是在自然語言處理中的應用。我們可以通過將1個詞或者1個字母表示為1個向量的方法將1句話轉(zhuǎn)化為二維的矩陣,然后在二維矩陣上應用卷積神經(jīng)網(wǎng)絡。一般來說,卷積核的寬度選用詞向量維數(shù),這樣對矩陣進行卷積操作可以看作是從句子中提取關鍵詞語、詞組特征,從而可以完成各類自然語言處理任務,比如文本分類[51]、機器翻譯[52]、語言模型[53]等。再比如在圍棋比賽中,卷積神經(jīng)網(wǎng)絡也被用于提取棋盤特征,以此描述棋盤上雙方的局勢[26]??偟膩碚f,一些能夠轉(zhuǎn)化為二維或者多維矩陣特征,并且局部特征有較強相關性的任務,都比較適合用CNN進行建模。
遞歸神經(jīng)網(wǎng)絡(recurrent neural network,RNN)有別于前面所提到的前饋類型的神經(jīng)網(wǎng)絡,其主要目的是對序列型數(shù)據(jù)進行建模,例如語音識別、語言翻譯、自然語言理解、音樂合成等序列數(shù)據(jù)。這類數(shù)據(jù)在推斷過程中需要保留序列上下文的信息,所以其隱節(jié)點中存在反饋環(huán),即當前時刻的隱含節(jié)點值不僅與當前節(jié)點的輸入有關,也與前一時刻的隱含節(jié)點值有關。
遞歸神經(jīng)網(wǎng)絡的結(jié)構(gòu)如圖5(a)所示。網(wǎng)絡的輸入為序列型數(shù)據(jù),記為 {x1,x2,···,xt-1,xt,···},下標t是時刻,每一時刻的輸入數(shù)據(jù)都為一個向量。在處理文本等非數(shù)值的序列數(shù)據(jù)時,需要將非數(shù)值的輸入(如文本中的單詞)轉(zhuǎn)變?yōu)橄蛄勘硎?,常用的表示方法包括獨?one-hot)編碼[54]或用word2vec將單詞表示為高維向量[55-56]等,如圖5(b)所示。也可以在輸入層與隱含節(jié)點之間加入一層映射層,來訓練針對當前任務的詞向量。每一時刻都有一個隱含狀態(tài) {h1,h2,···,ht-1,ht,···},這些隱含狀態(tài)中就記錄了當前時刻之前的序列中所包含的信息,每一時刻的隱含節(jié)點需要綜合之前時刻的信息以及當前時刻輸入中包含的信息,將二者結(jié)合起來傳遞給下一時刻。隱含節(jié)點的更新公式為
式中:σ代表非線性單元;W是歷史數(shù)據(jù)對當前輸出的權(quán)重;U是當前數(shù)據(jù)對輸出的權(quán)重。對于不同類型的問題,遞歸神經(jīng)網(wǎng)絡可以采用不同種類的輸出,比如:對于序列的分類問題[57],可以將所有時刻的隱含狀態(tài)收集到一起作為序列特征輸入到分類器中進行分類,如圖5(c)所示;而對于序列生成或語言模型問題[56,58-59],每一時刻都應有相應的輸出,如圖5(d)??梢詫⒚恳粫r刻的隱含狀態(tài)作為特征進行分類,即
圖 5 遞歸神經(jīng)網(wǎng)絡Fig. 5 Recurrent neural network
式(2)中Softmax就是羅杰斯特回歸在多類問題上的推廣形式,Softmax將多分類的輸出數(shù)值轉(zhuǎn)化為相對概率,使我們更容易對輸出進行理解和比較。其定義為:假設有一個數(shù)組X,Xi表示X中的第i個元素,那么元素Xi的Softmax值定義為
為了在減少參數(shù)數(shù)目的同時使遞歸神經(jīng)網(wǎng)絡能處理不同長度的輸入序列,網(wǎng)絡中的參數(shù)針對輸入序列的每個時刻都是相等的,這也使得參數(shù)的梯度計算比前饋神經(jīng)網(wǎng)絡略復雜了一些。
遞歸神經(jīng)網(wǎng)絡的訓練,需要使用隨時間的反向算法計算參數(shù)的梯度[18,60],其本質(zhì)上仍然利用梯度的鏈式傳遞法則。將RNN沿時間展開后,可以視為一個很深層的前饋神經(jīng)網(wǎng)絡,所以存在嚴重的梯度消散現(xiàn)象[61-63],導致RNN無法學習到數(shù)據(jù)中的長程依賴關系。
圖6(a)為RNN的時間序列展開圖,圖6(b)為RNN的單元結(jié)構(gòu)圖。為了減輕RNN中的梯度消散現(xiàn)象,可以從單元結(jié)構(gòu)與優(yōu)化兩方面著手改進。單元結(jié)構(gòu)方面,長短時記憶模型(long shortterm memory,LSTM)[64-66]添加了額外的隱含狀態(tài)來記憶序列的信息,使用3個門來控制當前時刻的輸入對記憶的影響,如圖6(c)所示。通過這樣的改造,記憶能夠更加通暢地在時間序列中傳遞,從而記住更久遠之前的信息。長短時記憶模型被發(fā)明之后,也出現(xiàn)了諸多變種[67-68],最實用的是門控遞歸單元(gated recurrent unit)[69]。門控遞歸單元合并了長短時記憶模型中的2種隱含狀態(tài),如圖6(d)所示,將控制門的個數(shù)減少到了2個,使得收斂所需的時間有所下降,經(jīng)過實驗驗證,門控遞歸單元相比長短時記憶模型幾乎沒有性能的損失[68,70]。改進優(yōu)化方面,研究表明在參數(shù)初始化合適的情況下,遞歸神經(jīng)網(wǎng)絡也能較好地學習到長程依賴關系[71]。
上面介紹的遞歸神經(jīng)網(wǎng)絡只能用于處理輸出數(shù)據(jù)定長的情況。對于某些實際問題,如語言翻譯[72]、問答系統(tǒng)[73]等,對給定輸入需要給出序列的輸出。針對這一類問題,人們提出了seq2seq[74]及encoder-decoder[69]模型。2種模型都使用了2個遞歸神經(jīng)網(wǎng)絡,一個用于收集輸入序列中的信息,將輸入序列的信息用向量進行表示,比如用最后1個時刻的隱狀態(tài)作為輸入序列的向量表示,另一個遞歸神經(jīng)網(wǎng)絡則用于生成序列。每一時刻都要綜合輸入序列的信息以及已產(chǎn)生序列中的信息來決定下一個單詞的概率分布,利用采樣決定生成的單詞,然后可將生成的單詞重新輸入網(wǎng)絡得到新的概率分布,如此循環(huán)即可生成整條序列。
圖 6 LSTM的結(jié)構(gòu)示意圖Fig. 6 Schematic of LSTM structure
在很多序列相關的問題中,輸出往往只與輸入的某些片段有較強的聯(lián)系。比如:在機器翻譯問題中,輸出單詞的最大信息量來自于與輸出單詞意義相同的詞,如將“knowledge is power”翻譯為“知識就是力量”,其中“力量”一詞之所以被生成完全是從“power”中獲取的信息。人們?yōu)榻_@種關系引入了注意力機制[75-76],即輸出序列的每個詞都只將注意力放在輸入序列的一個區(qū)域而不是完整的輸入序列中。該機制能夠大大提高遞歸神經(jīng)網(wǎng)絡的效果,被廣泛使用于各類序列學習任務中。分級注意記憶(hierarchical attentive memory)[77]進一步將節(jié)點組織成二叉樹的形式,加快了搜索效率,且能夠增強訓練數(shù)據(jù)與測試數(shù)據(jù)長度不一致情況下的推廣能力。
在網(wǎng)絡結(jié)構(gòu)方面,雙向的遞歸神經(jīng)網(wǎng)絡[78]使用從前向后以及從后向前2條鏈對時序數(shù)據(jù)建模,用于刻畫序列的上下文信息而不僅僅是過去時刻的信息。深層遞歸神經(jīng)網(wǎng)絡[79-80]對遞歸神經(jīng)網(wǎng)絡進行疊加,將一層遞歸神經(jīng)網(wǎng)絡的隱含狀態(tài)序列作為下一層遞歸神經(jīng)網(wǎng)絡的輸入,可以學習到更深層次的特征。
各種深度神經(jīng)網(wǎng)絡已經(jīng)在大量應用中展現(xiàn)了出色的效果,一些典型的模型和算法已經(jīng)比較成型并且有一些公開的框架可以使用,這大大方便和加快了各種深度學習方法的應用。但針對一個實際的問題,深度學習的求解過程中存在大量的技巧需要摸索,有效地使用一些技巧能夠改善網(wǎng)絡的收斂性以及網(wǎng)絡的推廣能力。
深度學習的參數(shù)求解本質(zhì)上是一個優(yōu)化問題,不同的優(yōu)化方法各有優(yōu)劣[81-83]。常用的優(yōu)化方法大體上可以按照其收斂性分為一階優(yōu)化算法與二階優(yōu)化算法。一階優(yōu)化算法是以目標函數(shù)相對于待優(yōu)化參數(shù)的一階導數(shù)(梯度)作為優(yōu)化的依據(jù),二階優(yōu)化算法則同時考慮了二階導數(shù)信息。
一階優(yōu)化算法中最常用的當屬以BP算法為代表的梯度下降法及其變種。梯度下降法每輪迭代中都計算參數(shù)的梯度,并將參數(shù)向負梯度方向移動一段距離來更新參數(shù)值。根據(jù)每次計算梯度時取用的樣本數(shù)不同分為梯度下降、隨機梯度下降、批量梯度下降等。梯度下降每輪迭代計算所有樣本的梯度平均,這樣可以保證每次移動都必定能優(yōu)化目標函數(shù),但梯度計算耗時長。相對地,隨機梯度下降每次只選取一個樣本計算梯度,速度快而且有一定的跳出局部最優(yōu)的能力,但目標函數(shù)波動劇烈。為了緩解隨機梯度下降梯度變化劇烈的問題,人們引入了動量(momentum)機制[84-85]。動量的引入使得計算得到的梯度起到微調(diào)參數(shù)更新方向的作用,減少了振蕩,有利于目標函數(shù)的收斂。批量梯度下降法綜合了隨機梯度下降法與梯度下降法的優(yōu)點,選取訓練集中的一部分計算梯度和,以此平衡計算速度與算法穩(wěn)定性。
在梯度下降類算法中,學習率(亦稱步長)即每一輪學習時參數(shù)更新幅度的選擇是很關鍵的一點,學習率過低算法收斂過慢,而學習率過高則容易不收斂。因此,人們研究出一些自適應的梯度下降法,能夠在學習過程中根據(jù)歷史的參數(shù)更新信息自動調(diào)節(jié)學習率,如AdaGrad[86]、RMSProp[87]、AdaDelta[88]、Adam[89]等。
二階優(yōu)化算法考慮了目標函數(shù)的二階導數(shù)信息,也就是目標函數(shù)在當前參數(shù)附近的曲率,使得參數(shù)的更新方向估計得更加準確,在某些問題上能夠求解一階優(yōu)化算法不能解決的問題。常用的二階優(yōu)化算法包括牛頓法、共軛梯度法、BFGS算法[90]、L-BFGS算法[91]等。二階優(yōu)化算法的主要差別體現(xiàn)在Hessian矩陣逆的計算或近似上,文獻[82]指出,使用大規(guī)模集群并行化計算時,L-BFGS與共軛梯度法能夠取得比隨機梯度下降更快的收斂速度。文獻[92-93]采用不估計Hessian矩陣的二階優(yōu)化算法,并在自編碼機、遞歸神經(jīng)網(wǎng)絡上取得了較好的效果。
在優(yōu)化問題中,參數(shù)初始值的選擇是很關鍵的。早期的神經(jīng)網(wǎng)絡一旦結(jié)構(gòu)復雜就無法保證推廣性能的一大原因是初始值選取無有效方法,深度置信網(wǎng)絡(DBN)等采用非監(jiān)督學習方法進行參數(shù)初始化(即預訓練)使得深度神經(jīng)網(wǎng)絡有了較好的實用性[94]。以往常用方法是用均值為0、方差較小的高斯分布或均勻分布來進行初始化,這樣的初始化方法無法保證變量的方差在傳播過程中相等,會導致變量值逐漸增大或逐漸減小。當變量值都很小時,都集中在sigmoid函數(shù)的線性區(qū)內(nèi),也就失去了層數(shù)增加的意義;而當變量值都很大時,變量都處于飽和區(qū)內(nèi),梯度減小不利于收斂。Glorot等[95]給出了一種方法,在使用sigmoid或是tanh作為激活函數(shù)時,能夠確保證變量的方差在前向傳播與反向傳播的過程中都近似相等。He等[96]做了類似的推導,給出了ReLU作為激活函數(shù)時,深度神經(jīng)網(wǎng)絡的參數(shù)初始化形式。
激活函數(shù)的選擇對模型的性能、收斂速度都有很大的影響[97]。早期被廣泛使用的激活函數(shù)是sigmoid函數(shù),由于其在兩側(cè)的導數(shù)趨近于0,被稱為軟飽和函數(shù)[98]。軟飽和性會使得網(wǎng)絡的梯度難以向回傳播,當網(wǎng)絡的后幾層很快收斂到飽和區(qū)后,網(wǎng)絡的前幾層仍然停留在隨機初始化的狀態(tài)而得不到訓練,造成網(wǎng)絡的推廣性能較差[95,99]。tanh同樣是一種軟飽和的激活函數(shù),相比sigmoid函數(shù),由于其輸出的均值比sigmoid函數(shù)更接近于0,隨機梯度下降速度能夠更趨近于自然梯度(natural gradient)[100],故其收斂速度更快[101]。深度神經(jīng)網(wǎng)絡直接監(jiān)督式訓練的主要突破點是采用了ReLU函數(shù)[25,102],它至今仍是使用最廣泛的激活函數(shù),ReLU函數(shù)在x>0處導數(shù)恒定為1,故梯度不會衰減,從而緩解梯度消散現(xiàn)象,ReLU還能使神經(jīng)網(wǎng)絡具有稀疏表達的能力,可以提升網(wǎng)絡性能。但其在x<0處梯度硬飽和,權(quán)重無法更新,存在神經(jīng)元死亡現(xiàn)象。由于ReLU的均值恒定大于0,故會影響網(wǎng)絡的收斂性[103-104]。為了解決神經(jīng)元死亡問題,人們發(fā)展了PReLu[96]、ELU[104]等ReLU的推廣算法,算法在x<0區(qū)域內(nèi)也有梯度,且輸出均值更接近于0,可以使網(wǎng)絡具有更好的收斂性能。Maxout[105]使用一個小的神經(jīng)網(wǎng)絡作為非線性單元,理論上在隱含節(jié)點數(shù)目足夠的情況下能夠近似任意地激活函數(shù),且其基本不存在神經(jīng)元死亡現(xiàn)象,但為此需要付出更大的參數(shù)數(shù)目與計算量。
過擬合或過學習是影響神經(jīng)網(wǎng)絡方法推廣能力的主要原因,對于深度神經(jīng)網(wǎng)絡,舍棄(Dropout)法[25]是一種常用的避免過擬合方法。Dropout是指,在每輪訓練過程中,隨機地讓網(wǎng)絡的部分隱含節(jié)點不工作,即以概率p將隱含節(jié)點的輸出置零,這些隱含節(jié)點的參數(shù)也暫時不更新。這種舍棄訓練也屬于一種正則化方法。這樣每輪訓練的網(wǎng)絡結(jié)構(gòu)都是不同的,最終進行分類時使用整個網(wǎng)絡進行分類,類似于取了不同分類器的平均,與集成學習中的bagging自舉聚合(bootstrap aggregating)方法有異曲同工之妙。使用舍棄訓練使網(wǎng)絡避免某些神經(jīng)元共同激活,削弱了神經(jīng)元之間的聯(lián)合適應性,可以增強推廣能力[106]。也有觀點認為,舍棄訓練可以理解為數(shù)據(jù)增強(data augmentation)的一種形式[107],因為其易于實現(xiàn),且可應用于各類不同的網(wǎng)絡結(jié)構(gòu)中,故被廣泛使用。舍棄訓練會降低網(wǎng)絡的有效節(jié)點數(shù)目,因此應用時網(wǎng)絡的寬度也需要相應增加,這使得在樣本數(shù)目極少時表現(xiàn)不佳[108]。另外,應用舍棄訓練也會使得網(wǎng)絡的訓練時間上升為原來的2~3倍。除了舍棄訓練方法,還有一些類似的方法或改進方法,比如:DropConnect[109]方法隨機地將隱含節(jié)點的一些輸入連接置零,理論上可以獲得更好的模型平均效果,自適應舍棄(adaptive dropout)[110]方法能夠根據(jù)上一層的輸出結(jié)果尋找最優(yōu)的舍棄率,等等。
2015年,人們提出了批量歸一化(batch normalization)算法[111],使用該方法可以選擇較大的初始學習率使網(wǎng)絡快速收斂,并且可以提高網(wǎng)絡的推廣性能,某種程度上可以代替舍棄訓練等正則化方法。算法的核心思想很簡單,機器學習的本質(zhì)是學習數(shù)據(jù)的分布,歸一化能夠使訓練數(shù)據(jù)與測試數(shù)據(jù)分布相同,從而可以提升推廣性能,而且在批量梯度下降中,歸一化能夠使得模型不必去適應學習每輪不同的輸入數(shù)據(jù)分布,從而提升訓練速度。但在訓練一般的深度神經(jīng)網(wǎng)絡時,只有輸入層能滿足分布相同的條件,經(jīng)過非線性變換之后,每層隱含層的輸入分布就不再穩(wěn)定,會受到之前數(shù)層的參數(shù)影響。為了解決這一問題,使神經(jīng)網(wǎng)絡的每一層輸入都擁有相同的分布,引入Batch Normalization方法,即
式中,均值 μx和方差 σ2x由批量梯度下降中所選取的一小部分樣本進行估計。歸一化可能會使得特征的表達能力減弱,比如:原本數(shù)據(jù)分布在sigmoid函數(shù)的兩端,有著較強的判別能力,經(jīng)過歸一化之后分布在0附近,相當于前一層的學習結(jié)構(gòu)被抹消了。為了彌補這個缺點,還需經(jīng)過一次變換:
這樣一次從 xi到 yi的變換被稱為一次批量歸一化,可以添加于模型的激活函數(shù)之前,用以解決神經(jīng)網(wǎng)絡訓練速度慢、梯度爆炸等問題。
類似的這些優(yōu)化策略與技巧,都是研究者針對不同的數(shù)據(jù)和實驗情況提出的,面對一個特定的實際問題,并沒有辦法事先確定哪種策略是最優(yōu)策略。但是,了解這些策略和技巧的思路與原理,將有利于在面對實際問題時更快找到適當?shù)牟呗?,或者研究出新的策略?/p>
深度學習在很多應用中取得成功,一方面離不開深度神經(jīng)網(wǎng)絡模型的設計,另一方面離不開如上所舉例的一些經(jīng)驗技巧,雖然研究人員對其中的原理提出了一定的解釋,但大都缺乏嚴格的理論支持。有一些理論研究對部分學習算法的收斂性質(zhì)進行了證明,但對于深度學習模型的樣本表示能力和學習推廣能力的研究,大多停留在描述和實驗說明階段,這也是當前人們學習和研究深度學習方法遇到的一個重要困難。
與此相比,一些淺層的機器學習方法則在理論上有較多研究成果,在一定條件下它們的性能有嚴格的理論保障。以支持向量機為例,它可以看作是對簡單的線性分類器的一種擴展,通過最大化分類間隔獲得小樣本情況下最佳的推廣能力,通過一層核函數(shù)變換實現(xiàn)非線性,圍繞這一方法有一套比較嚴格的數(shù)學理論和證明,這就是著名的“統(tǒng)計學習理論”[23]。而對于各種深度學習模型在很多領域取得的出色應用效果,現(xiàn)存的數(shù)學理論尚不能很好地給出定量解釋,包括常用的復雜性理論[112-114]。
關于“對抗樣本”的研究也促進了對理論可解釋性的關注,圖7是一個對抗樣本示例[115],通過在一個熊貓圖像上加入微弱噪聲,形成一幅新的圖像,這幅圖像在人眼看來還是熊貓,但是神經(jīng)網(wǎng)絡卻以99.3%的置信度認為是長臂猿。如果缺乏理論解釋,人們就會擔心黑盒模式下的深度學習會存在對抗樣本,導致系列風險。因此對深度學習進行系統(tǒng)的理論分析是勢在必行的,近年來投入相關研究的研究人員也開始逐漸增加。
圖 7 對抗樣本示例Fig. 7 An adversarial example
一般地,要從理論上分析一個機器學習算法,通常需要考慮3個主要的問題:推廣性問題、表示性問題及優(yōu)化問題。推廣性問題討論的是經(jīng)驗風險和期望風險之間的關聯(lián)性,也就是,在什么情況下,訓練誤差足夠小就能夠保證對未來測試樣本的預測錯誤也足夠小。對于神經(jīng)網(wǎng)絡,經(jīng)典的分析理論及統(tǒng)計學習理論都給出了相似的結(jié)論[116-120]:只要樣本的數(shù)量相對于網(wǎng)絡規(guī)模足夠大,就能保證神經(jīng)網(wǎng)絡具有一定的推廣性。由于樣本量和計算能力的限制,統(tǒng)計學習理論的研究重點是在有限樣本下如何通過控制學習模型的容量(capacity)來達到高的推廣能力。而深度學習則突破了這一限制,考慮如何通過大規(guī)模的樣本來達到高的推廣能力。為了達到相同的推廣能力,規(guī)模越大的神經(jīng)網(wǎng)絡需要的樣本量也更多。這些認識只是定性的推斷,深度神經(jīng)網(wǎng)絡的結(jié)構(gòu)和規(guī)模、訓練樣本的數(shù)量和質(zhì)量、學習機器的推廣能力這三者之間的關系,需要從理論上進行更系統(tǒng)和深入地研究。對于一些難以獲得足夠樣本的問題,人們提出了用相關問題的樣本進行遷移學習(transfer learning)的方法,為提高機器學習性能開辟了新的思路[121],這已經(jīng)成為機器學習領域的一個重要研究方向,而這種引入其他數(shù)據(jù)的學習過程也使得理論分析的難度進一步加大。
為什么要采用深層神經(jīng)網(wǎng)絡,這是機器學習的表示性問題。對于多層感知器神經(jīng)網(wǎng)絡的表示性,20世紀就已經(jīng)有理論研究:幾乎任何函數(shù)都能夠用適當規(guī)模的人工神經(jīng)網(wǎng)絡模型進行表示[122]。這個結(jié)論指出,無論多么復雜的分類或者回歸模型都能夠被特定的神經(jīng)網(wǎng)絡所表示,只要所用的神經(jīng)網(wǎng)絡具備足夠多的非線性節(jié)點以及足夠多的隱層數(shù)。隨后,Barron[123]提出了一個定理,進一步證明了單隱層的非線性神經(jīng)網(wǎng)絡能夠用來表示幾乎任何的函數(shù)。這個定理相當于告訴人們,深度更深的神經(jīng)網(wǎng)絡并不會比淺層的神經(jīng)網(wǎng)絡具有更強的函數(shù)表示性。換言之,多隱層神經(jīng)網(wǎng)絡所能表示的函數(shù)單隱層神經(jīng)網(wǎng)絡也能表示,只要單隱層節(jié)點的數(shù)目足夠多。但是,關于表示性的結(jié)論只是說明存在一定的網(wǎng)絡結(jié)構(gòu)能夠?qū)崿F(xiàn)任意復雜的函數(shù)映射,但并不意味著這樣的結(jié)構(gòu)能夠或者容易得到。有研究指出,淺層神經(jīng)網(wǎng)絡的表示能力和深層神經(jīng)網(wǎng)絡的表示能力依然有所不同,這種不同體現(xiàn)在表示性和參數(shù)數(shù)目的相對關系上[124-125]。
淺層神經(jīng)網(wǎng)絡規(guī)模的擴展主要是橫向的,也就是增加網(wǎng)絡每一層的節(jié)點數(shù)量;而深層神經(jīng)網(wǎng)絡的規(guī)模擴展主要是縱向的,也就是,增加網(wǎng)絡的層數(shù)。神經(jīng)網(wǎng)絡規(guī)模的增加必然會使網(wǎng)絡的參數(shù)數(shù)量增加,而參數(shù)的增加同時也會提高神經(jīng)網(wǎng)絡的表示能力。但是,縱向和橫向分別增加相同數(shù)量的參數(shù)對網(wǎng)絡的表示性的提升是不同的,通常以縱向方式增加參數(shù)會獲得更多的表示性提升[126],結(jié)合了對自然認知系統(tǒng)的理解CNN、RNN等深層神經(jīng)網(wǎng)絡,可以在提升表示性的同時減少參數(shù)數(shù)目和增加參數(shù)的可學習性。這是深層神經(jīng)網(wǎng)絡在參數(shù)的表示效率上所具有的優(yōu)勢,同時也是深度網(wǎng)絡在很多應用中取得比淺層模型更優(yōu)效果的一個重要原因。
優(yōu)化問題的理論解釋是當前深度學習面臨的另一個主要問題。眾多的訓練技巧都能夠很好地幫助提升神經(jīng)網(wǎng)絡的優(yōu)化結(jié)果,但是現(xiàn)在仍然無法很好地從理論上來進行解釋,而面對一個新的實際問題時使用什么樣的技巧更奏效也往往需要大量試錯。表示性問題關心的是,是否存在所要優(yōu)化的目標的最優(yōu)解;而優(yōu)化問題關心的是,是否能學習到這樣的最優(yōu)解,以及如何能學習到這樣的最優(yōu)解。存在最優(yōu)解并不代表就一定能通過優(yōu)化方法找到,特別是對于非凸的優(yōu)化問題。迭代優(yōu)化方法的優(yōu)化過程一般和初始值有關,而初始值一般都是隨機生成的,因此這類優(yōu)化方法找到的解也會具有一定的隨機性。而訓練神經(jīng)網(wǎng)絡一般采用的都是迭代的方法,為了保證能夠以一個比較大的概率獲得滿意的優(yōu)化結(jié)果,除了要應用上述的訓練技巧外,還需要配合恰當?shù)木W(wǎng)絡結(jié)構(gòu),當然具體的結(jié)構(gòu)需要根據(jù)具體的問題而定。
根據(jù)上面的討論,要獲得較好的優(yōu)化結(jié)果,需要從3方面入手:神經(jīng)網(wǎng)絡結(jié)構(gòu)的設計、優(yōu)化算法及初始化方法。近來出現(xiàn)了許多理論結(jié)合實驗的方法來對這3方面進行分析與討論[127-136],人們期望在深度學習展示出大量成功應用實例的同時,也能夠在理論上對它們的優(yōu)勢和適用范圍有越來越深入的認識。
對傳統(tǒng)的機器學習來說,在一些復雜問題上,構(gòu)造特征的過程是很困難的,但是很多傳統(tǒng)機器學習方法的性能在一定條件下有嚴格的理論保障。深度學習能夠自動地提取特征,并將簡單特征逐漸組合成更復雜的特征,通過這些復雜特征來解決問題,在很多領域取得了出色的應用效果。但是,現(xiàn)存的數(shù)學理論尚不能很好地給出定量解釋,包括推廣性問題、表示性問題及優(yōu)化問題。未來理論研究的進步將會進一步加快深度學習的發(fā)展,更好地指引深度學習的應用。
本文是筆者結(jié)合自己工作嘗試對深度學習進行的一個綜述和討論,這一領域包含的內(nèi)容很多,近年來發(fā)展非??欤又P者水平所限,本文的討論難免掛一漏萬,望同行學者指正。由于深度學習模型的復雜度較高且需要用大量樣本進行計算,對存儲和計算資源的要求都很高,很多運算都需要用GPU加速等方式來實現(xiàn),國內(nèi)外學者和產(chǎn)業(yè)界也紛紛推出了多種深度學習的軟硬件平臺。由于篇幅限制,本文未對此方面進行介紹和討論。