其實梯度爆炸和梯度消失問題都是因爲網絡太深,網絡權值更新不穩定造成的,本質上是因爲梯度反向傳播中的連乘效應
梯度消失與梯度爆炸
梯度消失
主要原因:在反向傳播的過程中,每層的梯度大於0小於1(sigmoid函數的最大梯度爲0.25),經過很深的網絡進行反向傳播的時候,就會造成梯度接近0的情況,造成梯度消失
梯度爆炸
主要原因:網絡太深、初始化權重太大、損失函數設計不合理、權重更新不穩定等原因造成的
解決辦法
1、降低網絡的深度,如果需要深度網絡,可以使用resnet中的短鏈接結構以防止梯度消失(resnet中的短鏈接可以改善梯度消失問題,但是resnet主要不是解決梯度消失問題的 https://www.jianshu.com/p/09643588f373)
2、激活函數使用ReLU,代替sigmoid函數
3、使用BN(Batchnorm本質上是解決反向傳播過程中的梯度問題)
4、使用權重正則化、梯度剪切(一般針對梯度爆炸使用)
5、加載預訓練模型,在預訓練模型上進行微調
過擬合與欠擬合
過擬合
表現:在訓練集上的性能很好,但是在驗證集上的性能很差,網絡學習到了數據的特例信息,降低了網絡的泛化能力,此時模型的方差較大
造成原因:模型太複雜,數據簡單卻選擇了大模型,數據量有限
解決辦法:
1、增加數據量
2、降低網絡的複雜度
3、dropout
4、early stoping(早停)
5、參數正則化,降低過擬合,提高泛化能力(正則化的目的是用來防止過擬合的,所以增大正則化係數可以解決過擬合,減小則可以解決欠擬合)
6、使用BN(Batchnorm本質上是解決反向傳播過程中的梯度問題)
欠擬合
表現:在訓練集以及測試集上同時具有較高的誤差,此時模型的偏差較大
造成原因:模型太簡單,數據太複雜,網絡沒有學習到數據內容
解決辦法:
1、增加數據特徵項
2、適當增加網絡的複雜度
3、增加模型學習率
4、加載預訓練模型,微調網絡結構
5、使用集成學習方法、或者使用多模型融合
附:
relu的主要貢獻在於:
解決了梯度消失、爆炸的問題
計算方便,計算速度快
加速了網絡的訓練
同時也存在一些缺點:
由於負數部分恆爲0,會導致一些神經元無法激活(可通過設置小學習率部分解決)
輸出不是以0爲中心的