精品伊人久久大香线蕉,开心久久婷婷综合中文字幕,杏田冲梨,人妻无码aⅴ不卡中文字幕

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
神經(jīng)網(wǎng)絡(luò)淺講:從神經(jīng)元到深度學(xué)習(xí)

  神經(jīng)網(wǎng)絡(luò)是一門重要的機(jī)器學(xué)習(xí)技術(shù)。它是目前最為火熱的研究方向--深度學(xué)習(xí)的基礎(chǔ)。學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)不僅可以讓你掌握一門強(qiáng)大的機(jī)器學(xué)習(xí)方法,同時也可以更好地幫助你理解深度學(xué)習(xí)技術(shù)。

  本文以一種簡單的,循序的方式講解神經(jīng)網(wǎng)絡(luò)。適合對神經(jīng)網(wǎng)絡(luò)了解不多的同學(xué)。本文對閱讀沒有一定的前提要求,但是懂一些機(jī)器學(xué)習(xí)基礎(chǔ)會更好地幫助理解本文。

  神經(jīng)網(wǎng)絡(luò)是一種模擬人腦的神經(jīng)網(wǎng)絡(luò)以期能夠?qū)崿F(xiàn)類人工智能的機(jī)器學(xué)習(xí)技術(shù)。人腦中的神經(jīng)網(wǎng)絡(luò)是一個非常復(fù)雜的組織。成人的大腦中估計(jì)有1000億個神經(jīng)元之多。

圖1 人腦神經(jīng)網(wǎng)絡(luò)

 

  那么機(jī)器學(xué)習(xí)中的神經(jīng)網(wǎng)絡(luò)是如何實(shí)現(xiàn)這種模擬的,并且達(dá)到一個驚人的良好效果的?通過本文,你可以了解到這些問題的答案,同時還能知道神經(jīng)網(wǎng)絡(luò)的歷史,以及如何較好地學(xué)習(xí)它。

  由于本文較長,為方便讀者,以下是本文的目錄:

  一.前言

  二.神經(jīng)元

  三.單層神經(jīng)網(wǎng)絡(luò)(感知器)

  四.兩層神經(jīng)網(wǎng)絡(luò)(多層感知器)

  五.多層神經(jīng)網(wǎng)絡(luò)(深度學(xué)習(xí))

  六.回顧

  七.展望

  八.總結(jié)

  九.后記

  十.備注

 

一. 前言

  讓我們來看一個經(jīng)典的神經(jīng)網(wǎng)絡(luò)。這是一個包含三個層次的神經(jīng)網(wǎng)絡(luò)。紅色的是輸入層,綠色的是輸出層,紫色的是中間層(也叫隱藏層)。輸入層有3個輸入單元,隱藏層有4單元,輸出層有2單元。后文中,我們統(tǒng)一使用這種顏色來表達(dá)神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)。

圖2 神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)圖

 

  在開始介紹前,有一些知識可以先記在心里:

  1. 設(shè)計(jì)一個神經(jīng)網(wǎng)絡(luò)時,輸入層與輸出層的節(jié)點(diǎn)數(shù)往往是固定的,中間層則可以自由指定;
  2. 神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)圖中的拓?fù)渑c箭頭代表著預(yù)測過程時數(shù)據(jù)的流向,跟訓(xùn)練時的數(shù)據(jù)流有一定的區(qū)別;
  3. 結(jié)構(gòu)圖里的關(guān)鍵不是圓圈(代表“神經(jīng)元”),而是連接線(代表“神經(jīng)元”之間的連接)。每個連接線對應(yīng)一個不同的權(quán)重(其值稱為權(quán)值),這是需要訓(xùn)練得到的  

  除了從左到右的形式表達(dá)的結(jié)構(gòu)圖,還有一種常見的表達(dá)形式是從下到上來表示一個神經(jīng)網(wǎng)絡(luò)。這時候,輸入層在圖的最下方。輸出層則在圖的最上方,如下圖:

圖3 從下到上的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)圖 

 

  從左到右的表達(dá)形式以Andrew NgLeCun的文獻(xiàn)使用較多,Caffe里使用的則是從下到上的表達(dá)。在本文中使用Andrew Ng代表的從左到右的表達(dá)形式。

  下面從簡單的神經(jīng)元開始說起,一步一步介紹神經(jīng)網(wǎng)絡(luò)復(fù)雜結(jié)構(gòu)的形成。

 

二. 神經(jīng)元

  1.引子 

  對于神經(jīng)元的研究由來已久,1904年生物學(xué)家就已經(jīng)知曉了神經(jīng)元的組成結(jié)構(gòu)。

  一個神經(jīng)元通常具有多個樹突,主要用來接受傳入信息;而軸突只有一條,軸突尾端有許多軸突末梢可以給其他多個神經(jīng)元傳遞信息。軸突末梢跟其他神經(jīng)元的樹突產(chǎn)生連接,從而傳遞信號。這個連接的位置在生物學(xué)上叫做突觸

  人腦中的神經(jīng)元形狀可以用下圖做簡單的說明:

圖4 神經(jīng)元

 

   1943年,心理學(xué)家McCulloch和數(shù)學(xué)家Pitts參考了生物神經(jīng)元的結(jié)構(gòu),發(fā)表了抽象的神經(jīng)元模型MP。在下文中,我們會具體介紹神經(jīng)元模型。

   

圖5 Warren McCulloch(左)和 Walter Pitts(右)  

  2.結(jié)構(gòu) 

  神經(jīng)元模型是一個包含輸入,輸出與計(jì)算功能的模型。輸入可以類比為神經(jīng)元的樹突,而輸出可以類比為神經(jīng)元的軸突,計(jì)算則可以類比為細(xì)胞核。

  下圖是一個典型的神經(jīng)元模型:包含有3個輸入,1個輸出,以及2個計(jì)算功能。

  注意中間的箭頭線。這些線稱為“連接”。每個上有一個“權(quán)值”

圖6 神經(jīng)元模型 

 

  連接是神經(jīng)元中最重要的東西。每一個連接上都有一個權(quán)重。

  一個神經(jīng)網(wǎng)絡(luò)的訓(xùn)練算法就是讓權(quán)重的值調(diào)整到最佳,以使得整個網(wǎng)絡(luò)的預(yù)測效果最好。

  我們使用a來表示輸入,用w來表示權(quán)值。一個表示連接的有向箭頭可以這樣理解:在初端,傳遞的信號大小仍然是a,端中間有加權(quán)參數(shù)w,經(jīng)過這個加權(quán)后的信號會變成a*w,因此在連接的末端,信號的大小就變成了a*w。

  在其他繪圖模型里,有向箭頭可能表示的是值的不變傳遞。而在神經(jīng)元模型里,每個有向箭頭表示的是值的加權(quán)傳遞。

圖7 連接(connection)  

 

  如果我們將神經(jīng)元圖中的所有變量用符號表示,并且寫出輸出的計(jì)算公式的話,就是下圖。

圖8 神經(jīng)元計(jì)算  

 

  可見z是在輸入和權(quán)值的線性加權(quán)和疊加了一個函數(shù)g的值。在MP模型里,函數(shù)g是sgn函數(shù),也就是取符號函數(shù)。這個函數(shù)當(dāng)輸入大于0時,輸出1,否則輸出0。

  下面對神經(jīng)元模型的圖進(jìn)行一些擴(kuò)展。首先將sum函數(shù)與sgn函數(shù)合并到一個圓圈里,代表神經(jīng)元的內(nèi)部計(jì)算。其次,把輸入a與輸出z寫到連接線的左上方,便于后面畫復(fù)雜的網(wǎng)絡(luò)。最后說明,一個神經(jīng)元可以引出多個代表輸出的有向箭頭,但值都是一樣的。

  神經(jīng)元可以看作一個計(jì)算與存儲單元。計(jì)算是神經(jīng)元對其的輸入進(jìn)行計(jì)算功能。存儲是神經(jīng)元會暫存計(jì)算結(jié)果,并傳遞到下一層。

圖9 神經(jīng)元擴(kuò)展 

 

  當(dāng)我們用“神經(jīng)元”組成網(wǎng)絡(luò)以后,描述網(wǎng)絡(luò)中的某個“神經(jīng)元”時,我們更多地會用“單元”(unit)來指代。同時由于神經(jīng)網(wǎng)絡(luò)的表現(xiàn)形式是一個有向圖,有時也會用“節(jié)點(diǎn)”(node)來表達(dá)同樣的意思。 

  3.效果 

  神經(jīng)元模型的使用可以這樣理解:

  我們有一個數(shù)據(jù),稱之為樣本。樣本有四個屬性,其中三個屬性已知,一個屬性未知。我們需要做的就是通過三個已知屬性預(yù)測未知屬性。

  具體辦法就是使用神經(jīng)元的公式進(jìn)行計(jì)算。三個已知屬性的值是a1,a2,a3,未知屬性的值是z。z可以通過公式計(jì)算出來。

  這里,已知的屬性稱之為特征,未知的屬性稱之為目標(biāo)。假設(shè)特征與目標(biāo)之間確實(shí)是線性關(guān)系,并且我們已經(jīng)得到表示這個關(guān)系的權(quán)值w1,w2,w3。那么,我們就可以通過神經(jīng)元模型預(yù)測新樣本的目標(biāo)。

  4.影響

  1943年發(fā)布的MP模型,雖然簡單,但已經(jīng)建立了神經(jīng)網(wǎng)絡(luò)大廈的地基。但是,MP模型中,權(quán)重的值都是預(yù)先設(shè)置的,因此不能學(xué)習(xí)。

  1949年心理學(xué)家Hebb提出了Hebb學(xué)習(xí)率,認(rèn)為人腦神經(jīng)細(xì)胞的突觸(也就是連接)上的強(qiáng)度上可以變化的。于是計(jì)算科學(xué)家們開始考慮用調(diào)整權(quán)值的方法來讓機(jī)器學(xué)習(xí)。這為后面的學(xué)習(xí)算法奠定了基礎(chǔ)。

