天天看點

【深度學習】經典的卷積神經網絡模型介紹(LeNet、AlexNet、VGGNet、GoogLeNet、ResNet和MobileNet)卷積神經網絡簡介一、LeNet二、AlexNet三、VGG net四、GoogLeNet五、Resnet六、MobileNet

經典的卷積神經網絡模型介紹

  • 卷積神經網絡簡介
  • 一、LeNet
    • 1、INPUT層-輸入層
    • 2、C1層-卷積層
    • 3、S2層-池化層(下采樣層)
    • 4、C3層-卷積層
    • 5、S4層-池化層(下采樣層)
    • 6、C5層-卷積層
    • 7、F6層-全連接配接層
  • 二、AlexNet
    • 1、AlexNet特點
    • 2、ReLu作為激活函數
    • 3、資料增強
    • 4、層疊池化
    • 5、局部相應歸一化
    • 6、Dropout
    • 7、Alex網絡結構
    • 8、AlexNet參數數量
  • 三、VGG net
    • 1、VGG的特點
    • 2、VGG網絡結構
    • 3、VGG優缺點
  • 四、GoogLeNet
    • 1、GoogLeNet Incepetion V1
    • 2、GoogLeNet Inception V2
  • 五、Resnet
    • 1、Resnet要解決的是什麼問題
    • 2、Residual Block的設計
    • 3、ResNet 網絡結構
    • 4、Residual Block的分析與改進
    • 5、小結
  • 六、MobileNet
    • 1、MobileNetV1
    • 2、MobileNetV2

卷積神經網絡簡介

見另一篇文章,這裡不一一闡述:

https://blog.csdn.net/weixin_39589455/article/details/114949533

一、LeNet

LeNet5 這個網絡雖然很小,但是它包含了深度學習的基本子產品:卷積層,池化層,全連結層。是其他深度學習模型的基礎, 這裡我們對LeNet5進行深入分析。同時,通過執行個體分析,加深對與卷積層和池化層的了解。

【深度學習】經典的卷積神經網絡模型介紹(LeNet、AlexNet、VGGNet、GoogLeNet、ResNet和MobileNet)卷積神經網絡簡介一、LeNet二、AlexNet三、VGG net四、GoogLeNet五、Resnet六、MobileNet

LeNet-5共有7層,不包含輸入,每層都包含可訓練參數;每個層有多個Feature Map,每個FeatureMap通過一種卷積濾波器提取輸入的一種特征,然後每個FeatureMap有多個神經元。

各層參數詳解:

1、INPUT層-輸入層

首先是資料 INPUT 層,輸入圖像的尺寸統一歸一化為32*32。

注意: 本層不算LeNet-5的網絡結構,傳統上,不将輸入層視為網絡層次結構之一。

2、C1層-卷積層

輸入圖檔:32*32

卷積核大小:5*5

卷積核種類:6

輸出featuremap大小:28*28 (32-5+1)=28

神經元數量:28286

可訓練參數:(55+1) * 6(每個濾波器55=25個unit參數和一個bias參數,一共6個濾波器)

連接配接數:(55+1)62828=122304

詳細說明: 對輸入圖像進行第一次卷積運算(使用 6 個大小為 55 的卷積核),得到6個C1特征圖(6個大小為2828的 feature maps, 32-5+1=28)。我們再來看看需要多少個參數,卷積核的大小為55,總共就有6(55+1)=156個參數,其中+1是表示一個核有一個bias。對于卷積層C1,C1内的每個像素都與輸入圖像中的55個像素和1個bias有連接配接,是以總共有1562828=122304個連接配接(connection)。有122304個連接配接,但是我們隻需要學習156個參數,主要是通過權值共享實作的。

3、S2層-池化層(下采樣層)

輸入:28*28

采樣區域:2*2

采樣方式:4個輸入相加,乘以一個可訓練參數,再加上一個可訓練偏置。結果通過sigmoid

采樣種類:6

輸出featureMap大小:14*14(28/2)

神經元數量:14146

連接配接數:(22+1)61414

S2中每個特征圖的大小是C1中特征圖大小的1/4。

詳細說明: 第一次卷積之後緊接着就是池化運算,使用 22核 進行池化,于是得到了S2,6個1414的 特征圖(28/2=14)。S2這個pooling層是對C1中的2*2區域内的像素求和乘以一個權值系數再加上一個偏置,然後将這個結果再做一次映射。同時有5x14x14x6=5880個連接配接。

4、C3層-卷積層

輸入:S2中所有6個或者幾個特征map組合

卷積核大小:5*5

卷積核種類:16

輸出featureMap大小:10*10 (14-5+1)=10

C3中的每個特征map是連接配接到S2中的所有6個或者幾個特征map的,表示本層的特征map是上一層提取到的特征map的不同組合

存在的一個方式是:C3的前6個特征圖以S2中3個相鄰的特征圖子集為輸入。接下來6個特征圖以S2中4個相鄰特征圖子集為輸入。然後的3個以不相鄰的4個特征圖子集為輸入。最後一個将S2中所有特征圖為輸入。

則:可訓練參數:6*(355+1)+6*(455+1)+3*(455+1)+1*(655+1)=1516

連接配接數:10101516=151600

詳細說明: 第一次池化之後是第二次卷積,第二次卷積的輸出是C3,16個10x10的特征圖,卷積核大小是 55. 我們知道S2 有6個 1414 的特征圖,怎麼從6 個特征圖得到 16個特征圖了? 這裡是通過對S2 的特征圖特殊組合計算得到的16個特征圖。具體如下:

【深度學習】經典的卷積神經網絡模型介紹(LeNet、AlexNet、VGGNet、GoogLeNet、ResNet和MobileNet)卷積神經網絡簡介一、LeNet二、AlexNet三、VGG net四、GoogLeNet五、Resnet六、MobileNet

C3的前6個feature map(對應上圖第一個紅框的6列)與S2層相連的3個feature map相連接配接(上圖第一個紅框),後面6個feature map與S2層相連的4個feature map相連接配接(上圖第二個紅框),後面3個feature map與S2層部分不相連的4個feature map相連接配接,最後一個與S2層的所有feature map相連。卷積核大小依然為55,是以總共有6(355+1)+6*(455+1)+3*(455+1)+1*(655+1)=1516個參數。而圖像大小為10*10,是以共有151600個連接配接。

【深度學習】經典的卷積神經網絡模型介紹(LeNet、AlexNet、VGGNet、GoogLeNet、ResNet和MobileNet)卷積神經網絡簡介一、LeNet二、AlexNet三、VGG net四、GoogLeNet五、Resnet六、MobileNet

C3與S2中前3個圖相連的卷積結構如下圖所示:

【深度學習】經典的卷積神經網絡模型介紹(LeNet、AlexNet、VGGNet、GoogLeNet、ResNet和MobileNet)卷積神經網絡簡介一、LeNet二、AlexNet三、VGG net四、GoogLeNet五、Resnet六、MobileNet

上圖對應的參數為 355+1,一共進行6次卷積得到6個特征圖,是以有6*(355+1)參數。 為什麼采用上述這樣的組合了?論文中說有兩個原因:1)減少參數,2)這種不對稱的組合連接配接的方式有利于提取多種組合特征。

5、S4層-池化層(下采樣層)

輸入:10*10

采樣區域:2*2

采樣方式:4個輸入相加,乘以一個可訓練參數,再加上一個可訓練偏置。結果通過sigmoid

采樣種類:16

輸出featureMap大小:5*5(10/2)

神經元數量:5516=400

連接配接數:16*(2*2+1)55=2000

S4中每個特征圖的大小是C3中特征圖大小的1/4

詳細說明: S4是pooling層,視窗大小仍然是2*2,共計16個feature map,C3層的16個10x10的圖分别進行以2x2為機關的池化得到16個5x5的特征圖。有5x5x5x16=2000個連接配接。連接配接的方式與S2層類似。

6、C5層-卷積層

輸入:S4層的全部16個單元特征map(與s4全相連)

卷積核大小:5*5

卷積核種類:120

輸出featureMap大小:1*1(5-5+1)

可訓練參數/連接配接:120*(1655+1)=48120

詳細說明: C5層是一個卷積層。由于S4層的16個圖的大小為5x5,與卷積核的大小相同,是以卷積後形成的圖的大小為1x1。這裡形成120個卷積結果。每個都與上一層的16個圖相連。是以共有(5x5x16+1)x120 = 48120個參數,同樣有48120個連接配接。C5層的網絡結構如下:

