深度學習分類模型面試題-面經(一)

  • VGG
  • Resnet
  • Inception V1-v3
  • Densnet
  • ResnXt
  • SENet
  • NAS
  • 下面四個都是輕量化模型
  • group convolution
  • SEResNet,SEResNeXt
  • NAS
  • EfficientNet

知識點包括:BN的作用,1X1卷積作用,深度分離卷積理解

VGG

該網絡表明堆疊多個層是提升計算機視覺性能的關鍵因素。包含16或19個層,主要由小型的3x3卷積(可以使得網絡更深,限制參數的數量)操作和2x2池化操作組成。通過堆疊3x3卷積而不是使用單個7x7卷積,
  1. 這樣組合了三個非線性函數,使得決策函數更有表徵能力
  2. 參數數量減少了81%,而感受野保持不變
  3. 使得網絡可以變得更深
 

ResNet

增加網絡深度會導致更高的訓練誤差,這表明梯度問題(梯度爆炸/消失)可能會導致訓練收斂性等潛在問題。作者想到構建恆等映射解決這個問題,問題解決的標誌是:增加網絡層數但訓練誤差不增加。(什麼是恆等映射,比如20層的網絡是56層的一個子集,若將56層網絡最後36層全部短接,這些層進來什麼出去也是什麼,這就是恆等映射,這不就等效於20層網絡了,至少不會比20層差,不引入恆等映射的56層爲什麼不行?因爲梯度消失現象使得網絡難以訓練,雖然網絡深度增加,但實際上無法有效訓練網絡,訓練不充分的網絡不但無法提升性能,甚至降低了性能)。使用殘差網絡構建恆等映射,原先網絡輸入x,希望輸出H(x),。我們令H(x)=F(x)+x,那麼我們網絡只需要學習輸出一個殘差F(x)=H(x)-x。
  1. 跳遠連接skipconnection不會增加參數數量,可以獲得穩定的訓練和顯著性能提升
  2. 1x1用於減少輸出通道個數
  3. 在每次卷積 完成後,激活進行前都有個BN操作
  4. 刪除了全連接,並使用平均池化層減少參數數量,由於網絡深,卷積層抽象能力強,從而減少了對全連接的需求
BN的作用:BN可以保證每一層的輸入分佈穩定,這可以使訓練加速
  • 加快訓練速度增大學習率
  • 減小梯度消失和梯度爆炸
  • 控制過擬合,可以少用或者不用dropout和正則
  • 降低網絡對初始權重不敏感
 

GoogleNet

inception模塊使用了3種不同卷積核,提取不同尺度特徵,既有宏觀特徵又有微觀特徵,增加了特徵多樣性。池化層目的是保留較爲原始的輸入信息。在模塊的輸出端將提取到的各種特徵在channel維度上進行拼接,得到多尺度的特徵featuremap
這種naive的版本在進行5×5卷積的時候依然會造成大量的計算成本。爲了解決這個問題,引入1×1卷積,它可以跨通道組織信息,提高網絡的表達能力,同時可以對輸出通道降維以減少計算成本。
能更高效利用計算資源,在相同計算量下能提取到更多特徵,從而提升訓練結果。Inception結構主要貢獻:
  • 使用1x1卷積來進行升降維並進行非線性化,注意1x1卷積作用
    • 降維/升維
    • 減少卷積核參數,降低計算複雜度
    • 加入非線性,提升網絡表達能力(每個1X1後有個激活)
    • 跨通道的信息角交互和信息整合
  • 在多個尺寸上同時進行卷積再聚合(增加了特徵多樣性)直觀上感覺在多個尺度上同時進行卷積,能提取到不同尺度的特徵,特徵更豐富以爲最後分類判斷時更準確

Inception V1

  • 網絡中有3個softmax,爲了減輕深層網絡反向傳播時梯度消失的影響。就是說整個網絡由3個softmax共同組成損失,這樣在反向傳播時,即使最後一個softmax傳播回來的梯度消失,還有前兩個softmax傳播回來的梯度輔助,測試時額外softmax會拿下。這樣不僅減輕了梯度消失的影響,而且加速了網絡的收斂
  • 採用了average pooling來代替全連接層,減少參數
  • 使用Inception模塊提高參數的利用效率,使用1X1卷積減小計算成本
 

Inception V2

堆疊網絡雖然可以提高準確率,但會導致計算效率明顯下降,如何在比增加過多計算量同時提高網絡表達能力。
  1. 用2個連續的3X3卷積組成的小網絡來代替單個的5X5卷積,即在保證感受野範圍同時減少了參數量
  2. 任意nxn卷積都可通過1xn卷積後接nx1卷積來代替。這種分解方法在網絡前期使用效果不好,在中度大小的特徵圖上效果會更好(12~20之間最好)
  3. 使用兩個並行化的卷積降低計算量卷積、池化並行執行,再進行合併
 

