歷史|從神經元到深度學習

本篇是 神經網路淺講:從神經元到深度學習 的筆記。

說明:層數不考慮輸入。

一, 單層神經網路(感知器)

1.引子

1958年,計算科學家Rosenblatt提出了由兩層神經元組成的神經網路。他給它起了一個名字–「感知器」(Perceptron)人們認為已經發現了智能的奧秘,許多學者和科研機構紛紛投入到神經網路的研究中。美國軍方大力資助了神經網路的研究,並認為神經網路比「原子彈工程」更重要。這段時間直到1969年才結束,這個時期可以看作神經網路的第一次高潮。

2.結構

3.效果

感知器類似一個邏輯回歸模型,可以做線性分類任務。 我們可以用決策分界來形象的表達分類的效果。決策分界就是在二維的數據平面中划出一條直線,當數據的維度是3維的時候,就是划出一個平面,當數據的維度是n維時,就是划出一個n-1維的超平面。

4.影響

感知器只能做簡單的線性分類任務。但是當時的人們熱情太過於高漲,並沒有人清醒的認識到這點。於是,當人工智慧領域的巨擘Minsky指出這點時,事態就發生了變化。

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

Minsky認為,如果將計算層增加到兩層,計算量則過大,而且沒有有效的學習演算法。所以,他認為研究更深層的網路是沒有價值的。

由於Minsky的巨大影響力以及書中呈現的悲觀態度,讓很多學者和實驗室紛紛放棄了神經網路的研究。神經網路的研究陷入了冰河期。這個時期又被稱為「AI winter」。

二. 兩層神經網路(多層感知器)

1.引子

Minsky說過單層神經網路無法解決異或問題。但是當增加一個計算層以後,兩層神經網路不僅可以解決異或問題,而且具有非常好的非線性分類效果。不過兩層神經網路的計算是一個問題,沒有一個較好的解法。

1986年,Rumelhar和Hinton等人提出了反向傳播(Backpropagation,BP)演算法,解決了兩層神經網路所需要的複雜計算量問題,從而帶動了業界使用兩層神經網路研究的熱潮。這時候的Hinton還很年輕,30年以後,正是他重新定義了神經網路,帶來了神經網路復甦的又一春。

2.結構

兩層神經網路除了包含一個輸入層,一個輸出層以外,還增加了一個中間層。此時,中間層和輸出層都是計算層。

使用矩陣運算來表達是很簡潔的,而且也不會受到節點數增多的影響(無論有多少節點參與運算,乘法兩端都只有一個變數)。因此神經網路的教程中大量使用矩陣運算來描述。

我們對神經網路的結構圖的討論中都沒有提到偏置節點(bias unit)。事實上,這些節點是默認存在的。它本質上是一個只含有存儲功能,且存儲值永遠為1的單元。在神經網路的每個層次中,除了輸出層以外,都會含有這樣一個偏置單元。正如線性回歸模型與邏輯回歸模型中的一樣。

在兩層神經網路中,我們不再使用sgn函數作為函數g,而是使用平滑函數sigmoid作為函數g。我們把函數g也稱作激活函數(active function)。

事實上,神經網路的本質就是通過參數與激活函數來擬合特徵與目標之間的真實函數關係。初學者可能認為畫神經網路的結構圖是為了在程序中實現這些圓圈與線,但在一個神經網路的程序中,既沒有「線」這個對象,也沒有「單元」這個對象。實現一個神經網路最需要的是線性代數庫。

3.效果

與單層神經網路不同。理論證明兩層神經網路可以無限逼近任意連續函數。也就是說,面對複雜的非線性分類任務,兩層(帶一個隱藏層)神經網路可以分類的很好。

下面就是一個例子(此兩圖來自colah的博客),紅色的線與藍色的線代表數據。而紅色區域和藍色區域代表由神經網路劃開的區域,兩者的分界線就是決策分界。

可以看到,這個兩層神經網路的決策分界是非常平滑的曲線,而且分類的很好。有趣的是,前面已經學到過,單層網路只能做線性分類任務。而兩層神經網路中的後一層也是線性分類層,應該只能做線性分類任務。為什麼兩個線性分類任務結合就可以做非線性分類任務?

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

可以看到,輸出層的決策分界仍然是直線。關鍵就是,從輸入層到隱藏層時,數據發生了空間變換。也就是說,兩層神經網路中,隱藏層對原始的數據進行了一個空間變換,使其可以被線性分類,然後輸出層的決策分界划出了一個線性分類分界線,對其進行分類。

這樣就導出了兩層神經網路可以做非線性分類的關鍵–隱藏層。聯想到我們一開始推導出的矩陣公式,我們知道,矩陣和向量相乘,本質上就是對向量的坐標空間進行一個變換。因此,隱藏層的參數矩陣的作用就是使得數據的原始坐標空間從線性不可分,轉換成了線性可分。

