請我喝杯咖啡☕
*備忘錄:
-
我的帖子解釋了過擬合和欠擬合。
-
我的文章解釋了 PyTorch 中的層。
-
我的文章解釋了 PyTorch 中的激活函數。
-
我的文章解釋了 PyTorch 中的損失函數。
-
我的文章解釋了 PyTorch 中的優化器。
梯度消失問題:
- 是在反向傳播過程中,梯度越來越小或為零,從輸出層到輸入層多次將小梯度相乘,則模型無法有效訓練。
- 模型中層數越多,更容易發生。
- 很容易由Sigmoid激活函數引起,它是PyTorch中的Sigmoid(),因為它產生範圍為0
- 發生於:
-
CNN(卷積神經網路).
-
RNN(循環神經網路) 是 PyTorch 中的 RNN()。
- 不容易發生在:
-
LSTM(長短期記憶) 即 PyTorch 中的 LSTM()。
-
GRU(門控循環單元) 即 PyTorch 中的 GRU()。
-
Resnet(殘差神經網路),即 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_()。 *漸變裁切是將漸層保持在指定範圍內的方法。
梯度爆炸問題:
- 在反向傳播過程中,梯度變得越來越大,從輸出層到輸入層將更大的梯度相乘多次,然後就不可能收斂。
- 模型中層數越多,更容易發生。
- 發生於:
- 不容易發生在:
- 在以下情況可以被偵測到:
- 模型的權重顯著增加。
- 模型的權重顯著增加,最後變成NaN。
- 收斂是波動的,沒有完成。
- 可以透過以下方式緩解:
Dying ReLU 問題:
- 在反向傳播過程中,一旦具有ReLU激活函數的節點(神經元)接收到零或負輸入值,它們總是為任何輸入值產生零,最後,它們永遠不會會恢復產生任何值,除了為零,則無法有效訓練模型。
- 也稱為Dead ReLU問題。
- 更容易發生在:
- 在以下情況可以被偵測到:
- 可以透過以下方式緩解:
- 較低的學習率。
- 正向的偏見。
-
Leaky ReLU 活化函數.
-
PReLU 激活函數.
-
ELU 活化函數.
以上是梯度消失和爆炸問題以及 ReLU 死亡問題的詳細內容。更多資訊請關注PHP中文網其他相關文章!