一、梯度消失
1.1 定義
神經⽹絡靠輸⼊端的⽹絡層的係數逐漸不再隨着訓練⽽變化,或者
變化⾮常緩慢。隨着⽹絡層數增加,這個現象越發明顯
1.2 梯度消亡(Gradient Vanishing)前提
- 使⽤基於梯度的訓練⽅法(例如梯度下降法)
- 使⽤的激活函數具有輸出值範圍⼤⼤⼩於輸⼊值的範圍,例如
logistic(邏輯斯函數), tanh(雙曲正切)
1.3 產生的原因
梯度下降法依靠理解係數的微⼩變化對輸出的影響來學習⽹絡的係數的值。如果⼀個係數的微⼩變化對⽹絡的輸出沒有影響或者影響極⼩,那麼就⽆法知曉如何優化這個係數,或者優化特別慢。造成訓練的困難。
使用梯度下降法訓練神經網絡,如果激活函數具備將輸出值的範圍相對於輸入的值大幅度壓縮,那麼就會出現梯度消亡。
例如,雙曲正切函數(tanh) 將-∞到∞的輸入壓縮到-1到+1之間。除開在輸入爲-6,+6之間的值,其它輸入值對應的梯度都非常小,接近0.
1.4 解決方案
- 激活函數ReLu: f(x) = max(0, x)
輸入大於0,梯度爲1,否則0. - 激活函數LeakyReLu: f(x) = max(ax,x)
輸入大於等於0,梯度爲1,否則爲a
採⽤不使⽤梯度的⽹絡訓練⽅法
: https://link.springer.com/article/10.1007/s10898-012-9951-y(Derivativefree optimization: a review of algorithms and comparison of software implementations)
3.1.基於遺傳、進化算法
https://www.ijcai.org/Proceedings/89-1/Papers/122.pdf
https://blog.coast.ai/lets-evolve-a-neural-network-with-a-genetic-algorithm-code-included-8809bece164
3.2.粒⼦羣優化
(Particle Swarm Optimization, PSO)
https://visualstudiomagazine.com/articles/2013/12/01/neural-network-training-using-particle-swarm
optimization.aspx
https://ieeexplore.ieee.org/document/1202255/?reload=true
二、梯度爆炸
當gradient<1時產生梯度消失,gradient>1產生梯度爆炸,定義、產生原因都類似。
2.1 解決方法
梯度剪切(Gradient Clipping):其思想是設置一個梯度剪切閾值,然後更新梯度的時候,如果梯度超過這個閾值,那麼就將其強制限制在這個範圍之內。
其他解決方法:https://blog.csdn.net/qq_25737169/article/details/78847691