1。 有錢:
Auto ML自動調參(20美元/小時,聽說這個調參似乎挺耗時的。。。)
2。 人工調參:
1)
資料輸入
:
最優加速效能不僅依賴於高速的計算硬體,也要求有一個高效的
資料輸入
管道。要解決I/O傳輸問題,有幾個方面:SSD、緩衝池、資料讀入及處理和模型計算並行起來
2)
大batch size
:
為了充分利用大規模叢集算力以達到提升訓練速度的目的,人們不斷的提升batch size大小,這是因為更大的batch size允許我們在擴充套件GPU數量的同時不降低每個GPU的計算負載。然而,過度增大batch size會帶來明顯的精度損失!這是因為在大batch size(相對於訓練樣本數)情況下,樣本隨機性降低,梯度下降方向趨於穩定,訓練就由SGD向GD趨近,這導致模型更容易收斂於初始點附近的某個區域性最優解,從而抵消了計算力增加帶來的好處。
解決方向:Learning Rate自適應
3)
防止模型過擬合
:
a。 新增
Batch normalization
層:用以規範特徵的分佈,使輸出的特徵圖分佈更加均勻。這個效果一般不錯。
b。 對引數做
正則化
:其他防止模型過擬合的策略比如對引數做正則化,包括weight, bias, BN beta和gamma,這些引數佔模型所有引數的比例可能很小,比如在AlexNet模型,它們僅佔總引數量的0。02%,對這些引數進行正則化會
增加計算量,還會讓模型損失一些靈活性。
c。
dropout
:dropout可阻礙網路學習僅存在於訓練集中區域性的“額外規律”,這個效果比較強,但如果加的dropout層過多,比如每層後面都加一個dropout,
阻礙網路學習規律的強度也會增加。
4)
Inception 結構
Inception 結構中嵌入了多尺度資訊,聚合多種不同感受野上的特徵來獲得性能增益。參考ResNet變形,GoogLeNet,SENet等。
Inception結構
5)權重初始化
權重初始化決定了網路從什麼位置開始訓練,良好的起始位置不僅可以減少訓練耗時,也可以使模型的訓練更加穩定,並且可以避開很多訓練上的問題。比如“dying ReLU”問題,Relu可能會使節點無法被啟用,那麼就需要對w權重進行合理的初始化;還可以使用leaky relu函式解決。
6)超參調優
引數步長由粗到細:調優引數值先以較大步長進行劃分,可以減少引數組合數量,當確定大的最優範圍之後再逐漸細化調整,例如在調整學習速率時,
採取較大步長測試發現
:學習率lr較大時,收斂速度前期快、後期平緩,lr較小時,前期平緩、後期較快,根據這個規律繼續做細微調整,最終得到多個不同區間的最佳學習速率;
低精度調參:在低精度訓練過程中,遇到的最大的一個問題就是精度丟失的問題,透過分析相關資料,放大低精度表示邊緣數值,
保證引數的有效性是迴歸高精度計算的重要方法
;
初始化資料的調參:隨著網路層數的增多,由於啟用函式的非線性,初始化引數使得模型變得不容易收斂,可以像VGGNet那樣透過首
先訓練一個淺層的網路,再透過淺層網路的引數遞進初始化深層網路引數
,也可以根據輸入輸出通道數的範圍來初始化初始值,一般以輸入通道數較為常見;對於全連線網路層則採用高斯分佈即可;對於shortcut的batch norm,引數gamma初始化為零。
還有其他細節,比如每一個epoch就shuffle訓練資料等,想要最佳化神經網路,加快訓練速度,提高準確度,更重要的是創造
更好的網路結構,更有優的公式。
參考資料:
【1】機器之心:
https://
zhuanlan。zhihu。com/p/40
993775
【2】YJango的前饋神經網路:
https://
zhuanlan。zhihu。com/p/27
854076
【3】CS231n Convolutional Neural Networks for Visual Recognition:
http://
cs231n。github。io/convol
utional-networks/