AlexNet深度學習網絡-結構簡介


參考博文:https://www.cnblogs.com/wangguchangqing/p/10333370.html

  第一個典型的CNN是LeNet5網絡結構,但是第一個引起大家注意的網絡卻是AlexNet,也就是文章《ImageNet Classification with Deep Convolutional Neural Networks》介紹的網絡結構。這篇文章的網絡是在2012年的ImageNet競賽中取得冠軍的一個模型整理后發表的文章。作者是多倫多大學的Alex Krizhevsky等人。Alex Krizhevsky其實是Hinton的學生,這個團隊領導者是Hinton,那么Hinton是誰呢?這就要好好說說了,網上流行說 Hinton, LeCun和Bengio是神經網絡領域三巨頭,LeCun就是LeNet5作者(Yann LeCun),昨天的文章就提到了這個人。而今天的主角雖然不是Hinton,但卻和他有關系,這篇的論文第一作者是Alex,所以網絡結構稱為AlexNet。這篇論文很有意思,因為我讀完這篇論文之后,沒有遇到比較難以理解的地方,遇到的都是之前學過的概念,比如Relu,dropout。之前學的時候只知道Relu是怎么一回事,今天才知道它真正的來源。這篇文章在2012年發表,文章中的模型參加的競賽是ImageNet LSVRC-2010,該ImageNet數據集有1.2 million幅高分辨率圖像,總共有1000個類別。測試集分為top-1和top-5,並且分別拿到了37.5%和17%的error rates。這樣的結果在當時已經超過了之前的工藝水平。

  AlexNet網絡結構在整體上類似於LeNet,都是先卷積然后在全連接。但在細節上有很大不同。AlexNet更為復雜。AlexNet有60 million個參數和65000個 神經元,五層卷積,三層全連接網絡,最終的輸出層是1000通道的softmax。AlexNet利用了兩塊GPU進行計算,大大提高了運算效率,並且在ILSVRC-2012競賽中獲得了top-5測試的15.3%error rate, 獲得第二名的方法error rate 是 26.2%,可以說差距是非常的大了,足以說明這個網絡在當時給學術界和工業界帶來的沖擊之大。

一些背景

  在計算機視覺領域object detection & recognition 通常用機器學習的方法來解決。為了提高識別的效果,我們可以通過收集更多的可訓練的數據來讓模型的泛化性能提高。目前,在以一萬為單位的數量級層面的數據(稱為簡單的識別任務)已經獲得了非常好的性能,例如:MNIST 手寫數字識別任務,最好的性能已經達到了<0.3%的誤差。但是現實中的物體存在相當多的變化屬性,所以學習識別它們需要更多的數據。事實上,小的圖像訓練數據有很多的缺點,無論以我們的直覺想還是理論證明都是有依據的,理論上論文《Why is real-world visual object recognition hard?》給出了研究方法。隨着互聯網技術的發展,以及智能手機的普及圖像數據獲取可以說越來越容易。所以就有組織去收集這些現實中事物的圖像並進行標記和分割。例如:LabelMe(Labelme: a database and web-based tool for image annotation. ),包含了成百上千的全分割圖像。 ImageNet(ImageNet: A Large-Scale Hierarchical Image Database. I),包含15 billion 標記的高分辨率圖像,包含超過了22000種現實中的事物。

  文章中說該模型有5層卷積,去掉任意一層都會使結果不好,所以這個網絡的深度似乎是很重要的,這樣的話難免引起我們的思考,記得不知道哪位大神在一篇論文中證明了,神經網絡可以模擬任意多項式,只要神經元數量足夠多,並且和深度關系不大。但這里的實驗卻表示深度會對網絡的性能有影響。文章中還提到了,他們用5-6天訓練了這個模型,並且限制了網絡的大小,因為現有的硬件智能允許那么大的內存,用更好的設備還可以獲得更好的效果。

AlexNet特點

  AlexNet是在LeNet的基礎上加深了網絡的結構,學習更豐富更高維的圖像特征。AlexNet的特點:

  • 更深的網絡結構
  • 使用層疊的卷積層,即卷積層+卷積層+池化層來提取圖像的特征
  • 使用Dropout抑制過擬合
  • 使用數據增強Data Augmentation抑制過擬合
  • 使用Relu替換之前的sigmoid的作為激活函數
  • 多GPU訓練

ReLu作為激活函數

  在最初的感知機模型中,輸入和輸出的關系如下:

