1. 參數初始化
訓練之前一定要執行參數初始化,否則可能減慢收斂速度,影響訓練結果,或者造成Nan數值溢出等異常問題。
特別的,如果所有參數都是0,則反向傳播時,隱含層中所有參數的地位是一樣,導致每次更新后隱層的參數都是一樣的,導致學習失敗。
初始化方法:隨機初始化、高斯分布初始化、均勻初始化、與參數量 n 相關的平方、開放初始化等。
xavier初始化:xavier初始化方法由Bengio在2010年提出,基本思想是要保證前向傳播和反向傳播時每一層的方差一致,根據每層的輸入個數和輸出個數來決定參數隨機初始化的分布范圍,是一個通過該層的輸入和輸出參數個數得到的分布范圍內的均勻分布。
2. 數據預處理
輸入數據歸一化到 [0,1]或者以 0 為中心的 [-1,1],一般要做精度提升。
輸入數據要做隨機排序。
3. 訓練技巧相關
梯度歸一化:計算出來梯度之后,要除以minibatch的數量,這樣就不顯式依賴minibatch size。
梯度限制:限制最大梯度,超過閾值乘一個衰減系數,防止梯度爆炸。
batchsize:batch size值增加,的確能提高訓練速度。但是有可能收斂結果變差。batch size 太小,不能充分利用批量訓練的優點,可能使訓練速度下降,嚴重的或不收斂。
學習率:太大的學習率,不收斂,導致在最優解附近震蕩; 太小的學習率,收斂慢,陷入局部最優解的可能增大。 可設置動態的學習率,逐步減小。
動量momentum:滑動平均模型,在訓練的過程中不斷的對參數求滑動平均這樣能夠更有效的保持穩定性,使其對當前參數更新不太敏感,保留之前梯度下降的方向,以加快收斂。一般動量選擇在0.9-0.95之間。
濾波器核大小:一般選奇數核,根據輸入尺寸大小調整。
dropout:一般選0.5, 測試時候記得關閉dropout。
Batch Normalization:加BN批規范化層。
池化的選擇:一般最大池化。
shortcut的位置選擇。
CNN中滑動步長。
網絡深度:非越深越好。
訓練次數epoch:可以設置提前結束,防止過擬合。
Inception modeles:組成Inception的濾波器個數和濾波核大小,以及深度。
增加非線性:Relu函數等。
LSTM中遺忘門參數設置:開始時候設置較大的遺忘參數,可能效果更好。
4. CNN的魅力
CNN可以很好的處理局部與整體,低層次特性到高層次特征的映射。
CNN的四個主要特點:局部連接/權值共享/池化操作/多層次結構。
局部連接使網絡可以提取數據的局部特征;
權值共享大大降低了網絡的訓練難度,一個Filter只提取一個特征,在整個圖片(或者語音/文本) 中進行卷積;
池化操作與多層次結構一起,實現了數據的降維,將低層次的局部特征組合成為較高層次的特征。
5. LSTM與RNN
RNN 是包含循環的網絡,允許信息的持久化。
LSTM可以緩解RNN中梯度消失問題,可以處理長期依賴問題。
LSTM中sigmoid和Tanh函數不同作用:sigmoid 用在各種gate上,作用是產生0~1之間的值,這個一般只有sigmoid最直接了。
tanh 用在了狀態和輸出上,是對數據的處理,這個用其他激活函數或許也可以。
6. 注意力模型 Attention機制
注意力機制即 Attention 機制在序列學習任務上具有巨大的提升作用,Attention機制的設計可以優化傳統編碼解碼(Encode-Decode)結構。
傳統編碼解碼結構:傳統編碼器-解碼器的RNN模型先用一些LSTM單元來對輸入序列進行學習,編碼為固定長度的向量表示;然后再用一些LSTM單元來讀取這種向量表示并解碼為輸出序列。
傳統編碼解碼結構存在的最大問題是:輸入序列不論長短都會被編碼成一個固定長度的向量表示,而解碼則受限于該固定長度的向量表示,尤其是當輸入序列比較長時,模型的性能會變得很差。
Attention機制的基本思想是,打破了傳統編碼器-解碼器結構在編解碼時都依賴于內部一個固定長度向量的限制。
Attention機制的實現是通過保留LSTM編碼器對輸入序列的中間輸出結果,然后訓練一個模型來對這些輸入進行選擇性的學習并且在模型輸出時將輸出序列與之進行關聯。
使用attention機制便于理解在模型輸出過程中輸入序列中的信息是如何影響最后生成序列的。這有助于我們更好地理解模型的內部運作機制以及對一些特定的輸入-輸出進行debug。
深度學習中的注意力機制從本質上講和人類的選擇性視覺注意力機制類似,核心目標也是從眾多信息中選擇出對當前任務目標更關鍵的信息。
7. 過擬合和正則化
過擬合問題往往源于過多的特征,對訓練集的擬合能力很強,但是到測試集上,輕微的數據偏差就導致結果上較大的偏差。
解決過擬合的方法:
① 減少特征的數量,保留較關鍵的信息;
② 使用正則化方法。
正則化方法會保留所有的特征,但是增加了對特征的約束,每一個特征都會對預測y貢獻一份合適的力量。具體做法是給需要訓練的目標函數加上一些規則(限制)項,控制參數的幅度,不至于波動太大。
L1正則化:L1正則化是指權值向量(系數)w中各個元素的絕對值之和。一般都會在正則化項之前添加一個系數,系數越大,正則化作用越明顯。
L1正則化有助于生成一個稀疏權值矩陣,進而可以用于特征選擇。相當于減少了特征數量,所以說是進行了特征選擇。系數越大,正則化作用越明顯。
L2正則化:L2正則化是指權值向量w中各個元素的平方和然后再求平方根一般都會在正則化項之前添加一個系數。
L2正則化傾向于讓權值盡可能小,最后構造一個所有參數都比較小的模型。因為一般認為參數值小的模型比較簡單,能適應不同的數據集(由于參數比較小,數據本身的波動對結果影響不至于太大),也在一定程度上避免了過擬合現象。
8. Relu激活函數的優點
sigmoid函數范圍[0,1], tanh函數范圍[-1,1], Relu函數范圍[0,無窮]。
計算量上,Sigmoid和T函數含有指數,Relu函數是簡單的線性,所以Relu的計算量小很多。
梯度消失上,Sigmoid和T函數在接近飽和區時,梯度很小,更新緩慢,Relu不存在梯度過小情況。
稀疏性能上,Relu函數會使一部分神經元的輸出為0,這樣就造成了網絡的稀疏性,并且減少了參數的相互依存關系,緩解了過擬合問題的發生。
9. 梯度彌散與梯度爆炸
梯度彌散現象:靠近輸出層的隱藏層梯度大,參數更新快,所以很快就會收斂;而靠近輸入層的隱藏層梯度小,參數更新慢,幾乎就和初始狀態一樣,隨機分布。這種現象就是梯度彌散。指的是反向傳播過程中,梯度開始很大,但是很快就降低到一個很小的值。
梯度爆炸現象:靠近輸出層的隱藏層梯度很小,參數更新慢,幾乎不會收斂,而靠近輸入層的隱藏層梯度變得很大,參數更新快,很快就會收斂。這種現象就是梯度爆炸。指的是反向傳播過程中,梯度開始時候很小,但是梯度以指數級增長。
梯度爆炸與梯度彌散的特點是梯度相當不穩定(unstable),學習效果很差。
導致梯度彌散與梯度爆炸現象的原因:
在使用sigmoid作為激活函數的網絡中,如果使用均值為0,方差為1的高斯分布初始化參數w,有|w| < 1。
又知sigmoid函數的特性是把+∞~-∞之間的輸入壓縮到0~1之間,所以反向傳播時,梯度會以指數級減小,靠近輸入層的系數得不到更新,導致梯度彌散。而如果初始化時候采用|w| > 1 的系數,又會導致梯度以指數級增大,靠近輸入層的系數得到的梯度過大,導致梯度爆炸。
解決梯度彌散與梯度爆炸
① 使用Relu激活函數可以緩解梯度的不穩定情況,Relu的導數不是0就是1,不會指數級縮小或擴大。
② 加入BN層,約束輸出到一個范圍。BN添加在每層激活函數之前,就是做均值和方差歸一化
③ 梯度裁剪,如果梯度大于或小于某個值,就將梯度按比例縮小或擴大。
為什么LSTM在預防梯度彌散與梯度爆炸上性能由于RNN
傳統RNN對狀態的維護是通過乘積的方式,這導致在鏈式求導梯度時,梯度被表示為連積的形式,造成梯度爆炸或彌散。
LSTM對狀態的維護是通過累加的方式,不至于使得梯度變化過快。
10. 常見損失函數
分類算法中,損失函數通常可以表示成損失項和正則項的和。
損失項常用損失函數:
0-1損失函數: 預測相符為1,不符為0。實際中需要設置判定區間。
log對數損失函數
exp指數損失函數
平方差損失函數
交叉熵損失函數
絕對損失函數
11. 明星CNN模型
12. rcnn、fast-rcnn和faster-rcnn
RCNN系列是把檢測定位問題轉換為分類問題來實現的。
RCNN:RCNN使用了region proposal(建議區域)得到可能是目標的若干局部區域,使用CNN分別提取這些區域的特征,再使用SVM分類器做分類判斷。
fast-rcnn:rcnn的若干局部區域(約1000個)存在特征重復計算的問題,fast-rcnn把這些局部區域映射到最后一層的特征圖上,一張圖僅需要提取一次特征就行了,大大提高了計算速度。
faster-rcnn:將Region proposal的工作也交給CNN(其實也是一個fast-rcnn)網絡來做,這個網絡把圖片固定劃分為n×n的區域,分別輸出建議的位置和前后景分類,再把結果送入fast-rcnn做精細判斷。
faster-rcnn把圖片做物理上的切割,有可能忽略了局部相關性信息,準確度有可能降低。
目標檢測方法
第一類:傳統目標檢測算法: 級聯+特征+分類器
第二類:基于候選區域的檢測方法: RCNN系列
第三類:基于回歸方法的檢測: YOLO、SSD等
13. 防止過擬合的方法
① Dropout
② L1、L2正則化
③ BatchNormalization
④ 網絡bagging(略等于Dropout方法)
⑤ 數據預處理
14. 嘗試調參解決深度學習中的過擬合問題
① 檢查batch size
② 檢查損失函數
③ 檢查激活函數
④ 檢查學習率
⑤ 檢查動量設置
⑥提前停止
⑦ 設置權重衰減
⑧ 檢查Dropout
⑨ 嘗試BN
15. Bounding-Box regression 邊框回歸是什么操作
通常預測出來的目標的邊界跟Ground Truth之間有差異,需要經過邊框回歸來微調這個邊界窗口,使檢測結果更準確。
目標窗口一般使用四維向量(x,y,w,h)來表示,分別表示窗口的中心點坐標和寬高。邊框回歸的目標是使得候選框逼近與真實框。如何實現邊框回歸,二個框的差異體現在位置和大小上,所以對其修正也可以從平移+縮放實現。分別是X方向上的平移、縮放和Y方向上的平移和縮放,一共4個映射關系。
4個映射關系的求解:輸入候選框對應的CNN特征,跟Ground Truth框對應的特征做損失函數,輸出平移和縮放參數。
16. 非極大值抑制(NMS)是什么操作
RCNN中檢出的n個框可能彼此重合,進行非極大值抑制就是根據n個框的分類概率從大到小,依次合并的算法。
① 從最大概率矩形框F開始,分別判斷A~E與F的重疊度IOU是否大于某個設定的閾值;
② 假設B、D與F的重疊度超過閾值,那么就扔掉B、D;并標記第一個矩形框F,是我們保留下來的。
③ 從剩下的矩形框A、C、E中,選擇概率最大的E,然后判斷E與A、C的重疊度,重疊度大于一定的閾值,那么就扔掉;并標記E是我們保留下來的第二個矩形框。
就這樣一直重復,找到所有被保留下來的矩形框。
非極大值抑制(NMS)顧名思義就是抑制不是極大值的元素,搜索局部的極大值。這個局部代表的是一個鄰域。
17. 深度學習中加快訓練速度方法
①提高學習率
②增加batch size
③預訓練
④動量
⑤增加步長
⑥使用殘差
18. 如何使網絡跳出局部極小值
調整學習率,使用變化(衰減)的學習率。也可以嘗試分段的學習率,在后期較小的學習率上增加一個大一點的學習率,有可能借此跳出局部最有解。
設置更優的初始化參數。 初始化參數的設定定義了訓練起始點的位置。
增加或調整動量,一般動量參數設置0.9~0.95
使用隨機梯度下降或者調整batch size
嘗試Adam算法
Adam算法即自適應時刻估計方法(Adaptive Moment Estimation),能計算每個參數的自適應學習率。這個方法不僅存儲了AdaDelta先前平方梯度的指數衰減平均值,而且保持了先前梯度M(t)的指數衰減平均值,這一點與動量類似。
在實際應用中,Adam方法效果良好。與其他自適應學習率算法相比,其收斂速度更快,學習效果更為有效,而且可以糾正其他優化技術中存在的問題,如學習率消失、收斂過慢或是高方差的參數更新導致損失函數波動較大等問題。
19. 梯度下降法和其他無約束優化算法的比較
無約束優化算法,除了梯度下降以外,還有最小二乘法、牛頓法和擬牛頓法。
梯度下降法和最小二乘法相比,梯度下降法需要選擇學習率(步長),而最小二乘法不需要。
梯度下降法是迭代求解,最小二乘法是計算解析解。
如果樣本量不算很大,且存在解析解,最小二乘法比起梯度下降法要有優勢,計算速度很快。
但是如果樣本量很大,用最小二乘法由于需要求一個超級大的逆矩陣,這時就很難或者很慢才能求解解析解了,使用迭代的梯度下降法比較有優勢。
梯度下降法和牛頓法/擬牛頓法相比,兩者都是迭代求解,不過梯度下降法是梯度求解,是一階的方法,而牛頓法/擬牛頓法是用二階的海森矩陣的逆矩陣或偽逆矩陣求解。
相對而言,使用牛頓法/擬牛頓法收斂更快。但是每次迭代的時間比梯度下降法長。
牛頓法其實就是通過切線與x軸的交點不斷更新切線的位置,直到達到曲線與x軸的交點得到方程解。
牛頓法不需要設置步長,要求函數是二階可導的。
擬牛頓法:不用二階偏導而是構造出Hessian矩陣的近似正定對稱矩陣的方法稱為擬牛頓法
20. DenseNet
DenseNet是CVPR 2017最佳論文,在ResNet及Inception網絡基礎上做了優化,主要優化是(在稠密連接模塊里)做了密集連接,緩解了梯度消失問題,減少了參數量。
在DenseNet中,任何兩層之間都有直接的連接,也就是說,網絡每一層的輸入都是前面所有層輸出的并集,而該層所學習的特征圖也會被直接傳給其后面所有層作為輸入。下圖是 DenseNet 的一個dense block示意圖:
需要明確一點,dense connectivity 僅僅是在一個dense block里的,不同dense block 之間是沒有dense connectivity的,在稠密連接模塊之間以一個卷積和池化層連接:
DenseNet通過稠密連接,降低了參數量,但是由于要保存很多網絡先前的計算狀態,所以在內存占用方面很恐怖。
-
深度學習
+關注
關注
73文章
5523瀏覽量
121717
原文標題:深度學習的一些方法
文章出處:【微信號:Imgtec,微信公眾號:Imagination Tech】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
基于深度學習的異常檢測的研究方法
基于深度學習的異常檢測的研究方法
什么是深度學習?使用FPGA進行深度學習的好處?
采用無監督學習的方法,用深度摘要網絡總結視頻

深度學習優化器方法及學習率衰減方式的詳細資料概述
分析總結基于深度神經網絡的圖像語義分割方法

基于模板、檢索和深度學習的圖像描述生成方法

評論