【深度學習】經典的卷積神經網絡模型介紹(LeNet、AlexNet、VGGNet、GoogLeNet、ResNet和MobileNet)卷積神經網絡簡介一、LeNet二、AlexNet三、VGG net四、GoogLeNet五、Resnet六、MobileNet

7、F6層-全連接配接層

輸入:c5 120維向量

計算方式:計算輸入向量和權重向量之間的點積,再加上一個偏置,結果通過sigmoid函數輸出。

可訓練參數:84*(120+1)=10164

詳細說明: 6層是全連接配接層。F6層有84個節點,對應于一個7x12的比特圖,-1表示白色,1表示黑色,這樣每個符号的比特圖的黑白色就對應于一個編碼。該層的訓練參數和連接配接數是(120 + 1)x84=10164。ASCII編碼圖如下:

【深度學習】經典的卷積神經網絡模型介紹(LeNet、AlexNet、VGGNet、GoogLeNet、ResNet和MobileNet)卷積神經網絡簡介一、LeNet二、AlexNet三、VGG net四、GoogLeNet五、Resnet六、MobileNet

F6層的連接配接方式如下:

【深度學習】經典的卷積神經網絡模型介紹(LeNet、AlexNet、VGGNet、GoogLeNet、ResNet和MobileNet)卷積神經網絡簡介一、LeNet二、AlexNet三、VGG net四、GoogLeNet五、Resnet六、MobileNet

8、Output層-全連接配接層

Output層也是全連接配接層,共有10個節點,分别代表數字0到9,且如果節點i的值為0,則網絡識别的結果是數字i。采用的是徑向基函數(RBF)的網絡連接配接方式。假設x是上一層的輸入,y是RBF的輸出,則RBF輸出的計算方式是:

【深度學習】經典的卷積神經網絡模型介紹(LeNet、AlexNet、VGGNet、GoogLeNet、ResNet和MobileNet)卷積神經網絡簡介一、LeNet二、AlexNet三、VGG net四、GoogLeNet五、Resnet六、MobileNet

上式w_ij 的值由i的比特圖編碼确定,i從0到9,j取值從0到7*12-1。RBF輸出的值越接近于0,則越接近于i,即越接近于i的ASCII編碼圖,表示目前網絡輸入的識别結果是字元i。該層有84x10=840個參數和連接配接。

【深度學習】經典的卷積神經網絡模型介紹(LeNet、AlexNet、VGGNet、GoogLeNet、ResNet和MobileNet)卷積神經網絡簡介一、LeNet二、AlexNet三、VGG net四、GoogLeNet五、Resnet六、MobileNet

上圖是LeNet-5識别數字3的過程。

總結

  • LeNet-5是一種用于手寫體字元識别的非常高效的卷積神經網絡。
  • 卷積神經網絡能夠很好的利用圖像的結構資訊。
  • 卷積層的參數較少,這也是由卷積層的主要特性即局部連接配接和共享權重所決定。

二、AlexNet

由于受到計算機性能的影響,雖然LeNet在圖像分類中取得了較好的成績,但是并沒有引起很多的關注。 知道2012年,Alex等人提出的AlexNet網絡在ImageNet大賽上以遠超第二名的成績奪冠,卷積神經網絡乃至深度學習重新引起了廣泛的關注。

1、AlexNet特點

AlexNet是在LeNet的基礎上加深了網絡的結構,學習更豐富更高維的圖像特征。AlexNet的特點:

  • 更深的網絡結構
  • 使用層疊的卷積層,即卷積層+卷積層+池化層來提取圖像的特征
  • 使用Dropout抑制過拟合
  • 使用資料增強Data Augmentation抑制過拟合
  • 使用Relu替換之前的sigmoid的作為激活函數
  • 多GPU訓練

2、ReLu作為激活函數

在最初的感覺機模型中,輸入和輸出的關系如下:

【深度學習】經典的卷積神經網絡模型介紹(LeNet、AlexNet、VGGNet、GoogLeNet、ResNet和MobileNet)卷積神經網絡簡介一、LeNet二、AlexNet三、VGG net四、GoogLeNet五、Resnet六、MobileNet

隻是單純的線性關系,這樣的網絡結構有很大的局限性:即使用很多這樣結構的網絡層疊加,其輸出和輸入仍然是線性關系,無法處理有非線性關系的輸入輸出。是以,對每個神經元的輸出做個非線性的轉換也就是,将上面就權重求和

【深度學習】經典的卷積神經網絡模型介紹(LeNet、AlexNet、VGGNet、GoogLeNet、ResNet和MobileNet)卷積神經網絡簡介一、LeNet二、AlexNet三、VGG net四、GoogLeNet五、Resnet六、MobileNet

的結果輸入到一個非線性函數,也就是激活函數中。 這樣,由于激活函數的引入,多個網絡層的疊加就不再是單純的線性變換,而是具有更強的表現能力。

【深度學習】經典的卷積神經網絡模型介紹(LeNet、AlexNet、VGGNet、GoogLeNet、ResNet和MobileNet)卷積神經網絡簡介一、LeNet二、AlexNet三、VGG net四、GoogLeNet五、Resnet六、MobileNet

在最初,sigmoid和tanh函數最常用的激活函數。

1)sigmoid

【深度學習】經典的卷積神經網絡模型介紹(LeNet、AlexNet、VGGNet、GoogLeNet、ResNet和MobileNet)卷積神經網絡簡介一、LeNet二、AlexNet三、VGG net四、GoogLeNet五、Resnet六、MobileNet

在網絡層數較少時,sigmoid函數的特性能夠很好的滿足激活函數的作用:它把一個實數壓縮至0到1之間,當輸入的數字非常大的時候,結果會接近1;當輸入非常大的負數時,則會得到接近0的結果。這種特性,能夠很好的模拟神經元在受刺激後,是否被激活向後傳遞資訊(輸出為0,幾乎不被激活;輸出為1,完全被激活)。

sigmoid一個很大的問題就是梯度飽和。 觀察sigmoid函數的曲線,當輸入的數字較大(或較小)時,其函數值趨于不變,其導數變的非常的小。這樣,在層數很多的的網絡結構中,進行反向傳播時,由于很多個很小的sigmoid導數累成,導緻其結果趨于0,權值更新較慢。

1)ReLu

【深度學習】經典的卷積神經網絡模型介紹(LeNet、AlexNet、VGGNet、GoogLeNet、ResNet和MobileNet)卷積神經網絡簡介一、LeNet二、AlexNet三、VGG net四、GoogLeNet五、Resnet六、MobileNet

針對sigmoid梯度飽和導緻訓練收斂慢的問題,在AlexNet中引入了ReLU。ReLU是一個分段線性函數,小于等于0則輸出為0;大于0的則恒等輸出。相比于sigmoid,ReLU有以下有點:

  • 計算開銷下。sigmoid的正向傳播有指數運算,倒數運算,而ReLu是線性輸出;反向傳播中,sigmoid有指數運算,而ReLU有輸出的部分,導數始終為1.
  • 梯度飽和問題
  • 稀疏性。Relu會使一部分神經元的輸出為0,這樣就造成了網絡的稀疏性,并且減少了參數的互相依存關系,緩解了過拟合問題的發生。

這裡有個問題,前面提到,激活函數要用非線性的,是為了使網絡結構有更強的表達的能力。那這裡使用ReLU本質上卻是個線性的分段函數,是怎麼進行非線性變換的。

這裡把神經網絡看着一個巨大的變換矩陣M,其輸入為所有訓練樣本組成的矩陣A,輸出矩陣B。

【深度學習】經典的卷積神經網絡模型介紹(LeNet、AlexNet、VGGNet、GoogLeNet、ResNet和MobileNet)卷積神經網絡簡介一、LeNet二、AlexNet三、VGG net四、GoogLeNet五、Resnet六、MobileNet

這裡的M是一個線性變換的話,則所有的訓練樣本A進行了線性變換輸出為B。

那麼對于ReLU來說,由于其是分段的,0的部分可以看着神經元沒有激活,不同的神經元激活或者不激活,其神經玩過組成的變換矩陣是不一樣的。

設有兩個訓練樣本 a1,a2,其訓練時神經網絡組成的變換矩陣為M1,M2。 由于M1變換對應的神經網絡中激活神經元和M2是不一樣的,這樣M1,M2實際上是兩個不同的線性變換。也就是說,每個訓練樣本使用的線性變換矩陣Mi是不一樣的,在整個訓練樣本空間來說,其經曆的是非線性變換。