兩層神經網路通過兩層的線性模型模擬了數據內真實的非線性函數。因此,多層的神經網路的本質就是複雜函數擬合 。

隱藏層節點設計:在設計一個神經網路時,輸入層的節點數需要與特徵的維度匹配,輸出層的節點數要與目標的維度匹配。而中間層的節點數,卻是由設計者指定的。節點數設置的多少,卻會影響到整個模型的效果。目前業界沒有完善的理論來指導這個決策。一般是根據經驗來設置。較好的方法就是預先設定幾個可選值,通過切換這幾個值來看整個模型的預測效果,選擇效果最好的值作為最終選擇。這種方法又叫做Grid Search(網格搜索)。

實際例子: EasyPR 字元識別網路架構(下圖),它是一個中文車牌識別系統。

 EasyPR使用了字元的圖像去進行字元文字的識別。輸入是120維的向量。輸出是要預測的文字類別,共有65類((數字+字母+省份簡稱))。根據實驗,我們測試了一些隱藏層數目,發現當值為40時,整個網路在測試集上的效果較好,因此選擇網路的最終結構就是120,40,65。

4.訓練

 在Rosenblat提出的感知器模型中,模型中的參數可以被訓練,但是使用的方法較為簡單,並沒有使用目前機器學習中通用的方法,這導致其擴展性與適用性非常有限。從兩層神經網路開始,神經網路的研究人員開始使用機器學習相關的技術進行神經網路的訓練。例如用大量的數據(1000-10000左右),使用演算法進行優化等等,從而使得模型訓練可以獲得性能與數據利用上的雙重優勢。

定義損失函數(關於參數的函數)來衡量預測值與實際值的差距。梯度下降 讓參數向著梯度的反方向前進一段距離,不斷重複,直到梯度接近零時截止。一般這個時候,所有的參數恰好達到使損失函數達到一個最低值的狀態。

在神經網路模型中,由於結構複雜,每次計算梯度的代價很大。因此還需要使用反向傳播演算法。反向傳播演算法是利用了神經網路的結構進行的計算。不一次計算所有參數的梯度,而是從後往前。首先計算輸出層的梯度,然後是第二個參數矩陣的梯度,接著是中間層的梯度,再然後是第一個參數矩陣的梯度,最後是輸入層的梯度。計算結束以後,所要的兩個參數矩陣的梯度就都有了。

反向傳播演算法可以直觀的理解為下圖。梯度的計算從後往前,一層層反向傳播。前綴E代表著相對導數的意思。

反向傳播演算法的啟示是數學中的鏈式法則。在此需要說明的是,儘管早期神經網路的研究人員努力從生物學中得到啟發,但從BP演算法開始,研究者們更多地從數學上尋求問題的最優解。不再盲目模擬人腦網路是神經網路研究走向成熟的標誌。正如科學家們可以從鳥類的飛行中得到啟發,但沒有必要一定要完全模擬鳥類的飛行方式,也能製造可以飛天的飛機。

優化問題只是訓練中的一個部分。機器學習問題之所以稱為學習問題,而不是優化問題,就是因為它不僅要求數據在訓練集上求得一個較小的誤差,在測試集上也要表現好。因為模型最終是要部署到沒有見過訓練數據的真實場景。提升模型在測試集上的預測效果的主題叫做泛化(generalization),相關方法被稱作正則化(regularization)。神經網路中常用的泛化技術有權重衰減等。

5.影響

 兩層神經網路在多個地方的應用說明了其效用與價值。10年前困擾神經網路界的異或問題被輕鬆解決。神經網路在這個時候,已經可以發力於語音識別,圖像識別,自動駕駛等多個領域。

但是神經網路仍然存在若干的問題:儘管使用了BP演算法,一次神經網路的訓練仍然耗時太久,而且困擾訓練優化的一個問題就是局部最優解問題,這使得神經網路的優化較為困難。同時,隱藏層的節點數需要調參,這使得使用不太方便,工程和研究人員對此多有抱怨。

  90年代中期,由Vapnik等人發明的SVM(Support Vector Machines,支持向量機)演算法誕生,很快就在若干個方面體現出了對比神經網路的優勢:無需調參;高效;全局最優解。基於以上種種理由,SVM迅速打敗了神經網路演算法成為主流。

 神經網路的研究再次陷入了冰河期。當時,只要你的論文中包含神經網路相關的字眼,非常容易被會議和期刊拒收,研究界那時對神經網路的不待見可想而知。