圖10 Donald Olding Hebb 

 

  盡管神經(jīng)元模型與Hebb學(xué)習(xí)律都已誕生,但限于當(dāng)時的計(jì)算機(jī)能力,直到接近10年后,第一個真正意義的神經(jīng)網(wǎng)絡(luò)才誕生。

 

三. 單層神經(jīng)網(wǎng)絡(luò)(感知器)

  1.引子  

  1958年,計(jì)算科學(xué)家Rosenblatt提出了由兩層神經(jīng)元組成的神經(jīng)網(wǎng)絡(luò)。他給它起了一個名字--“感知器”(Perceptron)(有的文獻(xiàn)翻譯成“感知機(jī)”,下文統(tǒng)一用“感知器”來指代)。

  感知器是當(dāng)時首個可以學(xué)習(xí)的人工神經(jīng)網(wǎng)絡(luò)。Rosenblatt現(xiàn)場演示了其學(xué)習(xí)識別簡單圖像的過程,在當(dāng)時的社會引起了轟動。

  人們認(rèn)為已經(jīng)發(fā)現(xiàn)了智能的奧秘,許多學(xué)者和科研機(jī)構(gòu)紛紛投入到神經(jīng)網(wǎng)絡(luò)的研究中。美國軍方大力資助了神經(jīng)網(wǎng)絡(luò)的研究,并認(rèn)為神經(jīng)網(wǎng)絡(luò)比“原子彈工程”更重要。這段時間直到1969年才結(jié)束,這個時期可以看作神經(jīng)網(wǎng)絡(luò)的第一次高潮。

圖11 Rosenblat與感知器 

  2.結(jié)構(gòu)

  下面來說明感知器模型。

  在原來MP模型的“輸入”位置添加神經(jīng)元節(jié)點(diǎn),標(biāo)志其為“輸入單元”。其余不變,于是我們就有了下圖:從本圖開始,我們將權(quán)值w1, w2, w3寫到“連接線”的中間

圖12 單層神經(jīng)網(wǎng)絡(luò) 

 

  在“感知器”中,有兩個層次。分別是輸入層和輸出層。輸入層里的“輸入單元”只負(fù)責(zé)傳輸數(shù)據(jù),不做計(jì)算。輸出層里的“輸出單元”則需要對前面一層的輸入進(jìn)行計(jì)算。

  我們把需要計(jì)算的層次稱之為“計(jì)算層”,并把擁有一個計(jì)算層的網(wǎng)絡(luò)稱之為“單層神經(jīng)網(wǎng)絡(luò)”。有一些文獻(xiàn)會按照網(wǎng)絡(luò)擁有的層數(shù)來命名,例如把“感知器”稱為兩層神經(jīng)網(wǎng)絡(luò)。但在本文里,我們根據(jù)計(jì)算層的數(shù)量來命名。

  假如我們要預(yù)測的目標(biāo)不再是一個值,而是一個向量,例如[2,3]。那么可以在輸出層再增加一個“輸出單元”

  下圖顯示了帶有兩個輸出單元的單層神經(jīng)網(wǎng)絡(luò),其中輸出單元z1的計(jì)算公式如下圖。

圖13 單層神經(jīng)網(wǎng)絡(luò)(Z1)

 

  可以看到,z1的計(jì)算跟原先的z并沒有區(qū)別。

  我們已知一個神經(jīng)元的輸出可以向多個神經(jīng)元傳遞,因此z2的計(jì)算公式如下圖。

圖14 單層神經(jīng)網(wǎng)絡(luò)(Z2)

 

  可以看到,z2的計(jì)算中除了三個新的權(quán)值:w4,w5,w6以外,其他與z1是一樣的

  整個網(wǎng)絡(luò)的輸出如下圖。

圖15 單層神經(jīng)網(wǎng)絡(luò)(Z1和Z2)

 

  目前的表達(dá)公式有一點(diǎn)不讓人滿意的就是:w4,w5,w6是后來加的,很難表現(xiàn)出跟原先的w1,w2,w3的關(guān)系。

  因此我們改用二維的下標(biāo),用wx,y來表達(dá)一個權(quán)值。下標(biāo)中的x代表后一層神經(jīng)元的序號,而y代表前一層神經(jīng)元的序號(序號的順序從上到下)。

  例如,w1,2代表后一層的第1個神經(jīng)元與前一層的第2個神經(jīng)元的連接的權(quán)值(這種標(biāo)記方式參照了Andrew Ng的課件)。根據(jù)以上方法標(biāo)記,我們有了下圖。

圖16 單層神經(jīng)網(wǎng)絡(luò)(擴(kuò)展)

 

  如果我們仔細(xì)看輸出的計(jì)算公式,會發(fā)現(xiàn)這兩個公式就是線性代數(shù)方程組。因此可以用矩陣乘法來表達(dá)這兩個公式。

  例如,輸入的變量是[a1,a2,a3]T(代表由a1,a2,a3組成的列向量),用向量a來表示。方程的左邊是[z1,z2]T,用向量z來表示。

  系數(shù)則是矩陣W(2行3列的矩陣,排列形式與公式中的一樣)。

  于是,輸出公式可以改寫成:

g(W * a) = z;

 

  這個公式就是神經(jīng)網(wǎng)絡(luò)中從前一層計(jì)算后一層的矩陣運(yùn)算。

  3.效果

  與神經(jīng)元模型不同,感知器中的權(quán)值是通過訓(xùn)練得到的。因此,根據(jù)以前的知識我們知道,感知器類似一個邏輯回歸模型,可以做線性分類任務(wù)。

  我們可以用決策分界來形象的表達(dá)分類的效果。決策分界就是在二維的數(shù)據(jù)平面中劃出一條直線,當(dāng)數(shù)據(jù)的維度是3維的時候,就是劃出一個平面,當(dāng)數(shù)據(jù)的維度是n維時,就是劃出一個n-1維的超平面。

  下圖顯示了在二維平面中劃出決策分界的效果,也就是感知器的分類效果。

圖17 單層神經(jīng)網(wǎng)絡(luò)(決策分界)

  

  4.影響 

  感知器只能做簡單的線性分類任務(wù)。但是當(dāng)時的人們熱情太過于高漲,并沒有人清醒的認(rèn)識到這點(diǎn)。于是,當(dāng)人工智能領(lǐng)域的巨擘Minsky指出這點(diǎn)時,事態(tài)就發(fā)生了變化。

  Minsky在1969年出版了一本叫《Perceptron》的書,里面用詳細(xì)的數(shù)學(xué)證明了感知器的弱點(diǎn),尤其是感知器對XOR(異或)這樣的簡單分類任務(wù)都無法解決。

  Minsky認(rèn)為,如果將計(jì)算層增加到兩層,計(jì)算量則過大,而且沒有有效的學(xué)習(xí)算法。所以,他認(rèn)為研究更深層的網(wǎng)絡(luò)是沒有價值的。(本文成文后一個月,即2016年1月,Minsky在美國去世。謹(jǐn)在本文中紀(jì)念這位著名的計(jì)算機(jī)研究專家與大拿。)

   

圖18 Marvin Minsky

  

  由于Minsky的巨大影響力以及書中呈現(xiàn)的悲觀態(tài)度,讓很多學(xué)者和實(shí)驗(yàn)室紛紛放棄了神經(jīng)網(wǎng)絡(luò)的研究。神經(jīng)網(wǎng)絡(luò)的研究陷入了冰河期。這個時期又被稱為AI winter

  接近10年以后,對于兩層神經(jīng)網(wǎng)絡(luò)的研究才帶來神經(jīng)網(wǎng)絡(luò)的復(fù)蘇。

 

四. 兩層神經(jīng)網(wǎng)絡(luò)(多層感知器)

  1.引子

  兩層神經(jīng)網(wǎng)絡(luò)是本文的重點(diǎn),因?yàn)檎窃谶@時候,神經(jīng)網(wǎng)絡(luò)開始了大范圍的推廣與使用。

  Minsky說過單層神經(jīng)網(wǎng)絡(luò)無法解決異或問題。但是當(dāng)增加一個計(jì)算層以后,兩層神經(jīng)網(wǎng)絡(luò)不僅可以解決異或問題,而且具有非常好的非線性分類效果。不過兩層神經(jīng)網(wǎng)絡(luò)的計(jì)算是一個問題,沒有一個較好的解法。

  1986年,RumelharHinton等人提出了反向傳播(BackpropagationBP)算法,解決了兩層神經(jīng)網(wǎng)絡(luò)所需要的復(fù)雜計(jì)算量問題,從而帶動了業(yè)界使用兩層神經(jīng)網(wǎng)絡(luò)研究的熱潮。目前,大量的教授神經(jīng)網(wǎng)絡(luò)的教材,都是重點(diǎn)介紹兩層(帶一個隱藏層)神經(jīng)網(wǎng)絡(luò)的內(nèi)容。 

  這時候的Hinton還很年輕,30年以后,正是他重新定義了神經(jīng)網(wǎng)絡(luò),帶來了神經(jīng)網(wǎng)絡(luò)復(fù)蘇的又一春。

    

    