簡單來說,不同訓練樣本中的同樣的特征,在經過神經網絡學習時,流經的神經元是不一樣的(激活函數值為0的神經元不會被激活)。這樣,最終的輸出實際上是輸入樣本的非線性變換。

3、資料增強

神經網絡由于訓練的參數多,表能能力強,是以需要比較多的資料量,不然很容易過拟合。當訓練資料有限時,可以通過一些變換從已有的訓練資料集中生成一些新的資料,以快速地擴充訓練資料。對于圖像資料集來說,可以對圖像進行一些形變操作:

  • 翻轉
  • 随機裁剪
  • 平移,顔色光照的變換

AlexNet中對資料做了以下操作:

  1. 随機裁剪,對256×256的圖檔進行随機裁剪到227×227,然後進行水準翻轉。
  2. 測試的時候,對左上、右上、左下、右下、中間分别做了5次裁剪,然後翻轉,共10個裁剪,之後對結果求平均。
  3. 對RGB空間做PCA(主成分分析),然後對主成分做一個(0, 0.1)的高斯擾動,也就是對顔色、光照作變換,結果使錯誤率又下降了1%。

4、層疊池化

在LeNet中池化是不重疊的,即池化的視窗的大小和步長是相等的,如下

【深度學習】經典的卷積神經網絡模型介紹(LeNet、AlexNet、VGGNet、GoogLeNet、ResNet和MobileNet)卷積神經網絡簡介一、LeNet二、AlexNet三、VGG net四、GoogLeNet五、Resnet六、MobileNet

在AlexNet中使用的池化(Pooling)卻是可重疊的,也就是說,在池化的時候,每次移動的步長小于池化的視窗長度。AlexNet池化的大小為3×3的正方形,每次池化移動步長為2,這樣就會出現重疊。重疊池化可以避免過拟合,這個政策貢獻了0.3%的Top-5錯誤率。與非重疊方案s=2,z=2相比,輸出的次元是相等的,并且能在一定程度上抑制過拟合。

5、局部相應歸一化

ReLU具有讓人滿意的特性,它不需要通過輸入歸一化來防止飽和。如果至少一些訓練樣本對ReLU産生了正輸入,那麼那個神經元上将發生學習。然而,我們仍然發現接下來的局部響應歸一化有助于泛化。

【深度學習】經典的卷積神經網絡模型介紹(LeNet、AlexNet、VGGNet、GoogLeNet、ResNet和MobileNet)卷積神經網絡簡介一、LeNet二、AlexNet三、VGG net四、GoogLeNet五、Resnet六、MobileNet

表示神經元激活,通過在(x,y)位置應用核i,然後應用ReLU非線性來計算,響應歸一化激活

【深度學習】經典的卷積神經網絡模型介紹(LeNet、AlexNet、VGGNet、GoogLeNet、ResNet和MobileNet)卷積神經網絡簡介一、LeNet二、AlexNet三、VGG net四、GoogLeNet五、Resnet六、MobileNet

通過下式給定:

【深度學習】經典的卷積神經網絡模型介紹(LeNet、AlexNet、VGGNet、GoogLeNet、ResNet和MobileNet)卷積神經網絡簡介一、LeNet二、AlexNet三、VGG net四、GoogLeNet五、Resnet六、MobileNet
【深度學習】經典的卷積神經網絡模型介紹(LeNet、AlexNet、VGGNet、GoogLeNet、ResNet和MobileNet)卷積神經網絡簡介一、LeNet二、AlexNet三、VGG net四、GoogLeNet五、Resnet六、MobileNet

6、Dropout

這個是比較常用的抑制過拟合的方法了。

引入Dropout主要是為了防止過拟合。在神經網絡中Dropout通過修改神經網絡本身結構來實作,對于某一層的神經元,通過定義的機率将神經元置為0,這個神經元就不參與前向和後向傳播,就如同在網絡中被删除了一樣,同時保持輸入層與輸出層神經元的個數不變,然後按照神經網絡的學習方法進行參數更新。在下一次疊代中,又重新随機删除一些神經元(置為0),直至訓練結束。

Dropout應該算是AlexNet中一個很大的創新,現在神經網絡中的必備結構之一。Dropout也可以看成是一種模型組合,每次生成的網絡結構都不一樣,通過組合多個模型的方式能夠有效地減少過拟合,Dropout隻需要兩倍的訓練時間即可實作模型組合(類似取平均)的效果,非常高效。

如下圖:

【深度學習】經典的卷積神經網絡模型介紹(LeNet、AlexNet、VGGNet、GoogLeNet、ResNet和MobileNet)卷積神經網絡簡介一、LeNet二、AlexNet三、VGG net四、GoogLeNet五、Resnet六、MobileNet

7、Alex網絡結構

【深度學習】經典的卷積神經網絡模型介紹(LeNet、AlexNet、VGGNet、GoogLeNet、ResNet和MobileNet)卷積神經網絡簡介一、LeNet二、AlexNet三、VGG net四、GoogLeNet五、Resnet六、MobileNet

上圖中的輸入是224×224,不過經過計算(224−11)/4=54.75并不是論文中的55×55,而使用227×227作為輸入,則(227−11)/4=55

網絡包含8個帶權重的層;前5層是卷積層,剩下的3層是全連接配接層。最後一層全連接配接層的輸出是1000維softmax的輸入,softmax會産生1000類标簽的分布網絡包含8個帶權重的層;前5層是卷積層,剩下的3層是全連接配接層。最後一層全連接配接層的輸出是1000維softmax的輸入,softmax會産生1000類标簽的分布。

1)卷積層C1

該層的處理流程是: 卷積–>ReLU–>池化–>歸一化。

  • 卷積,輸入是227×227,使用96個11×11×3的卷積核,得到的FeatureMap為55×55×96。
  • ReLU,将卷積層輸出的FeatureMap輸入到ReLU函數中。
  • 池化,使用3×3步長為2的池化單元(重疊池化,步長小于池化單元的寬度),輸出為27×27×96((55−3)/2+1=27)
  • 局部響應歸一化,使用k=2,n=5,α=10−4,β=0.75進行局部歸一化,輸出的仍然為27×27×96,輸出分為兩組,每組的大小為27×27×48

2)卷積層C2

該層的處理流程是:卷積–>ReLU–>池化–>歸一化

  • 卷積,輸入是2組27×27×48。使用2組,每組128個尺寸為5×5×48的卷積核,并作了邊緣填充padding=2,卷積的步長為1.

    則輸出的FeatureMap為2組,每組的大小為27×27 times128. ((27+2∗2−5)/1+1=27)

  • ReLU,将卷積層輸出的FeatureMap輸入到ReLU函數中
  • 池化運算的尺寸為3×3,步長為2,池化後圖像的尺寸為(27−3)/2+1=13,輸出為13×13×256
  • 局部響應歸一化,使用k=2,n=5,α=10−4,β=0.75進行局部歸一化,輸出的仍然為13×13×256,輸出分為2組,每組的大小為13×13×128

3)卷積層C3

該層的處理流程是: 卷積–>ReLU

  • 卷積,輸入是13×13×256,使用2組共384尺寸為3×3×256的卷積核,做了邊緣填充padding=1,卷積的步長為1.則輸出的FeatureMap為13×13

    times384

  • ReLU,将卷積層輸出的FeatureMap輸入到ReLU函數中

4)卷積層C4

該層的處理流程是: 卷積–>ReLU

該層和C3類似。

  • 卷積,輸入是13×13×384,分為兩組,每組為13×13×192.使用2組,每組192個尺寸為3×3×192的卷積核,做了邊緣填充padding=1,卷積的步長為1.則輸出的FeatureMap為13×13

    times384,分為兩組,每組為13×13×192

  • ReLU,将卷積層輸出的FeatureMap輸入到ReLU函數中

5)卷積層C5

該層處理流程為:卷積–>ReLU–>池化

  • 卷積,輸入為13×13×384,分為兩組,每組為13×13×192。使用2組,每組為128尺寸為3×3×192的卷積核,做了邊緣填充padding=1,卷積的步長為1.則輸出的FeatureMap為13×13×256
  • ReLU,将卷積層輸出的FeatureMap輸入到ReLU函數中
  • 池化,池化運算的尺寸為3×3,步長為2,池化後圖像的尺寸為 (13−3)/2+1=6,即池化後的輸出為6×6×256

6)全連接配接層FC6

