CNN面試必知


PS: 經常看到一些卷積神經網絡的知識,自己憑着自己看過的問法記錄然后再尋找答案,答案不一定准確,另外,題目的順序沒有章法,基本上就是一些重點的問題, 如果有錯誤之處,還望指出。 

本文涉及問題包含來自: https://blog.nowcoder.net/n/9c67c993bf9842a68aaa7622228c2299  (很不錯的博客,在此向大佬致敬)

           https://www.zhihu.com/search?type=content&q=mobile%20net%20v1%20%E3%80%81%20v2%20%E3%80%81%20v3%20

1.卷積的概念

  對圖像(不同的數據窗口數據)和濾波矩陣(一組固定的權重:因為每個神經元的多個權重固定,所以又可以看做一個恆定的濾波器 filter)做內積(逐個元素相乘再求和)的操作就是所謂的『卷積』操作,也是卷積神經網絡的名字來源。

2.圖像卷積輸出size 計算公式

  output_size = (input_size - kernel_size + 2*padding)/ stride +1 

3.感受野的概念和計算公式

  感受野: CNN每一層輸出的特征圖(feature map)上的像素點在原始圖像上映射的區域大小.。 

  計算機公式: , 其中 lk-1 表示第 k-1層的感受野,而fk是當前層的卷積核大小,Si為第i 層的步長。 

4.解釋權值共享

  卷積的時候,卷積核上面的一組權重是恆定不變的,也可以這樣說,用一個卷積核去卷積一張圖,這張圖每個位置是被同樣數值的卷積核操作的,權重是一樣的,也就是參數共享。 

5.CNN的特性

  a.局部連接

  b.權值共享

  c.池化操作

  d.多層系統

6. pooling 的作用及 max-pooling 和 average-pooling 的應用場景

  pooling:對輸入的特征圖進行壓縮,一方面使特征圖變小,簡化網絡計算復雜度;一方面進行特征壓縮,提取主要特征。

  通常來講,max-pooling的效果更好,雖然max-pooling和average-pooling都對數據做了下采樣,但是max-pooling感覺更像是做了特征選擇,選出了分類辨識度更好的特征,提供了非線性。 pooling的主要作用一方面是去掉冗余信息,一方面要保留feature map的特征信息,在分類問題中,我們需要知道的是這張圖像有什么object,而不大關心這個object位置在哪,在這種情況下顯然max pooling比average pooling更合適。在網絡比較深的地方,特征已經稀疏了,從一塊區域里選出最大的,比起這片區域的平均值來,更能把稀疏的特征傳遞下去

  average-pooling:更強調對整體特征信息進行一層下采樣,在減少參數維度的貢獻上更大一點,更多的體現在信息的完整傳遞這個維度上,在一個很大很有代表性的模型中,比如說DenseNet中的模塊之間的連接大多采用average-pooling,在減少維度的同時,更有利信息傳遞到下一個模塊進行特征提取。
  average-pooling在全局平均池化操作中應用也比較廣,在ResNet和Inception結構中最后一層都使用了平均池化。有的時候在模型接近分類器的末端使用全局平均池化還可以代替Flatten操作,使輸入數據變成一位向量。

7. resnet提出解決的問題

  解決深層卷積神經網絡在反向傳播中梯度消失問題。 

8.CNN參數與計算量的計算

  卷積輸入為 W * H * C ,卷積核 K * K * N ,輸出W​* ​*

    1. 計算量:W​* ​* ​ * K * K * C 
    2. 參數量:C1​* K * K * C

9.解決類別不平衡的相關方式

10. 激活函數的種類和優缺點

11.簡述 Inception v1-v4區別、改進

V1

  1. 采用不同大小的卷積核意味着不同大小的感受野,最后拼接意味着不同尺度特征的融合
  2. 將CNN中常用的卷積(1x1,3x3,5x5)、池化操作(3x3)堆疊在一起(卷積、池化后的尺寸相同,將通道相加),一方面增加了網絡的寬度,另一方面也增加了網絡對尺度的適應性
  3. 為了減少計算量,增加了1x1卷積。