圖19 David Rumelhart(左)以及 Geoffery Hinton(右)

 

  2.結(jié)構(gòu)

  兩層神經(jīng)網(wǎng)絡(luò)除了包含一個輸入層,一個輸出層以外,還增加了一個中間層。此時,中間層和輸出層都是計(jì)算層。我們擴(kuò)展上節(jié)的單層神經(jīng)網(wǎng)絡(luò),在右邊新加一個層次(只含有一個節(jié)點(diǎn))。

  現(xiàn)在,我們的權(quán)值矩陣增加到了兩個,我們用上標(biāo)來區(qū)分不同層次之間的變量。

  例如ax(y)代表第y層的第x個節(jié)點(diǎn)。z1,z2變成了a1(2),a2(2)。下圖給出了a1(2),a2(2)的計(jì)算公式。

圖20 兩層神經(jīng)網(wǎng)絡(luò)(中間層計(jì)算)

 

  計(jì)算最終輸出z的方式是利用了中間層的a1(2),a2(2)和第二個權(quán)值矩陣計(jì)算得到的,如下圖。

圖21 兩層神經(jīng)網(wǎng)絡(luò)(輸出層計(jì)算)

 

  假設(shè)我們的預(yù)測目標(biāo)是一個向量,那么與前面類似,只需要在“輸出層”再增加節(jié)點(diǎn)即可。

  我們使用向量和矩陣來表示層次中的變量。a(1)a(2)z是網(wǎng)絡(luò)中傳輸?shù)南蛄繑?shù)據(jù)。W(1)W(2)是網(wǎng)絡(luò)的矩陣參數(shù)。如下圖。

圖22 兩層神經(jīng)網(wǎng)絡(luò)(向量形式)

 

  使用矩陣運(yùn)算來表達(dá)整個計(jì)算公式的話如下:

  g(W(1) * a(1)) = a(2)

g(W(2) * a(2)) = z;

 

  由此可見,使用矩陣運(yùn)算來表達(dá)是很簡潔的,而且也不會受到節(jié)點(diǎn)數(shù)增多的影響(無論有多少節(jié)點(diǎn)參與運(yùn)算,乘法兩端都只有一個變量)。因此神經(jīng)網(wǎng)絡(luò)的教程中大量使用矩陣運(yùn)算來描述。

  需要說明的是,至今為止,我們對神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)圖的討論中都沒有提到偏置節(jié)點(diǎn)(bias unit)。事實(shí)上,這些節(jié)點(diǎn)是默認(rèn)存在的。它本質(zhì)上是一個只含有存儲功能,且存儲值永遠(yuǎn)為1的單元。在神經(jīng)網(wǎng)絡(luò)的每個層次中,除了輸出層以外,都會含有這樣一個偏置單元。正如線性回歸模型與邏輯回歸模型中的一樣。

  偏置單元與后一層的所有節(jié)點(diǎn)都有連接,我們設(shè)這些參數(shù)值為向量b,稱之為偏置。如下圖。

圖23 兩層神經(jīng)網(wǎng)絡(luò)(考慮偏置節(jié)點(diǎn))

 

  可以看出,偏置節(jié)點(diǎn)很好認(rèn),因?yàn)槠錄]有輸入(前一層中沒有箭頭指向它)。有些神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)圖中會把偏置節(jié)點(diǎn)明顯畫出來,有些不會。一般情況下,我們都不會明確畫出偏置節(jié)點(diǎn)。 

  在考慮了偏置以后的一個神經(jīng)網(wǎng)絡(luò)的矩陣運(yùn)算如下:

  g(W(1) * a(1) + b(1)) = a(2)

g(W(2) * a(2) + b(2)) = z;

 

  需要說明的是,在兩層神經(jīng)網(wǎng)絡(luò)中,我們不再使用sgn函數(shù)作為函數(shù)g,而是使用平滑函數(shù)sigmoid作為函數(shù)g。我們把函數(shù)g也稱作激活函數(shù)(active function)。

  事實(shí)上,神經(jīng)網(wǎng)絡(luò)的本質(zhì)就是通過參數(shù)與激活函數(shù)來擬合特征與目標(biāo)之間的真實(shí)函數(shù)關(guān)系。初學(xué)者可能認(rèn)為畫神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)圖是為了在程序中實(shí)現(xiàn)這些圓圈與線,但在一個神經(jīng)網(wǎng)絡(luò)的程序中,既沒有“線”這個對象,也沒有“單元”這個對象。實(shí)現(xiàn)一個神經(jīng)網(wǎng)絡(luò)最需要的是線性代數(shù)庫。

  3.效果

  與單層神經(jīng)網(wǎng)絡(luò)不同。理論證明,兩層神經(jīng)網(wǎng)絡(luò)可以無限逼近任意連續(xù)函數(shù)。

  這是什么意思呢?也就是說,面對復(fù)雜的非線性分類任務(wù),兩層(帶一個隱藏層)神經(jīng)網(wǎng)絡(luò)可以分類的很好。

  下面就是一個例子(此兩圖來自colah的博客),紅色的線與藍(lán)色的線代表數(shù)據(jù)。而紅色區(qū)域和藍(lán)色區(qū)域代表由神經(jīng)網(wǎng)絡(luò)劃開的區(qū)域,兩者的分界線就是決策分界。

圖24 兩層神經(jīng)網(wǎng)絡(luò)(決策分界)

  

  可以看到,這個兩層神經(jīng)網(wǎng)絡(luò)的決策分界是非常平滑的曲線,而且分類的很好。有趣的是,前面已經(jīng)學(xué)到過,單層網(wǎng)絡(luò)只能做線性分類任務(wù)。而兩層神經(jīng)網(wǎng)絡(luò)中的后一層也是線性分類層,應(yīng)該只能做線性分類任務(wù)。為什么兩個線性分類任務(wù)結(jié)合就可以做非線性分類任務(wù)?

  我們可以把輸出層的決策分界單獨(dú)拿出來看一下。就是下圖。

圖25 兩層神經(jīng)網(wǎng)絡(luò)(空間變換)

 

  可以看到,輸出層的決策分界仍然是直線。關(guān)鍵就是,從輸入層到隱藏層時,數(shù)據(jù)發(fā)生了空間變換。也就是說,兩層神經(jīng)網(wǎng)絡(luò)中,隱藏層對原始的數(shù)據(jù)進(jìn)行了一個空間變換,使其可以被線性分類,然后輸出層的決策分界劃出了一個線性分類分界線,對其進(jìn)行分類。

  這樣就導(dǎo)出了兩層神經(jīng)網(wǎng)絡(luò)可以做非線性分類的關(guān)鍵--隱藏層。聯(lián)想到我們一開始推導(dǎo)出的矩陣公式,我們知道,矩陣和向量相乘,本質(zhì)上就是對向量的坐標(biāo)空間進(jìn)行一個變換。因此,隱藏層的參數(shù)矩陣的作用就是使得數(shù)據(jù)的原始坐標(biāo)空間從線性不可分,轉(zhuǎn)換成了線性可分。

  兩層神經(jīng)網(wǎng)絡(luò)通過兩層的線性模型模擬了數(shù)據(jù)內(nèi)真實(shí)的非線性函數(shù)。因此,多層的神經(jīng)網(wǎng)絡(luò)的本質(zhì)就是復(fù)雜函數(shù)擬合。

  下面來討論一下隱藏層的節(jié)點(diǎn)數(shù)設(shè)計(jì)。在設(shè)計(jì)一個神經(jīng)網(wǎng)絡(luò)時,輸入層的節(jié)點(diǎn)數(shù)需要與特征的維度匹配,輸出層的節(jié)點(diǎn)數(shù)要與目標(biāo)的維度匹配。而中間層的節(jié)點(diǎn)數(shù),卻是由設(shè)計(jì)者指定的。因此,“自由”把握在設(shè)計(jì)者的手中。但是,節(jié)點(diǎn)數(shù)設(shè)置的多少,卻會影響到整個模型的效果。如何決定這個自由層的節(jié)點(diǎn)數(shù)呢?目前業(yè)界沒有完善的理論來指導(dǎo)這個決策。一般是根據(jù)經(jīng)驗(yàn)來設(shè)置。較好的方法就是預(yù)先設(shè)定幾個可選值,通過切換這幾個值來看整個模型的預(yù)測效果,選擇效果最好的值作為最終選擇。這種方法又叫做Grid Search(網(wǎng)格搜索)。

  了解了兩層神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)以后,我們就可以看懂其它類似的結(jié)構(gòu)圖。例如EasyPR字符識別網(wǎng)絡(luò)架構(gòu)(下圖)。

