什么是梯度爆炸/梯度消失?
深度神經網絡訓練的時候,采用的是反向傳播方式,該方式使用鏈式求導,計算每層梯度的時候會涉及一些連乘操作,因此如果網絡過深。
那么如果連乘的因子大部分小于1,最后乘積的結果可能趨于0,也就是梯度消失,后面的網絡層的參數不發生變化.
那么如果連乘的因子大部分大于1,最后乘積可能趨于無窮,這就是梯度爆炸
如何防止梯度消失?
sigmoid容易發生,更換激活函數為 ReLU即可。
權重初始化用高斯初始化
如何防止梯度爆炸?
1 設置梯度剪切閾值,如果超過了該閾值,直接將梯度置為該值。
2 使用ReLU,maxout等替代sigmoid
區別:
sigmoid導數最大為1/4
a的數值變化范圍很小,若x數值僅在[-4,4]窄范圍內會出現梯度消失,若大于4則梯度爆炸。
對于sigmoid更容易出現梯度消失。
Battch Normal
ref
解決了梯度消失與加速收斂(數據本身在0均值處)和internal covariate shift(內部神經元分布的改變) 數據分布不一致問題。
傳統的深度神經網絡在訓練是,每一層的輸入的分布都在改變,因此訓練困難,只能選擇用一個很小的學習速率,但是每一層用了BN后,可以有效的解決這個問題,學習速率可以增大很多倍.
通過將activation規范為均值和方差一致的手段使得原本會減小的activation的scale變大。
初始化的時候,我們的參數一般都是0均值的,因此開始的擬合y=Wx+b,基本過原點附近,如圖b紅色虛線。因此,網絡需要經過多次學習才能逐步達到如紫色實線的擬合,即收斂的比較慢。如果我們對輸入數據先作減均值操作,如圖c,顯然可以加快學習。更進一步的,我們對數據再進行去相關操作,使得數據更加容易區分,這樣又會加快訓練,如圖d。 通過把梯度映射到一個值大但次優的變化位置來阻止梯度過小變化。
統計機器學習中的一個經典假設是“源空間(source domain)和目標空間(target domain)的數據分布(distribution)是一致的”。如果不一致,那么就出現了新的機器學習問題,如,transfer learning/domain adaptation等。
covariate shift就是分布不一致假設之下的一個分支問題,它是指源空間和目標空間的條件概率是一致的,但是其邊緣概率不同,即:對所有x∈X,Ps(Y|X=x)=Pt(Y|X=x)
,但是Ps(X)≠Pt(X)
.
對于神經網絡的各層輸出,由于它們經過了層內操作作用,其分布顯然與各層對應的輸入信號分布不同,而且差異會隨著網絡深度增大而增大,可是它們所能“指示”的樣本標記(label)仍然是不變的,這便符合了covariate shift的定義。由于是對層間信號的分析,也即是“internal”的來由。
因此至少0均值1方差的數據集可以減少樣本分布的變化問題
使用BN訓練時,一個樣本只與minibatch中其他樣本有相互關系;對于同一個訓練樣本,網絡的輸出會發生變化。這些效果有助于提升網絡泛化能力,像dropout一樣防止網絡過擬合,同時BN的使用,可以減少或者去掉dropout類似的策略。
BN(Batch Normalization)層的作用
在每一層輸入的時候,加個BN預處理操作。BN應作用在非線性映射前,即對x=Wu+b做規范化。在BN中,是通過將activation規范為均值和方差一致的手段使得原本會減小的activation的scale變大。可以說是一種更有效的local response normalization方法
PS:
Batch Norm會忽略圖像像素(或者特征)之間的絕對差異(因為均值歸零,方差歸一),而只考慮相對差異,所以在不需要絕對差異的任務中(比如分類),有錦上添花的效果。而對于圖像超分辨率這種需要利用絕對差異的任務,Batch Norm只會添亂。
參考
參考
常見問題備查
1
2
3
總結
以上是生活随笔為你收集整理的什么是梯度爆炸/梯度消失?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 中国红刮刮乐中奖规则20个金额之和意思是
- 下一篇: opencv同时开启两个外接USB摄像头