V2

  1. 卷積分解,將單個的5x5卷積層用2個連續的3x3卷積層組成的小網絡來代替,在保持感受野范圍的同時又減少了參數量,也加深了網絡。
  2. 提出了著名的Batch Normalization (BN) 方法。BN會對每一個mini-batch數據的內部進行標准化(normalization),使輸出規范到N(0,1)的正態分布,加快了網絡的訓練速度,還可以增大學習率。
  3. BN某種意義上起到了正則化的作用,所以可以減少或者取消dropout,簡化網絡結構。V2在訓練達到V1准確率時快了14倍,最后收斂的准確率也比V1高。

V3

  1. 考慮了nx1卷積核,將一個較大的二維卷積拆成兩個較小的一維卷積(7x7拆成了7x1和1x7,3x3拆成了1x3和3x1),一方面節約了大量參數,加速運算並減輕了過擬合),同時網絡深度進一步增加,增加了網絡的非線性。
  2. 優化了Inception Module的結構。

V4

  利用殘差連接(Residual Connection)來改進V3結構。

12. Inception v1中的inception結構怎么設計的

  1. 采用不同大小的卷積核意味着不同大小的感受野,最后拼接意味着不同尺度特征的融合
  2. 該結構將CNN中常用的卷積(1x1,3x3,5x5)、池化操作(3x3)堆疊在一起(卷積、池化后的尺寸相同,將通道相加),一方面增加了網絡的寬度,另一方面也增加了網絡對尺度的適應性

 

   然而上面這個Inception原始版本,所有的卷積核都在上一層的所有輸出上來做,而那個5x5的卷積核所需的計算量就太大了,約需要1.2億次的計算量,造成了特征圖的厚度很大。
  3. 為了避免這種情況,在3x3前、5x5前、max pooling后分別加上了1x1的卷積核,以起到了降低特征圖厚度的作用,這也就形成了Inception v1的網絡結構,如下圖所示:

13. 1*1 卷積的作用

  a.升維和降維,可以節省參數量;

  b.增加網絡的非線性; 

  c.增加通道之間的交流和聯系。 

14.簡述 CNN 的發展歷程

  1. LeNet:2個卷積3個全連接,最早用於數字識別
  2. AlexNet:12年ImageNet冠軍,5個卷積3個全連接,多個小卷積代替單一大卷積;使用ReLU激活函數,解決梯度小數問題;引入dropout避免模型過擬合;最大池化。
  3. ZF-Net:13年ImageNet冠軍,只用了一塊 GPU 的稠密連接結構;將AlexNet第一層卷積核由11變成7,步長由4變為2。
  4. VGG-Nets:14年ImageNet分類第二名,更深的網絡,卷積層使用更小的filter尺寸和間隔;多個小卷積讓網絡有更多的非線性,更少的參數。
  5. GoogLeNet:14年ImageNet分類第一名。引入Inception模塊,采用不同大小的卷積核意味着不同大小的感受野,最后拼接意味着不同尺度特征的融合;采用了average pooling來代替全連接層;避免梯度消失,網絡額外增加了2個輔助的softmax用於向前傳導梯度。
  6. ResNet:引入殘差單元,簡化學習目標和難度,加快訓練速度,模型加深時,不會產生退化問題;能夠有效解決訓練過程中梯度消失和梯度爆炸問題。
  7. DenseNet:密集連接;加強特征傳播,鼓勵特征復用,極大的減少了參數量。

15.講一下CNN,每個層及作用

CNN的特征檢測層通過訓練數據進行學習

  1. 所以在使用CNN時,避免了顯示的特征抽取,而隱式地從訓練數據中進行學習
  2. 由於同一特征映射面上的神經元權值相同,所以網絡可以並行學習,這也是卷積網絡相對於神經元彼此相連網絡的一大優勢。
  3. 卷積神經網絡以其局部權值共享的特殊結構在語音識別和圖像處理方面有着獨特的優越性。權值共享降低了網絡的復雜性,特別是***輸入向量的圖像可以直接輸入網絡這一特點避免了特征提取和分類過程中數據重建的復雜度