該層的流程為:(卷積)全連接配接 -->ReLU -->Dropout

  • 卷積->全連接配接:

    輸入為6×6×256,該層有4096個卷積核,每個卷積核的大小為6×6×256。由于卷積核的尺寸剛好與待處理特征圖(輸入)的尺寸相同,即卷積核中的每個系數隻與特征圖(輸入)尺寸的一個像素值相乘,一一對應,是以,該層被稱為全連接配接層。由于卷積核與特征圖的尺寸相同,卷積運算後隻有一個值,是以,卷積後的像素層尺寸為4096×1×1,即有4096個神經元。

  • ReLU,這4096個運算結果通過ReLU激活函數生成4096個值
  • Dropout,抑制過拟合,随機的斷開某些神經元的連接配接或者是不激活某些神經元

7)全連接配接層FC7

流程為:全連接配接–>ReLU–>Dropout

  • 全連接配接,輸入為4096的向量
  • ReLU,這4096個運算結果通過ReLU激活函數生成4096個值
  • Dropout,抑制過拟合,随機的斷開某些神經元的連接配接或者是不激活某些神經元

8)輸出層

第七層輸出的4096個資料與第八層的1000個神經元進行全連接配接,經過訓練後輸出1000個float型的值,這就是預測結果

8、AlexNet參數數量

卷積層的參數 = 卷積核的數量 * 卷積核 + 偏置

  • C1: 96個11×11×3的卷積核,96×11×11×3+96=34848
  • C2: 2組,每組128個5×5×48的卷積核,(128×5×5×48+128)×2=307456
  • C3: 384個3×3×256的卷積核,3×3×256×384+384=885120
  • C4: 2組,每組192個3×3×192的卷積核,(3×3×192×192+192)×2=663936
  • C5: 2組,每組128個3×3×192的卷積核,(3×3×192×128+128)×2=442624
  • FC6: 4096個6×6×256的卷積核,6×6×256×4096+4096=37752832
  • FC7: 4096∗4096+4096=16781312
  • output: 4096∗1000=4096000

    卷積層 C2,C4,C5中的卷積核隻和位于同一GPU的上一層的FeatureMap相連。從上面可以看出,參數大多數集中在全連接配接層,在卷積層由于權值共享,權值參數較少。

論文下載下傳:http://www.cs.toronto.edu/~fritz/absps/imagenet.pdf

三、VGG net

2014年,牛津大學計算機視覺組(Visual Geometry Group)和Google DeepMind公司的研究員一起研發出了新的深度卷積神經網絡:VGGNet,并取得了ILSVRC2014比賽分類項目的第二名(第一名是GoogLeNet,也是同年提出的).論文下載下傳 Very Deep Convolutional Networks for Large-Scale Image Recognition。論文主要針對卷積神經網絡的深度對大規模圖像集識别精度的影響,主要貢獻是使用很小的卷積核(3×3)建構各種深度的卷積神經網絡結構,并對這些網絡結構進行了評估,最終證明16-19層的網絡深度,能夠取得較好的識别精度。 這也就是常用來提取圖像特征的VGG-16和VGG-19。

VGG可以看成是加深版的AlexNet,整個網絡由卷積層和全連接配接層疊加而成,和AlexNet不同的是,VGG中使用的都是小尺寸的卷積核(3×3)。

1、VGG的特點

  • 結構簡潔,如下圖VGG-19的網絡結構
    【深度學習】經典的卷積神經網絡模型介紹(LeNet、AlexNet、VGGNet、GoogLeNet、ResNet和MobileNet)卷積神經網絡簡介一、LeNet二、AlexNet三、VGG net四、GoogLeNet五、Resnet六、MobileNet
    對比,前面介紹的AlexNet的網絡結構圖,是不是有種賞心悅目的感覺。整個結構隻有3×3的卷積層,連續的卷積層後使用池化層隔開。雖然層數很多,但是很簡潔。
  • 小卷積核和連續的卷積層

VGG中使用的都是3×3卷積核,并且使用了連續多個卷積層。這樣做的好處:

