神經網絡的介紹:(2017.11-ICCV)Feed Forward and Backward Run in Deep Convolution Neural Network
常用優化函數的介紹:(2016.09-arXiv)An overview of gradient descent optimization algorithms
常用數據集:MSCOCO簡介
持續更新:
最新——2019.10.10
一、知識點總結 |
?1、卷積層的作用、池化層的作用、全連接層的作用、激活函數的作用
- 卷積層:是一組平行的特徵圖(feature map),它通過在輸入圖像上滑動不同的卷積核並執行一定的運算而組成。作用如下:
- 相當於一個特徵提取器來提取特徵。
- 提供了位置信息。
- 減少參數個數。
- 池化層:指下采樣層,它把前層神經元的一個集羣的輸出與下層單個神經元相結合。池化運算在非線性激活之後執行。(最大池化、平均池化、L2範數池化等)作用如下:
- 有助於減少參數的數量並避免過擬合。
- 可作爲一種平滑手段消除不想要的噪音。(提取主要特徵)
- 保持一定程度的旋轉和平移不變性(最大匯合可以帶來非線性)
- 全連接層:全連接層的每一個節點都與上一層每個節點連接,是把前一層的輸出特徵都綜合起來,輸出爲一個值。所以該層的權值參數是最多的。作用如下:
- 起到“分類器”的作用(將學到的“分佈式特徵表示”映射到樣本標記空間);
- FC可視作模型表示能力的“防火牆”(fine tuning中有FC比較好)
- 激活函數:定義了給定一組輸入後神經元的輸出。作用如下:
- 將線性網絡輸入值的加權和傳遞至激活函數以用於非線性轉換。
- 激活函數決定是否應該激活神經元,即是否有參數傳遞。
?2、前向傳播和反向傳播
- 前向傳播:從輸入經過各種網絡層,得到輸出求得損失函數值的過程。
- 反向傳播:通過損失函數值調節網絡各層的參數值的過程。求偏導的過程。
?3、常見的激活函數(sigmoid、tanh、ReLU、Leaky ReLU、softmax)
激活函數應保證可微性、單調性。
- 激活函數輸出值有限時,基於梯度的優化方法更加穩定;
- 輸出無限的時候,模型的訓練更加高效。
- 激活函數接在bn之後,所以激活函數的輸入被限制在了 (-1, 1) 之間
sigmoid( 不建議使用):
- 輸出值落在(0, 1)之間,期望均值爲 0.5 ,不符合 均值爲 0 的理想狀態;
- 受現有的梯度下降算法所限(嚴重依賴逐層的梯度計算值),Sigmoid函數對落入 (-∞,-5) ∪ (5,+∞) 的輸入值,梯度 計算爲 0,發生 梯度彌散。因此該函數存在一正一負 兩塊“死區”
- 最大梯度爲0.25,容易出現梯度消失;
tanh( 不建議使用):
- 將 期望均值 平移到了 0這一理想狀態。(相對於sigmoid)
- 本質上依然是Sigmoid函數,依然無法迴避一左一右兩塊 “死區”
✅ ReLU(目前標配):
- He初始化 (對relu網絡有利);
- conv->bn->relu (默認採用relu);
- 徹底 消滅 了 正半軸上 的 死區,負半軸上 的 死區直接到 0點 ;
- 計算超簡單;
- 有助於使模型參數稀疏
ReLU 6:f(x)=min(max(0,x),6)
- 正半軸上 的 死區 死灰復燃,從Relu的 (-∞,0) 蠶食至 Relu6的 (-∞,0) ∪ (6,+∞)
- 15年bn出來之後,輸入被歸一化到了 (-1, 1) 之間。因此,relu6的設計就顯得沒有必要。
Leaky ReLU:
- 對 Relu 函數 新增一 超參數 λ(0.01或者0.001),以解決負半軸的死區問題;
- 合適的 λ值 較難設定 且較爲敏感,導致在實際使用中 性能不穩定
- 將 Leaky Relu 函數 中的 超參數 λ 設置爲 和模型一起 被訓練到 的 變量,以解決λλ 值 較難設定 的問題。優點:更大自由度。缺點:更大的過擬合風險。
?總結:
- Sigmoid 和 tanh(x) 不建議使用;
- Relu最常用;計算簡單(反向傳播涉及除法)、避免梯度消失(正向無飽和區)、防止過擬合(負向輸出爲0)
- 爲了進一步提高模型精度,Leaky Relu、參數化Relu、隨機化Relu 和 ELU 均可嘗試(但四者之間無絕對的高下之分);
- “ conv -> bn -> relu ” 套件目前早已成爲了CNN標配module。
?4、常見的優化函數(SGD、Adagrad、Adadelta、RMSprop、Adam、Nadam)
BGD(Batch gradient descent):
- 每次更新需要計算整個數據集的梯度,(慢!)
- 最後能夠保證收斂於極值點(凸函數收斂於全局極值點,非凸函數可能會收斂於局部極值點)
SGD(Stochastic gradient descent):
- 更新針對每一個樣本集x(i) 和y(i),每次則只更新一次。(快!)
- 以高方差進行快速更新,可以讓梯度計算跳出局部最優,最終到達一個更好的最優點(目標函數出現會出現抖動);
MBGD(Min-batch gradient descent):
- 每一次利用一小批樣本,n 個樣本進行計算(n:50~256)
- 減少了參數更新的變化,這可以帶來更加穩定的收斂;
- 可以充分利用矩陣優化,最終計算更加高效。(但是不保證好的收斂性!受學習率影響)
?總結以上三個:
- 都需要預先設置學習率,整個過程都採用相同的學習率進行計算。
- 選擇一個合適的學習率是非常困難的事情
- 預先制定學習率變化規則
Momentum:
- 原理:判斷當前梯度方向與上一次方向是否一致,一致則進行加強,反之,減弱;
- 優點:加速SGD算法的收斂速度;降低SGD算法收斂時的震盪
- 新增一階動量
NAG(Nesterov accelerated gradient):
- 考慮的是上一時刻的動能和近似下一點的梯度。
Adagrad:
- 自適應優化算法,針對高頻特徵更新步長較小,而低頻特徵更新較大(適合應用在特徵稀疏的場景)
- 新增二階動量,使用不同的learning rate
- 缺點:隨着訓練的進行,學習率將會變得無限小,此時算法將不能進行參數的迭代更新。
Adadelta、RMSprop:
- 都是adagrad算法的優化版,用於解決adagrad算法學習率消失的問題
Adam(Adaptive Moment Estimation):
- 另一種自適應參數更新算法,
- 是RMSProp算法和Momentum的結合版,一階與二階動量結合
Nadam:
- Nesterov + Adam
?優化器選擇總結:
- 當訓練數據特徵較爲稀疏的時候,採用自適應的優化器(Adagrad, Adadelta, RMSprop, Adam);
- SGD通常訓練時間更長,但是在好的初始化和學習率調度方案的情況下,結果更可靠
- Adam(Nadam)可能是最佳的選擇。
?5、常見的歸一化(BN、LN、IN、GN、SN)
BN(Batch Normalization,2015.02):
- 沿着通道計算每個batch的均值和方差,求出歸一化,
- 加入縮放和平移變量γ和β(用來學習的),使其符合標準正態分佈。
- 針對不同神經元輸入計算均值和方差,同一個batch中的輸入擁有相同的均值和方差。(???)
- 缺點:對batchsize的大小敏感,太小的話不能代表整個數據集的分佈。
- 適用於DNN、CNN,不適用RNN(因爲深度不固定的原因)
?BN的作用:(學習率、激活函數、dropout、L2正則化)
- 對於初始化要求沒那麼高,可以使用更高的學習率;(BN之前同層不同層的scale都不一樣,而需要使用最小的學習率才能保證梯度有效下降)
- 移除或使用較低的dropout,
- 降低L2正則化項權重衰減係數,
- 取消Local Response Normalization層;
- 可以解決反向傳播過程中的梯度問題(它讓每一層的輸出歸一化到了均值爲0方差爲1的分佈,對激活函數友好)
LN(Layer Normalizaiton,2016.07):
- 同層神經元輸入擁有相同的均值和方差,不同的輸入樣本有不同的均值和方差;(???)
- 適用於RNN效果比較明顯,但是在CNN上,不如BN。
IN(Instance Normalization,2016.07):
- 可以加速模型收斂,保持每個圖像實例之間的獨立,適用於圖像風格化。
GN(Group Normalization,2018.03):
- 將channel方向分group,然後每個group內做歸一化,算(C//G)HW的均值;
- 與batchsize無關,不受其約束。
SN(Switchable Normalization,2018.06):
- 使用可微分學習,爲一個深度網絡中的每一個歸一化層確定合適的歸一化操作。
?歸一化總結:
將輸入的圖像shape記爲[N, C, H, W]:
- batchNorm是在batch上,對NHW做歸一化,對小batchsize效果不好;
- layerNorm在通道方向上,對CHW歸一化,主要對RNN作用明顯;
- instanceNorm在圖像像素上,對HW做歸一化,用在風格化遷移;
- GroupNorm將channel分組,然後再做歸一化;
- SwitchableNorm是將BN、LN、IN結合,賦予權重,讓網絡自己去學習歸一化層應該使用什麼方法。
?6、防止過擬合(overfit)的方法
- 正則化:即在對模型的目標函數(objective function)或代價函數(cost function)加上正則項。(L1正則與L2正則)理由:(比如擬合的三次項方程y=4x3 + 3x2 + 2x +5 爲過擬合。因爲加了正則化,變成了y= 3x2 + 2x +5)
- 提前停止迭代:當迭代過程中準確率不再上升時停止,或者是損失函數停止下降的時候。
- dropout:在每次訓練過程中隨機將部分神經元的權重置爲0,即讓一些神經元失效,這樣可以縮減參數量。
- 數據集增廣:重採樣、加噪音、GAN也可以啊。
?7、正則化的定義(L1正則與L2正則):
爲什麼需要正則化:
- 結構風險最小化: 在經驗風險最小化的基礎上(也就是訓練誤差最小化),儘可能採用簡單的模型,以此提高泛化預測精度。
- 正則化是結構風險最小化的一種策略實現。
正則化:
- 又叫做罰項,是爲了限制模型的參數,防止模型過擬合而加在損失函數(目標函數)後面的一項。
L1 正則化(lasso迴歸):
- 公式也很簡單,直接在原來的損失函數基礎上加上權重參數的絕對值之和(L1範數)。L1可以讓一部分特徵的係數縮小到0,從而間接實現特徵選擇。所以L1適用於特徵之間有關聯的情況。
L2 正則化(嶺迴歸):
- 公式非常簡單,直接在原來的損失函數基礎上加上權重參數的平方和(L2範數)。L2讓所有特徵的係數都縮小,但是不會減爲0,它會使優化求解穩定快速。所以L2適用於特徵之間沒有關聯的情況。
缺點:
- 以增大訓練誤差爲代價,來減少測試誤差。
?8、二分類的評價指標:(準確率、精準率、召回率、混淆矩陣、AUC)
準確率:算法分類正確的數據個數/輸入算法的數據的個數。類別不均衡,缺點:特別是有極偏的數據存在的情況下,不適用。
混淆矩陣:二分類問題的混淆矩陣由 4 個數構成。首先我們將二分類問題中,我們關心的,少數的那一部分數據,我們稱之爲正例(positive)。第 1 個字母表示算法預測正確或者錯誤,第 2 個字母表示算法預測的結果。
精準率:預測爲正例的那些數據裏預測正確的數據個數。例如,在預測股票的時候,我們更關心精準率。
召回率:真實爲正例的那些數據裏預測正確的數據個數。在預測病患的場景下,我們更關注召回率。
F1 score:精準率和召回率的兼顧指標:是精確率和召回率的調和平均數,最大爲1,最小爲0。。
ROC:平面的橫座標是false positive rate(FPR),縱座標是true positive rate(TPR)。如果得到一個位於此直線下方的分類器的話,一個直觀的補救辦法就是把所有的預測結果反向,即:分類器輸出結果爲正類,則最終分類的結果爲負類,反之,則爲正類。
AUC:定義爲ROC曲線下的面積(取值範圍在0.5和1之間),AUC值大的分類器效果更好。
?9、常見卷積類型(卷積、反捲積、空洞卷積、可形變卷積)
空洞卷積的作用:
- 在不增加計算量的基礎上可以增大感受野。
- 感受野計算:3 + 4 x (r-1) (卷積核大小3x3、生在率:r)(正常卷積的r=1)
??可形變卷積(DCN V1:deformable convolution networks,2017.03)【論文原文】【參考】
- 感受野不再是規則的正方形(圖1);
- 給每個採樣點一個offset(通過額外的conv層學習得到,圖2);
- 將input feature map和offset共同作爲deformable conv的輸入;
- ROI pooling通過一個額外的FC層來學習offset
??可形變卷積(DCN V2:deformable convolution networks,2018.11)【論文原文】【參考】
動機:因爲V1中的offset不可控導致引入了過多的context,而這些context可能是有害的。
改進:
- 增加更多的Deformable Convolution
- 讓Deformable Conv不僅能學習offset,還能學習每個採樣點的權重(modulation)
- 模擬R-CNN的feature(knowledge distillation)
缺點:不支持cudnn,速度慢。
?10、常見的損失函數()
0-1損失函數(0-1 lossfunction):
- 多適用於分類問題中,預測錯誤,輸出值爲1;明預測正確,輸出爲0。
- 缺點:過於理想,基本不用。
感知損失函數(Perceptron Loss):
- 對0-1損失函數的改進,給一個誤差區間,只要在誤差區間內,就認爲是正確的。
平方損失函數(quadratic loss function):(歐式損失函數-非凸函數)
- 指預測值與真實值差值的平方,多用於線性迴歸任務中。
Hinge損失函數(hinge loss function):(合頁損失)
- 通常適用於二分類的場景中,可以用來解決間隔最大化的問題,常應用於著名的SVM算法中。
對數損失函數(Log Loss):
- 常用於邏輯迴歸問題中,讓概率p(y|x)達到最大值。
交叉熵損失函數(cross-entropy loss function):(凸函數0
- 本質上也是一種對數損失函數,常用於多分類問題中。
- 常用於當sigmoid函數作爲激活函數的情景,因爲它可以完美解決平方損失函數(多分類任務中,存在多個局部平緩區域)權重更新過慢的問題。
- 解決類別不平衡問題,調整正負樣本的權重(負樣本即包括背景);
- 對困難樣本的損失分配比較大的權重,控制難易分類樣本的權重。
?11、NMS非極大值抑制
對每一類進行NMS:
- 先根據score進行降序排序,
- 然後計算最高的score和其他框的iou,
- 去掉iou大於閾值的檢測框。
?12、降低模型複雜的方法?
- (2015.03)模型蒸餾技術:將複雜網絡中的有用信息提取出來遷移到一個更小的網絡上。
- (2018.07)利用AutoML進行網絡結構的優化:可將網絡計算複雜度作爲約束條件之一,得到更優的結構。
- (2017.04)mobile net :使用深度可分離卷積(depthwise separable convolutions)替代傳統卷積
- (2017.07)shuffle net:逐點分組卷積、channel shuffle。
- 模型剪枝:將很多kernel的權重很小的刪除,將剩餘的權重進行重構。
- 量化:把連續的權值進一步稀疏化、離散化(比如4.01和3.99都用4.0來表示)
- 哈夫曼編碼:數據重複越多,熵越低,哈夫曼編碼就越能用短的碼值來表示更多的數字,編碼的效率就越高
?13、Dropout的原理及作用
原理步驟:
- 1)在開始,隨機刪除掉隱藏層一半(自定義p)的神經元(只是不參與下一步的權重更新,並沒有真正刪除)(相當於每次訓練不同的網絡);
- 2)然後,在刪除後的剩下一半的神經元上正向和反向更新權重(變爲1/p)和偏向;
- 3)再恢復之前刪除的神經元,再重新隨機刪除一半的神經元,進行正向和反向更新w和b;
- 4)重複上述過程
注:
- 只能在訓練中使用,測試和實際使用時不能有 Dropout 操作,只是每個權重參數乘以概率P;
- 數據量小的時候,dropout效果不好,數據量大了,dropout效果好
- dropout如何選擇概率:input 的dropout概率推薦是0.8, hidden layer 推薦是0.5
?14、卷積的參數量和計算量如何計算(以及卷積層輸出大小計算)?
卷積層輸出大小計算:
- 公式:O = (W - F + 2P) / S+1,輸入圖片(Input)大小爲I=W x W,卷積核(Filter)大小爲F x F,步長(stride)爲S,填充(Padding)的像素數爲P;
- 除不盡的結果都向下取整
- SAME填充方式:填充像素。conv2d函數常用
- VALID填充方式:不填充像素,Maxpooling2D函數常用。
1、普通卷積:
參數量:
- 和圖像大小無關,是參與計算參數的個數,佔用內存空間。
- (Cin (K x K) + 1 ) x Cout:(Cin:輸入通道、核大小:K x K、Cout :輸出通道)
和輸入圖像的大小也有關係
Conv所佔的比重通常是最大的
錯的(Cin x K x K ) x Hout x Wout x Cout:(Cin:輸入通道、核大小:K x K、Cout :輸出通道、Hout x Wout:輸出大小)
FLOPs(floating point operations)(浮點運算量,指計算量):
-
(Cin x 2 x K x K ) x Hout x Wout x Cout:乘2是因爲有加法
例如下圖:Image大小爲 5x5,卷積核大小爲 3x3,則:- 那麼(1 x 2 x 3 x 3 -1 ) x 3 x3 x 1= 153 (不帶偏置,以上公式皆爲帶偏置)
2、可分離卷積:
?15、RoIPooling、RoIAlign的原理與區別
RoIPooling:(Faster RCNN中使用)
- 使生成的候選框region proposal映射產生固定大小的feature map;
- 經過兩次量化會產生像素偏差(misalignment)(20 x 20 變成 14 x 14 )
RoIAlign:(在Mask RCNN中使用)
- 使生成的候選框region proposal映射產生固定大小的feature map;
- 映射過程中保留浮點數,使用雙線性內插的方法獲得座標爲浮點數的像素點上的圖像數值,然後進行最大池化操作;
- 對檢測小物體效果更好
?16、
二、訓練技巧總結 |
?1、對卡在局部極小值的處理方法:
- 1.調節步伐:調節學習速率,使每一次的更新“步伐”不同;
- 2.優化起點:合理初始化權重(weights initialization);常用方法有:
- 高斯分佈初始權重(Gaussiandistribution):滿足mean=0,std=1的高斯分佈x∼N(mean,std2)
- Xavier 初始權重:滿足x∼U(−a,+a)的均勻分佈, 其中 a = sqrt(3/n)
- MSRA 初始權重:滿足x∼N(0,σ2)的高斯分佈,其中σ = sqrt(2/n)
- Uniform 初始權重:滿足min=0,max=1的均勻分佈,x∼U(min,max)
- He 初始權重:
- 均勻分佈初始權重(Uniform distribution):
- Glorot 初始權重:
- 稀疏矩陣初始權重(sparse matrix):
- 3.預訓練網絡(pre-train),使網絡獲得一個較好的“起始點”,如最右側的起始點就比最左側的起始點要好。
?2、多任務學習中標籤缺失如何處理?
- 一般做法是將缺失的標籤設置特殊標誌,在計算梯度的時候忽略。
?3、梯度消失和梯度爆炸的區別以及解決方法?
出現原因:
- 深度學習基於梯度學習,前面層的梯度是後面層的乘積,隨着層數的增加,就會發生梯度消失或者梯度爆炸。
區別:
- 在求導連續乘積後,一個值特別大、一個值特別小;
解決方法:
- 引入Gradient Clipping(梯度裁剪),將梯度約束在一個範圍內,這樣不會使得梯度過大。
- 預訓練模型+微調
- 正則化L1、L2
- ReLu、leakyrelu等激活函數(代替sigmoid)
- BN歸一化
- 殘差結構
?4、sync BN,multi-scale training/testing,deformable conv,soft-nms???
?5、目標檢測不平衡的類型?(類別、尺度、位置、任務損失、類別損失、IoU)【論文原文】
1、類別不平衡:
- 前景和背景的不平衡、前景中不同類別的輸入包圍框個數不平衡;
2、尺度不平衡:
- 輸入圖像和包圍框的尺度不平衡,不同特徵層對最終結果貢獻不平衡;
3、空間不平衡:
- 不同樣本對迴歸損失的貢獻不同
- 正樣本IoU分佈不平衡
- 目標在圖像中的位置不平衡
4、目標函數不平衡:
- 不同任務(比如迴歸和分類)對全局損失的貢獻不平衡(一般而言分類loss多)
?5、
待續…——2019.8.19