卷積神經網絡(CNN)主要由卷積層、激活函數、池化層、全連接層組成。

  1. 卷積層(Conv):使用卷積核進行特征提取和特征映射
  2. 激活函數(Activation):由於卷積也是一種線性運算,因此需要增加非線性映射
  3. 池化層(Pool):對輸入的特征圖進行壓縮,一方面使特征圖變小,簡化網絡計算復雜度;一方面進行特征壓縮,提取主要特征
  4. 全連接層(FC):連接所有的特征,將輸出值送給分類器

16. Pooling層怎么反向傳播

  CNN網絡中另外一個不可導的環節就是Pooling池化操作,因為Pooling操作使得feature map的尺寸變化,假如做2×2的池化(步長也為2),假設那么第l+1層的feature map有16個梯度,那么第l層就會有64個梯度,這使得梯度無法對位的進行傳播下去。其實解決這個問題的思想也很簡單,就是把1個像素的梯度傳遞給4個像素,但是需要保證傳遞的loss(或者梯度)總和不變。根據這條原則,mean pooling和max pooling的反向傳播也是不同的

mean pooling

  mean pooling的前向傳播就是把一個patch中的值求取平均來做pooling,那么反向傳播的過程也就是把某個元素的梯度等分為n份分配給前一層,這樣就保證池化前后的梯度(殘差)之和保持不變,圖示如下 :4

 

max pooling

  max pooling也要滿足梯度之和不變的原則,max pooling的前向傳播是把patch中最大的值傳遞給后一層,而其他像素的值直接被舍棄掉。那么反向傳播也就是把梯度直接傳給前一層某一個像素,而其他像素不接受梯度,也就是為0。所以max pooling操作和mean pooling操作不同點在於需要記錄下池化操作時到底哪個像素的值是最大,也就是max id,這個變量就是記錄最大值所在位置的,因為在反向傳播中要用到,那么假設前向傳播和反向傳播的過程就如下圖所示 :

 

17. Mobilenet V1、V2、V3

  Molilenet V1:介紹MobileNetV1(以下簡稱V1)只有一句話, V1就是把VGG中的標准卷積層換成深度可分離卷積就可以了。 

  深度可分離卷積 = 深度卷積 + 逐點卷積(1*1 卷積)

  Depthwise +Pointwise 卷積是提供一種把 feature map 的空間信息(height&width)和通道信息(channel)拆分分別處理的方法,而 group 卷積只是單純的通道分組處理,降低復雜度。
  Standard convolution :是采用 N 個大小為 DK*DK 的卷積核進行操作(注意卷積核大小是 DK*DK, DK*DK*M 是具體運算時一個卷積核的大小!)
  Depth-wise convolution :一個卷積核負責一個通道,一個通道只被一個卷積核卷積;則這里有 M 個 DK*DK 的卷積核;
  Pointwise convolution:為了達到輸出 N 個 feature map 的操作,所以采用 N 個 1*1的卷積核進行卷積,這里的卷積方式和傳統的卷積方式是一樣的,只不過采用了 1*1 的卷積核;其目的就是讓新的每一個 feature map 包含有上一層各個 feature map 的信息!在此理解為將 depth-wise convolution 的輸出進行「串」起來。
深度可分離卷積節省的參數量和計算量(注: 這里首先需要理解本文上面的計算量和參數量計算公式)

  其中, DK 為標准卷積核大小,M 是輸入 feature map 通道數,DF 為輸出 feature map 大小,N 是輸出 feature map 通道數,深度卷積的卷積核尺寸Dk×Dk×M,一共要做Dw×Dh次乘加運算;逐點卷積的卷積核尺寸為1×1×M,有N個,一共要做Dw×Dh次乘加運算。

  實例: 

  假設輸出為一個224×224×3的圖像,VGG網絡某層卷積輸入的尺寸是112×112×64的特征圖,卷積核為3×3×128,標准卷積的運算量是:

  3×3×128×64×112×112 = 924844032

  深度可分離卷積的運算量是:

  3×3×64×112×112+128×64×112×112 = 109985792

  這一層,MobileNetV1所采用的深度可分離卷積計算量與標准卷積計算量的比值為:

  109985792 /924844032 = 0.1189  ,與我們所計算的九分之一到八分之一一致。

