首先,梯度消失與梯度**的根本原因是基於bp的反向傳播演算法
且上述的反向傳播錯誤小於1/4
總的來說就是,更新w和b的時候,更新的步長與learningrate成正比,當所處的層數越淺,每層的w的值和反向傳播錯誤的值乘的愈多,導致w和b更新的步長收到很大影響,最終導致梯度**或者梯度消失。這時候深度網路並不能比千層網路效能好。後面基層學習情況好,而淺層網路則學不到東西。sigmoid網路中存在指數級的梯度消失。
策略大概有以下幾種。
每層網路以不同的學習率進行學習
更換啟用函式
使用relu啟用函式,簡化計算,且解決梯度消失問題,並且一部分神經元輸出為0,可以使網路具有稀疏性,減少引數的依存關係,緩解過擬合的發生。
使用batch normolization
訓練網路前需要對資料做歸一化處理。用處在於:神經網路本質是學習資料分布,如果尋來你資料與測試資料分布不同,網路的泛化能力將降低,且在每一批訓練資料不同的情況下,網路的訓練速度會降低。
batch normolization可以解決梯度消失問題,使得不同層不同scale的權重變化整體步調更一致,也可以加快訓練速度。放在每一層網路的非線性對映前,即放在啟用函式之前。
模擬退火
加入momentum項
資料太少
learningrate過大
可能導致從一開始就不收斂,每一層的w都很大,或者跑著跑著loss突然變得很大(一般是因為網路的前面使用relu作為啟用函式而最後一層使用softmax作為分類的函式導致)
網路結構不好
更換其他的最優化演算法
我做試驗的時候遇到過一次,adam不收斂,用最簡單的sgd收斂了。。具體原因不詳
對引數做歸一化
就是將輸入歸一化到均值為0方差為1然後使用bn等
初始化
改一種初始化的方案
增加訓練集的資料量
影象的話可以平移反轉加雜訊
使用relu啟用函式
dropout
每次迭代訓練隨機選取一部分節點進行訓練和權重更新,另一部分權重保持不變。在測試時,使用mean network網路獲得輸出。
正則化
也是為了簡化網路,加入l2範數
提前終止訓練
增加特徵數量
本來輸入只有座標位置,欠擬合後再增加乙個顏色特徵
減少正則化項的引數
深度學習提高trick小技巧
在深度學習中,同乙個模型使用不同方式的初始化,比如 資料預處理,batch size,學習率,不同的優化器都能得到不同效能的引數。學習率的設定應該隨著迭代次數的增加而減小,每迭代完指定次epoch也就是對整個資料過一遍,然後對學習率進行變化,這樣能夠保證每個樣本得到公平的對待。使用動態的學習率有助於...
深度學習之訓練trick
1 google研究員ilya sutskever 成功訓練ldnn的13點建議 本文由ilya sutskever google研究員 深度學習泰斗geoffrey hinton的學生 dnnresearch聯合創始人 所寫,講述了有關深度學習的見解及實用建議,包括深度學習為什麼強大,如何強大,以...
利用小trick加速tensorflow的訓練
tensorflow 1.13.1 1.tf.data並行讀取tfrecord資料 def parse exp example features tfrecord解析 return features def input fn filenames train data tfrecord batch s...