天天看點

深度卷積神經網絡結構演變

筆者所寫博文皆為自己浏覽學習之後的心得或筆記,想與讀者共同學習進步,歡迎指導交流。若内容有不當或侵權,請聯系筆者修改或删除。緻謝!

今天看到一篇來自公衆号講解深度卷積神經網絡結構的文章,獲益匪淺,結合之前的筆記,自己做一個總結便于查詢,筆者主要是提出各個網絡的創新點等,具體的概念博文中不作解釋,有更多更好詳細的講解。即本文旨在了解網絡結構的變化演進。

先貼連接配接:還有一篇講Inception家族:一文概覽Inception家族的「奮鬥史」

首先放一張圖:
深度卷積神經網絡結構演變
上圖表示的即為目前(…不清楚圖源及作圖時間,至少是在17年之後)流行的網絡結構的綜覽圖,其中橫坐标表示一次前向計算需要的計算量,縱坐标表示準确率(一個共同名額),圓的大小表示所含參數的多少。是以根據圖像可以看出,越往左上的圓越小的模型應當效果更好,但根據任務選擇模型時仍應該多加考慮。

一、LeNet 1989

個人認為的深度卷積神經網絡的始祖(雖然圖上沒有),1989年由LeCun大牛提出,被用于手寫字元(數字)的識别,确立了卷積神經網絡的基礎結構,包括卷積層,池化層,激活函數(tanh函數),全連接配接層,損失函數采用了均方誤差即歐式距離的均值,權重由随機數初始化,訓練梯度采用了反向傳播算法。
提出了權值共享和特征圖像的概念,權值共享即一個卷積核對上層圖像(特征圖)進行卷積的權值參數不變,即以同樣的參數處理整張圖像;特征圖像…字面意思,使用卷積核進行卷積後得到的圖像稱為特征圖像。

注:LeNet是指由LeCun提出的在當時新穎的卷積神經網絡的總稱,并不隻有一個,主要就是應用在數字識别,第一個廣為流傳的網絡結構為LeNet-5

結構圖:

深度卷積神經網絡結構演變

二、AlexNet 2012

第一次使用ReLU激活函數,提出了Dropout,提出資料增強擴大訓練集,提出了局部相應歸一化LRN(現在基本不用),提出了重疊池化。

結構圖:

深度卷積神經網絡結構演變

三、ZFNet 2013

提出通過反卷積方法進行卷積網絡可視化的方法,可以了解到圖像“學”到了什麼。以此改進,在AlexNet基礎上取得了更好的成果。

四、VGGNet 2014

提出使用很小的卷積核來代替大的卷積核,大量使用3*3卷積,這樣使得每層參數更少,在相同複雜度下能做到更深的網絡;去掉了LRN,實驗發現其作用不明顯。

結構圖:

深度卷積神經網絡結構演變

從左至右每一列代表着深度增加的不同的模型,從上至下代表模型的深度,其中conv<濾波器大小>-<通道數>

五、GoogleNet 2014

即Inception-V1網絡,緻力于解決增大深度或寬度帶來的計算問題,和參數過多帶來的過拟合問題。提出了Inception子產品;使用了1*1卷積核(作用:升維降維);嘗試去除參數海量的全連接配接層,由平均池化代替。後兩者借鑒了NIN(Network In Network的思想,感興趣可以一觀)

Inception子產品圖:

深度卷積神經網絡結構演變

六、ResNet 2015

目的是為了解決退化問題(:随着網絡層數的增多,與過拟合不同,在訓練集和測試集上的準确率達到一定值都下降,梯度問題;另外一種解釋是可以殘差子產品去除目前特征備援的雜質,使得特征細化),提出了殘差結構如下圖。後來的分析表明殘差網絡并不是一個單一的超深網絡,而是多個網絡指數級的隐式內建,由此引入了多樣性的概念。

殘差結構:

深度卷積神經網絡結構演變

接下來是一些基于GoogleNet-Inception-Like網絡改進系列,包括ResNet

七、Inception - V2 2015

1.基于GoogleNet進行了改進,加入了BN層
2.局部用 3X3 卷積代替了 5X5 卷積(VGG的思想)

八、Inception - V3 2015

1.最重要的改進:卷積核的分解

對卷積進行非對稱分解:7 X 7 → 1 X 7 + 7 X 1; 3 X 3 → 1 X 3 + 3 X 1

作用:既減少了參數,又增加了深度,加深了網絡的非線性

2.對優化算法的改進

①改進了參數優化方法,即學習率的問題,AdaGrad → RMSProp

② 采用了Label Smoothing 政策,是一種正則化的方法(降低了過拟合程度)

子產品結構圖:

深度卷積神經網絡結構演變

九、Inception - V4 2016

相較V3,變得更深

十、Xception

是針對Inception - V3的另一種改進,主要采用Depthwise Separable Convolition替換掉V3中的卷積操作:具體為在卷積操作時,将學習空間相關性核學習通道間相關性分離開。這樣也會在基本不增加複雜度的前提下提高效果。

網絡結構:

深度卷積神經網絡結構演變

十一、Inception - Resnet V1/V2 2016

基于Inception-V3 和 Inception-V4及殘差網絡的思想的融合,提出了兩個模型

Inception - Resnet V2的網絡結構:

深度卷積神經網絡結構演變

十二、NASNet 通過強化學習自動産生結構

十三、WRN (Wide Residual Network)2016

提出的原因:認為殘差網絡較深時,并不能保證能有效更新每個殘差子產品,基于此想法,作者想要将細深的網絡變為寬淺(…還沒仔細了解)

WRN子產品:

深度卷積神經網絡結構演變

十四、ResNext 2016

提出原因:對于網絡的改進,傳統的方法主要時增加深度或者增加寬度(通道數),但都會大大增加設計難度和複雜度
方法:同時基于思想,以及Inception的split-transform-merge思想,提出了該擴充性較強的網絡。提到了一個名詞cardinality(基數),個人了解即一個子產品中同時并列多少個子網絡(增加分支)。
結論:Cardinality越大越好,且在同樣的複雜度下,比增加深度和寬度效果要好
深度卷積神經網絡結構演變

十五、DenseNet

對小資料結果較好,特征圖會傳到網絡後面的所有層。

結構圖:

深度卷積神經網絡結構演變

十六、MobileNet及ShuffleNet

用于嵌入式裝置,犧牲較少的精度換取減少大量的計算。

總結:對卷積神經網絡結構的改進主要在卷積層,而改進方法主要有有以下幾種:卷積核小型化(參數減少),1x1卷積(升降維),Network In Network,Inception機制,卷積分解(Factorization),反卷積運算(實驗可用以調參);最近一個平常的操作就是加入了注意力機制,包括通道注意力、空間注意力,感興趣的小夥伴可以查一些資料如SE-Net等。此外,對網絡結構其他部分常用的方法要了解透徹,例如優化器的各種優化方法,激活函數損失函數的選擇等,讀者可以自己詳讀開篇的文章。

繼續閱讀