Inception V3

  Inception-v3 = Inception-v2 + Factorization + Batch Normalization
  • Inception V3最重要的改機你是分解(Factorization),將7x7卷積分解成兩個一維卷積(1x7,7x1),3x3(1x3,3x1)。這樣好處既可以加速計算,又可以將1個卷積拆成2個卷積,使得網深度進一步增加,增加了網絡非線性(每層都要Relu)
  • 網絡輸入從224x224變爲299x299
  • 輔助分類器加入BN
    • 使激活函數能夠更有效的利用輸入信息
    • 隨着模型訓練,能夠學習每層輸入分佈
    • 使內部協方差變小,加速訓練過程
    • 有效減緩梯度消失
  • RMSProp優化器
  • 標籤平滑(添加到損失公式的一種正則化項,旨在阻止網絡對某一類別過分自信)
    
 

inception V4:

Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning

加入rssidual connections,網絡訓練速度加快
 

DensNet

密集連接:緩解梯度消失,加強特徵傳播,鼓勵特徵複用,極大減少了參數量
  • 網絡中,任何兩層之間都有直接連接,即網絡每層輸入都是前面所有層輸出的並集,該層學習的特徵圖也會被直接傳給其後面所有層作爲輸入
  • Densnet比其他網絡效率更高,關鍵就在於網絡每層計算量的減少及其特徵的重複利用,每層都包含之前所有層輸出,只需要很少特徵圖就夠,這就是參數量少的原因
下圖是 DenseNet 的一個dense block示意圖,一個block裏面的結構如下,與ResNet中的BottleNeck基本一致:BN-ReLU-Conv(1×1)-BN-ReLU-Conv(3×3) ,而一個DenseNet則由多個這種block組成。
dense connectivity 僅僅是在一個dense block裏的,不同dense block 之間是沒有dense connectivity的,比如下圖所示每個DenseBlock的之間層稱爲transition layers,由BN−>Conv(1×1)−>averagePooling(2×2)組成
 

Xception

  • Inception出發點,用多尺寸卷積觀察輸入數據,還有就是用多個小卷積核替代大卷積核
  • Pointwise Conv,用1x1卷積做數據降維減少參數量(也可以升維,豐富數據特徵。同時加個激活函數,增加非線性特徵
  • 卷積核替換,5x5替換成2個3x3,7x7替換成1x7和7x1
  • Bottleneck,利用多個小卷積替代一個大卷積
  • Depthwise Separable Conv:深度可分卷積,再減少參數量
 
Depthwise Separable Convolution 深度可分離卷積(Xception和MobileNet)
MobileNet是基於深度可分離卷積的,通俗來說,深度可分離卷積就是:把標準卷積分解成深度卷積(depthwise convolution)和逐點卷積(pointwise convolution)。這麼做的好處就是可以再損失精度不多的情況下大幅度降低參數量和計算量。分解過程如下:
深度分離卷積示例:
輸入圖片大小(6,6,3),原卷積操作用(4,4,3,5)的卷積(卷積核大小爲4x4,卷積核通道爲3,卷積核數量爲5),stride=1,padding=0。輸出的特徵尺寸爲(6-4)/1+1=3,即輸出的特徵映射爲(3,3,5)
將標準卷積中選取序號爲n的卷積核,大小爲(4,4,3),標準卷積過程示意圖如下(省略bias):
黑色的輸入爲(6,6,3) 與第n個卷積覈對應,每個通道對應每個卷積核通道卷積得到輸出,最終輸出爲2+0+1=3(這是常見的卷積操作,注意這裏卷積核要和輸入的通道數相同,即圖中表示的3個通道~)
 
對於深度分離卷積,把標準卷積(4,4,3,5)分解爲:
 
  • 深度卷積部分:大小爲(4,4,1,3) ,作用在輸入的每個通道上,輸出特徵映射爲(3,3,3)
  • 逐點卷積部分:大小爲(1,1,3,5),作用在深度卷積的輸出特徵映射上,得到最終輸出爲(3,3,5)
例中深度卷積卷積過程示意圖如下:
 
輸入有3個通道,對應着有3個大小爲(4,4,1) 的深度卷積核,卷積結果共有3個大小爲(3,3,1) ,我們按順序將這卷積按通道排列得到輸出卷積結果(3,3,3) 。
 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章