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.卷積的概念
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 ,輸出W1* H1*C1
-
- 計算量:W1* H1* C1 * K * K * C
- 參數量:C1* K * K * C
9.解決類別不平衡的相關方式
10. 激活函數的種類和優缺點
11.簡述 Inception v1-v4區別、改進
V1
- 采用不同大小的卷積核意味着不同大小的感受野,最后拼接意味着不同尺度特征的融合;
- 將CNN中常用的卷積(1x1,3x3,5x5)、池化操作(3x3)堆疊在一起(卷積、池化后的尺寸相同,將通道相加),一方面增加了網絡的寬度,另一方面也增加了網絡對尺度的適應性;
- 為了減少計算量,增加了1x1卷積。
V2
- 卷積分解,將單個的5x5卷積層用2個連續的3x3卷積層組成的小網絡來代替,在保持感受野范圍的同時又減少了參數量,也加深了網絡。
- 提出了著名的Batch Normalization (BN) 方法。BN會對每一個mini-batch數據的內部進行標准化(normalization),使輸出規范到N(0,1)的正態分布,加快了網絡的訓練速度,還可以增大學習率。
- BN某種意義上起到了正則化的作用,所以可以減少或者取消dropout,簡化網絡結構。V2在訓練達到V1准確率時快了14倍,最后收斂的准確率也比V1高。
V3
- 考慮了nx1卷積核,將一個較大的二維卷積拆成兩個較小的一維卷積(7x7拆成了7x1和1x7,3x3拆成了1x3和3x1),一方面節約了大量參數,加速運算並減輕了過擬合),同時網絡深度進一步增加,增加了網絡的非線性。
- 優化了Inception Module的結構。
V4
利用殘差連接(Residual Connection)來改進V3結構。
12. Inception v1中的inception結構怎么設計的
- 采用不同大小的卷積核意味着不同大小的感受野,最后拼接意味着不同尺度特征的融合;
- 該結構將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 的發展歷程
- LeNet:2個卷積3個全連接,最早用於數字識別
- AlexNet:12年ImageNet冠軍,5個卷積3個全連接,多個小卷積代替單一大卷積;使用ReLU激活函數,解決梯度小數問題;引入dropout避免模型過擬合;最大池化。
- ZF-Net:13年ImageNet冠軍,只用了一塊 GPU 的稠密連接結構;將AlexNet第一層卷積核由11變成7,步長由4變為2。
- VGG-Nets:14年ImageNet分類第二名,更深的網絡,卷積層使用更小的filter尺寸和間隔;多個小卷積讓網絡有更多的非線性,更少的參數。
- GoogLeNet:14年ImageNet分類第一名。引入Inception模塊,采用不同大小的卷積核意味着不同大小的感受野,最后拼接意味着不同尺度特征的融合;采用了average pooling來代替全連接層;避免梯度消失,網絡額外增加了2個輔助的softmax用於向前傳導梯度。
- ResNet:引入殘差單元,簡化學習目標和難度,加快訓練速度,模型加深時,不會產生退化問題;能夠有效解決訓練過程中梯度消失和梯度爆炸問題。
- DenseNet:密集連接;加強特征傳播,鼓勵特征復用,極大的減少了參數量。
15.講一下CNN,每個層及作用
CNN的特征檢測層通過訓練數據進行學習
- 所以在使用CNN時,避免了顯示的特征抽取,而隱式地從訓練數據中進行學習;
- 由於同一特征映射面上的神經元權值相同,所以網絡可以並行學習,這也是卷積網絡相對於神經元彼此相連網絡的一大優勢。
- 卷積神經網絡以其局部權值共享的特殊結構在語音識別和圖像處理方面有着獨特的優越性。權值共享降低了網絡的復雜性,特別是***輸入向量的圖像可以直接輸入網絡這一特點避免了特征提取和分類過程中數據重建的復雜度。
卷積神經網絡(CNN)主要由卷積層、激活函數、池化層、全連接層組成。
- 卷積層(Conv):使用卷積核進行特征提取和特征映射
- 激活函數(Activation):由於卷積也是一種線性運算,因此需要增加非線性映射
- 池化層(Pool):對輸入的特征圖進行壓縮,一方面使特征圖變小,簡化網絡計算復雜度;一方面進行特征壓縮,提取主要特征
- 全連接層(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 卷積)
其中, 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.為什么現在基本不用大卷積核
20. 梯度消失與梯度爆炸
解決方法:
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. 梯度下降與擬牛頓法的異同?
24. CNN如何減少參數?
25. Dropout 在訓練階段與測試階段的異同
Dropout是指在深度學習網絡的訓練過程中,對於神經網絡單元,按照一定的概率將其暫時從網絡中丟棄。由於是隨機丟棄,故而每一個mini-batch都在訓練不同的網絡。
在測試階段,將參與學習的節點和那些被隱藏的節點以一定的概率p加權求和,綜合計算得到網絡的輸出。
26. NN的權重參數能否初始化為0?
27. relu的有優點?又有什么局限性?他們的系列改進方法是啥?
28. dropout為何能防止過擬合?
29.卷積平移不變性的原因?