圖26 EasyPR字符識別網(wǎng)絡(luò)

 

  EasyPR使用了字符的圖像去進(jìn)行字符文字的識別。輸入是120維的向量。輸出是要預(yù)測的文字類別,共有65類。根據(jù)實(shí)驗(yàn),我們測試了一些隱藏層數(shù)目,發(fā)現(xiàn)當(dāng)值為40時,整個網(wǎng)絡(luò)在測試集上的效果較好,因此選擇網(wǎng)絡(luò)的最終結(jié)構(gòu)就是120,40,65。

  4.訓(xùn)練

  下面簡單介紹一下兩層神經(jīng)網(wǎng)絡(luò)的訓(xùn)練。

  在Rosenblat提出的感知器模型中,模型中的參數(shù)可以被訓(xùn)練,但是使用的方法較為簡單,并沒有使用目前機(jī)器學(xué)習(xí)中通用的方法,這導(dǎo)致其擴(kuò)展性與適用性非常有限。從兩層神經(jīng)網(wǎng)絡(luò)開始,神經(jīng)網(wǎng)絡(luò)的研究人員開始使用機(jī)器學(xué)習(xí)相關(guān)的技術(shù)進(jìn)行神經(jīng)網(wǎng)絡(luò)的訓(xùn)練。例如用大量的數(shù)據(jù)(1000-10000左右),使用算法進(jìn)行優(yōu)化等等,從而使得模型訓(xùn)練可以獲得性能與數(shù)據(jù)利用上的雙重優(yōu)勢。

  機(jī)器學(xué)習(xí)模型訓(xùn)練的目的,就是使得參數(shù)盡可能的與真實(shí)的模型逼近。具體做法是這樣的。首先給所有參數(shù)賦上隨機(jī)值。我們使用這些隨機(jī)生成的參數(shù)值,來預(yù)測訓(xùn)練數(shù)據(jù)中的樣本。樣本的預(yù)測目標(biāo)為yp,真實(shí)目標(biāo)為y。那么,定義一個值loss,計(jì)算公式如下。

loss = (y- y)2

 

  這個值稱之為損失(loss),我們的目標(biāo)就是使對所有訓(xùn)練數(shù)據(jù)的損失和盡可能的小。

  如果將先前的神經(jīng)網(wǎng)絡(luò)預(yù)測的矩陣公式帶入到y(tǒng)p中(因?yàn)橛衵=yp),那么我們可以把損失寫為關(guān)于參數(shù)(parameter)的函數(shù),這個函數(shù)稱之為損失函數(shù)(loss function)。下面的問題就是求:如何優(yōu)化參數(shù),能夠讓損失函數(shù)的值最小。

  此時這個問題就被轉(zhuǎn)化為一個優(yōu)化問題。一個常用方法就是高等數(shù)學(xué)中的求導(dǎo),但是這里的問題由于參數(shù)不止一個,求導(dǎo)后計(jì)算導(dǎo)數(shù)等于0的運(yùn)算量很大,所以一般來說解決這個優(yōu)化問題使用的是梯度下降算法。梯度下降算法每次計(jì)算參數(shù)在當(dāng)前的梯度,然后讓參數(shù)向著梯度的反方向前進(jìn)一段距離,不斷重復(fù),直到梯度接近零時截止。一般這個時候,所有的參數(shù)恰好達(dá)到使損失函數(shù)達(dá)到一個最低值的狀態(tài)。

  在神經(jīng)網(wǎng)絡(luò)模型中,由于結(jié)構(gòu)復(fù)雜,每次計(jì)算梯度的代價很大。因此還需要使用反向傳播算法。反向傳播算法是利用了神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)進(jìn)行的計(jì)算。不一次計(jì)算所有參數(shù)的梯度,而是從后往前。首先計(jì)算輸出層的梯度,然后是第二個參數(shù)矩陣的梯度,接著是中間層的梯度,再然后是第一個參數(shù)矩陣的梯度,最后是輸入層的梯度。計(jì)算結(jié)束以后,所要的兩個參數(shù)矩陣的梯度就都有了。

  反向傳播算法可以直觀的理解為下圖。梯度的計(jì)算從后往前,一層層反向傳播。前綴E代表著相對導(dǎo)數(shù)的意思。

圖27 反向傳播算法

 

  反向傳播算法的啟示是數(shù)學(xué)中的鏈?zhǔn)椒▌t。在此需要說明的是,盡管早期神經(jīng)網(wǎng)絡(luò)的研究人員努力從生物學(xué)中得到啟發(fā),但從BP算法開始,研究者們更多地從數(shù)學(xué)上尋求問題的最優(yōu)解。不再盲目模擬人腦網(wǎng)絡(luò)是神經(jīng)網(wǎng)絡(luò)研究走向成熟的標(biāo)志。正如科學(xué)家們可以從鳥類的飛行中得到啟發(fā),但沒有必要一定要完全模擬鳥類的飛行方式,也能制造可以飛天的飛機(jī)。

  優(yōu)化問題只是訓(xùn)練中的一個部分。機(jī)器學(xué)習(xí)問題之所以稱為學(xué)習(xí)問題,而不是優(yōu)化問題,就是因?yàn)樗粌H要求數(shù)據(jù)在訓(xùn)練集上求得一個較小的誤差,在測試集上也要表現(xiàn)好。因?yàn)槟P妥罱K是要部署到?jīng)]有見過訓(xùn)練數(shù)據(jù)的真實(shí)場景。提升模型在測試集上的預(yù)測效果的主題叫做泛化(generalization),相關(guān)方法被稱作正則化(regularization)。神經(jīng)網(wǎng)絡(luò)中常用的泛化技術(shù)有權(quán)重衰減等。

  5.影響

  兩層神經(jīng)網(wǎng)絡(luò)在多個地方的應(yīng)用說明了其效用與價值。10年前困擾神經(jīng)網(wǎng)絡(luò)界的異或問題被輕松解決。神經(jīng)網(wǎng)絡(luò)在這個時候,已經(jīng)可以發(fā)力于語音識別,圖像識別,自動駕駛等多個領(lǐng)域。

  歷史總是驚人的相似,神經(jīng)網(wǎng)絡(luò)的學(xué)者們再次登上了《紐約時報》的專訪。人們認(rèn)為神經(jīng)網(wǎng)絡(luò)可以解決許多問題。就連娛樂界都開始受到了影響,當(dāng)年的《終結(jié)者》電影中的阿諾都趕時髦地說一句:我的CPU是一個神經(jīng)網(wǎng)絡(luò)處理器,一個會學(xué)習(xí)的計(jì)算機(jī)。

  但是神經(jīng)網(wǎng)絡(luò)仍然存在若干的問題:盡管使用了BP算法,一次神經(jīng)網(wǎng)絡(luò)的訓(xùn)練仍然耗時太久,而且困擾訓(xùn)練優(yōu)化的一個問題就是局部最優(yōu)解問題,這使得神經(jīng)網(wǎng)絡(luò)的優(yōu)化較為困難。同時,隱藏層的節(jié)點(diǎn)數(shù)需要調(diào)參,這使得使用不太方便,工程和研究人員對此多有抱怨。

  90年代中期,由Vapnik等人發(fā)明的SVM(Support Vector Machines,支持向量機(jī))算法誕生,很快就在若干個方面體現(xiàn)出了對比神經(jīng)網(wǎng)絡(luò)的優(yōu)勢:無需調(diào)參;高效;全局最優(yōu)解。基于以上種種理由,SVM迅速打敗了神經(jīng)網(wǎng)絡(luò)算法成為主流。

圖28 Vladimir Vapnik

 

  神經(jīng)網(wǎng)絡(luò)的研究再次陷入了冰河期。當(dāng)時,只要你的論文中包含神經(jīng)網(wǎng)絡(luò)相關(guān)的字眼,非常容易被會議和期刊拒收,研究界那時對神經(jīng)網(wǎng)絡(luò)的不待見可想而知。

 

五. 多層神經(jīng)網(wǎng)絡(luò)(深度學(xué)習(xí))

  1.引子  

  在被人摒棄的10年中,有幾個學(xué)者仍然在堅(jiān)持研究。這其中的棋手就是加拿大多倫多大學(xué)的Geoffery Hinton教授。

  2006年,Hinton在《Science》和相關(guān)期刊上發(fā)表了論文,首次提出了“深度信念網(wǎng)絡(luò)”的概念與傳統(tǒng)的訓(xùn)練方式不同,“深度信念網(wǎng)絡(luò)”有一個“預(yù)訓(xùn)練”(pre-training)的過程,這可以方便的讓神經(jīng)網(wǎng)絡(luò)中的權(quán)值找到一個接近最優(yōu)解的值,之后再使用“微調(diào)”(fine-tuning)技術(shù)來對整個網(wǎng)絡(luò)進(jìn)行優(yōu)化訓(xùn)練。這兩個技術(shù)的運(yùn)用大幅度減少了訓(xùn)練多層神經(jīng)網(wǎng)絡(luò)的時間。他給多層神經(jīng)網(wǎng)絡(luò)相關(guān)的學(xué)習(xí)方法賦予了一個新名詞--“深度學(xué)習(xí)”。

   很快,深度學(xué)習(xí)在語音識別領(lǐng)域暫露頭角。接著,2012年,深度學(xué)習(xí)技術(shù)又在圖像識別領(lǐng)域大展拳腳。Hinton與他的學(xué)生在ImageNet競賽中,用多層的卷積神經(jīng)網(wǎng)絡(luò)成功地對包含一千類別的一百萬張圖片進(jìn)行了訓(xùn)練,取得了分類錯誤率15%的好成績,這個成績比第二名高了近11個百分點(diǎn),充分證明了多層神經(jīng)網(wǎng)絡(luò)識別效果的優(yōu)越性

  在這之后,關(guān)于深度神經(jīng)網(wǎng)絡(luò)的研究與應(yīng)用不斷涌現(xiàn)。

