目錄
?
一、DP的前世
? 1.perceptron
? ?2.NN
? ?3.DP
二、DP的基礎知識
1.convolution
2.padding
3.pooling
4.Flatten
5.fully connected
6.dropout
一、DP的前世
深度學習發展至今經歷頗為曲折,上世紀起源,火熱起來也是20世紀初的時候,具體時間如下圖所示:
? ? ? ? ? ? ? ? ? ? ? ?
? 1.perceptron
? ? ? ?深度學習(DP)的基礎來源于19世紀50年代,起初是叫“perceptron”(翻譯為感知機/感知器等),包含有輸入層、輸出層和一個隱藏層。輸入的特征向量通過隱藏層變換到達輸出層,由輸出層得到分類結果。但早期的單層感知機存在一個嚴重的問題——它對稍微復雜一些的函數都無能為力(如異或操作)。
?
? ?2.NN
? ? ? 19世紀80年代左右為實現復雜函數功能(如異或、非線性可分等問題),提出“multi-layer perceptron”(多層感知機)/neural network(神經網絡)來解決相應問題。主要為加入了隱層概念、非線性激活函數(sigmoid/tanh等)、back propagation(反向傳播算法)和Optimizer(優化算法,梯度下降、mini-batch等)。
? ? ? ?此時跨入NN時代,但由于神經網絡的層數和其實現的功能掛鉤:即隨著神經網絡層數的加深,Optimizer越來越容易陷入局部最優解和梯度消失。(具體來說,我們常常使用sigmoid作為神經元的輸入輸出函數。對于幅度為1的信號,在BP反向傳播梯度時,每傳遞一層,梯度衰減為原來的0.25。層數一多,梯度指數衰減后低層基本上接受不到有效的訓練信號。)
? ?3.DP
? ? ? ?直至2006年由Hition提出了深度學習的概念“解決”上述問題(實際上只是用一些巧妙的手段最大程度的緩解上述問題),迎來深度學習的熱潮,其隱藏層增至7層。后來為“解決”梯度消失,加入了ReLU等函數,形成了如今的DNN,如下圖所示。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ?再后來,由于圖像處理等需要局部的信息,這時引入卷積核和max-pooling等操作來解決相應的問題,所以產生了CNN;與此同時,由于要解決時序的問題,產生了RNN,后期的LSTM等都是RNN為解決時間上的梯度消失而生成的網絡。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??RNN示意圖
而在實際應用中,上述網絡層都是靈活連接,以便更好的解決實際生成問題。
二、DP的基礎知識
DP基礎知識較為繁雜,為簡單入門說起,就直接由經典的VGG16模型說起。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? VGG16模型示意圖
如上圖所示,模型包括輸入層、convolution、pooling、fully connected和輸出層,其中包括padding、Flatten和dropout等操作。
1.convolution
? ? ? ?卷積過程是基于一個小矩陣,也就是kernel(卷積核),在上面所說的每層像素矩陣上不斷按stride(步長)掃過去的,掃到數與卷積核對應位置的數相乘,然后求總和,每掃一次,得到一個值,全部掃完則生成一個新的矩陣。類似于濾波過程。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??convolution示意圖
2.padding
? ? ? ?一般使用的都是Zero padding,細心的人就會發現上述convolution過程中若輸入是 n X m 的大小,輸出應該為 (n-1)X(m-1)的大小才對,但是這樣會容易導致邊界上的特征丟失以及其他錯誤,所以常規做法就是在輸入Image的邊界上加入一圈0,這樣輸出也為n X m的大小。
? ? ? ?如下圖所示,紅色的為原來的輸入層,在進行convolution前在其邊界加一圈0,即灰色格子。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? padding示意圖
3.pooling
pooling相當于降維采樣,我的理解是為了減少計算量以及避免特征重復等問題。pooling有兩種,包括maxpooling和meanpooling,常用的是maxpooling。pooling的具體操作就是在一個小矩陣區域內,取該區域的最大值或平均值來代替該區域。
?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? pooling操作示意圖
4.Flatten
Flatten 是指將多維的矩陣拉開,變成一維向量來表示。
5.fully connected
fully connected,簡稱FC,即全連接層。其作用表現為“分類層”(個人覺得該描述不是十分準確,但又找不到更合適的描述),將上層數據映射到樣本標記空間的作用。其實FC和卷積層類似,只不過是特殊的卷積層,其卷積核大小為上層特征大小的卷積運算,卷積后的結果為一個節點,就對應全連接層的一個點。
6.dropout
dropout其實是為了解決過擬合問題的。其操作過程:在一次循環中先隨機選擇神經層中的一些單元并將其臨時隱藏,然后再進行該次循環中神經網絡的訓練和優化過程。在下一次循環中,又將隱藏另外一些神經元,如此直至訓練結束。
由于dropout較難理解,加入一個生動的例子來進行講解。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?dropout示意圖
參考文獻:
1.https://www.leiphone.com/news/201702/ZwcjmiJ45aW27ULB.html
2.書籍《深度學習之tensorflow》