Mobilenet V2:

  提出原因:V1中的深度卷積部分的卷積核比較容易訓廢掉:訓完之后發現深度卷積訓出來的卷積核有不少是空的, 對低維度做ReLU運算,很容易造成信息的丟失。而在高維度進行ReLU運算的話,信息的丟失則會很少:

  解決方法: 引入的具有線性瓶頸的倒殘差結構(the inverted residual with linear bottleneck);

MobileNet V2 & Resnet 

可以發現,都采用了 1×1 -> 3 ×3 -> 1 × 1 的模式,以及都使用Shortcut結構。但是不同點呢:

  • ResNet 先降維 (0.25倍)、卷積、再升維。
  • MobileNetV2 則是 先升維 (6倍)、卷積、再降維。

剛好V2的block剛好與Resnet的block相反,作者將其命名為Inverted residuals。就是論文名中的Inverted residuals

 

MobileNet V3:

 

  • 0.網絡的架構基於NAS實現的MnasNet(效果比MobileNetV2好)
  • 1.引入MobileNetV1的深度可分離卷積
  • 2.引入MobileNetV2的具有線性瓶頸的倒殘差結構
  • 3.引入基於squeeze and excitation結構的輕量級注意力模型(SE)
  • 4.使用了一種新的激活函數h-swish(x)
  • 5.網絡結構搜索中,結合兩種技術:資源受限的NAS(platform-aware NAS)與NetAdapt
  • 6.修改了MobileNetV2網絡端部最后階段

18.為什么現在基本不用大卷積核

  在達到相同感受野的情況下,卷積核越小,所需要的參數和計算量越小。具體來說。卷積核大小必須大於 1 才有提升感受野的作用,1 排除了。而大小為偶數的卷積核即使對稱地加 padding 也不能保證輸入 feature map 尺寸和輸出 feature map 尺寸不變(畫個圖算一下就可以發現),2 排除了。所以一般都用 3 作為卷積核大小。

20. 梯度消失與梯度爆炸

梯度消失:因為通常神經網絡所用的激活函數是 sigmoid 函數,這個函數有個特點,就是能將負無窮到正無窮的數映射到 0 和 1 之間,並且對這個函數求導的結果是 f′(x)=f(x)(1−f(x))。因此兩個 0 到 1 之間的數相乘,得到的結果就會變得很小了。神經網絡的反向傳播是逐層對函數偏導相乘,因此當神經網絡層數非常深的時候,最后一層產生的偏差就因為乘了很多的小於 1 的數而越來越小,最終就會變為 0,從而導致層數比較淺的權重沒有更新,這就是梯度消失。
梯度爆炸:梯度爆炸就是由於初始化權值過大,前面層會比后面層變化的更快,就會導致權值越來越大,梯度爆炸的現象就發生了。在深層網絡或循環神經網絡中,誤差梯度可在更新中累積,變成非常大的梯度,然后導致網絡權重的大幅更新,並因此使網絡變得不穩定。在極端情況下,權重的值變得非常大,以至於溢出,導致 NaN 值。網絡層之間的梯度(值大於 1.0)重復相乘導致的指數級增長會產生梯度爆炸。

解決方法

A. 預訓練加微調; 

B. 梯度剪切這個方案主要是針對梯度爆炸提出的,其思想是設置一個梯度剪切閾值,然后更新梯度的時候,如果梯度超過這個閾值,那么就將其強制限制在這個范圍之內。這可以防止梯度爆炸; 

