深層神經網絡梯度問題及解決方法

梯度消失/爆炸問題

反向傳播算法的工作原理是從輸出層到輸入層,傳播誤 差的梯度。 一旦該算法已經計算了網絡中每個參數的損失函數的梯度,它就使用這些梯度來 用梯度下降步驟來更新每個參數。
不幸的是,梯度往往變得越來越小,隨着算法進展到較低層。 結果,梯度下降更新使得低層 連接權重實際上保持不變,並且訓練永遠不會收斂到良好的解決方案。 這被稱爲梯度消失問 題。
在某些情況下,可能會發生相反的情況:梯度可能變得越來越大,許多層得到了非常大 的權重更新,算法發散。這是梯度爆炸的問題,在循環神經網絡中最爲常見。

非飽和激活函數

Glorot 和 Bengio 在 2010 年的論文中的一個見解是,消失/爆炸的梯度問題部分是由於激活函 數的選擇不好造成的。 在那之前,大多數人都認爲,如果大自然選擇在生物神經元中使用 sigmoid 激活函數,它們必定是一個很好的選擇。 但事實證明,其他激活函數在深度神經網 絡中表現得更好,特別是 ReLU 激活函數,主要是因爲它對正值不會飽和(也因爲它的計算 速度很快)。
不幸的是,ReLU激活功能並不完美。 它有一個被稱爲 “ReLU 死區” 的問題:在訓練過程中, 一些神經元有效地死亡,意味着它們停止輸出 0 以外的任何東西。在某些情況下,你可能會 發現你網絡的一半神經元已經死亡,特別是如果你使用大學習率。 在訓練期間,如果神經元 的權重得到更新,使得神經元輸入的加權和爲負,則它將開始輸出 0 。當這種情況發生時, 由於當輸入爲負時,ReLU函數的梯度爲0,神經元不可能恢復生機。
爲了解決這個問題,你可能需要使用 ReLU 函數的一個變體,比如 leaky ReLU。這個函數定義爲(見圖11-2 )。

  • ReLU(z)=max(0,z)
  • LeakyReLU(z)=max(α
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章