1. 程式人生 > >幾種常見的神經網路瞭解

幾種常見的神經網路瞭解

神經網路技術起源-感知機

神經網路技術起源於上世紀五、六十年代,當時叫感知機(perceptron),擁有輸入層、輸出層和一個隱含層。輸入的特徵向量通過隱含層變換達到輸出層,在輸出層得到分類結果。早期感知機的推動者是Rosenblatt,當時感知器傳輸函式是用線拉動變阻器改變電阻的方法機械實現的。但是,Rosenblatt的單層感知機有個嚴重的問題,即它對稍微複雜一些的函式都無能為力,例如最為典型的異或操作。

多層感知機

隨著數學的發展,到上世紀八十年代Rumelhart、Williams、Hinton、LeCun等人發明了多層感知機(multilayer perceptron),多層感知機有多個隱含層,可以擺脫早期離散傳輸函式的束縛,使用sigmoid或tanh等連續函式模擬神經元對激勵的響應

,在訓練演算法上則使用Werbos發明的反向傳播BP演算法。這就是我們現在所說的神經網路NN。

多層感知機解決了之前無法模擬異或邏輯的缺陷,同時更多的層數也讓網路更能夠刻畫現實世界中的複雜情形。神經網路的層數直接決定了它對現實的刻畫能力-利用每層更少的神經元擬合更加複雜的函式。

隨著神經網路層數的加深,優化函式越來越容易陷入區域性最優解,並且這個陷阱越來越偏離真正的全域性最優。利用有限資料訓練的深層網路,效能不如較淺層網路。同時,另一個不可忽略的問題是隨著網路層數增加,梯度消失現象更加嚴重。例如使用sigmoid作為神經元的輸入輸出函式。對於幅度為1的訊號,在BP反向傳播梯度時,每傳遞一層,梯度衰減為原來的0.25.層數一多,梯度指數衰減後低層基本上接受不到有效的訓練訊號。

深度神經網路DNN

2006年,Hinton利用預訓練方法緩解了區域性最優解問題,將隱含層推動到了7層,神經網路真正意義上有了深度。深度沒有固定定義,在語音識別中4層神經網路就被認為是較深的,而在影象識別中20層以上的網路屢見不鮮。為了克服梯度消失,ReLU、maxout等傳輸函式代替了sigmoid,形成了如今DNN的基本形式。單從結構上來說全連線的DNN和多層感知機是沒有任何區別的。

全連線DNN的結構裡下層神經元和所有的上層神經元都能夠形成連線,帶來的潛在問題是引數數量的膨脹。

卷積神經網路CNN

對於CNN來說,並不是所有上下層神經元都能直接相連,而是通過卷積作為中介,同一個卷積核在所有影象內是共享的,影象通過卷積操作後仍然保留原先的位置關係。

迴圈神經網路RNN

全連線的DNN還存在另一個問題,無法對時間序列上的變化進行建模。然而,樣本出現的時間順序對於自然語言處理、語音識別、手寫體識別等應用非常重要。為了適應這種需求,就出現了迴圈神經網路。
在普通的全連線網路或CNN中,每層神經元的訊號只能向上一層傳播,樣本的處理在各個時刻獨立,因此又被稱為前向神經網路(Feed-forward Neural Network)。而在RNN中,神經元的輸出可以在下一個時間戳直接作用到自身。

長短時間記憶單元LSTM

RNN可以看成一個在時間上傳遞的神經網路,它的深度是時間的長度。梯度消失現象又在時間軸上出現了。對於t時刻來說,它產生的梯度在時間軸上向歷史傳播幾層之後就消失了,根本就無法影響太遙遠的過去。因此,這種影響也就只能維持若干個時間戳。

為了解決時間上的梯度消失,機器學習領域發展出了長短時記憶單元LSTM,通過門的開關實現時間上記憶功能,並防止梯度消失。

其他結構

RNN既然能夠繼承歷史資訊,是不是也能吸收點未來的資訊呢?因為在序列訊號分析中,如果能預知未來,對識別一定也是有所幫助的。因此就有了雙向RNN、雙向LSTM,同時利用歷史和未來的資訊。
事實上,不論是哪種網路,他們在實際應用中常常混合著使用,比如CNN和RNN在上層輸出之前往往會接上全連線層,很難說某個網路到底屬於哪個類別。

參考資料