2017CS231n李飛飛深度視覺識別筆記(九)——CNN架構

第九講 CNN架構


     上一章中討論了不同的深度學習框架,包括有TensorFlow、PyTorch、Caffe,這一章中將會討論CNN架構方面的內容。

  在這裏會深入探討那些ImageNet比賽獲勝者所用的最多的神經網絡架構,比如AlexNet、VGG、GoogleNet和ResNet。
  (1)LeNet

    它可以看作是通信網絡的第一個實例,並在實際應用中取得成功,使用步長爲1、大小爲5*5的卷積核來對第一層進行輸入,並且同樣的卷積層和池化層有好幾層以及在網絡的最後有一些全連接層,它在數字識別領域方面的應用去得到了成功。
   (2)AlexNet

    它是第一個在ImageNet的分類比賽中獲得成功的大型卷積神經網絡,同樣也是第一個基於深度學習的網絡結構;它的基礎架構是卷積層、池化層、歸一化層的混合,最後是一個全連接層。
    它的輸入是227*227*3的圖像矩陣,步長爲4,大小爲11*11的卷積核有96個,算出第一個卷積層的輸出數據體積爲:(227-11)/4+1=55,那麼最後輸出的空間維度是55*55*96;輸出的參數爲11*11*3*96=35K。
    這個架構中第一次使用了ReLU非線性函數;使用本地相應歸一化層,通過相鄰通道來歸一化響應,但是這並不太有效果,因爲它增加了大量的數據;爲了得到更好的效果,還使用了模型集成訓練多個模型對它們取平均從而獲得性能上的提升。
   (3)VGGNet

    VGG的思想是一個非常深的網絡,包含非常小的卷積核,它從AlexNet的8層擴展到了16~19層,關鍵是它使用很小的卷積核,只用3*3的卷積核。
    問題:爲什麼使用小的卷積核?
    答:當使用小的卷積核可以得到比較小的參數量,然後可以利用堆棧更多的參數不使用大的卷積核,這樣可以嘗試而更多的網絡和卷積,最終的效果比用7*7的卷積核有效接收範圍更好些。
    問題:3*3的卷積核步長1的有效接收範圍是什麼?
    答:輸入的全部空間區域,保證了3層網絡的頂層。   

  (4)GoogleNet

    GoogleNet是一個更深的網絡結構,它有22層,它嘗試設計一個網絡結構可以進行高效計算,採用了inception模塊,然後簡單在每一層的頂部搭這個模塊,網絡中沒有全連接層,節省了大量參數,比AlexNet少了12倍。
    那麼什麼是inception模塊呢?

    Inception模塊中隱含的思想是想要設計一個好的局部網絡拓撲,有了拓撲的想法就可以把它視爲一個網絡,然後堆放大量局部拓撲在每一層的頂部;在局部網絡中調用inception模塊要做的是對進入相同層的相同輸入並行應用不同的濾波操作,來自前面一層的輸入然後進行不同的卷積和池化操作,這樣就可以在不同的層得到不同的輸出,這些層將所有的濾波器輸出並在深度層上串聯起來,然後在最後得到一個張量輸出。
    案例:

    這裏輸入的Inception模塊是28*28*256,經過不同的卷積核處理後得到的輸出爲28*28*672,保留了相同的尺寸擴充了深度。
    爲了減少計算量,在其中可以嘗試添加一層瓶頸層(1*1的卷積層)幫助降低計算量,GoogleNet做的就是初始化這些模塊,然後將它們放入堆棧中。

 

     GoogleNet有22層,同時它有一個高效的Inception模塊,沒有全連接層,參數向量只有AlexNet的1/12。

 (5)ResNet

     ResNet這個想法是深度網絡的一次革命,它比之前提到的所有神經網絡架構都要深,有152層,也叫做殘差網絡。

      當在普通卷積神經網絡上堆疊越來越多的層時,會發生什麼?僅僅是通過持續擴展就能得到更深的層以及取得更好的效果嗎?

答:顯然不是,模型雖然更深卻也會變現的更差,如下圖的比較所示。

      所以解決方法是不僅僅堆疊這些層而是讓每層都嘗試學習一些所需函數的底層映射,殘差塊的輸入只是傳輸進來的輸入,使用這些塊嘗試並擬合殘差映射而不是直接映射;與其直接學習H(x),需要在輸入上加上或減去什麼,F(x)=H(x)-x,F(x)就是所說的殘差。

      下面是上述幾種網絡架構的訓練效果圖:

     很明顯ResNet是最近一段時間來表現最好的模型,如果想尋找某種算法 訓練一個新的神經網絡模型最好嘗試使用ResNet。

(6)其他的架構

     NiN是神經網絡研究領域的第一個網絡模型,它在2014年是GoogleNet和ResNet模型的先驅,瓶頸層的這個概念是從這裏開始的。

     ResNet的改進:

     通過改進ResNet的模型設計,調整了ResNet塊路徑中的層,並且這個新的結構能夠實現一種更直接的路徑以便於在整個信息網絡中傳播,然後就可以得到能夠實現整個網絡傳播的路徑,並且能再次反向傳播回去,這樣模型可以提供更好的性能。

    雖然ResNet使網絡層數變得更深,也增加了這些殘差網絡的連接,另一種想法是殘差量是是一個十分重要的影響因素,存在這種殘差結構並不一定代表這個網絡層數就很多,所以使用更寬的殘差模塊,這就意味着轉換成有更多的卷積核,結果表明使用更寬的殘差模塊僅使用50層的寬殘差網絡,它的表現就能優於ResNet原來的152層網絡。

    ResNeXt這是另一種改進結構,爲了解決寬度問題,但它並不是通過增加架構中的卷積核來增加殘差模塊的寬度,而是在每個殘差模塊內建立多分支,這樣也可以達到寬網絡的效果同時與Inception模塊也有些相似,運動了一些平行運算對各層進行並行運算。

    另一種改善ResNet的思路是運用隨機深度的思想,當網絡越來越深,往往會碰到梯度消失的問題;因此,最初的想法是在訓練時讓網絡變得更“淺”,會隨機拋棄一組子層集,對於一個子層集會拋棄其權重,只把它們作爲恆等連接,現在網絡更淺了就可以更好地進行反向傳播。這就是一種隨機拋棄法。

    這裏有一種叫FractaNet的網絡結構,它的觀點是引入殘差並不是必須的,關鍵在於有效的從淺網絡轉型爲深層網絡;因此,使用了一種分形結構:

    同時存在淺層和深層路徑到達輸出值,這裏不同的路徑通過拋棄子路徑的方式來訓練具有了dropout的特色。

    DenseNet即密集連接卷積網絡是另一具有特色的網絡結構,它使用稱爲密集塊,每個塊中每層都與其後所有層連接,以前饋的形式連接,因此,在這一區塊內,對區塊的輸入也是對其他所有其他各卷積層的輸入,會計算出每個卷積層的輸出值,然後這些值集中共同作爲下一個卷積層的輸入;這一方法能夠緩解梯度消失的問題。

      如何讓網絡高效的運行非常重要,在最近提出的網絡結構SqueezeNet中,它關注的是高效網絡,它由一個個fire模塊組成,每個模塊有一個Squeeze層(擠壓層)和許多1*1的卷積核,接着再傳遞給一個擴大層;利用這樣的網絡結構可以達到AlexNet水平的準確率,但參數只需1/50,網絡也可以繼續壓縮爲1/500,所以一個未來的方向:如何有效壓縮網絡大小。

      總結:

      這一章中主要講了4個主要的網絡架構,同時也瞭解了其他的一些網絡模型,所以對這些網絡結構可以多去了解一下,細看論文的講解內容。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章