圖29 Geoffery Hinton 

 

  由于篇幅原因,本文不介紹CNN(Conventional Neural Network,卷積神經(jīng)網(wǎng)絡(luò))與RNN(Recurrent Neural Network,遞歸神經(jīng)網(wǎng)絡(luò))的架構(gòu),下面我們只討論普通的多層神經(jīng)網(wǎng)絡(luò)。

  2.結(jié)構(gòu)

  我們延續(xù)兩層神經(jīng)網(wǎng)絡(luò)的方式來設(shè)計(jì)一個多層神經(jīng)網(wǎng)絡(luò)。

  在兩層神經(jīng)網(wǎng)絡(luò)的輸出層后面,繼續(xù)添加層次。原來的輸出層變成中間層,新加的層次成為新的輸出層。所以可以得到下圖。

圖30 多層神經(jīng)網(wǎng)絡(luò)

 

  依照這樣的方式不斷添加,我們可以得到更多層的多層神經(jīng)網(wǎng)絡(luò)。公式推導(dǎo)的話其實(shí)跟兩層神經(jīng)網(wǎng)絡(luò)類似,使用矩陣運(yùn)算的話就僅僅是加一個公式而已。

  在已知輸入a(1),參數(shù)W(1)W(2)W(3)的情況下,輸出z的推導(dǎo)公式如下:

     g(W(1) * a(1)) = a(2)

    g(W(2) * a(2)) = a(3);

g(W(3) * a(3)) = z;

 

  多層神經(jīng)網(wǎng)絡(luò)中,輸出也是按照一層一層的方式來計(jì)算。從最外面的層開始,算出所有單元的值以后,再繼續(xù)計(jì)算更深一層。只有當(dāng)前層所有單元的值都計(jì)算完畢以后,才會算下一層。有點(diǎn)像計(jì)算向前不斷推進(jìn)的感覺。所以這個過程叫做“正向傳播”

  下面討論一下多層神經(jīng)網(wǎng)絡(luò)中的參數(shù)。

  首先我們看第一張圖,可以看出W(1)中有6個參數(shù),W(2)中有4個參數(shù),W(3)中有6個參數(shù),所以整個神經(jīng)網(wǎng)絡(luò)中的參數(shù)有16個(這里我們不考慮偏置節(jié)點(diǎn),下同)。

 

圖31 多層神經(jīng)網(wǎng)絡(luò)(較少參數(shù))

 

  假設(shè)我們將中間層的節(jié)點(diǎn)數(shù)做一下調(diào)整。第一個中間層改為3個單元,第二個中間層改為4個單元。

  經(jīng)過調(diào)整以后,整個網(wǎng)絡(luò)的參數(shù)變成了33個。

 

圖32 多層神經(jīng)網(wǎng)絡(luò)(較多參數(shù))

 

  雖然層數(shù)保持不變,但是第二個神經(jīng)網(wǎng)絡(luò)的參數(shù)數(shù)量卻是第一個神經(jīng)網(wǎng)絡(luò)的接近兩倍之多,從而帶來了更好的表示(represention)能力。表示能力是多層神經(jīng)網(wǎng)絡(luò)的一個重要性質(zhì),下面會做介紹。

  在參數(shù)一致的情況下,我們也可以獲得一個“更深”的網(wǎng)絡(luò)。

 

圖33 多層神經(jīng)網(wǎng)絡(luò)(更深的層次)

 

  上圖的網(wǎng)絡(luò)中,雖然參數(shù)數(shù)量仍然是33,但卻有4個中間層,是原來層數(shù)的接近兩倍。這意味著一樣的參數(shù)數(shù)量,可以用更深的層次去表達(dá)。

  3.效果

  與兩層層神經(jīng)網(wǎng)絡(luò)不同。多層神經(jīng)網(wǎng)絡(luò)中的層數(shù)增加了很多。

  增加更多的層次有什么好處?更深入的表示特征,以及更強(qiáng)的函數(shù)模擬能力。

  更深入的表示特征可以這樣理解,隨著網(wǎng)絡(luò)的層數(shù)增加,每一層對于前一層次的抽象表示更深入。在神經(jīng)網(wǎng)絡(luò)中,每一層神經(jīng)元學(xué)習(xí)到的是前一層神經(jīng)元值的更抽象的表示。例如第一個隱藏層學(xué)習(xí)到的是“邊緣”的特征,第二個隱藏層學(xué)習(xí)到的是由“邊緣”組成的“形狀”的特征,第三個隱藏層學(xué)習(xí)到的是由“形狀”組成的“圖案”的特征,最后的隱藏層學(xué)習(xí)到的是由“圖案”組成的“目標(biāo)”的特征。通過抽取更抽象的特征來對事物進(jìn)行區(qū)分,從而獲得更好的區(qū)分與分類能力。

  關(guān)于逐層特征學(xué)習(xí)的例子,可以參考下圖。

 

圖34 多層神經(jīng)網(wǎng)絡(luò)(特征學(xué)習(xí))

 

  更強(qiáng)的函數(shù)模擬能力是由于隨著層數(shù)的增加,整個網(wǎng)絡(luò)的參數(shù)就越多。而神經(jīng)網(wǎng)絡(luò)其實(shí)本質(zhì)就是模擬特征與目標(biāo)之間的真實(shí)關(guān)系函數(shù)的方法,更多的參數(shù)意味著其模擬的函數(shù)可以更加的復(fù)雜,可以有更多的容量(capcity)去擬合真正的關(guān)系。

  通過研究發(fā)現(xiàn),在參數(shù)數(shù)量一樣的情況下,更深的網(wǎng)絡(luò)往往具有比淺層的網(wǎng)絡(luò)更好的識別效率。這點(diǎn)也在ImageNet的多次大賽中得到了證實(shí)。從2012年起,每年獲得ImageNet冠軍的深度神經(jīng)網(wǎng)絡(luò)的層數(shù)逐年增加,2015年最好的方法GoogleNet是一個多達(dá)22層的神經(jīng)網(wǎng)絡(luò)。

  在最新一屆的ImageNet大賽上,目前拿到最好成績的MSRA團(tuán)隊(duì)的方法使用的更是一個深達(dá)152層的網(wǎng)絡(luò)!關(guān)于這個方法更多的信息有興趣的可以查閱ImageNet網(wǎng)站。

  4.訓(xùn)練

  在單層神經(jīng)網(wǎng)絡(luò)時,我們使用的激活函數(shù)是sgn函數(shù)。到了兩層神經(jīng)網(wǎng)絡(luò)時,我們使用的最多的是sigmoid函數(shù)。而到了多層神經(jīng)網(wǎng)絡(luò)時,通過一系列的研究發(fā)現(xiàn),ReLU函數(shù)在訓(xùn)練多層神經(jīng)網(wǎng)絡(luò)時,更容易收斂,并且預(yù)測性能更好。因此,目前在深度學(xué)習(xí)中,最流行的非線性函數(shù)是ReLU函數(shù)。ReLU函數(shù)不是傳統(tǒng)的非線性函數(shù),而是分段線性函數(shù)。其表達(dá)式非常簡單,就是y=max(x,0)。簡而言之,在x大于0,輸出就是輸入,而在x小于0時,輸出就保持為0。這種函數(shù)的設(shè)計(jì)啟發(fā)來自于生物神經(jīng)元對于激勵的線性響應(yīng),以及當(dāng)?shù)陀谀硞€閾值后就不再響應(yīng)的模擬。

  在多層神經(jīng)網(wǎng)絡(luò)中,訓(xùn)練的主題仍然是優(yōu)化和泛化。當(dāng)使用足夠強(qiáng)的計(jì)算芯片(例如GPU圖形加速卡)時,梯度下降算法以及反向傳播算法在多層神經(jīng)網(wǎng)絡(luò)中的訓(xùn)練中仍然工作的很好。目前學(xué)術(shù)界主要的研究既在于開發(fā)新的算法,也在于對這兩個算法進(jìn)行不斷的優(yōu)化,例如,增加了一種帶動量因子(momentum)的梯度下降算法。 

  在深度學(xué)習(xí)中,泛化技術(shù)變的比以往更加的重要。這主要是因?yàn)樯窠?jīng)網(wǎng)絡(luò)的層數(shù)增加了,參數(shù)也增加了,表示能力大幅度增強(qiáng),很容易出現(xiàn)過擬合現(xiàn)象因此正則化技術(shù)就顯得十分重要。目前,Dropout技術(shù),以及數(shù)據(jù)擴(kuò)容(Data-Augmentation)技術(shù)是目前使用的最多的正則化技術(shù)。

  5.影響

  目前,深度神經(jīng)網(wǎng)絡(luò)在人工智能界占據(jù)統(tǒng)治地位。但凡有關(guān)人工智能的產(chǎn)業(yè)報道,必然離不開深度學(xué)習(xí)。神經(jīng)網(wǎng)絡(luò)界當(dāng)下的四位引領(lǐng)者除了前文所說的Ng,Hinton以外,還有CNN的發(fā)明人Yann Lecun,以及《Deep Learning》的作者Bengio。

  前段時間一直對人工智能持謹(jǐn)慎態(tài)度的馬斯克,搞了一個OpenAI項(xiàng)目,邀請Bengio作為高級顧問。馬斯克認(rèn)為,人工智能技術(shù)不應(yīng)該掌握在大公司如Google,F(xiàn)acebook的手里,更應(yīng)該作為一種開放技術(shù),讓所有人都可以參與研究。馬斯克的這種精神值得讓人敬佩。

   