三. 多層神經網路(深度學習)

 1.引子

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

  2006年,Hinton在《Science》和相關期刊上發表了論文,首次提出了「深度信念網路」的概念。與傳統的訓練方式不同,「深度信念網路」有一個「預訓練」(pre-training)的過程,這可以方便的讓神經網路中的權值找到一個接近最優解的值,之後再使用「微調」(fine-tuning)技術來對整個網路進行優化訓練。這兩個技術的運用大幅度減少了訓練多層神經網路的時間。他給多層神經網路相關的學習方法賦予了一個新名詞--「深度學習」。

  很快,深度學習在語音識別領域暫露頭角。接著,2012年,深度學習技術又在圖像識別領域大展拳腳。Hinton與他的學生在ImageNet競賽中,用多層的卷積神經網路成功地對包含一千類別的一百萬張圖片進行了訓練,取得了分類錯誤率15%的好成績,這個成績比第二名高了近11個百分點,充分證明了多層神經網路識別效果的優越性。

 2.結構

上圖,可以看出W

(1)

中有6個參數,W

(2)

中有4個參數,W

(3)

中有6個參數,所以整個神經網路中的參數有16個(這裡我們不考慮偏置節點,下同)。

經過調整以後,整個網路的參數變成了33個。

雖然層數保持不變,但是第二個神經網路的參數數量卻是第一個神經網路的接近兩倍之多,從而帶來了更好的表示(represention)能力。

在參數一致的情況下,我們也可以獲得一個「更深」的網路。

上圖的網路中,雖然參數數量仍然是33,但卻有4個中間層,是原來層數的接近兩倍。這意味著一樣的參數數量,可以用更深的層次去表達(可以更深入的表示特徵)。

3.效果

與兩層層神經網路不同。多層神經網路中的層數增加了很多。增加更多的層次 就可以更深入的表示特徵(深度),以及更強的函數模擬能力(參數數量)。

 更深入的表示特徵可以這樣理解,隨著網路的層數增加,每一層對於前一層次的抽象表示更深入。在神經網路中,每一層神經元學習到的是前一層神經元值的更抽象的表示。例如第一個隱藏層學習到的是「邊緣」的特徵,第二個隱藏層學習到的是由「邊緣」組成的「形狀」的特徵,第三個隱藏層學習到的是由「形狀」組成的「圖案」的特徵,最後的隱藏層學習到的是由「圖案」組成的「目標」的特徵。通過抽取更抽象的特徵來對事物進行區分,從而獲得更好的區分與分類能力。

更強的函數模擬能力是由於隨著層數的增加,整個網路的參數就越多。而神經網路其實本質就是模擬特徵與目標之間的真實關係函數的方法,更多的參數意味著其模擬的函數可以更加的複雜,可以有更多的容量(capcity)去擬合真正的關係。

  通過研究發現,在參數數量一樣的情況下,更深的網路往往具有比淺層的網路更好的識別效率。這點也在ImageNet的多次大賽中得到了證實。從2012年起,每年獲得ImageNet冠軍的深度神經網路的層數逐年增加,2015年最好的方法GoogleNet是一個多達22層的神經網路。在最新一屆的ImageNet大賽上,目前拿到最好成績的MSRA團隊的方法使用的更是一個深達152層的網路!關於這個方法更多的信息有興趣的可以查閱ImageNet網站。

4.訓練

  在單層神經網路時,我們使用的激活函數是sgn函數。到了兩層神經網路時,我們使用的最多的是sigmoid函數。而到了多層神經網路時,通過一系列的研究發現,ReLU函數在訓練多層神經網路時,更容易收斂,並且預測性能更好。因此,目前在深度學習中,最流行的非線性函數是ReLU函數。ReLU函數不是傳統的非線性函數,而是分段線性函數。其表達式非常簡單,就是y=max(x,0)。簡而言之,在x大於0,輸出就是輸入,而在x小於0時,輸出就保持為0。這種函數的設計啟發來自於生物神經元對於激勵的線性響應,以及當低於某個閾值後就不再響應的模擬。

  在多層神經網路中,訓練的主題仍然是優化和泛化。當使用足夠強的計算晶元(例如GPU圖形加速卡)時,梯度下降演算法以及反向傳播演算法在多層神經網路中的訓練中仍然工作的很好。目前學術界主要的研究既在於開發新的演算法,也在於對這兩個演算法進行不斷的優化,例如,增加了一種帶動量因子(momentum)的梯度下降演算法。 

  在深度學習中,泛化技術變的比以往更加的重要。這主要是因為神經網路的層數增加了,參數也增加了,表示能力大幅度增強,很容易出現過擬合現象。因此正則化技術就顯得十分重要。目前,Dropout技術,以及數據擴容(Data-Augmentation)技術是目前使用的最多的正則化技術。

5.影響

  目前,深度神經網路在人工智慧界佔據統治地位。但凡有關人工智慧的產業報道,必然離不開深度學習。神經網路界當下的四位引領者除了前文所說的Ng,Hinton以外,還有CNN的發明人Yann Lecun,以及《Deep Learning》的作者Bengio。

多層神經網路的研究仍在進行中。現在最為火熱的研究技術包括RNN,LSTM等,研究方向則是圖像理解方面。圖像理解技術是給計算機一幅圖片,讓它用語言來表達這幅圖片的意思。ImageNet競賽也在不斷召開,有更多的方法湧現出來,刷新以往的正確率。

四 回顧

  1.影響

  我們回顧一下神經網路發展的歷程。神經網路的發展歷史曲折蕩漾,既有被人捧上天的時刻,也有摔落在街頭無人問津的時段,中間經歷了數次大起大落。

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

 歷史最大的好處是可以給現在做參考。科學的研究呈現螺旋形上升的過程,不可能一帆風順。同時,這也給現在過分熱衷深度學習與人工智慧的人敲響警鐘,因為這不是第一次人們因為神經網路而瘋狂了。1958年到1969年,以及1985年到1995,這兩個十年間人們對於神經網路以及人工智慧的期待並不現在低,可結果如何大家也能看的很清楚。

因此,冷靜才是對待目前深度學習熱潮的最好辦法。如果因為深度學習火熱,或者可以有「錢景」就一窩蜂的湧入,那麼最終的受害人只能是自己。神經網路界已經兩次有被人們捧上天了的境況,相信也對於捧得越高,摔得越慘這句話深有體會。因此,神經網路界的學者也必須給這股熱潮澆上一盆水,不要讓媒體以及投資家們過分的高看這門技術。很有可能,三十年河東,三十年河西,在幾年後,神經網路就再次陷入谷底。根據上圖的歷史曲線圖,這是很有可能的。

2.效果

  下面說一下神經網路為什麼能這麼火熱?簡而言之,就是其學習效果的強大。隨著神經網路的發展,其表示性能越來越強。

  從單層神經網路,到兩層神經網路,再到多層神經網路,下圖說明了,隨著網路層數的增加,以及激活函數的調整,神經網路所能擬合的決策分界平面的能力。

 可以看出,隨著層數增加,其非線性分界擬合能力不斷增強。圖中的分界線並不代表真實訓練出的效果,更多的是示意效果。

  神經網路的研究與應用之所以能夠不斷地火熱發展下去,與其強大的函數擬合能力是分不開關係的。

3.外因

 當然,光有強大的內在能力,並不一定能成功。一個成功的技術與方法,不僅需要內因的作用,還需要時勢與環境的配合。神經網路的發展背後的外在原因可以被總結為:更強的計算性能,更多的數據,以及更好的訓練方法。只有滿足這些條件時,神經網路的函數擬合能力才能得已體現,見下圖。

之所以在單層神經網路年代,Rosenblat無法製作一個雙層分類器,就在於當時的計算性能不足,Minsky也以此來打壓神經網路。但是Minsky沒有料到,僅僅10年以後,計算機CPU的快速發展已經使得我們可以做兩層神經網路的訓練,並且還有快速的學習演算法BP。

  但是在兩層神經網路快速流行的年代。更高層的神經網路由於計算性能的問題,以及一些計算方法的問題,其優勢無法得到體現。直到2012年,研究人員發現,用於高性能計算的圖形加速卡(GPU)可以極佳地匹配神經網路訓練所需要的要求:高並行性,高存儲,沒有太多的控制需求,配合預訓練等演算法,神經網路才得以大放光彩。

  互聯網時代,大量的數據被收集整理,更好的訓練方法不斷被發現。所有這一切都滿足了多層神經網路發揮能力的條件。

外在條件的滿足也是神經網路從神經元得以發展到目前的深度神經網路的重要因素。

 除此以外,一門技術的發揚沒有「伯樂」也是不行的。在神經網路漫長的歷史中,正是由於許多研究人員的鍥而不捨,不斷鑽研,才能有了現在的成就。前期的Rosenblat,Rumelhart沒有見證到神經網路如今的流行與地位。但是在那個時代,他們為神經網路的發展所打下的基礎,卻會永遠流傳下去,不會退色。

備註: 神經網路分類

原文:

神經網路淺講:從神經元到深度學習


推薦閱讀:

二維可視圖講解神經元w,b參數的作用
關於深度學習的機理,優化和網路結構的一些個人觀點(二).
一個相關濾波跟蹤的簡單教程(附實現demo)

TAG:深度学习DeepLearning | 机器学习 |