C.另外一種解決梯度爆炸的手段是采用權重正則化(weithts regularization)比較常見的是[Math Processing Error] l1l1正則,和[Math Processing Error] l2l2正則,在各個深度框架中都有相應的API可以使用正則化; 

D. relu、leakrelu、elu等激活函數; 

E. batchnormalization: 從根本上解決梯度消失和梯度爆炸問題。

21.減緩過擬合方法

a . 引入正則化

b. Dropout

c. 提前終止訓練

d. 增加樣本量

e. Batch norma| lization

f. Bagging和其他集成方法(正則化)

g. 輔助分類節點(正則化)

h. 參數綁定和參數共享

22.解決欠擬合方式

* 增加模型復雜度
* 調整模型初始化方式
* 調整學習率
* 集成多種模型

23. 梯度下降與擬牛頓法的異同?

* 參數更新模式相同
* 梯度下降法利用誤差的梯度來更新參數,擬牛頓法利用海塞矩陣的近似來更新參數
* 梯度下降是泰勒級數的一階展開,而擬牛頓法是泰勒級數的二階展開
* SGD能保證收斂,但是L-BFGS在非凸時不收斂

24. CNN如何減少參數?

  CNN中減少網絡的參數的三個思想:
  1) 局部連接(Local Connectivity)
  每個神經元沒有必要對全局圖像進行感知,只需要對局部進行感知,然后在更高層將局部的信息綜合起來就得到了全局的信息。
  2) 權值共享(Shared Weights)
  對於同一個卷積核,它在一個區域提取到的特征,也能適用於於其他區域。在一個卷積核的情況下,進行權值共享。
  3) 池化(Pooling)
  池化一般分為max pooling和average pooling。定義池化窗口,最大池化為取窗口中最大的那個值,平均池化為取窗口中所有數的平均值。
  4)  1x1卷積核 inception
  1x1的卷積核可以進行降維或者升維,也就是通過控制卷積核(通道數)實現,這個可以幫助減少模型參數,也可以對不同特征進行尺寸的歸一化;同時也可以用於不同channel上特征的融合。一個trick就是在降維的時候考慮結合傳統的降維方式,如PCA的特征向量實現,這樣效果也可以得到保證。

25. Dropout 在訓練階段與測試階段的異同

  Dropout是指在深度學習網絡的訓練過程中,對於神經網絡單元,按照一定的概率將其暫時從網絡中丟棄。由於是隨機丟棄,故而每一個mini-batch都在訓練不同的網絡。

  在測試階段,將參與學習的節點和那些被隱藏的節點以一定的概率p加權求和,綜合計算得到網絡的輸出。

26. NN的權重參數能否初始化為0?

  在神經網絡中,如果將權值初始化為 0 ,或者其他統一的常量,會導致后面的激活單元具有相同的值,所有的單元相同意味着它們都在計算同一特征,網絡變得跟只有一個隱含層節點一樣,這使得神經網絡失去了學習不同特征的能力!

27. relu的有優點?又有什么局限性?他們的系列改進方法是啥?

* 部分解決了梯度消失問題
* 收斂速度更快
* 在小於0部分相當於神經元死亡而且不會復活
* Leaky ReLU解決了神經元死亡問題

28. dropout為何能防止過擬合?

* 相當於同時訓練了多個網絡,類似集成學習的效果
* 削弱了神經元之間的依賴性
 

29.卷積平移不變性的原因? 

a. 在神經網絡中,卷積被定義為不同位置的特征檢測器,也就意味着,無論目標出現在圖像中的哪個位置,它都會檢測到同樣的這些特征,輸出同樣的響應。比如人臉被移動到了圖像左下角,卷積核直到移動到左下角的位置才會檢測到它的特征。
b. 池化:比如最大池化,它返回感受野中的最大值,如果最大值被移動了,但是仍然在這個感受野中,那么池化層也仍然會輸出相同的最大值。這就有點平移不變的意思了。
 
持續添加更新中!!!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM