當前位置:
首頁 > 科技 > 終於有個能看懂的CS231n經典CNN課程了:AlexNet/VGG/GoogLeNet(上)

終於有個能看懂的CS231n經典CNN課程了:AlexNet/VGG/GoogLeNet(上)

原標題:終於有個能看懂的CS231n經典CNN課程了:AlexNet/VGG/GoogLeNet(上)


大家好,我是禪師的助理兼人工智慧排版住手助手條子。


今天由條子給大家推送。其實條子對人工智慧不是很了解,但是禪師說:你去看看斯坦福的 CS231n 教程就了解了



快拉倒吧。我要是能看懂還給你當助手?

不過好在還是有明白人,對 CS231n 的 CNN 課程進行了翻譯,並加入了譯者對課程的理解和解讀。


條子表示看過以後,確實對 CNN 有了一點點新的認識,不再像以前那樣只能分清美國媒體 CNN 和神經網路 CNN …



本文由譯智社的小夥伴翻譯。這是一群來自全國多所頂級高校、很有理想的年輕人,因為熱愛人工智慧,組成了一個社團(字面意義的社團),努力推進人工智慧的普及。


全文大約3500字。看完大概需要好幾首這首歌的時間??


文章 | gdymind


編輯 | strongnine


本文翻譯總結自CS231n Lecture 9

https://youtu.be/DAOcjicFr1Y

本篇將深入介紹當前的應用和研究工作中最火的幾個CNN 網路架構 —— AlexNet、VGGNet、GoogLeNet ResNet,它們都在ImageNet 分類任務中有很好的表現。另外,本篇也會粗略介紹一些其他的架構。

LeNet-5 回顧


我們先來回顧一下最基本的LeNet,它可以說是首個效果比較好的CNN。它使用了5 x 5 的卷積核,stride 1。池化層卷積核是2 x 2 的,stride 2。最後還有幾個全連接層。網路結構很簡單也很容易理解。



AlexNet


接下來講的是AlexNet,它是第一個在ImageNet 分類上表現不錯的大規模的 CNN,在2012 年一舉碾壓其他方法獲得冠軍,於是開啟了一個新的時代。


它的基本架構組成如下圖,它是由若干卷積層、池化層、歸一化層和全連接層組成的。左邊方括弧里的內容為數據的形狀,右邊有卷積核的詳細參數。總體來說AlexNet LeNet 很像,只不過網路層數大大增加。



整個網路架構可視化出來是這樣的(輸入層的224 x 224 應為227 x 227):



下面總結一下這個網路的一些特點和小細節:

1. 它是第一個使用ReLU 的網路;


2. 它使用了局部響應歸一化層(Local Response Normalization Layers,LRN)。不過要注意,這種層現在已經不常用了,因為研究發現它的作用不是很大;


3. 它使用了很多數據增廣(data augmentation)技術,比如翻轉(flipping)PCA Jittering、隨機裁切(cropping)、顏色歸一化(color normalization)等等;


4. 使用了0.5 dropout


5. batch size 128


6.SGD Momentum 0.9


7. 學習率為0.01,每次loss 不降的時候手動除以10,直到最後收斂;


8. L2 weight decay 5e-4


9. 使用7 CNN ensemble(多次訓練模型取均值),效果提升為18.2% → 15.4%


另外提一句,從上面的架構圖中,CONV1 層的96 kernel 分成了兩組,每組 48 個,這主要是歷史原因,當時用的GPU 顯存不夠用,用了兩塊GPUCONV1、CONV2、CONV4 CONV5 在每塊GPU 上只利用了所在層一半的 feature map,而CONV3、FC6、FC7 FC8 則使用了所在層全部的feature map

AlexNet 是第一個使用CNN 架構在ImageNet Large Scale Visual Recognition Challenge(ILSVRC)上取得冠軍的網路,它能力挺不錯,不過後面講到的一些網路架構更加優秀,也是在我們實際應用中可以優先考慮使用的。


ZFNet 贏得了2013 ILSVRC 的冠軍,它所做的是對AlexNet 的超參數進行了一些改進,網路架構沒什麼太大變化。但在2014 年,有兩個新的很厲害的網路架構被提出來 —— VGGNet GoogleNet。它們與之前網路的主要差異在於網路深度大大增加,相比於AlexNet 8 層,它們分別有19 層和22 層。下面我們分別具體講一下兩個網路。


VGG


VGG 主要有兩點改進:


1. 顯著增加了網路層數(16 層到19 層)


2. 大大減小了kernel size,使用的是3 x 3 CONV stride 1 padding 1 2 x 2 MAX POOL stride 2 這樣的filter

    VGG AlexNet 的對比如下:



    加深網路很好理解,但為什麼要縮小filter 3 x 3 呢?我們來小小地計算一下:


    當使用一個7 x 7 filter 時,它的感受野是7 x 7 的。但如果我們使用三個 3 x 3 的filter 來替換這一個7 x 7 filter 呢?

    從輸入經過第一個3 x 3 filter,感受野為3 x 3,第一個filter 的輸出再經過第二個3 x 3 filter,感受野為5 x 5(三個3 x 3 的相鄰的區域綜合起來是5 x 5),經過第三個filter 之後,感受野為7 x 7。這樣,經過替代後,在感受野不變的情況下:

    • 網路更深了,大大增加了網路的非線性能力;
    • 網路參數變少了: 其中,為分別為輸入、輸出的 feature map 數。

    VGG16 的具體參數如下:



    可以看到,每張圖片forward 的過程中需要佔用約100M 的內存,這確實是個很大的數字。另外138M 的參數量,也比AlexNet 60M 多出不少。其中佔用內存大的主要是最前面的卷積層(因為網路前面部分數據量還比較大)和全連接層(之後我們可以看到一些架構通過去掉全連接層來節省內存)。


    下面總結一下這個網路的一些特點和小細節:


    1. 它贏得了ILSVRC』14 的冠軍;


    2. 它使用了和AlexNet 類似的訓練方法;


    3. 它沒有使用AlexNet 中用的LRN 層(因為實驗發現LRN 用處不大);


    4. 它分為VGG16 VGG19(其中VGG19 只是多了三層,效果稍好一些,佔用內存也更多)。實際使用中VGG16 用的更多;


    5. 為了提升效果使用了ensemble(多次訓練模型,最後取均值);

    6. FC7 中得到的feature map(也就是一個1 x 4096 的向量)提取出了很好的feature,可以用來做其他任務。


    接下來講一下同樣在2014 年提出的網路GoogleNet


    GoogLeNet


    GoogleNet ILSVRC』14 中的分類冠軍,它除了使用更深的網路(22 層),還有一個更大的亮點——注重計算效率(Computational Efficiency)。GoogLeNet 中沒有使用全連接層,這大大減少了參數量。此外,它還使用了「Inception 模塊」(後面詳細講)。這樣一來,整個網路只需要 5M 的參數量,僅僅是AlexNet 的十二分之一!


    現在講一下這個神奇的「Inception模塊」。它的主要思想是設計一種效果好的局部網路拓撲結構(local network topology),也就是在網路中嵌套網路,最後把這些網路堆疊成一個網路,示意圖大概是這樣的:



    舉個Inception 模塊的最naive 的栗子(見下圖),輸入被分別送到不同kernel size 的卷積核中(1 x 1, 3 x 3, 5 x 5),另外還加了一個池化。各部分分別產生輸出之後,再把它們連成一個整體作為輸出。



    但是直接這樣做會有問題,把各部分輸出聯繫來之後,feature map 的數量成數倍的增長。我們的解決方案是引入「bottleneck」層,這種層使用1 x 1的卷積層,不過使用的filter 數目更少,也就是說減少了feature map 的數量,新的架構舉例如下圖:


    注意圖中的紅色部分,它們將256 feature map 減少到了64 個,也就大大降低了參數量。改進後的Inception 模塊只需要358M 次操作(之前需要854M 次)。


    GoogLeNet 中,網路的開頭部分是一個主幹形的stem network,這個部分和之前AlexNet VGG 中的差不多,是卷積池化之類的層的疊加(見下圖藍框)。之後把上面說的Inception 模塊串到了一起,最後加上用於分類的層形(注意沒有全連接層)成了整個網路。



    其中需要注意下圖中框出來的部分,它們和網路的最後做了類似的工作,也輸出了分類標籤。最終使用三處輸出一起計loss。這樣做的原因是網路層數很多,中間的結果也很有用。此外中間的這兩處輸出也會計算梯度,這有助於緩解這種層數很多的網路中的梯度消失的問題。



    到這裡,整個網路我們就介紹完啦,總體來說,網路之所以這樣設計、之所以效果這麼好有兩方面原因。一是前面提到的Inception Model 很有用。此外還有一個重要原因,就是Google 財大氣粗有錢任性,可以用大量的機器驗證各種各樣奇奇怪怪的網路架構,最後挑選出效果好的就行了(有錢真好.jpg)。


    接下來我們的目光轉向2015 年的冠軍 ——ResNet,具體請看下一篇文章~

    LRN 鏈接:


    https://blog.csdn.net/u014296502/article/details/78839881

    https://prateekvjoshi.com/2016/04/05/what-is-local-response-normalization-in-convolutional-neural-networks/

    喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

    本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


    請您繼續閱讀更多來自 人工智慧頭條 的精彩文章:

    TAG:人工智慧頭條 |