使用連續的的多個小卷積核(3×3),來代替一個大的卷積核(例如(5×5)。

使用小的卷積核的問題是,其感受野必然變小。是以,VGG中就使用連續的3×3卷積核,來增大感受野。VGG認為2個連續的3×3卷積核能夠替代一個5×5卷積核,三個連續的3×3能夠代替一個7×7。

【深度學習】經典的卷積神經網絡模型介紹(LeNet、AlexNet、VGGNet、GoogLeNet、ResNet和MobileNet)卷積神經網絡簡介一、LeNet二、AlexNet三、VGG net四、GoogLeNet五、Resnet六、MobileNet

小卷積核的參數較少。3個3×3的卷積核參數為3×3×=27,而一個7×7的卷積核參數為7×7=49

由于每個卷積層都有一個非線性的激活函數,多個卷積層增加了非線性映射。

  • 小池化核,使用的是2×2
  • 通道數更多,特征度更寬

    每個通道代表着一個FeatureMap,更多的通道數表示更豐富的圖像特征。VGG網絡第一層的通道數為64,後面每層都進行了翻倍,最多到512個通道,通道數的增加,使得更多的資訊可以被提取出來。

  • 層數更深

    使用連續的小卷積核代替大的卷積核,網絡的深度更深,并且對邊緣進行填充,卷積的過程并不會降低圖像尺寸。僅使用小的池化單元,降低圖像的尺寸。

  • 全連接配接轉卷積(測試階段)

    這也是VGG的一個特點,在網絡測試階段将訓練階段的三個全連接配接替換為三個卷積,使得測試得到的全卷積網絡因為沒有全連接配接的限制,因而可以接收任意寬或高為的輸入,這在測試階段很重要。如本節第一個圖所示,輸入圖像是224x224x3,如果後面三個層都是全連接配接,那麼在測試階段就隻能将測試的圖像全部都要縮放大小到224x224x3,才能符合後面全連接配接層的輸入數量要求,這樣就不便于測試工作的開展。

    全連接配接轉卷積的替換過程如下:

【深度學習】經典的卷積神經網絡模型介紹(LeNet、AlexNet、VGGNet、GoogLeNet、ResNet和MobileNet)卷積神經網絡簡介一、LeNet二、AlexNet三、VGG net四、GoogLeNet五、Resnet六、MobileNet

例如7×7×512的層要跟4096個神經元的層做全連接配接,則替換為對7×7×512的層作通道數為4096、卷積核為1×1卷積。

這個“全連接配接轉卷積”的思路是VGG作者參考了OverFeat的工作思路,例如下圖是OverFeat将全連接配接換成卷積後,則可以來處理任意分辨率(在整張圖)上計算卷積,這就是無需對原圖做重新縮放處理的優勢。

【深度學習】經典的卷積神經網絡模型介紹(LeNet、AlexNet、VGGNet、GoogLeNet、ResNet和MobileNet)卷積神經網絡簡介一、LeNet二、AlexNet三、VGG net四、GoogLeNet五、Resnet六、MobileNet

2、VGG網絡結構

VGG網絡相比AlexNet層數多了不少,但是其結構卻簡單不少。

  • VGG的輸入為224×224×3的圖像
  • 對圖像做均值預處理,每個像素中減去在訓練集上計算的RGB均值。
  • 網絡使用連續的小卷積核(3×3)做連續卷積,卷積的固定步長為1,并在圖像的邊緣填充1個像素,這樣卷積後保持圖像的分辨率不變。
  • 連續的卷積層會接着一個池化層,降低圖像的分辨率。空間池化由五個最大池化層進行,這些層在一些卷積層之後(不是所有的卷積層之後都是最大池化)。在2×2像素視窗上進行最大池化,步長為2。
  • 卷積層後,接着的是3個全連接配接層,前兩個每個都有4096個通道,第三是輸出層輸出1000個分類。
  • 所有的隐藏層的激活函數都使用的是ReLU
  • 使用1×1的卷積核,為了添加非線性激活函數的個數,而且不影響卷積層的感受野。
  • 沒有使用局部歸一化,作者發現局部歸一化并不能提高網絡的性能。

VGG論文主要是研究網絡的深度對其分類精度的影響,是以按照上面的描述設計規則,作者實驗的了不同深度的網絡結構

【深度學習】經典的卷積神經網絡模型介紹(LeNet、AlexNet、VGGNet、GoogLeNet、ResNet和MobileNet)卷積神經網絡簡介一、LeNet二、AlexNet三、VGG net四、GoogLeNet五、Resnet六、MobileNet

所有網絡結構都遵從上面提到的設計規則,并且僅是深度不同,也就是卷積層的個數不同:從網絡A中的11個權重層(8個卷積層和3個FC層)到網絡E中的19個權重層(16個卷積層和3個FC層)。卷積層的寬度(通道數)相當小,從第一層中的64開始,然後在每個最大池化層之後增加2倍,直到達到512。

上圖給出了各個深度的卷積層使用的卷積核大小以及通道的個數。最後的D,E網絡就是大名鼎鼎的VGG-16和VGG-19了。

AlexNet僅僅隻有8層,其可訓練的參數就達到了60M,VGG系列的參數就更恐怖了,如下圖(機關是百萬)

【深度學習】經典的卷積神經網絡模型介紹(LeNet、AlexNet、VGGNet、GoogLeNet、ResNet和MobileNet)卷積神經網絡簡介一、LeNet二、AlexNet三、VGG net四、GoogLeNet五、Resnet六、MobileNet

由于參數大多數集中在後面三個全連接配接層,是以雖然網絡的深度不同,全連接配接層确實相同的,其參數差別倒不是特别的大

3、VGG優缺點

VGG優點

  • VGGNet的結構非常簡潔,整個網絡都使用了同樣大小的卷積核尺寸(3x3)和最大池化尺寸(2x2)。
  • 幾個小濾波器(3x3)卷積層的組合比一個大濾波器(5x5或7x7)卷積層好:
  • 驗證了通過不斷加深網絡結構可以提升性能

VGG缺點

  • VGG耗費更多計算資源,并且使用了更多的參數(這裡不是3x3卷積的鍋),導緻更多的記憶體占用(140M)。其中絕大多數的參數都是來自于第一個全連接配接層。VGG可是有3個全連接配接層啊!

PS:有的文章稱:發現這些全連接配接層即使被去除,對于性能也沒有什麼影響,這樣就顯著降低了參數數量。

注:很多pretrained的方法就是使用VGG的model(主要是16和19),VGG相對其他的方法,參數空間很大,最終的model有500多m,AlexNet隻有200m,GoogLeNet更少,是以train一個vgg模型通常要花費更長的時間,所幸有公開的pretrained model讓我們很友善的使用。

四、GoogLeNet

1、GoogLeNet Incepetion V1

這是GoogLeNet的最早版本,出現在2014年的《Going deeper with convolutions》。之是以名為“GoogLeNet”而非“GoogleNet”,文章說是為了向早期的LeNet緻敬。

  • Motivation

深度學習以及神經網絡快速發展,人們不再隻關注更給力的硬體、更大的資料集、更大的模型,而是更在意新的idea、新的算法以及模型的改進。

一般來說,提升網絡性能最直接的辦法就是增加網絡深度和寬度,這也就意味着巨量的參數。但是,巨量參數容易産生過拟合也會大大增加計算量。

文章認為解決上述兩個缺點的根本方法是将全連接配接甚至一般的卷積都轉化為稀疏連接配接。一方面現實生物神經系統的連接配接也是稀疏的,另一方面有文獻1表明:對于大規模稀疏的神經網絡,可以通過分析激活值的統計特性和對高度相關的輸出進行聚類來逐層建構出一個最優網絡。這點表明臃腫的稀疏網絡可能被不失性能地簡化。 雖然數學證明有着嚴格的條件限制,但Hebbian準則有力地支援了這一點:fire together,wire together。

早些的時候,為了打破網絡對稱性和提高學習能力,傳統的網絡都使用了随機稀疏連接配接。但是,計算機軟硬體對非均勻稀疏資料的計算效率很差,是以在AlexNet中又重新啟用了全連接配接層,目的是為了更好地優化并行運算。

是以,現在的問題是有沒有一種方法,既能保持網絡結構的稀疏性,又能利用密集矩陣的高計算性能。大量的文獻表明可以将稀疏矩陣聚類為較為密集的子矩陣來提高計算性能,據此論文提出了名為Inception 的結構來實作此目的。

  • Architectural Details

Inception 結構的主要思路是怎樣用密內建分來近似最優的局部稀疏結構。

作者首先提出下圖這樣的基本結構:

【深度學習】經典的卷積神經網絡模型介紹(LeNet、AlexNet、VGGNet、GoogLeNet、ResNet和MobileNet)卷積神經網絡簡介一、LeNet二、AlexNet三、VGG net四、GoogLeNet五、Resnet六、MobileNet

對上圖做以下說明:

1 . 采用不同大小的卷積核意味着不同大小的感受野,最後拼接意味着不同尺度特征的融合;

2 . 之是以卷積核大小采用1、3和5,主要是為了友善對齊。設定卷積步長stride=1之後,隻要分别設定pad=0、1、2,那麼卷積之後便可以得到相同次元的特征,然後這些特征就可以直接拼接在一起了;

3 . 文章說很多地方都表明pooling挺有效,是以Inception裡面也嵌入了。

4 . 網絡越到後面,特征越抽象,而且每個特征所涉及的感受野也更大了,是以随着層數的增加,3x3和5x5卷積的比例也要增加。

但是,使用5x5的卷積核仍然會帶來巨大的計算量。 為此,文章借鑒NIN2,采用1x1卷積核來進行降維。

例如:上一層的輸出為100x100x128,經過具有256個輸出的5x5卷積層之後(stride=1,pad=2),輸出資料為100x100x256。其中,卷積層的參數為128x5x5x256。假如上一層輸出先經過具有32個輸出的1x1卷積層,再經過具有256個輸出的5x5卷積層,那麼最終的輸出資料仍為為100x100x256,但卷積參數量已經減少為128x1x1x32 + 32x5x5x256,大約減少了4倍。

具體改進後的Inception Module如下圖:

【深度學習】經典的卷積神經網絡模型介紹(LeNet、AlexNet、VGGNet、GoogLeNet、ResNet和MobileNet)卷積神經網絡簡介一、LeNet二、AlexNet三、VGG net四、GoogLeNet五、Resnet六、MobileNet

GoogLeNet的整體結構如下圖:

【深度學習】經典的卷積神經網絡模型介紹(LeNet、AlexNet、VGGNet、GoogLeNet、ResNet和MobileNet)卷積神經網絡簡介一、LeNet二、AlexNet三、VGG net四、GoogLeNet五、Resnet六、MobileNet

對上圖做如下說明:

1 . 顯然GoogLeNet采用了子產品化的結構,友善增添和修改;

2 . 網絡最後采用了average pooling來代替全連接配接層,想法來自NIN,事實證明可以将TOP1 accuracy提高0.6%。但是,實際在最後還是加了一個全連接配接層,主要是為了友善以後大家finetune;

3 . 雖然移除了全連接配接,但是網絡中依然使用了Dropout ;

4 . 為了避免梯度消失,網絡額外增加了2個輔助的softmax用于向前傳導梯度。文章中說這兩個輔助的分類器的loss應該加一個衰減系數,但看caffe中的model也沒有加任何衰減。此外,實際測試的時候,這兩個額外的softmax會被去掉。

下圖是一個比較清晰的結構圖:

【深度學習】經典的卷積神經網絡模型介紹(LeNet、AlexNet、VGGNet、GoogLeNet、ResNet和MobileNet)卷積神經網絡簡介一、LeNet二、AlexNet三、VGG net四、GoogLeNet五、Resnet六、MobileNet
  • Conclusion

GoogLeNet是谷歌團隊為了參加ILSVRC 2014比賽而精心準備的,為了達到最佳的性能,除了使用上述的網絡結構外,還做了大量的輔助工作:包括訓練多個model求平均、裁剪不同尺度的圖像做多次驗證等等。詳細的這些可以參看文章的實驗部分。

本文的主要想法其實是想通過建構密集的塊結構來近似最優的稀疏結構,進而達到提高性能而又不大量增加計算量的目的。GoogleNet的caffemodel大小約50M,但性能卻很優異。

2、GoogLeNet Inception V2

GoogLeNet憑借其優秀的表現,得到了很多研究人員的學習和使用,是以Google團隊又對其進行了進一步發掘改進,産生了更新版本的GoogLeNet。這一節介紹的版本記為V2,文章為:《Rethinking the Inception Architecture for Computer Vision》。

  • Introduction

14年以來,建構更深的網絡逐漸成為主流,但是模型的變大也使計算效率越來越低。這裡,文章試圖找到一種方法在擴大網絡的同時又盡可能地發揮計算性能。

首先,GoogLeNet V1出現的同期,性能與之接近的大概隻有VGGNet了,并且二者在圖像分類之外的很多領域都得到了成功的應用。但是相比之下,GoogLeNet的計算效率明顯高于VGGNet,大約隻有500萬參數,隻相當于Alexnet的1/12(GoogLeNet的caffemodel大約50M,VGGNet的caffemodel則要超過600M)。

GoogLeNet的表現很好,但是,如果想要通過簡單地放大Inception結構來建構更大的網絡,則會立即提高計算消耗。此外,在V1版本中,文章也沒給出有關建構Inception結構注意事項的清晰描述。是以,在文章中作者首先給出了一些已經被證明有效的用于放大網絡的通用準則和優化方法。這些準則和方法适用但不局限于Inception結構。

  • General Design Principles

下面的準則來源于大量的實驗,是以包含一定的推測,但實際證明基本都是有效的。

1 . 避免表達瓶頸,特别是在網絡靠前的地方。 資訊流前向傳播過程中顯然不能經過高度壓縮的層,即表達瓶頸。從input到output,feature map的寬和高基本都會逐漸變小,但是不能一下子就變得很小。比如你上來就來個kernel = 7, stride = 5 ,這樣顯然不合适。

另外輸出的次元channel,一般來說會逐漸增多(每層的num_output),否則網絡會很難訓練。(特征次元并不代表資訊的多少,隻是作為一種估計的手段)

2 . 高維特征更易處理。 高維特征更易區分,會加快訓練。

3. 可以在低維嵌入上進行空間彙聚而無需擔心丢失很多資訊。 比如在進行3x3卷積之前,可以對輸入先進行降維而不會産生嚴重的後果。假設資訊可以被簡單壓縮,那麼訓練就會加快。

4 . 平衡網絡的寬度與深度。

上述的這些并不能直接用來提高網絡品質,而僅用來在大環境下作指導。

  • Factorizing Convolutions with Large Filter Size

大尺寸的卷積核可以帶來更大的感受野,但也意味着更多的參數,比如5x5卷積核參數是3x3卷積核的25/9=2.78倍。為此,作者提出可以用2個連續的3x3卷積層(stride=1)組成的小網絡來代替單個的5x5卷積層,(保持感受野範圍的同時又減少了參數量)如下圖:

【深度學習】經典的卷積神經網絡模型介紹(LeNet、AlexNet、VGGNet、GoogLeNet、ResNet和MobileNet)卷積神經網絡簡介一、LeNet二、AlexNet三、VGG net四、GoogLeNet五、Resnet六、MobileNet

然後就會有2個疑問:

1 . 這種替代會造成表達能力的下降嗎?

後面有大量實驗可以表明不會造成表達缺失;

2 . 3x3卷積之後還要再加激活嗎?

作者也做了對比試驗,表明添加非線性激活會提高性能。

從上面來看,大卷積核完全可以由一系列的3x3卷積核來替代,那能不能分解的更小一點呢。文章考慮了 nx1 卷積核。

如下圖所示的取代3x3卷積:

【深度學習】經典的卷積神經網絡模型介紹(LeNet、AlexNet、VGGNet、GoogLeNet、ResNet和MobileNet)卷積神經網絡簡介一、LeNet二、AlexNet三、VGG net四、GoogLeNet五、Resnet六、MobileNet

于是,任意nxn的卷積都可以通過1xn卷積後接nx1卷積來替代。實際上,作者發現在網絡的前期使用這種分解效果并不好,還有在中度大小的feature map上使用效果才會更好。(對于mxm大小的feature map,建議m在12到20之間)。

總結如下圖:

【深度學習】經典的卷積神經網絡模型介紹(LeNet、AlexNet、VGGNet、GoogLeNet、ResNet和MobileNet)卷積神經網絡簡介一、LeNet二、AlexNet三、VGG net四、GoogLeNet五、Resnet六、MobileNet

(1) 圖4是GoogLeNet V1中使用的Inception結構;

(2) 圖5是用3x3卷積序列來代替大卷積核;

(3) 圖6是用nx1卷積來代替大卷積核,這裡設定n=7來應對17x17大小的feature map。該結構被正式用在GoogLeNet V2中。

五、Resnet

1、Resnet要解決的是什麼問題

1)ResNets要解決的是深度神經網絡的“退化”問題。

