首頁 > 後端開發 > Python教學 > 梯度消失和爆炸問題以及 ReLU 死亡問題

梯度消失和爆炸問題以及 ReLU 死亡問題

Linda Hamilton
發布: 2024-12-01 19:23:11
原創
881 人瀏覽過

Vanishing & Exploding Gradient Problem & Dying ReLU Problem

請我喝杯咖啡☕

*備忘錄:

  • 我的帖子解釋了過擬合和欠擬合。
  • 我的文章解釋了 PyTorch 中的層。
  • 我的文章解釋了 PyTorch 中的激活函數。
  • 我的文章解釋了 PyTorch 中的損失函數。
  • 我的文章解釋了 PyTorch 中的優化器。

梯度消失問題

  • 是在反向傳播過程中,梯度越來越小或為零,從輸出層到輸入層多次將小梯度相乘,則模型無法有效訓練。
  • 模型中層數越多,更容易發生。
  • 很容易由Sigmoid激活函數引起,它是PyTorch中的Sigmoid(),因為它產生範圍為0
  • 發生於:
    • CNN(卷積神經網路).
    • RNN(循環神經網路) 是 PyTorch 中的 RNN()。
  • 不容易發生在:
    • LSTM(長短期記憶) 即 PyTorch 中的 LSTM()。
    • GRU(門控循環單元) 即 PyTorch 中的 GRU()。
    • Resn​​et(殘差神經網路),即 PyTorch 中的 Resnet。
    • Transformer 是 PyTorch 中的 Transformer()。
    • 等等
  • 在以下情況可以被偵測到:
    • 靠近輸出層的層參數顯著變化,而靠近輸入層的層參數則略有變化或保持不變。
    • 輸入層附近各層的權重接近0或變成0。
    • 收斂緩慢或停止。
  • 可以透過以下方式緩解:
    • 批次歸一化層,即 PyTorch 中的 BatchNorm1d()、BatchNorm2d() 或 BatchNorm3d()。
    • Leaky ReLU 活化函數,即 PyTorch 中的 LeakyReLU()。 *您也可以使用 ReLU 激活函數,即 PyTorch 中的 ReLU(),但它有時會導致 Dying ReLU Problem,我稍後會解釋。
    • PReLU 活化函數 即 PyTorch 中的 PReLU()。
    • ELU 活化函數 即 PyTorch 中的 ELU()。
    • 梯度裁剪,即PyTorch中的clip_grad_norm_()或clip_grad_value_()。 *漸變裁切是將漸層保持在指定範圍內的方法。

梯度爆炸問題

  • 在反向傳播過程中,梯度變得越來越大,從輸出層到輸入層將更大的梯度相乘多次,然後就不可能收斂。
  • 模型中層數越多,更容易發生。
  • 發生於:
    • CNN.
    • RNN.
    • LSTM.
    • GRU.
  • 不容易發生在:
    • Reset.
    • 變壓器
    • 等等
  • 在以下情況可以被偵測到:
    • 模型的權重顯著增加。
    • 模型的權重顯著增加,最後變成NaN。
    • 收斂是波動的,沒有完成。
  • 可以透過以下方式緩解:
    • 批量歸一化層.
    • 漸層裁切.

Dying ReLU 問題

  • 在反向傳播過程中,一旦具有ReLU激活函數的節點(神經元)接收到零或負輸入值,它們總是為任何輸入值產生零,最後,它們永遠不會會恢復產生任何值,除了為零,則無法有效訓練模型。
  • 也稱為Dead ReLU問題
  • 更容易發生在:
    • 更高的學習率。
    • 更高的負面偏見。
  • 在以下情況可以被偵測到:
    • 收斂緩慢或停止。
    • 損失函數傳回 nan。
  • 可以透過以下方式緩解:
    • 較低的學習率。
    • 正向的偏見。
    • Leaky ReLU 活化函數.
    • PReLU 激活函數.
    • ELU 活化函數.

以上是梯度消失和爆炸問題以及 ReLU 死亡問題的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板