圖35 Yann LeCun(左)和 Yoshua Bengio(右)

 

  多層神經(jīng)網(wǎng)絡(luò)的研究仍在進(jìn)行中。現(xiàn)在最為火熱的研究技術(shù)包括RNN,LSTM等,研究方向則是圖像理解方面。圖像理解技術(shù)是給計(jì)算機(jī)一幅圖片,讓它用語言來表達(dá)這幅圖片的意思。ImageNet競賽也在不斷召開,有更多的方法涌現(xiàn)出來,刷新以往的正確率。

 

六. 回顧

  1.影響  

  我們回顧一下神經(jīng)網(wǎng)絡(luò)發(fā)展的歷程。神經(jīng)網(wǎng)絡(luò)的發(fā)展歷史曲折蕩漾,既有被人捧上天的時刻,也有摔落在街頭無人問津的時段,中間經(jīng)歷了數(shù)次大起大落。

  從單層神經(jīng)網(wǎng)絡(luò)(感知器)開始,到包含一個隱藏層的兩層神經(jīng)網(wǎng)絡(luò),再到多層的深度神經(jīng)網(wǎng)絡(luò),一共有三次興起過程。詳見下圖。

 

圖36 三起三落的神經(jīng)網(wǎng)絡(luò)

 

  上圖中的頂點(diǎn)與谷底可以看作神經(jīng)網(wǎng)絡(luò)發(fā)展的高峰與低谷。圖中的橫軸是時間,以年為單位。縱軸是一個神經(jīng)網(wǎng)絡(luò)影響力的示意表示。如果把1949年Hebb模型提出到1958年的感知機(jī)誕生這個10年視為落下(沒有興起)的話,那么神經(jīng)網(wǎng)絡(luò)算是經(jīng)歷了“三起三落”這樣一個過程,跟“小平”同志類似。俗話說,天將降大任于斯人也,必先苦其心志,勞其筋骨。經(jīng)歷過如此多波折的神經(jīng)網(wǎng)絡(luò)能夠在現(xiàn)階段取得成功也可以被看做是磨礪的積累吧。

  歷史最大的好處是可以給現(xiàn)在做參考。科學(xué)的研究呈現(xiàn)螺旋形上升的過程,不可能一帆風(fēng)順。同時,這也給現(xiàn)在過分熱衷深度學(xué)習(xí)與人工智能的人敲響警鐘,因?yàn)檫@不是第一次人們因?yàn)樯窠?jīng)網(wǎng)絡(luò)而瘋狂了。1958年到1969年,以及1985年到1995,這兩個十年間人們對于神經(jīng)網(wǎng)絡(luò)以及人工智能的期待并不現(xiàn)在低,可結(jié)果如何大家也能看的很清楚。

  因此,冷靜才是對待目前深度學(xué)習(xí)熱潮的最好辦法。如果因?yàn)樯疃葘W(xué)習(xí)火熱,或者可以有“錢景”就一窩蜂的涌入,那么最終的受害人只能是自己。神經(jīng)網(wǎng)絡(luò)界已經(jīng)兩次有被人們捧上天了的境況,相信也對于捧得越高,摔得越慘這句話深有體會。因此,神經(jīng)網(wǎng)絡(luò)界的學(xué)者也必須給這股熱潮澆上一盆水,不要讓媒體以及投資家們過分的高看這門技術(shù)。很有可能,三十年河?xùn)|,三十年河西,在幾年后,神經(jīng)網(wǎng)絡(luò)就再次陷入谷底。根據(jù)上圖的歷史曲線圖,這是很有可能的。

  2.效果  

  下面說一下神經(jīng)網(wǎng)絡(luò)為什么能這么火熱?簡而言之,就是其學(xué)習(xí)效果的強(qiáng)大。隨著神經(jīng)網(wǎng)絡(luò)的發(fā)展,其表示性能越來越強(qiáng)。

  從單層神經(jīng)網(wǎng)絡(luò),到兩層神經(jīng)網(wǎng)絡(luò),再到多層神經(jīng)網(wǎng)絡(luò),下圖說明了,隨著網(wǎng)絡(luò)層數(shù)的增加,以及激活函數(shù)的調(diào)整,神經(jīng)網(wǎng)絡(luò)所能擬合的決策分界平面的能力。

 

圖37 表示能力不斷增強(qiáng)

 

  可以看出,隨著層數(shù)增加,其非線性分界擬合能力不斷增強(qiáng)。圖中的分界線并不代表真實(shí)訓(xùn)練出的效果,更多的是示意效果。

  神經(jīng)網(wǎng)絡(luò)的研究與應(yīng)用之所以能夠不斷地火熱發(fā)展下去,與其強(qiáng)大的函數(shù)擬合能力是分不開關(guān)系的。

  3.外因  

  當(dāng)然,光有強(qiáng)大的內(nèi)在能力,并不一定能成功。一個成功的技術(shù)與方法,不僅需要內(nèi)因的作用,還需要時勢與環(huán)境的配合。神經(jīng)網(wǎng)絡(luò)的發(fā)展背后的外在原因可以被總結(jié)為:更強(qiáng)的計(jì)算性能,更多的數(shù)據(jù),以及更好的訓(xùn)練方法。只有滿足這些條件時,神經(jīng)網(wǎng)絡(luò)的函數(shù)擬合能力才能得已體現(xiàn),見下圖。

 

圖38 發(fā)展的外在原因

 

  之所以在單層神經(jīng)網(wǎng)絡(luò)年代,Rosenblat無法制作一個雙層分類器,就在于當(dāng)時的計(jì)算性能不足,Minsky也以此來打壓神經(jīng)網(wǎng)絡(luò)。但是Minsky沒有料到,僅僅10年以后,計(jì)算機(jī)CPU的快速發(fā)展已經(jīng)使得我們可以做兩層神經(jīng)網(wǎng)絡(luò)的訓(xùn)練,并且還有快速的學(xué)習(xí)算法BP。

  但是在兩層神經(jīng)網(wǎng)絡(luò)快速流行的年代。更高層的神經(jīng)網(wǎng)絡(luò)由于計(jì)算性能的問題,以及一些計(jì)算方法的問題,其優(yōu)勢無法得到體現(xiàn)。直到2012年,研究人員發(fā)現(xiàn),用于高性能計(jì)算的圖形加速卡(GPU)可以極佳地匹配神經(jīng)網(wǎng)絡(luò)訓(xùn)練所需要的要求:高并行性,高存儲,沒有太多的控制需求,配合預(yù)訓(xùn)練等算法,神經(jīng)網(wǎng)絡(luò)才得以大放光彩。

  互聯(lián)網(wǎng)時代,大量的數(shù)據(jù)被收集整理,更好的訓(xùn)練方法不斷被發(fā)現(xiàn)。所有這一切都滿足了多層神經(jīng)網(wǎng)絡(luò)發(fā)揮能力的條件。

  時勢造英雄”,正如Hinton2006年的論文里說道的

  “... provided that computers were fast enough, data sets were big enough, and the initial weights were close enough to a good solution. All three conditions are now satisfied.

 

  外在條件的滿足也是神經(jīng)網(wǎng)絡(luò)從神經(jīng)元得以發(fā)展到目前的深度神經(jīng)網(wǎng)絡(luò)的重要因素。

  除此以外,一門技術(shù)的發(fā)揚(yáng)沒有“伯樂”也是不行的。在神經(jīng)網(wǎng)絡(luò)漫長的歷史中,正是由于許多研究人員的鍥而不舍,不斷鉆研,才能有了現(xiàn)在的成就。前期的Rosenblat,Rumelhart沒有見證到神經(jīng)網(wǎng)絡(luò)如今的流行與地位。但是在那個時代,他們?yōu)樯窠?jīng)網(wǎng)絡(luò)的發(fā)展所打下的基礎(chǔ),卻會永遠(yuǎn)流傳下去,不會退色。

 