什麼是“退化”?

我們知道,對淺層網絡逐漸疊加layers,模型在訓練集和測試集上的性能會變好,因為模型複雜度更高了,表達能力更強了,可以對潛在的映射關系拟合得更好。而“退化”指的是,給網絡疊加更多的層後,性能卻快速下降的情況。

訓練集上的性能下降,可以排除過拟合,BN層的引入也基本解決了plain net的梯度消失和梯度爆炸問題。如果不是過拟合以及梯度消失導緻的,那原因是什麼?

按道理,給網絡疊加更多層,淺層網絡的解空間是包含在深層網絡的解空間中的,深層網絡的解空間至少存在不差于淺層網絡的解,因為隻需将增加的層變成恒等映射,其他層的權重原封不動copy淺層網絡,就可以獲得與淺層網絡同樣的性能。更好的解明明存在,為什麼找不到?找到的反而是更差的解?

顯然,這是個優化問題,反映出結構相似的模型,其優化難度是不一樣的,且難度的增長并不是線性的,越深的模型越難以優化。

有兩種解決思路,一種是調整求解方法,比如更好的初始化、更好的梯度下降算法等;另一種是調整模型結構,讓模型更易于優化——改變模型結構實際上是改變了error surface的形态。

ResNet的作者從後者入手,探求更好的模型結構。将堆疊的幾層layer稱之為一個block,對于某個block,其可以拟合的函數為F(x),如果期望的潛在映射為H(x),與其讓F(x) 直接學習潛在的映射,不如去學習殘差H(x)−x,即F(x):=H(x)−x,這樣原本的前向路徑上就變成了F(x)+x,用F(x)+x來拟合H(x)。作者認為這樣可能更易于優化,因為**相比于讓F(x)學習成恒等映射,讓F(x)學習成0要更加容易——後者通過L2正則就可以輕松實作。**這樣,對于備援的block,隻需F(x)→0就可以得到恒等映射,性能不減。

下面的問題就變成了F(x)+x 該怎麼設計了。

2、Residual Block的設計

F(x)+x構成的block稱之為Residual Block,即殘差塊,如下圖所示,多個相似的Residual Block串聯構成ResNet

【深度學習】經典的卷積神經網絡模型介紹(LeNet、AlexNet、VGGNet、GoogLeNet、ResNet和MobileNet)卷積神經網絡簡介一、LeNet二、AlexNet三、VGG net四、GoogLeNet五、Resnet六、MobileNet

一個殘差塊有2條路徑F(x)和x,F(x)路徑拟合殘差,不妨稱之為殘差路徑,x路徑為identity mapping恒等映射,稱之為”shortcut”。圖中的⊕為element-wise addition,要求參與運算的F(x)和x的尺寸要相同。是以,随之而來的問題是,

  • 殘差路徑如何設計?
  • shortcut路徑如何設計?
  • Residual Block之間怎麼連接配接?

在原論文中,殘差路徑可以大緻分成2種,一種有bottleneck結構,即下圖右中的1×1 卷積層,用于先降維再升維,主要出于降低計算複雜度的現實考慮,稱之為**“bottleneck block”,另一種沒有bottleneck結構,如下圖左所示,稱之為“basic block”**。basic block由2個3×3卷積層構成,bottleneck block由1×1

【深度學習】經典的卷積神經網絡模型介紹(LeNet、AlexNet、VGGNet、GoogLeNet、ResNet和MobileNet)卷積神經網絡簡介一、LeNet二、AlexNet三、VGG net四、GoogLeNet五、Resnet六、MobileNet

shortcut路徑大緻也可以分成2種,取決于殘差路徑是否改變了feature map數量和尺寸,一種是将輸入x原封不動地輸出,另一種則需要經過1×1卷積來升維 or/and 降采樣,主要作用是将輸出與F(x)路徑的輸出保持shape一緻,對網絡性能的提升并不明顯,兩種結構如下圖所示,

【深度學習】經典的卷積神經網絡模型介紹(LeNet、AlexNet、VGGNet、GoogLeNet、ResNet和MobileNet)卷積神經網絡簡介一、LeNet二、AlexNet三、VGG net四、GoogLeNet五、Resnet六、MobileNet

至于Residual Block之間的銜接,在原論文中,F(x)+x經過ReLU後直接作為下一個block的輸入x。

對于F(x)路徑、shortcut路徑以及block之間的銜接,在論文Identity Mappings in Deep Residual Networks中有更進一步的研究,具體在文章後面讨論。

3、ResNet 網絡結構

ResNet為多個Residual Block的串聯,下面直覺看一下ResNet-34與34-layer plain net和VGG的對比,以及堆疊不同數量Residual Block得到的不同ResNet。

