1. 程式人生 > >自問自答2——深度學習中梯度消失/爆炸為什麼是一個問題?(待完善)

自問自答2——深度學習中梯度消失/爆炸為什麼是一個問題?(待完善)

我們知道SGD只是用來求解優化問題的一種方法:沿著負梯度方向找到損失最小值。所以SGD的核心就是計算梯度以得到引數更新。而在深層神經網路中,反向傳播時很容易發生梯度消失或者梯度爆炸的問題,尤其是RNN網路中。我們認為這兩種情況是非常危險的,要極力避免。
無論梯度消失或者梯度爆炸,這些梯度仍舊指引著使得損失減小的引數方向(梯度的大小是否包含了期望更新的大小?)。那為什麼要把梯度消失或者梯度爆炸看做一個問題呢?

首先梯度消失/爆炸意味著上層引數梯度是正常範圍內,底層引數梯度絕對值極小或者極大。
當梯度爆炸時,部分引數梯度過大時,此時這部分更新會非常大,那麼好了,引數不知道跳到哪裡去了,之前學習的白學了。梯度爆炸的問題顯而易見,我們不希望任何引數在訓練的整個過程中梯度過大。
但是當梯度消失時,部分引數梯度接近0,關於這部分引數我們學不了任何東西。但是這並不妨礙在損失-引數圖上朝著比當前位置好的地方移動。所以梯度消失之所以是一個問題,是因為梯度消失現象出現意味著我們在損失-引數圖的一個bad位置(附近的極小值不是好極小值)嗎?
發生梯度消失的情況時,損失-引數圖到底位於什麼樣的位置?

回答:梯度消失現象出現,確實反映出我們位於一個bad位置,但並不是因為附近的極小值不是好的極小值,而是因為當前位置引數中部分梯度為0,部分有梯度,而且在學習過程中很有可能一直處於類似位置。這種情況下,即使可以到達一個比較好的損失位置,我們也得承認一部分引數沒有任何更新,即沒有學到任何有用的東西。
但是訓練的目的是使得損失儘可能地小,而不是學習長時依賴。梯度消失情況下訓練得到的模型的損失會比沒有梯度消失的訓練得到的模型的損失更大嗎?預期結果:是。因為能學習到長時依賴的模型效能應該會好一點。