AlexNet
2012年,Alex Krizhevsky(Hinton的學生)提出了AlexNet,它可以看做是LeNet的一個更深更寬版本。
這就是Gradient-Based Learning Applied to Document Recognition論文裡LeNet模型的架構。
LeNet 這個網絡雖然很小,但是它包含了卷積神經網絡的基本子產品:卷積層,池化層,全連結層。是其他深度學習模型的基礎。
但是由于當時的計算機性能(沒有GPU),還有資料樣本的限制等等原因沒有快速發展起來。
而AlexNet在論文ImageNet Classification with Deep Convolutional Neural Networks 中的架構如下:
可以看到整體的思想并沒有改變,但是卻引入了ReLU,Dropout和LRN等trick。
整個AlexNet包含了了八個需要訓練的層(不包括池化層),前五層是卷積層,後三層是全連接配接層。上圖之是以分開兩部分是因為作者使用了兩塊GPU訓練。
AlexNet的每層結構參數如下:
AlexNet主要用到的新技術包括:
1.使用了ReLU激活函數代替sigmoid激活函數
Relu函數:f(x)=max(0,x)
ReLU的有效性展現在兩個方面:
- 克服梯度消失的問題
- 加快訓練速度
而sigmoid會在網絡層數增加的時候帶來梯度彌散的問題。
2.使用Dropout随機忽略一部分神經元
dropout是指在深度學習網絡的訓練過程中,對于神經網絡單元,按照一定的機率将其暫時從網絡中丢棄。
對于dropout為何會有效,這要有兩種觀點:
參考http://blog.csdn.net/stdcoutzyx/article/details/49022443
1.受人類繁衍影響提出了dropout
論文Dropout: A Simple Way to Prevent Neural Networks from Overfitting裡面提到,Dropout類似于性别在生物進化中的角色,物種為了使适應不斷變化的環境,性别的出現有效的阻止了過拟合,即避免環境改變時物種可能面臨的滅亡。dropout也能達到同樣的效果,它迫使一個神經單元和随機挑選出來的其他神經單元能夠達到好的效果。消除減弱了神經元節點間的聯合适應性,增強了泛化能力。
2.dropout相當于一種ensemble
我們都知道在機器學習之中ensemble的模型能比單一模型更具有泛化性能,因為ensemble模型是多個單一模型的內建,然而對于訓練多個神經網絡模型的ensemble會出現耗時和容易過拟合的問題,而dropout是将某些神經元随機的丢棄,相當于每次訓練都得到一個比定義的模型更窄的模型。
這樣,在訓練的時候我們就似乎能夠獲得多個模型,而在測試的時候我們就不再使用dropout,相當于我們使用了多個模型的ensemble。
3.使用Max pooling代替Average pooling
此前CNN普遍使用average pooling,這樣會帶來模糊化的效果,并且論文中提出了讓步長小于池化核的尺寸,這樣池化層的輸出之間就會有重疊和覆寫,提升了特征的豐富性。max pooling更多的保留紋理資訊。average pooling更強調對整體特征資訊進行一層下采樣,在減少參數次元的貢獻上更大一點。
4.資料增強 data augmentation
随機地從原始圖像中截取區域,并水準翻轉,增加了資料量。如果沒有資料增強,CNN很可能會落入過拟合的尴尬局面,加入了資料增強之後可以提高模型的泛化性能。
VGGNet
VGGNet是google和牛津大學一起研發的卷積神經網絡。如下是VGGNet個級别的網絡結構圖
從圖中可以看出,該網絡結構有如下的特點:
(1)VGG全部使用3*3卷積核、2*2池化核,不斷加深網絡結構來提升性能。
(2)A到E網絡變深,參數量沒有增長很多,參數量主要在3個全連接配接層。
(3)訓練比較耗時的依然是卷積層,因計算量比較大。
(4)VGG有5段卷積,每段有2~3個卷積層,每段尾部用池化來縮小圖檔尺寸。
(5)每段内卷積核數一樣,越靠後的段卷積核數越多:64–128–256–512–512。
之是以使用3*3的卷積核堆疊起來是因為,這樣可以擴大局部的感受野的同時又降低了參數的數量,三個3*3的卷積層串聯相當于1個7*7的卷積層,但3個串聯的3*3的卷積層有更少的參數量,有更多的非線性變換(3次ReLU激活函數),使得CNN對特征的學習能力更強。
同時在訓練的時候有一個trick就是先訓練層數比較小的的簡單網絡,然後再複用這些簡單網絡的權重初始化後面幾個複雜的網絡,使得訓練的收斂更加快。
而在預測的時候,使用multi-scale的方法,将要預測的資料scale到一個比原來資料更小的尺寸同時預測,然後再最後使用平均的分類結果,提高了預測的準确率和圖檔的使用率。btw,訓練的時候也是用了multi-scale的方法做資料增強。
論文作者總結了幾個觀點包括:
1.LRN層的作用不大
2.越深的網絡效果越好
3.大一些的卷積核可以學習到更大的空間特征
在我看來就是一個成本和效率的問題,為了降低訓練的成本而使用了更小一點的卷積核(因為大的卷積核要訓練的參數比較多),至于越深的網絡越好,是因為有更多的非線性變換,在高維空間裡可以學到低維空間無法區分的特征。
AlexNet 和 VGGNet的對比
雖然VGGNet比AlexNet的參數要多,但反而需要更少的疊代次數就可以收斂,主要原因是更深的網絡和更小的卷積核帶來的隐式的正則化效果。
參考文獻:
1.ImageNet Classification with Deep Convolutional Neural Networks
2.VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGE-SCALE IMAGE RECOGNITION
3.《TensorFlow實戰》
4.https://blog.csdn.net/xbinworld/article/details/45619685
5.https://blog.csdn.net/malele4th/article/details/79404731