1.梯度消失和梯度爆炸產生的原因:
傳統的神經網絡通常是基於BP算法優化權重參數的,即通過損失函數計算的誤差通過梯度反向傳播的方式對神經網絡中的權重進行更新,其中用到的是連乘形式的鏈式法則。
梯度消失:產生的原因基本上是網絡太深或是採用了不恰當的損失函數,如sigmoid函數、tanh函數等。由於sigmoid函數的導數最大值是0.25,因而通過鏈式法則,導致靠近輸入層的權重更新緩慢甚至停滯。
梯度爆炸:產生的原因一般是深層網絡或是權重初始化過大的情況,伴隨着傳統神經網絡的鏈式法則,梯度會越來越大,訓練過程中,很容易使得權重的值也越來越大導致溢出等情況。
2.解決方法:
由於梯度消失和梯度爆炸都是由於網絡太深或是權重更新過大或是過小,並且伴隨着鏈式乘法法則導致的,主要有以下幾種解決方法:
- 預訓練+微調
- 換成Relu、LeakyRelu等非飽和的激活函數
- 梯度剪切、梯度正則
- 使用Batch Normalization
- 使用LSTM或是GRU等
- 使用殘差結構
- 神經網絡權重初始化(Xavier, He初始化等)