當前位置:
首頁 > 最新 > 從LeNet到SENet——卷積神經網路回顧

從LeNet到SENet——卷積神經網路回顧

AI 科技評論按:本文為浙江大學范星為 AI 科技評論撰寫的獨家稿件,未經許可不得轉載。

從 1998 年經典的 LeNet,到 2012 年歷史性的 AlexNet,之後深度學習進入了蓬勃發展階段,百花齊放,大放異彩,出現了各式各樣的不同網路,包括 LeNet、AlexNet、ZFNet、VGG、NiN、Inception v1 到 v4、Inception-ResNet、ResNet、WRN、FractalNet、Stochastic Depth、DenseNet、ResNeXt、Xception、SENet、SqueezeNet、NASNet、MobileNet v1和v2、ShuffleNet 等等。

它們各有特點,也互相借鑒,在很多任務上不斷取得突破。本文從最基本的分類任務的角度,從無人問津到 ImageNet 上超越人類,回顧了卷積神經網路的發展歷史。

經典網路

經典網路包括 LeNet、AlexNet 以及 VGG 等。

LeNet:1998,Gradient based learning applied to document recognition

用於手寫數字識別,可以看到,卷積神經網路的基本框架已經有了,卷積、激活、池化和全連接,這幾個基本組件都完備了。

但是,在 1998 年以後,深度學習並沒有太多的突破。一直沉寂到 2012 年,AlexNet 橫空出世,將深度學習重新帶入大家視線,並開啟了深度學習的黃金時代。

為什麼是 2012 年?一是數據,之前並沒有大規模的數據進行充分的訓練,應用於更廣泛的任務,現在有 ImageNet;二是計算,之前的硬體條件限制了,無法進行大規模的訓練,而現在有了性能強大的 GPU 的加成;三就是 AlexNet 本身很優秀,給後來的網路奠定了一個很好的基礎,讓大家突然發現,原來還可以這樣玩!

AlexNet:2012,ImageNet Classification with Deep Convolutional Neural Networks

ImageNet Top5 錯誤率:16.4%,而兩年前非深度學習的方法的最好錯誤率是28.2%

AlexNet 總體結構和 LeNet 相似,但是有極大改進:

AlexNet 使用 3GB 顯存的 GTX 580 顯卡(好古老),一塊顯卡不夠用,所以如上圖所示將模型分為兩部分放到了兩塊顯卡上並行運算。雖然這僅僅是單塊顯卡資源有限時的做法,但是後面的許多網路都進一步發揚了這種對卷積進行分組的思想(雖然動機不同)。

VGG:2014,Very deep convolutional networks for large-scale image recognition

在 AlexNet 之後,另一個提升很大的網路是 VGG,ImageNet 上 Top5 錯誤率減小到 7.3%。

主要改進就是:深,更深!網路層數由 AlexNet 的 8 層增至 16 和 19 層,更深的網路意味著更強大的網路能力,也意味著需要更強大的計算力,還好,硬體發展也很快,顯卡運算力也在快速增長,助推深度學習的快速發展。

同時只使用 3x3 的卷積核,因為兩個 3x3 的感受野相當於一個 5x5,同時參數量更少,之後的網路都基本遵循這個範式。

GoogLeNet 和 ResNet

一層一層卷積堆疊,VGG 是集大成者,但是之後很難再進一步,繼續簡單增加網路層數會遇到問題,更深的網路更難訓練同時參數量也在不斷增長。

Inception v1(GoogLeNet):2015,Going deeper with convolutions

ImageNet Top5 錯誤率 6.7%

GoogLeNet 則從另一個維度來增加網路能力,每單元有許多層並行計算,讓網路更寬了,基本單元如下:

網路總體結構如下所示,包含多個上面的 Inception 模塊,並添加了兩個輔助分類分支補充梯度更好訓練:

通過網路的水平排布,可以用較淺的網路得到很好的模型能力,並進行多特徵融合,同時更容易訓練,另外,為了減少計算量,使用了 1x1 卷積來先對特徵通道進行降維。堆疊 Inception 模塊而來就叫 Inception 網路,而 GoogLeNet 就是一個精心設計的性能良好的 Inception 網路(Inception v1)的實例,即GoogLeNet 是 Inception v1 網路的一種。

但是,網路太深無法很好訓練的問題還是沒有解決,直到 ResNet 提出了 residual connection。

ResNet:2016,Deep residual learning for image recognition

ImageNet Top5 錯誤率 3.57%

ResNet 通過引入 shortcut 直連來解決這個問題:

通過引入直連,原來需要學習完全的重構映射,從頭創建輸出,並不容易,而引入直連之後,只需要學習輸出和原來輸入的差值即可,絕對量變相對量,容易很多,所以叫殘差網路。並且,通過引入殘差,identity 恆等映射,相當於一個梯度高速通道,可以容易地訓練避免梯度消失的問題,所以可以得到很深的網路,網路層數由 GoogLeNet 的 22 層到了ResNet的 152 層。

ResNet-34 的網路結構如下所示:

如果說 LeNet、AlexNet、VGG 奠定了經典神經網路的基礎,Inception 和ResNet 則展示了神經網路的新範式,在這兩個範式的基礎上,發展創新並相互借鑒,有了 Inception 流派的 Inception v2 到 v4、Inception-ResNet v1 和 v2,以及 ResNet 流派的 ResNeXt、DenseNet 和 Xception等。

Inception 流派

Inception 流派,核心就是 Inception 模塊,出現了各種變種,包括 Inception v2 到 v4 以及 Inception-ResNet v1 和 v2 等。

Inception v2(BN-Inception):2015,Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift

ImageNet Top5 錯誤率:4.8%

(PS:按照 Inception 系列四篇論文中的第三篇論文的劃分,類似於 Inception v3 的一個網路稱之為 v2,但是按照第四篇論文的劃分,BN-Inception 稱之為v2,這裡採用第四篇論文的劃分,Inception v2 指 BN-Inception)

主要是增加了 Batch Normalization,之前神經網路很依賴於良好的初始化,並且網路太深會梯度彌散,這兩個問題都是因為網路中間的激活的分布不理想,那既然我們想要一個理想的分布,就手動把它轉換為理想的分布好了。所以在每一層輸出後面加上了歸一化變換,減去每個訓練 batch 的每個特徵的均值再除以標準差,得到 0 均值 1 標準差的輸出分布,這樣,就可以很好地訓練了,梯度也不容易彌散。

Inception v3:2015,Rethinking the Inception Architecture for Computer Vision

ImageNet Top5 錯誤率:3.5%

卷積進一步分解,5x5 用兩個 3x3 卷積替換,7x7 用三個 3x3 卷積替換,一個 3x3 卷積核可以進一步用 1x3 的卷積核和 3x1 的卷積核組合來替換,進一步減少計算量:

總體地網路結構如下所示:

Inception v4、Inception-ResNet v1 和 v2:2016,Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning

ImageNet Top5 錯誤率:3.08%

Inception v1 到 v3,可以看到很明顯的人工設計的痕迹,不同卷積核的和網路結構的安排,很特殊,並不知道為什麼要這樣安排,實驗確定的。作者稱由於以前受硬體軟體的限制,有太多的歷史包袱,而現在有了 TensorFlow(論文里怒打一波廣告),網路可以按照理想的設計來實現了,於是很規範地設計了一個 Inception v4 網路,類似於 Inception v3,但是沒有很多特殊的不一致的設計。

同時,ResNet 的成功,也說明了 residual connection 的有效性,所以為Inception 模塊引入了 residual connection,得到 Inception-ResNet v1 和Inception-ResNet-v2,前者規模較小,和 Inception v3 相當,後者規模較大,和 Inception v4 規模相當。residual 結構地 Inception 模塊如下所示:

ResNet 流派

ResNet 流派是另一個主流分支,包括 WRN、DenseNet、ResNeXt 以及 Xception 等。

DenseNet:2016,Densely Connected Convolutional Networks

DenseNet 將 residual connection 發揮到極致,每一層輸出都直連到後面的所有層,可以更好地復用特徵,每一層都比較淺,融合了來自前面所有層的所有特徵,並且很容易訓練。缺點是顯存佔用更大並且反向傳播計算更複雜一點。網路結構如下所示:

ResNeXt:2017,Aggregated Residual Transformations for Deep Neural Networks

ImageNet Top5 錯誤率:3.03%

Inception 借鑒 ResNet 得到 Inception-ResNet,而 ResNet 借鑒 Inception 得到了 ResNeXt,對於每一個 ResNet 的每一個基本單元,橫向擴展,將輸入分為幾組,使用相同的變換,進行卷積:

上面左邊是 ResNet,右邊是 ResNeXt,通過在通道上對輸入進行拆分,進行分組卷積,每個卷積核不用擴展到所有通道,可以得到更多更輕量的卷積核,並且,卷積核之間減少了耦合,用相同的計算量,可以得到更高的精度。

Xception:2016,Xception: Deep Learning with Depthwise Separable Convolutions

Xception 則把分組卷積的思想發揮到了極致,每一個通道單獨分為一組。利用了 depthwise separable convolution,如下圖所示,J 個輸入通道,每個通道用一個單獨的空間卷積核卷積(比如 3x3),J 個卷積核得到 J 個輸出通道,然後再用 K 個卷積核對上一步得到的 J 個輸出通道進行 1x1 的普通卷積,得到 K 個最終的輸出:

Xception 基於一個假設,水平和豎直方向的空間卷積(比如第一步的 3x3 卷積)和深度方向的通道卷積(比如第二步的 1x1 卷積)可以完全獨立進行,這樣減少了不同操作間的耦合,可以有效利用計算力。實驗證明,相同的計算量,精度有明顯的提升。(不過現在對於分組卷積的底層支持還不夠好,實際速度並沒有理論計算的那麼好,需要底層庫進行更好的支持)

移動端

除了主流的 ResNet 流派和 Inception 流派不斷追求更高的準確率,移動端的應用也是一大方向,比如 SqueezeNet、MobileNet v1 和 v2、ShuffleNet 等。

MobileNet v1:2017,MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications

和 Xception 類似,通過 depthwise separable convolution 來減少計算量,設計了一個適用於移動端的,取得性能和效率間很好平衡的一個網路。

MobileNet v2:2018,Inverted Residuals and Linear Bottlenecks: Mobile Networks for Classification, Detection and Segmentation

使用了 ReLU6(即對 ReLU 輸出的結果進行 Clip,使得輸出的最大值為 6)適配移動設備更好量化,然後提出了一種新的 Inverted Residuals and Linear Bottleneck,即 ResNet 基本結構中間使用了 depthwise 卷積,一個通道一個卷積核,減少計算量,中間的通道數比兩頭還多(ResNet 像漏斗,MobileNet v2 像柳葉),並且全去掉了最後輸出的 ReLU。具體的基本結構如下圖右側所示:

ShuffleNet:2017,ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices

Xception 已經做得很好了,但是 1x1 那裡太耗時間了成了計算的瓶頸,那就分組啦較少計算量,但是分組了,組和組之間信息隔離了,那就重排 shuffle 一下,強行讓信息流動。具體的網路結構如上圖左側所示。channel shuffle 就是對通道進行重排,將每組卷積的輸出分配到下一次卷積的不同的組去:

上圖的 a 是沒有 shuffle,效果很差,b 和 c 則是等價的有 shuffle 的。ShuffleNet 可以達到和 AlexNet 相同的精度,並且實際速度快 13 倍(理論上快 18 倍)。

SENet

除了上面介紹的久經考驗的網路以外,還有各種各樣的新的網路,比如 NASNet、SENet、MSDNet 等等。其中,SENet 的 Squeeze-Excitation 模塊在普通的卷積(單層卷積或複合卷積)由輸入 X 得到輸出 U 以後,對 U 的每個通道進行全局平均池化得到通道描述子(Squeeze),再利用兩層 FC 得到每個通道的權重值,對 U 按通道進行重新加權得到最終輸出(Excitation),這個過程稱之為 feature recalibration,通過引入 attention 重新加權,可以得到抑制無效特徵,提升有效特徵的權重,並很容易地和現有網路結合,提升現有網路性能,而計算量不會增加太多。

SE module 是一個很通用的模塊,可以很好地和現有網路集成,提升現有效果。

總結

最後,一個 ImageNet 上的 Top5 準確率總結表如下圖,可以看到,ImageNet 上的分類錯誤率逐年降低,並且已經低於人類的錯誤率(5.1%)。

有這麼多網路,具體的使用中到底選哪個呢?個人的使用參考建議是:

還可以額外添加 SENet 模塊到現有網路,基本都能進一步提高精度,計算量略有增加。另外也可以嘗試一下 NASNet。

————— AI 科技評論招人了 —————

————— 給愛學習的你的福利 —————

Fintech 年終思想盛宴

28 天『AI+金融』學習特惠

跟著民生技術總監、前瑞銀大牛、四大行一線操盤手們一起充電

區塊鏈、智能投顧、CCF ADL 智能商業課等都參與特惠

與大咖們碰撞思維


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

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


請您繼續閱讀更多來自 AI科技評論 的精彩文章:

AAAI 2018 論文預講:當強化學習遇見自然語言處理有哪些奇妙的化學反應?

TAG:AI科技評論 |