卷積神經網絡(Convolutional Neural Network, CNN)
CNN 是一種前饋神經網絡,通常由一個或多個卷積層(Convolutional Layer)和全連接層(Fully Connected Layer,對應經典的 NN)組成,此外也會包括池化層(Pooling Layer)。
CNN 的結構使得它易於利用輸入數據的二維結構。
注意: 前饋神經網絡 (Feedforward NN)指每個神經元只與前一層的神經元相連,數據從前向後單向傳播的 NN。其內部結構不會形成有向環(對比後面要講到的 RNN/LSTM)。
它是最早被髮明的簡單 NN 類型,前面講到的 NN、DNN 都是前饋神經網絡。
每個卷積層由若干卷積單元組成——可以想象成經典 NN 的神經元,只不過激活函數變成了卷積運算。
卷積運算是有其嚴格的數學定義的。不過在 CNN 的應用中,卷積運算的形式是數學中卷積定義的一個特例,它的目的是提取輸入的不同特徵。
一般情況下,從直觀角度來看,CNN 的卷積運算,就是下圖這樣:
上圖中左側的藍色大矩陣表示輸入數據,在藍色大矩陣上不斷運動的綠色小矩陣叫做卷積核,每次卷積核運動到一個位置,它的每個元素就與其覆蓋的輸入數據對應元素相乘求積,然後再將整個卷積核內求積的結果累加,結果填注到右側紅色小矩陣中。
卷積核橫向每次平移一列,縱向每次平移一行。最後將輸入數據矩陣完全覆蓋後,生成完整的紅色小矩陣就是卷積運算的結果。
CNN 經常被用於處理圖像,那麼對應的輸入數據就是一張圖片的像素信息。
對於這樣的輸入數據,第一層卷積層可能只能提取一些低級的特徵,如邊緣、線條、角等,更多層的網絡再從低級特徵中迭代提取更復雜的特徵。
CNN 結構相對簡單,可以使用反向傳播算法進行訓練,這使它成為了一種頗具吸引力的深度學習網絡模型。
除了圖像處理,CNN 也會被應用到語音、文本處理等其他領域。
循環神經網(Recurrent Neural Network,RNN)
RNN,循環神經網絡,也有人將它翻譯為 遞歸神經網絡 。從這個名字就可以想到,它的結構中存在著“環”。
確實,RNN 和 NN/DNN 的數據單一方向傳遞不同。RNN 的神經元接受的輸入除了“前輩”的輸出,還有自身的狀態信息,其狀態信息在網絡中循環傳遞。
RNN 的結構用圖形勾畫出來,是下圖這樣的:
圖 1
注意:圖中的 A A 並不是一個神經元,而是一個神經網絡塊,可以簡單理解為神經網絡的一個隱層。
RNN 的這種結構,使得它很適合應用於序列數據的處理,比如文本、語音、視頻等。這類數據的樣本間存在順序關係(往往是時序關係),每個樣本和它之前的樣本存在關聯。
RNN 把所處理的數據序列視作時間序列,在每一個時刻 t t ,每個 RNN 的神經元接受兩個輸入:當前時刻的輸入樣本 xt x t ,和上一時刻自身的輸出 ht-1
。
t 時刻的輸出:
圖1 經過進一步簡化,將隱層的自連接重疊,就成了下圖:
圖2
上圖展示的是最簡單的 RNN 結構,此外 RNN 還存在著很多變種,比如雙向 RNN(Bidirectional RNN),深度雙向 RNN(Deep Bidirectional RNN)等。
RNN 的作用最早體現在手寫識別上,後來在語音和文本處理中也做出了巨大的貢獻,近年來也不乏將其應用於圖像處理的嘗試。
長短時記憶(Long Short Term Memory,LSTM)
LSTM 可以被簡單理解為是一種神經元更加複雜的 RNN,處理時間序列中當間隔和延遲較長時,LSTM 通常比 RNN 效果好。
相較於構造簡單的 RNN 神經元,LSTM 的神經元要複雜得多,每個神經元接受的輸入除了當前時刻樣本輸入,上一個時刻的輸出,還有一個元胞狀態(Cell State),LSTM 神經元結構請參見下圖:
LSTM 神經元中有三個門。
遺忘門(Forget Gate):接受xt 和
0 ht-1 為輸入,輸出一個 0到1 1 之間的值,用於決定在多大程度上保留上一個時刻的元胞狀態ct-1。1表示全保留,0表示全放棄。
輸入門(Input Gate): 用於決定將哪些信息存儲在這個時刻的元胞狀態 ct
c t 中。
輸出門(Output Gate):用於決定輸出哪些信息。
RNN vs LSTM
雖然從連接上看,LSTM 和 RNN 頗為相似,但兩者的神經元卻相差巨大,我們可以看一下下面兩個結構圖的對比:
LSTM 的結構圖
RNN 的結構圖
注意:如果把 LSTM 的遺忘門強行置0,輸入門置1,輸出門置1,則 LSTM 就變成了標準 RNN。
可見 LSTM 比 RNN 複雜得多,要訓練的參數也多得多。
但是,LSTM 在很大程度上緩解了一個在 RNN 訓練中非常突出的問題: 梯度消失/爆炸(Gradient Vanishing/Exploding) 。這個問題不是 RNN 獨有的,深度學習模型都有可能遇到,但是對於 RNN 而言,特別嚴重。
梯度消失和梯度爆炸雖然表現出來的結果正好相反,但出現的 原因 卻是一樣的。
因為神經網絡的訓練中用到反向傳播算法,而這個算法是基於梯度下降的——在目標的負梯度方向上對參數進行調整。如此一來就要對激活函數求梯度。
又因為 RNN 存在循環結構,因此激活函數的梯度會乘上多次,這就導致:
- 如果梯度小於1,那麼隨著層數增多,梯度更新信息將會以指數形式衰減,即發生了 梯度消失(Gradient Vanishing) ;
- 如果梯度大於1,那麼隨著層數增多,梯度更新將以指數形式膨脹,即發生 梯度爆炸(Gradient Exploding) 。
因為三個門,尤其是遺忘門的存在,LSTM 在訓練時能夠控制梯度的收斂性,從而梯度消失/爆炸的問題得以緩解,同時也能夠保持長期的記憶性。
果然,LSTM 在語音處理、機器翻譯、圖像說明、手寫生成、圖像生成等領域都表現出了不俗的戰績。
閱讀更多 sandag 的文章