y=iwixi+by=∑iwixi+b

  只是單純的線性關系,這樣的網絡結構有很大的局限性:即使用很多這樣結構的網絡層疊加,其輸出和輸入仍然是線性關系,無法處理有非線性關系的輸入輸出。因此,對每個神經元的輸出做個非線性的轉換也就是,將上面就加權求和iwixi+b∑iwixi+b的結果輸入到一個非線性函數,也就是激活函數中。 這樣,由於激活函數的引入,多個網絡層的疊加就不再是單純的線性變換,而是具有更強的表現能力。
Sigmoid

  在最初,sigmoidsigmoid和tanhtanh函數最常用的激活函數。在網絡層數較少時,sigmoidsigmoid函數的特性能夠很好的滿足激活函數的作用:它把一個實數壓縮至0到1之間,當輸入的數字非常大的時候,結果會接近1;當輸入非常大的負數時,則會得到接近0的結果。這種特性,能夠很好的模擬神經元在受刺激后,是否被激活向后傳遞信息(輸出為0,幾乎不被激活;輸出為1,完全被激活)。
sigmoidsigmoid一個很大的問題就是梯度飽和。 觀察sigmoidsigmoid函數的曲線,當輸入的數字較大(或較小)時,其函數值趨於不變,其導數變的非常的小。這樣,在層數很多的的網絡結構中,進行反向傳播時,由於很多個很小的sigmoidsigmoid導數累成,導致其結果趨於0,權值更新較慢。

ReLu
針對sigmoidsigmoid梯度飽和導致訓練收斂慢的問題,在AlexNet中引入了ReLU。ReLU是一個分段線性函數,小於等於0則輸出為0;大於0的則恆等輸出。相比於sigmoidsigmoid,ReLU有以下有點:

    • 計算開銷下。sigmoidsigmoid的正向傳播有指數運算,倒數運算,而ReLu是線性輸出;反向傳播中,sigmoidsigmoid有指數運算,而ReLU有輸出的部分,導數始終為1.
    • 梯度飽和問題
    • 稀疏性。Relu會使一部分神經元的輸出為0,這樣就造成了網絡的稀疏性,並且減少了參數的相互依存關系,緩解了過擬合問題的發生。

  這里有個問題,前面提到,激活函數要用非線性的,是為了使網絡結構有更強的表達的能力。那這里使用ReLU本質上卻是個線性的分段函數,是怎么進行非線性變換的。把神經網絡看着一個巨大的變換矩陣MM,其輸入為所有訓練樣本組成的矩陣AA,輸出為矩陣BB: B=MAB=M⋅A這里的MM是一個線性變換的話,則所有的訓練樣本AA進行了線性變換輸出為BB。那么對於ReLU來說,由於其是分段的,0的部分可以看着神經元沒有激活,不同的神經元激活或者不激活,其神經玩過組成的變換矩陣是不一樣的。

  設有兩個訓練樣本 a1,a2,其訓練時神經網絡組成的變換矩陣為M1,M2M1,M2。 由於M1M1變換對應的神經網絡中激活神經元和M2M2是不一樣的,這樣M1,M2M1,M2實際上是兩個不同的線性變換。也就是說,每個訓練樣本使用的線性變換矩陣MiMi是不一樣的,在整個訓練樣本空間來說,其經歷的是非線性變換。

簡單來說,不同訓練樣本中的同樣的特征,在經過神經網絡學習時,流經的神經元是不一樣的(激活函數值為0的神經元不會被激活)。這樣,最終的輸出實際上是輸入樣本的非線性變換。

單個訓練樣本是線性變換,但是每個訓練樣本的線性變換是不一樣的,這樣整個訓練樣本集來說,就是非線性的變換。

數據增強

  神經網絡由於訓練的參數多,表能能力強,所以需要比較多的數據量,不然很容易過擬合。當訓練數據有限時,可以通過一些變換從已有的訓練數據集中生成一些新的數據,以快速地擴充訓練數據。對於圖像數據集來說,可以對圖像進行一些形變操作:

  • 翻轉
  • 隨機裁剪
  • 平移,顏色光照的變換
  • ...

AlexNet中對數據做了以下操作:

  1. 隨機裁剪,對256×256256×256的圖片進行隨機裁剪到227×227227×227,然后進行水平翻轉。
  2. 測試的時候,對左上、右上、左下、右下、中間分別做了5次裁剪,然后翻轉,共10個裁剪,之后對結果求平均。
  3. 對RGB空間做PCA(主成分分析),然后對主成分做一個(0, 0.1)的高斯擾動,也就是對顏色、光照作變換,結果使錯誤率又下降了1%。

