深度學習知識點訓練技巧總結

神經網絡的介紹:(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),它通過在輸入圖像上滑動不同的卷積核並執行一定的運算而組成。作用如下:
    1. 相當於一個特徵提取器來提取特徵
    2. 提供了位置信息
    3. 減少參數個數。
  • 池化層:指下采樣層,它把前層神經元的一個集羣的輸出與下層單個神經元相結合。池化運算在非線性激活之後執行。(最大池化、平均池化、L2範數池化等)作用如下:
    1. 有助於減少參數的數量並避免過擬合
    2. 可作爲一種平滑手段消除不想要的噪音。(提取主要特徵
    3. 保持一定程度的旋轉和平移不變性最大匯合可以帶來非線性
  • 全連接層:全連接層的每一個節點都與上一層每個節點連接,是把前一層的輸出特徵都綜合起來,輸出爲一個值。所以該層的權值參數是最多的。作用如下:
    1. 起到“分類器”的作用(將學到的“分佈式特徵表示”映射到樣本標記空間);
    2. FC可視作模型表示能力的“防火牆”(fine tuning中有FC比較好)
  • 激活函數:定義了給定一組輸入後神經元的輸出。作用如下:
    1. 將線性網絡輸入值的加權和傳遞至激活函數以用於非線性轉換
    2. 激活函數決定是否應該激活神經元,即是否有參數傳遞

?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正則化、L2正則化、L1正則化求解過程

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函數作爲激活函數的情景,因爲它可以完美解決平方損失函數(多分類任務中,存在多個局部平緩區域)權重更新過慢的問題。

focal loss

  • 解決類別不平衡問題,調整正負樣本的權重(負樣本即包括背景);
  • 對困難樣本的損失分配比較大的權重,控制難易分類樣本的權重

?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 :輸出通道)

MAC(Multiply Accumulate)

和輸入圖像的大小也有關係
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

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