-
1 # Python與演算法社群
-
2 # 北航秦曾昌
從廣義上來講,深度學習也就是深度神經網路DNN,目前已經融合了各種各樣的神經網路結構,比如CNN、RNN及其各種變種結構。神經網路和深度學習已經相互交融。在這裡我們透過回顧神經網路的發展歷程,去搞清楚各種網路結構發展的初衷和他們之間的區別。
神經網路在上世紀五、六十年代就已經被提出來了,當時還不叫神經網路,而叫做perceptron,它有輸入層、輸出層和一個隱含層。輸入的特徵向量透過隱含層變換達到輸出層,在輸出層得到分類結果。
當時礙於計算機技術的落後,感知器傳輸函式是用線拉動變阻器改變電阻的方法機械實現的,試想一下當時的科學家在實驗室面對密密麻麻的導線的樣子,那時候硬體條件真的是太艱苦了。早期單層感知機的推動者是Rosenblatt,而單層感知機的最大問題我們都知道就是對稍複雜一些的函式都沒有辦法表達,比如:異或。因此當時的單層感知機是十分的雞肋了。
直到上世紀八十年代才Hinton等人提出了多層感知機(Multilayer Perceptron)克服了單層感知能力有限的問題。多層感知機的結構:
這時候的多層感知機就是我們現在說的全連線神經網路,它啟示我們神經網路的層數直接決定了它對問題的刻畫能力,但是隨著神經網路層數的加深,問題也逐漸凸顯,就是最佳化函式越來越容易陷入區域性最優解,偏離真正的全域性最優。利用有限資料訓練的深層網路,效能還不如較淺層網路(神經網路並不是越深越好)。與此同時,另一個嚴重的問題是隨著網路層數增加,“梯度消失”現象更加嚴重。比如在利用sigmoid作為神經元的啟用函式時,對於幅度為1的訊號,在反向傳播梯度時,每傳遞一層,梯度衰減為原來的0.25,隨著層數的增加,低層基本接受不到有效的梯度更新。
到了2006年,Hinton利用預訓練方法緩解了區域性最優解問題,將隱含層推動到了7層,也再一次激起了深度學習的熱潮。這裡所說的深度沒有確定標準,比如在語音識別領域中4層網路就能夠被認為是“較深的”,而在影象識別中20層以上的網路都十分常見。此外,為了解決梯度消失的問題,ReLU,tanH等啟用函式代替了sigmoid。此外,在2016年清華學霸何凱明提出的深度殘差網路,讓深度學習變得超級深,網路層數達到100多層。
至此,DNN的發展又面臨一個不可避免的問題——引數爆炸,網路的的深度到來的效能的提高,與此犧牲的是對訓練資料的大量需求和過擬合現象。
這時我們要引出卷積神經網路(CNN),CNN能以“卷積核”為中介,使得同一個卷積核在所有影象內是共享的,
透過CNN特有的卷積、池化操作能大幅度降低全連線神經網路的引數,利用有限資料也能得到效果良好的模型,CNN在捕捉影象的區域性特徵方面效果是有目共睹的。
但現實生活中,我們還有大量的時序資料需要處理,比如語音、文字等,面對這樣的問題,我們就需要召喚迴圈神經網路RNN以及它的各種變種了。在普通的全連線網路或CNN中,每層神經元的訊號只能向上一層傳播,樣本的處理在各個時刻獨立,因此又被成為前向神經網路(Feed-forward Neural Networks)。而在RNN中,神經元的輸出可以在下一個時間戳直接作用到自身,即第i層神經元在m時刻的輸入,除了(i-1)層神經元在該時刻的輸出外,還包括其自身在(m-1)時刻的輸出。表示成圖就是這樣的:
最後,不論是哪一種神經網路,在實際應用時,需要結合具體問題分析哪一種網路更加適合,而且各種神經網路之間也往往混搭。儘管神經網路的結構看起來千變萬化,但是隻要掌握了最基本的FCNN、CNN、RNN,其他的神經網路也很容易理解和學習。
回覆列表
我是知名網際網路公司的演算法工程師。這個問題有些體會。
神經網路是一種計算模型。存在邊的2個節點說明他們有關係,可以建立很多層的網路模型。神經網路模型可以逼近任意一個函式,不管是簡單的還是複雜的函式。
深度學習是基於神經網路模型的一種計算學習方法。大量的資料灌入模型,透過反向傳播,調參(邊的權重引數),不斷迭代後,誤差值逼近閾值,模型收斂。
因此,神經網路是模型,深度學習是方法,它基於神經網路模型學習。