【深度學習】經典的卷積神經網絡模型介紹(LeNet、AlexNet、VGGNet、GoogLeNet、ResNet和MobileNet)卷積神經網絡簡介一、LeNet二、AlexNet三、VGG net四、GoogLeNet五、Resnet六、MobileNet

ResNet的設計有如下特點:

  • 與plain net相比,ResNet多了很多“旁路”,即shortcut路徑,其首尾圈出的layers構成一個Residual Block;
  • ResNet中,所有的Residual Block都沒有pooling層,降采樣是通過conv的stride實作的;
  • 分别在conv3_1、conv4_1和conv5_1 Residual Block,降采樣1倍,同時feature map數量增加1倍,如圖中虛線劃定的block;
  • 通過Average Pooling得到最終的特征,而不是通過全連接配接層;
  • 每個卷積層之後都緊接着BatchNorm layer,為了簡化,圖中并沒有标出;

    ResNet結構非常容易修改和擴充,通過調整block内的channel數量以及堆疊的block數量,就可以很容易地調整網絡的寬度和深度,來得到不同表達能力的網絡,而不用過多地擔心網絡的“退化”問題,隻要訓練資料足夠,逐漸加深網絡,就可以獲得更好的性能表現。

下面為網絡的性能對比,

【深度學習】經典的卷積神經網絡模型介紹(LeNet、AlexNet、VGGNet、GoogLeNet、ResNet和MobileNet)卷積神經網絡簡介一、LeNet二、AlexNet三、VGG net四、GoogLeNet五、Resnet六、MobileNet

4、Residual Block的分析與改進

論文Identity Mappings in Deep Residual Networks進一步研究ResNet,通過ResNet反向傳播的理論分析以及調整Residual Block的結構,得到了新的結構,如下

【深度學習】經典的卷積神經網絡模型介紹(LeNet、AlexNet、VGGNet、GoogLeNet、ResNet和MobileNet)卷積神經網絡簡介一、LeNet二、AlexNet三、VGG net四、GoogLeNet五、Resnet六、MobileNet

注意,這裡的視角與之前不同,這裡将shortcut路徑視為主幹路徑,将殘差路徑視為旁路。

新提出的Residual Block結構,具有更強的泛化能力,能更好地避免“退化”,堆疊大于1000層後,性能仍在變好。具體的變化在于

  • 通過保持shortcut路徑的“純淨”,可以讓資訊在前向傳播和反向傳播中平滑傳遞,這點十分重要。為此,如無必要,不引入1×1卷積等操作,同時将上圖灰色路徑上的ReLU移到了F(x)路徑上。
  • 在殘差路徑上,将BN和ReLU統一放在weight前作為pre-activation,獲得了“Ease of

    optimization”以及“Reducing overfitting”的效果。 下面具體解釋一下。

令h(xl)為shortcut路徑上的變換,f為addition之後的變換,原Residual Block中f=ReLU,當h和f均為恒等映射時,可以得到任意兩層xL和xl之間的關系,此時資訊可以在xl和xL間無損直達,如下前向傳播中的xl以及反向傳播中的1。

【深度學習】經典的卷積神經網絡模型介紹(LeNet、AlexNet、VGGNet、GoogLeNet、ResNet和MobileNet)卷積神經網絡簡介一、LeNet二、AlexNet三、VGG net四、GoogLeNet五、Resnet六、MobileNet

反向傳播中的這個1具有一個很好的性質,**任意兩層間的反向傳播,這一項都是1,可以有效地避免梯度消失和梯度爆炸。**如果h和f不是恒等映射,就會讓這一項變得複雜,若是令其為一個大于或小于1的scale因子,反向傳播連乘後就可能導緻梯度爆炸或消失,層數越多越明顯,這也是ResNet比highway network性能好的原因。需要注意的是,BN層解決了plain net的梯度消失和爆炸,這裡的1可以避免short cut 路徑上的梯度消失和爆炸。

shortcut路徑将反向傳播由連乘形式變為加法形式,讓網絡最終的損失在反向傳播時可以無損直達每一個block,也意味着每個block的權重更新都部分地直接作用在最終的損失上。看上面前向傳播的公式,可以看到某種ensemble形式,資訊雖然可以在任意兩層之間直達,但這種直達其實是隐含的,對某個block而言,它隻能看到加法的結果,而不知道加法中每個加數是多數,從資訊通路上講尚不徹底——由此也誕生了DenseNet。

對于殘差路徑的改進,作者進行了不同的對比實驗,最終得到了将BN和ReLU統一放在weight前的full pre-activation結構。

【深度學習】經典的卷積神經網絡模型介紹(LeNet、AlexNet、VGGNet、GoogLeNet、ResNet和MobileNet)卷積神經網絡簡介一、LeNet二、AlexNet三、VGG net四、GoogLeNet五、Resnet六、MobileNet

5、小結

ResNet的動機在于解決“退化”問題,殘差塊的設計讓學習恒等映射變得容易,即使堆疊了過量的block,ResNet可以讓備援的block學習成恒等映射,性能也不會下降。是以,網絡的“實際深度”是在訓練過程中決定的,即ResNet具有某種深度自适應的能力。

深度自适應能解釋不會“退化”,但為什麼可以更好?

通過可視化error surface,我們看到了shortcut的平滑作用,但這隻是結果,背後的根由是什麼?

也許徹底搞懂ResNet還需要進一步地研究,但已有很多不同的了解角度,

微分方程的角度,A Proposal on Machine Learning via Dynamical Systems

ensemble的角度,Residual Networks Behave Like Ensembles of Relatively Shallow Networks

資訊/梯度通路的角度,Identity Mappings in Deep Residual Networks

類比泰勒展開、類比小波……

六、MobileNet

以上現在流行的CNN,如AlexNet、VGG、ResNet,雖然識别效果不錯,但是模型的參數量和計算量巨大,不适合在移動端、嵌入式裝置上運作。是以就出現了更輕量級更快速的的CNN設計,這裡要講述的是谷歌的MobileNet系列工作。

1、MobileNetV1

paper https://arxiv.org/abs/1704.04861

MobileNet 由谷歌在 2017 年提出,是一款專注于在移動裝置和嵌入式裝置上的 輕量級 CNN神經網絡,并 迅速 衍生了 v1 v2 v3 三個版本;

相比于傳統的 CNN 網絡,在準确率小幅降低的前提下,大大減小模型參數和運算量;一句話概括,V1 就是 把 vgg 中标準卷積層 換成了 深度可分離卷積;

模型亮點:

  1. 深度可分離卷積,大大減少參數量
  2. 增加超參 α、β

可分離卷積

可分離卷積大緻可以分為 空間可分離 和 深度可分離;

空間可分離

顧名思義,就是把一個 大卷積核 換成兩個 小卷積核,例如;

【深度學習】經典的卷積神經網絡模型介紹(LeNet、AlexNet、VGGNet、GoogLeNet、ResNet和MobileNet)卷積神經網絡簡介一、LeNet二、AlexNet三、VGG net四、GoogLeNet五、Resnet六、MobileNet

非本文重點,簡單介紹;

深度可分離

深度可分離 由 深度卷積 + 逐點卷積 組成;

深度卷積:

論文中稱為 DW 卷積,就是 把 卷積核 變成 單通道,輸入有 M 個通道數,就需要 M 個卷積核,每個通道 分别進行卷積,最後做疊加,如下圖

【深度學習】經典的卷積神經網絡模型介紹(LeNet、AlexNet、VGGNet、GoogLeNet、ResNet和MobileNet)卷積神經網絡簡介一、LeNet二、AlexNet三、VGG net四、GoogLeNet五、Resnet六、MobileNet

逐點卷積:

論文中稱為 PW 卷積,就是用 1x1 的卷積核進行卷積,作用是 對深度卷積後的 特征 進行 升維;

【深度學習】經典的卷積神經網絡模型介紹(LeNet、AlexNet、VGGNet、GoogLeNet、ResNet和MobileNet)卷積神經網絡簡介一、LeNet二、AlexNet三、VGG net四、GoogLeNet五、Resnet六、MobileNet

上面兩步實作的效果如下圖

【深度學習】經典的卷積神經網絡模型介紹(LeNet、AlexNet、VGGNet、GoogLeNet、ResNet和MobileNet)卷積神經網絡簡介一、LeNet二、AlexNet三、VGG net四、GoogLeNet五、Resnet六、MobileNet

可以看到輸出 的 shape 是一樣的;

下面我們看看在 輸入輸出 shape 一樣時各自的參數量

标準卷積

params:Dk x Dk x M x N

