層數比較多的神經網絡模型在訓練時也是會出現一些問題的,其中就包括梯度消失問題(gradient vanishing problem)和梯度爆炸問題(gradient exploding problem)。梯度消失問題和梯度爆炸問題一般隨着網絡層數的增加會變得越來越明顯。
例如,對於下圖所示的含有3個隱藏層的神經網絡,梯度消失問題發生時,接近於輸出層的hidden layer 3等的權值更新相對正常,但前面的hidden layer 1的權值更新會變得很慢,導致前面的層權值幾乎不變,仍接近於初始化的權值,這就導致hidden layer 1相當於只是一個映射層,對所有的輸入做了一個同一映射,這是此深層網絡的學習就等價於只有后幾層的淺層網絡的學習了。
而這種問題為何會產生呢?以下圖的反向傳播為例(假設每一層只有一個神經元且對於每一層,其中
為sigmoid函數)
可以推導出
而sigmoid的導數如下圖
可見,的最大值為
,而我們初始化的網絡權值
通常都小於1,因此
,因此對於上面的鏈式求導,層數越多,求導結果
越小,因而導致梯度消失的情況出現。這樣,梯度爆炸問題的出現原因就顯而易見了,即
,也就是
比較大的情況。但對於使用sigmoid激活函數來說,這種情況比較少。因為
的大小也與
有關(
),除非該層的輸入值
在一直一個比較小的范圍內。
其實梯度爆炸和梯度消失問題都是因為網絡太深,網絡權值更新不穩定造成的,本質上是因為梯度反向傳播中的連乘效應。對於更普遍的梯度消失問題,可以考慮用ReLU激活函數取代sigmoid激活函數。另外,LSTM的結構設計也可以改善RNN中的梯度消失問題。