層疊池化

  在LeNet中池化是不重疊的,即池化的窗口的大小和步長是相等的,如下

  在AlexNet中使用的池化(Pooling)卻是可重疊的,也就是說,在池化的時候,每次移動的步長小於池化的窗口長度。AlexNet池化的大小為3×3的正方形,每次池化移動步長為2,這樣就會出現重疊。重疊池化可以避免過擬合,這個策略貢獻了0.3%的Top-5錯誤率。與非重疊方案s=2z=2s=2,z=2相比,輸出的維度是相等的,並且能在一定程度上抑制過擬合。

局部相應歸一化

  

 Dropout

  這個是比較常用的抑制過擬合的方法了。引入Dropout主要是為了防止過擬合。在神經網絡中Dropout通過修改神經網絡本身結構來實現,對於某一層的神經元,通過定義的概率將神經元置為0,這個神經元就不參與前向和后向傳播,就如同在網絡中被刪除了一樣,同時保持輸入層與輸出層神經元的個數不變,然后按照神經網絡的學習方法進行參數更新。在下一次迭代中,又重新隨機刪除一些神經元(置為0),直至訓練結束。

  Dropout應該算是AlexNet中一個很大的創新,現在神經網絡中的必備結構之一。Dropout也可以看成是一種模型組合,每次生成的網絡結構都不一樣,通過組合多個模型的方式能夠有效地減少過擬合,Dropout只需要兩倍的訓練時間即可實現模型組合(類似取平均)的效果,非常高效。如下圖:

Alex網絡結構

上圖中的輸入是224×224224×224,不過經過計算(22411)/4=54.75(224−11)/4=54.75並不是論文中的55×5555×55,而使用227×227227×227作為輸入,則(22711)/4=55(227−11)/4=55

網絡包含8個帶權重的層;前5層是卷積層,剩下的3層是全連接層。最后一層全連接層的輸出是1000維softmax的輸入,softmax會產生1000類標簽的分布網絡包含8個帶權重的層;前5層是卷積層,剩下的3層是全連接層。最后一層全連接層的輸出是1000維softmax的輸入,softmax會產生1000類標簽的分布。

卷積層1,輸入為 224×224×3224 \times 224 \times 3224×224×3的圖像,卷積核的數量為96,論文中兩片GPU分別計算48個核; 卷積核的大小為 11×11×311 \times 11 \times 311×11×3; stride = 4, stride表示的是步長, pad = 0, 表示不擴充邊緣;
卷積后的圖形大小是怎樣的呢?
wide = (224 + 2 * padding - kernel_size) / stride + 1 = 54
height = (224 + 2 * padding - kernel_size) / stride + 1 = 54
dimention = 96
然后進行 (Local Response Normalized), 后面跟着池化pool_size = (3, 3), stride = 2, pad = 0 最終獲得第一層卷積的feature map
具體分析:

  

AlexNet參數數量

卷積層的參數 = 卷積核的數量 * 卷積核 + 偏置

  • C1: 96個11×11×311×11×3的卷積核,96×11×11×3+96=3484896×11×11×3+96=34848
  • C2: 2組,每組128個5×5×485×5×48的卷積核,(128×5×5×48+128)×2=307456(128×5×5×48+128)×2=307456
  • C3: 384個3×3×2563×3×256的卷積核,3×3×256×384+384=8851203×3×256×384+384=885120
  • C4: 2組,每組192個3×3×1923×3×192的卷積核,(3×3×192×192+192)×2=663936(3×3×192×192+192)×2=663936
  • C5: 2組,每組128個3×3×1923×3×192的卷積核,(3×3×192×128+128)×2=442624(3×3×192×128+128)×2=442624
  • FC6: 4096個6×6×2566×6×256的卷積核,6×6×256×4096+4096=377528326×6×256×4096+4096=37752832
  • FC7: 40964096+4096=167813124096∗4096+4096=16781312
  • output: 40961000=40960004096∗1000=4096000

卷積層 C2,C4,C5中的卷積核只和位於同一GPU的上一層的FeatureMap相連。從上面可以看出,參數大多數集中在全連接層,在卷積層由於權值共享,權值參數較少。

Keras實現

由於AlexNet是使用兩塊顯卡進行訓練的,其網絡結構的實際是分組進行的。並且,在C2,C4,C5上其卷積核只和上一層的同一個GPU上的卷積核相連。 對於單顯卡來說,並不適用,本文基於Keras的實現,忽略其關於雙顯卡的的結構,並且將局部歸一化操作換成了BN。其網絡結構如下:

AlexNet的論文下載地址:點擊打開鏈接


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM