從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 智能商業課等都參與特惠
與大咖們碰撞思維
※AAAI 2018 論文預講:當強化學習遇見自然語言處理有哪些奇妙的化學反應?
TAG:AI科技評論 |