梯度消失
本層的神經元的激活等於上一層神經元對應的權值進行加權和運算,
最後通過一個非線性函數(激活函數)如ReLu
,sigmoid
等函數,
最後得到的結果就是本層神經元的輸出,
逐層逐神經元通過該操作向前傳播,最終得到輸出層的結果。
梯度消失的影響:
- 淺層基本不學習,後面幾層一直在學習,失去深度的意義。
- 無法收斂。
梯度消失的現象呢?因爲通常神經網絡所用的激活函數是sigmoid函數
這個函數有個特點:
就是能將負無窮到正無窮的數映射到0和1之間,並且對這個函數求導的結果是f′(x)=f(x)(1−f(x))。
因此兩個0到1之間的數相乘,得到的結果就會變得很小了。
神經網絡的反向傳播是逐層對函數偏導相乘,因此當神經網絡層數非常深的時候
最後一層產生的偏差就因爲乘了很多的小於1的數而越來越小,最終就會變爲0,從而導致層數比較淺的權重沒有更新
一是在深層網絡中,網絡層數過多二是採用了不合適的損失函數,比如sigmoid
梯度爆炸
就是由於初始化權值過大,前面層會比後面層變化的更快,就會導致權值越來越大,梯度爆炸的現象就發生了。
解決
用ReLU
激活函數來替代sigmoid
函數。
區別:(1)sigmoid函數值在[0,1],ReLU函數值在[0,+無窮],所以sigmoid函數可以描述概率,ReLU適合用來描述實數;(2)sigmoid函數的梯度隨着x的增大或減小和消失,而ReLU不會。
早期多層神經網絡如果用sigmoid
函數或者hyperbolic tangent
作爲激活函數,如果不進行pre-training
的話,會因爲gradient vanishing problem
而無法收斂。
而預訓練的用處:規則化,防止過擬合;壓縮數據,去除冗餘;強化特徵,減小誤差;加快收斂速度。而採用ReLu
則不需要進行pre-training
。