梯度消失和梯度爆炸的根源主要是因為深度神經網絡結構以及反向傳播算法,目前優化神經網絡的方法都是基於反向傳播的思想,即根據損失函數計算的誤差通過反向傳播的方式,指導深度網絡權值的更新。
梯度消失和梯度爆炸兩種情況產生的原因可以總結成2類原因:1.深層網絡的結構;2.不合適的損失函數,比如Sigmoid函數。梯度爆炸一般出現在深層網絡和權值初始化值太大的情況下。
解決方法
1.預訓練和微調
預訓練:無監督逐層訓練,每次訓練一層隱藏點,訓練時將上一層隱節點的輸出作為輸入,而本層隱節點的輸出作為下一層隱節點的輸入。稱為逐層預訓練。在預訓練完成後還要對整個網絡進行微調。
2.梯度剪切、正則
梯度剪切又叫梯度截斷,是防止梯度爆炸的一種方法,其思想是設置一個梯度剪切閾值,更新梯度的時候,如果梯度超過這個閾值,那就將其強製限製在這個範圍之內。
3.使用rule激活函數
從relu的函數特性我們知道,在小於0的時候梯度為0,大於0的時候梯度恒為1,那麽此時就不會再存在梯度消失和梯度爆炸的問題了,因為每層的網絡得到的梯度更新速度都一樣。