七. 展望

  1.量子計(jì)算

  回到我們對神經(jīng)網(wǎng)絡(luò)歷史的討論,根據(jù)歷史趨勢圖來看,神經(jīng)網(wǎng)絡(luò)以及深度學(xué)習(xí)會不會像以往一樣再次陷入谷底?作者認(rèn)為,這個過程可能取決于量子計(jì)算機(jī)的發(fā)展。

  根據(jù)一些最近的研究發(fā)現(xiàn),人腦內(nèi)部進(jìn)行的計(jì)算可能是類似于量子計(jì)算形態(tài)的東西。而且目前已知的最大神經(jīng)網(wǎng)絡(luò)跟人腦的神經(jīng)元數(shù)量相比,仍然顯得非常小,僅不及1%左右。所以未來真正想實(shí)現(xiàn)人腦神經(jīng)網(wǎng)絡(luò)的模擬,可能需要借助量子計(jì)算的強(qiáng)大計(jì)算能力。

  各大研究組也已經(jīng)認(rèn)識到了量子計(jì)算的重要性。谷歌就在開展量子計(jì)算機(jī)D-wave的研究,希望用量子計(jì)算來進(jìn)行機(jī)器學(xué)習(xí),并且在前段時間有了突破性的進(jìn)展。國內(nèi)方面,阿里和中科院合作成立了量子計(jì)算實(shí)驗(yàn)室,意圖進(jìn)行量子計(jì)算的研究。

  如果量子計(jì)算發(fā)展不力,仍然需要數(shù)十年才能使我們的計(jì)算能力得以突飛猛進(jìn)的發(fā)展,那么缺少了強(qiáng)大計(jì)算能力的神經(jīng)網(wǎng)絡(luò)可能會無法一帆風(fēng)順的發(fā)展下去。這種情況可以類比為80-90年時期神經(jīng)網(wǎng)絡(luò)因?yàn)橛?jì)算能力的限制而被低估與忽視。假設(shè)量子計(jì)算機(jī)真的能夠與神經(jīng)網(wǎng)絡(luò)結(jié)合,并且助力真正的人工智能技術(shù)的誕生,而且量子計(jì)算機(jī)發(fā)展需要10年的話,那么神經(jīng)網(wǎng)絡(luò)可能還有10年的發(fā)展期。直到那時期以后,神經(jīng)網(wǎng)絡(luò)才能真正接近實(shí)現(xiàn)AI這一目標(biāo)。

 

圖39 量子計(jì)算

 

  2.人工智能

  最后,作者想簡單地談?wù)剬δ壳叭斯ぶ悄艿目捶ākm然現(xiàn)在人工智能非常火熱,但是距離真正的人工智能還有很大的距離。就拿計(jì)算機(jī)視覺方向來說,面對稍微復(fù)雜一些的場景,以及易于混淆的圖像,計(jì)算機(jī)就可能難以識別。因此,這個方向還有很多的工作要做。

  就普通人看來,這么辛苦的做各種實(shí)驗(yàn),以及投入大量的人力就是為了實(shí)現(xiàn)一些不及孩童能力的視覺能力,未免有些不值。但是這只是第一步。雖然計(jì)算機(jī)需要很大的運(yùn)算量才能完成一個普通人簡單能完成的識圖工作,但計(jì)算機(jī)最大的優(yōu)勢在于并行化與批量推廣能力。使用計(jì)算機(jī)以后,我們可以很輕易地將以前需要人眼去判斷的工作交給計(jì)算機(jī)做,而且?guī)缀鯖]有任何的推廣成本。這就具有很大的價值。正如火車剛誕生的時候,有人嘲笑它又笨又重,速度還沒有馬快。但是很快規(guī)模化推廣的火車就替代了馬車的使用。人工智能也是如此。這也是為什么目前世界上各著名公司以及政府都對此熱衷的原因。

  目前看來,神經(jīng)網(wǎng)絡(luò)要想實(shí)現(xiàn)人工智能還有很多的路要走,但方向至少是正確的,下面就要看后來者的不斷努力了。

圖40 人工智能

 

八 總結(jié)

  本文回顧了神經(jīng)網(wǎng)絡(luò)的發(fā)展歷史,從神經(jīng)元開始,歷經(jīng)單層神經(jīng)網(wǎng)絡(luò),兩層神經(jīng)網(wǎng)絡(luò),直到多層神經(jīng)網(wǎng)絡(luò)。在歷史介紹中穿插講解神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu),分類效果以及訓(xùn)練方法等。本文說明了神經(jīng)網(wǎng)絡(luò)內(nèi)部實(shí)際上就是矩陣計(jì)算,在程序中的實(shí)現(xiàn)沒有“點(diǎn)”和“線”的對象。本文說明了神經(jīng)網(wǎng)絡(luò)強(qiáng)大預(yù)測能力的根本,就是多層的神經(jīng)網(wǎng)絡(luò)可以無限逼近真實(shí)的對應(yīng)函數(shù),從而模擬數(shù)據(jù)之間的真實(shí)關(guān)系。除此之外,本文回顧了神經(jīng)網(wǎng)絡(luò)發(fā)展的歷程,分析了神經(jīng)網(wǎng)絡(luò)發(fā)展的外在原因,包括計(jì)算能力的增強(qiáng),數(shù)據(jù)的增多,以及方法的創(chuàng)新等。最后,本文對神經(jīng)網(wǎng)絡(luò)的未來進(jìn)行了展望,包括量子計(jì)算與神經(jīng)網(wǎng)絡(luò)結(jié)合的可能性,以及探討未來人工智能發(fā)展的前景與價值。

 

九. 后記

  本篇文章可以視為作者一年來對神經(jīng)網(wǎng)絡(luò)的理解與總結(jié),包括實(shí)驗(yàn)的體會,書籍的閱讀,以及思考的火花等。神經(jīng)網(wǎng)絡(luò)雖然重要,但學(xué)習(xí)并不容易。這主要是由于其結(jié)構(gòu)圖較為難懂,以及歷史發(fā)展的原因,導(dǎo)致概念容易混淆,一些介紹的博客與網(wǎng)站內(nèi)容新舊不齊。本篇文章著眼于這些問題,沒有太多的數(shù)學(xué)推導(dǎo),意圖以一種簡單的,直觀的方式對神經(jīng)網(wǎng)絡(luò)進(jìn)行講解。在2015年最后一天終于寫完。希望本文可以對各位有所幫助。

 

 

  作者很感謝能夠閱讀到這里的讀者。如果看完覺得好的話,還請輕輕點(diǎn)一下贊,你們的鼓勵就是作者繼續(xù)行文的動力。本文的備注部分是一些對神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)的建議,供補(bǔ)充閱讀與參考。

  

  目前為止,EasyPR的1.4版已經(jīng)將神經(jīng)網(wǎng)絡(luò)(ANN)訓(xùn)練的模塊加以開放,開發(fā)者們可以使用這個模塊來進(jìn)行自己的字符模型的訓(xùn)練。有興趣的可以下載

 

十. 備注

  神經(jīng)網(wǎng)絡(luò)雖然很重要,但是對于神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí),卻并不容易。這些學(xué)習(xí)困難主要來自以下三個方面:概念,類別,教程。下面簡單說明這三點(diǎn)。

  1.概念

  對于一門技術(shù)的學(xué)習(xí)而言,首先最重要的是弄清概念。只有將概念理解清楚,才能順暢的進(jìn)行后面的學(xué)習(xí)。由于神經(jīng)網(wǎng)絡(luò)漫長的發(fā)展歷史,經(jīng)常會有一些概念容易混淆,讓人學(xué)習(xí)中產(chǎn)生困惑。這里面包括歷史的術(shù)語,不一致的說法,以及被遺忘的研究等。 

  歷史的術(shù)語

  這個的代表就是多層感知器(MLP)這個術(shù)語。起初看文獻(xiàn)時很難理解的一個問題就是,為什么神經(jīng)網(wǎng)絡(luò)又有另一個名稱:MLP。其實(shí)MLP(Multi-Layer Perceptron)的名稱起源于50-60年代的感知器(Perceptron)。由于我們在感知器之上又增加了一個計(jì)算層,因此稱為多層感知器。值得注意的是,雖然叫“多層”,MLP一般都指的是兩層(帶一個隱藏層的)神經(jīng)網(wǎng)絡(luò)。

  MLP這個術(shù)語屬于歷史遺留的產(chǎn)物。現(xiàn)在我們一般就說神經(jīng)網(wǎng)絡(luò),以及深度神經(jīng)網(wǎng)絡(luò)。前者代表帶一個隱藏層的兩層神經(jīng)網(wǎng)絡(luò),也是EasyPR目前使用的識別網(wǎng)絡(luò),后者指深度學(xué)習(xí)的網(wǎng)絡(luò)。

  不一致的說法

  這個最明顯的代表就是損失函數(shù)loss function,這個還有兩個說法是跟它完全一致的意思,分別是殘差函數(shù)error function,以及代價函數(shù)cost function。loss function是目前深度學(xué)習(xí)里用的較多的一種說法,caffe里也是這么叫的。cost function則是Ng在coursera教學(xué)視頻里用到的統(tǒng)一說法。這三者都是同一個意思,都是優(yōu)化問題所需要求解的方程。雖然在使用的時候不做規(guī)定,但是在聽到各種講解時要心里明白。

  再來就是權(quán)重weight和參數(shù)parameter的說法,神經(jīng)網(wǎng)絡(luò)界由于以前的慣例,一般會將訓(xùn)練得到的參數(shù)稱之為權(quán)重,而不像其他機(jī)器學(xué)習(xí)方法就稱之為參數(shù)。這個需要記住就好。不過在目前的使用慣例中,也有這樣一種規(guī)定。那就是非偏置節(jié)點(diǎn)連接上的值稱之為權(quán)重,而偏置節(jié)點(diǎn)上的值稱之為偏置,兩者統(tǒng)一起來稱之為參數(shù)。

  另外一個同義詞就是激活函數(shù)active function和轉(zhuǎn)移函數(shù)transfer function了。同樣,他們代表一個意思,都是疊加的非線性函數(shù)的說法。

  被遺忘的研究

  由于神經(jīng)網(wǎng)絡(luò)發(fā)展歷史已經(jīng)有70年的漫長歷史,因此在研究過程中,必然有一些研究分支屬于被遺忘階段。這里面包括各種不同的網(wǎng)絡(luò),例如SOM(Self-Organizing Map,自組織特征映射網(wǎng)絡(luò)),SNN(Synergetic Neural Network,協(xié)同神經(jīng)網(wǎng)絡(luò)),ART(Adaptive Resonance Theory,自適應(yīng)共振理論網(wǎng)絡(luò))等等。所以看歷史文獻(xiàn)時會看到許多沒見過的概念與名詞。

  有些歷史網(wǎng)絡(luò)甚至?xí)匦鲁蔀樾碌难芯繜狳c(diǎn),例如RNN與LSTM就是80年代左右開始的研究,目前已經(jīng)是深度學(xué)習(xí)研究中的重要一門技術(shù),在語音與文字識別中有很好的效果。 

  對于這些易于混淆以及弄錯的概念,務(wù)必需要多方參考文獻(xiàn),理清上下文,這樣才不會在學(xué)習(xí)與閱讀過程中迷糊。

  2.類別

  下面談一下關(guān)于神經(jīng)網(wǎng)絡(luò)中的不同類別。

  其實(shí)本文的名字“神經(jīng)網(wǎng)絡(luò)淺講”并不合適,因?yàn)楸疚牟⒉皇侵v的是“神經(jīng)網(wǎng)絡(luò)”的內(nèi)容,而是其中的一個子類,也是目前最常說的前饋神經(jīng)網(wǎng)絡(luò)。根據(jù)下圖的分類可以看出。

 

