請我喝杯咖啡☕ *備忘錄: 我的帖子解釋了過擬合和欠擬合。 我的文章解釋了 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_()。 *漸變裁切是將漸層保持在指定範圍內的方法。 梯度爆炸問題: 在反向傳播過程中,梯度變得越來越大,從輸出層到輸入層將更大的梯度相乘多次,然後就不可能收斂。 模型中層數越多,更容易發生。 發生於: CNN. RNN. LSTM. GRU. 不容易發生在: Reset. 變壓器。 等等 在以下情況可以被偵測到: 模型的權重顯著增加。 模型的權重顯著增加,最後變成NaN。 收斂是波動的,沒有完成。 可以透過以下方式緩解: 批量歸一化層. 漸層裁切. Dying ReLU 問題: 在反向傳播過程中,一旦具有ReLU激活函數的節點(神經元)接收到零或負輸入值,它們總是為任何輸入值產生零,最後,它們永遠不會會恢復產生任何值,除了為零,則無法有效訓練模型。 也稱為Dead ReLU問題。 更容易發生在: 更高的學習率。 更高的負面偏見。 在以下情況可以被偵測到: 收斂緩慢或停止。 損失函數傳回 nan。 可以透過以下方式緩解: 較低的學習率。 正向的偏見。 Leaky ReLU 活化函數. PReLU 激活函數. ELU 活化函數.