深度神經網絡訓練的時候,採用的是反向傳播方式,該方式使用鏈式求導,計算每層梯度的時候會涉及一些連乘操做,所以若是網絡過深。
那麼若是連乘的因子大部分小於1,最後乘積的結果可能趨於0,也就是梯度消失,後面的網絡層的參數不發生變化.
那麼若是連乘的因子大部分大於1,最後乘積可能趨於無窮,這就是梯度爆炸html
sigmoid容易發生,更換激活函數爲 ReLU便可。
權重初始化用高斯初始化網絡
1 設置梯度剪切閾值,若是超過了該閾值,直接將梯度置爲該值。dom
2 使用ReLU,maxout等替代sigmoid
區別:機器學習
sigmoid導數最大爲1/4
a的數值變化範圍很小,若x數值僅在[-4,4]窄範圍內會出現梯度消失,若大於4則梯度爆炸。
對於sigmoid更容易出現梯度消失。函數
解決了梯度消失與加速收斂(數據自己在0均值處)和internal covariate shift(內部神經元分佈的改變) 數據分佈不一致問題。
傳統的深度神經網絡在訓練是,每一層的輸入的分佈都在改變,所以訓練困難,只能選擇用一個很小的學習速率,可是每一層用了BN後,能夠有效的解決這個問題,學習速率能夠增大不少倍.學習
初始化的時候,咱們的參數通常都是0均值的,所以開始的擬合y=Wx+b,基本過原點附近,如圖b紅色虛線。所以,網絡須要通過屢次學習才能逐步達到如紫色實線的擬合,即收斂的比較慢。若是咱們對輸入數據先做減均值操做,如圖c,顯然能夠加快學習。更進一步的,咱們對數據再進行去相關操做,使得數據更加容易區分,這樣又會加快訓練,如圖d。 經過把梯度映射到一個值大但次優的變化位置來阻止梯度太小變化。
spa
使用BN訓練時,一個樣本只與minibatch中其餘樣本有相互關係;對於同一個訓練樣本,網絡的輸出會發生變化。這些效果有助於提高網絡泛化能力,像dropout同樣防止網絡過擬合,同時BN的使用,能夠減小或者去掉dropout相似的策略。.net
BN(Batch Normalization)層的做用orm
PS:
Batch Norm會忽略圖像像素(或者特徵)之間的絕對差別(由於均值歸零,方差歸一),而只考慮相對差別,因此在不須要絕對差別的任務中(好比分類),有錦上添花的效果。而對於圖像超分辨率這種須要利用絕對差別的任務,Batch Norm只會添亂。htm