圖41 神經(jīng)網(wǎng)絡(luò)的類別

 

  神經(jīng)網(wǎng)絡(luò)其實(shí)是一個非常寬泛的稱呼,它包括兩類,一類是用計(jì)算機(jī)的方式去模擬人腦,這就是我們常說的ANN(人工神經(jīng)網(wǎng)絡(luò)),另一類是研究生物學(xué)上的神經(jīng)網(wǎng)絡(luò),又叫生物神經(jīng)網(wǎng)絡(luò)。對于我們計(jì)算機(jī)人士而言,肯定是研究前者。

  在人工神經(jīng)網(wǎng)絡(luò)之中,又分為前饋神經(jīng)網(wǎng)絡(luò)和反饋神經(jīng)網(wǎng)絡(luò)這兩種。那么它們兩者的區(qū)別是什么呢?這個其實(shí)在于它們的結(jié)構(gòu)圖。我們可以把結(jié)構(gòu)圖看作是一個有向圖。其中神經(jīng)元代表頂點(diǎn),連接代表有向邊。對于前饋神經(jīng)網(wǎng)絡(luò)中,這個有向圖是沒有回路的。你可以仔細(xì)觀察本文中出現(xiàn)的所有神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)圖,確認(rèn)一下。而對于反饋神經(jīng)網(wǎng)絡(luò)中,結(jié)構(gòu)圖的有向圖是有回路的。反饋神經(jīng)網(wǎng)絡(luò)也是一類重要的神經(jīng)網(wǎng)絡(luò)。其中Hopfield網(wǎng)絡(luò)就是反饋神經(jīng)網(wǎng)絡(luò)。深度學(xué)習(xí)中的RNN也屬于一種反饋神經(jīng)網(wǎng)絡(luò)。

  具體到前饋神經(jīng)網(wǎng)絡(luò)中,就有了本文中所分別描述的三個網(wǎng)絡(luò):單層神經(jīng)網(wǎng)絡(luò),雙層神經(jīng)網(wǎng)絡(luò),以及多層神經(jīng)網(wǎng)絡(luò)。深度學(xué)習(xí)中的CNN屬于一種特殊的多層神經(jīng)網(wǎng)絡(luò)。另外,在一些Blog中和文獻(xiàn)中看到的BP神經(jīng)網(wǎng)絡(luò)是什么?其實(shí)它們就是使用了反向傳播BP算法的兩層前饋神經(jīng)網(wǎng)絡(luò)。也是最普遍的一種兩層神經(jīng)網(wǎng)絡(luò)。

  通過以上分析可以看出,神經(jīng)網(wǎng)絡(luò)這種說法其實(shí)是非常廣義的,具體在文章中說的是什么網(wǎng)絡(luò),需要根據(jù)文中的內(nèi)容加以區(qū)分。

  3.教程

  如何更好的學(xué)習(xí)神經(jīng)網(wǎng)絡(luò),認(rèn)真的學(xué)習(xí)一門課程或者看一本著作都是很有必要的。

  說到網(wǎng)絡(luò)教程的話,這里必須說一下Ng的機(jī)器學(xué)習(xí)課程。對于一個初學(xué)者而言,Ng的課程視頻是非常有幫助的。Ng一共開設(shè)過兩門機(jī)器學(xué)習(xí)公開課程:一個是2003年在Standford開設(shè)的,面向全球的學(xué)生,這個視頻現(xiàn)在可以在網(wǎng)易公開課上找到;另一個是2010年專門為Coursera上的用戶開設(shè)的,需要登陸Coursera上才能學(xué)習(xí)。

  但是,需要注意點(diǎn)是,這兩個課程對待神經(jīng)網(wǎng)絡(luò)的態(tài)度有點(diǎn)不同。早些的課程一共有20節(jié)課,Ng花了若干節(jié)課去專門講SVM以及SVM的推導(dǎo),而當(dāng)時的神經(jīng)網(wǎng)絡(luò),僅僅放了幾段視頻,花了大概不到20分鐘(一節(jié)課60分鐘左右)。而到了后來的課程時,總共10節(jié)的課程中,Ng給了完整的兩節(jié)給神經(jīng)網(wǎng)絡(luò),詳細(xì)介紹了神經(jīng)網(wǎng)絡(luò)的反向傳播算法。同時給SVM只有一節(jié)課,并且沒有再講SVM的推導(dǎo)過程。下面兩張圖分別是Ng介紹神經(jīng)網(wǎng)絡(luò)的開篇,可以大致看出一些端倪。

 

圖42 Ng與神經(jīng)網(wǎng)絡(luò)

 

  為什么Ng對待神經(jīng)網(wǎng)絡(luò)的反應(yīng)前后相差那么大?事實(shí)上就是深度學(xué)習(xí)的原因。Ng實(shí)踐了深度學(xué)習(xí)的效果,認(rèn)識到深度學(xué)習(xí)的基礎(chǔ)--神經(jīng)網(wǎng)絡(luò)的重要性。這就是他在后面重點(diǎn)介紹神經(jīng)網(wǎng)絡(luò)的原因。總之,對于神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)而言,我更推薦Coursera上的。因?yàn)樵谀莻€時候,Ng才是真正的把神經(jīng)網(wǎng)絡(luò)作為一門重要的機(jī)器學(xué)習(xí)方法去傳授。你可以從他上課的態(tài)度中感受到他的重視,以及他希望你能學(xué)好的期望。

 

版權(quán)說明:

  本文中的所有文字,圖片,代碼的版權(quán)都是屬于作者和博客園共同所有。歡迎轉(zhuǎn)載,但是務(wù)必注明作者與出處。任何未經(jīng)允許的剽竊以及爬蟲抓取都屬于侵權(quán),作者和博客園保留所有權(quán)利。

  

參考文獻(xiàn):

  1.Neural Networks

  2.Andrew Ng Neural Networks 

  3.神經(jīng)網(wǎng)絡(luò)簡史

  4.中科院 史忠植 神經(jīng)網(wǎng)絡(luò) 講義

  5.深度學(xué)習(xí) 胡曉林

 

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
深度學(xué)習(xí)基礎(chǔ)
博客 | 閑話神經(jīng)網(wǎng)絡(luò)
深度學(xué)習(xí)入門:幾幅手稿講解CNN
TensorFlow構(gòu)建繪制和解釋人工神經(jīng)網(wǎng)絡(luò)
UFLDL 10 建立分類用深度學(xué)習(xí)網(wǎng)絡(luò) (含梯度彌散的原因)
分布式機(jī)器學(xué)習(xí)框架-TensorFlow on Spark(中)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

主站蜘蛛池模板: 射洪县| 嘉祥县| 德化县| 滨海县| 繁峙县| 托里县| 云南省| 苏尼特右旗| 台中市| 漯河市| 青海省| 淄博市| 随州市| 卢龙县| 浙江省| 凯里市| 保定市| 樟树市| 水城县| 南投市| 四平市| 双鸭山市| 贵阳市| 威宁| 宿州市| 阳西县| 宝兴县| 浪卡子县| 德化县| 林甸县| 长岛县| 桦川县| 朝阳市| 北川| 英超| 准格尔旗| 原阳县| 县级市| 定日县| 夏河县| 师宗县|