計算量:Dk x Dk x M x Dh x Dw x N

可分離卷積

params:Dk x Dk x M + M x N

計算量:Dk x Dk x M x Dh x Dw + M x Dh x Dw x N

【深度學習】經典的卷積神經網絡模型介紹(LeNet、AlexNet、VGGNet、GoogLeNet、ResNet和MobileNet)卷積神經網絡簡介一、LeNet二、AlexNet三、VGG net四、GoogLeNet五、Resnet六、MobileNet

計算一下減少量

【深度學習】經典的卷積神經網絡模型介紹(LeNet、AlexNet、VGGNet、GoogLeNet、ResNet和MobileNet)卷積神經網絡簡介一、LeNet二、AlexNet三、VGG net四、GoogLeNet五、Resnet六、MobileNet

N 為 輸出通道數, Dk 為 卷積核 size,如果 size 為 3,減小了 1/9 左右,厲害了;

V1 卷積結構

把 vgg 的标準卷積 和 V1 的深度可分離卷積 對比看下

【深度學習】經典的卷積神經網絡模型介紹(LeNet、AlexNet、VGGNet、GoogLeNet、ResNet和MobileNet)卷積神經網絡簡介一、LeNet二、AlexNet三、VGG net四、GoogLeNet五、Resnet六、MobileNet

看到了 深度卷積 (3x3 Depthwise)和逐點卷積 (1x1 conv);同時看到了 Relu6,什麼鬼?

Relu6

上圖,一看便知

【深度學習】經典的卷積神經網絡模型介紹(LeNet、AlexNet、VGGNet、GoogLeNet、ResNet和MobileNet)卷積神經網絡簡介一、LeNet二、AlexNet三、VGG net四、GoogLeNet五、Resnet六、MobileNet

Relu6 對 大于 0 的部分做了一個邊界,作者認為,在模型精度要求不是很高的情況下,邊界使得模型魯棒性更強;

強行壓縮數值比較大的特征,避免了 個性特征,也相當于 規範了特征,防止過拟合,玄學要自己體會;

V1 網絡結構

【深度學習】經典的卷積神經網絡模型介紹(LeNet、AlexNet、VGGNet、GoogLeNet、ResNet和MobileNet)卷積神經網絡簡介一、LeNet二、AlexNet三、VGG net四、GoogLeNet五、Resnet六、MobileNet

Conv 代表标準卷積,Conv dw 代表深度可分離卷積,s2 代表步長為2,s1 代表步長為1;

V1 模型效果

标準卷積是在 原特征 上進行多次卷積,而 深度可分離卷積 是在 卷積後的 特征上 進行 多次卷積,直覺的感覺是,後者提取的特征不如前者,性能應該差點;

為了驗證 V1 的效果,作者做了各種實驗;

  1. 分别用 标準卷積 和 深度可分離卷積 實作 MobileNetV1
    【深度學習】經典的卷積神經網絡模型介紹(LeNet、AlexNet、VGGNet、GoogLeNet、ResNet和MobileNet)卷積神經網絡簡介一、LeNet二、AlexNet三、VGG net四、GoogLeNet五、Resnet六、MobileNet
    可以看到 效果确實不如 标準卷積,但是 ACC 相差不大, 可喜的是 參數量和計算量 大大降低,約 1/9;
  2. 把 V1 和 其他經典網絡比較
【深度學習】經典的卷積神經網絡模型介紹(LeNet、AlexNet、VGGNet、GoogLeNet、ResNet和MobileNet)卷積神經網絡簡介一、LeNet二、AlexNet三、VGG net四、GoogLeNet五、Resnet六、MobileNet

ACC 優于 GoogleNet,差于 VGG16,但相差都不太大,但是參數量和計算量大大降低;

  1. 把 V1 用于 目标檢測算法
【深度學習】經典的卷積神經網絡模型介紹(LeNet、AlexNet、VGGNet、GoogLeNet、ResNet和MobileNet)卷積神經網絡簡介一、LeNet二、AlexNet三、VGG net四、GoogLeNet五、Resnet六、MobileNet

mAP 相差不是特别大,計算量大大降低;

總結一句話,就是 V1 效果不輸其他網絡,但計算量和參數量大大降低;

2、MobileNetV2

paper https://arxiv.org/abs/1801.04381

MobileNetV2 是由 谷歌 在 2018 年提出,相比 V1,準确率更好,模型更小;

模型亮點:

  1. Inverted Residuals(倒殘差結構)
  2. Linear bottlenecks

倒殘差結構

一看到 殘差,就想到 resnet 了,先來看看 resnet 的 residual block(上文有介紹)

【深度學習】經典的卷積神經網絡模型介紹(LeNet、AlexNet、VGGNet、GoogLeNet、ResNet和MobileNet)卷積神經網絡簡介一、LeNet二、AlexNet三、VGG net四、GoogLeNet五、Resnet六、MobileNet

我們看右邊的 block,在 resnet 中 這個 block 專為 深層網絡設計,可大大減少 參數量;它先 通過 1x1 把 256 channel 變成 64 做降維,然後是 3x3 conv,再接着 1x1 還原為 256 channel 做升維;

總結一句就是先降維再升維,兩頭胖,中間瘦;

而 倒殘差結構就是 兩頭瘦,中間胖;

如下圖

【深度學習】經典的卷積神經網絡模型介紹(LeNet、AlexNet、VGGNet、GoogLeNet、ResNet和MobileNet)卷積神經網絡簡介一、LeNet二、AlexNet三、VGG net四、GoogLeNet五、Resnet六、MobileNet

在具體網絡設計時,經過試驗,作者并不是把 所有 block 都加上了 殘差結構,是以 V2 中有兩種 block;

【深度學習】經典的卷積神經網絡模型介紹(LeNet、AlexNet、VGGNet、GoogLeNet、ResNet和MobileNet)卷積神經網絡簡介一、LeNet二、AlexNet三、VGG net四、GoogLeNet五、Resnet六、MobileNet

隻有 Stride=1 時,才有 殘差結構;

Linear bottlenecks

我們看到上面的 殘差結構 末尾 是 Linear 而不是 Relu,為什麼呢?

作者經過研究,發現在 V1 中 depthwise 中有 0 卷積的原因就是 Relu 造成的,換成 Linear 解決了這個問題;

Relu 為什麼被換掉

作者做了如下實驗

【深度學習】經典的卷積神經網絡模型介紹(LeNet、AlexNet、VGGNet、GoogLeNet、ResNet和MobileNet)卷積神經網絡簡介一、LeNet二、AlexNet三、VGG net四、GoogLeNet五、Resnet六、MobileNet

作者把一個 二維 流形 資料【圖1】 作為 輸入, 然後 用不同次元的矩陣 T 把它映射到 高維,然後經過 Relu 輸出,再把 輸出 經過 T-1 還原成 二維,發現,在 低維 【圖2 3】 時,Relu 對信号的損失非常大,随着次元增加,損失越來越小;

結論就是 Relu 對低維信号 損失很大;

回想一下 深度卷積,深度卷積是單通道卷積,隻有 1 維,經過 relu 後,即使是 融合後再 Relu 也隻有 3 維,信号損失很大,如果學到的信号完全沒有用,那就不用學了, w 自然是 0 ;

問題又來了,既然 depthwise 時 relue 造成了信号損失,為什麼不換 DW 的 relue,而是把 逐點卷積 的 激活函數 換成 Linear 了?

  1. 首先 dw 的 relu 造成 大量損失是因為 Input 的 channel 太少了,如果 Input 的 channel 不少呢,就不損失了,那就沒問題了,是以重點不是換不換 relue,是解決 低 channel 的問題;
  2. 既然 channel 少,我給你增加 channel 不就好了,就是 1x1 升維咯;
  3. 升完了,我再降回來,将回來之後, channel 就少了,那就換成 linear 咯;
  4. 于是 倒殘差結構 形成咯,再就是畫道線的事,參考 resnet 而已;

V2 網絡結構

【深度學習】經典的卷積神經網絡模型介紹(LeNet、AlexNet、VGGNet、GoogLeNet、ResNet和MobileNet)卷積神經網絡簡介一、LeNet二、AlexNet三、VGG net四、GoogLeNet五、Resnet六、MobileNet

V2 模型效果

【深度學習】經典的卷積神經網絡模型介紹(LeNet、AlexNet、VGGNet、GoogLeNet、ResNet和MobileNet)卷積神經網絡簡介一、LeNet二、AlexNet三、VGG net四、GoogLeNet五、Resnet六、MobileNet

一句話,又好又快

繼續閱讀