深度学习中各激活函数的优缺点
轉自:https://blog.csdn.net/NOT_GUY/article/details/78749509
在深度學習中,信號從一個神經元傳入到下一層神經元之前是通過線性疊加來計算的,而進入下一層神經元需要經過非線性的激活函數,繼續往下傳遞,如此循環下去。由于這些非線性函數的反復疊加,才使得神經網絡有足夠的capacity來抓取復雜的特征。
為什么要使用非線性激活函數?
答:如果不使用激活函數,這種情況下每一層輸出都是上一層輸入的線性函數。無論神經網絡有多少層,輸出都是輸入的線性函數,這樣就和只有一個隱藏層的效果是一樣的。這種情況相當于多層感知機(MLP)。
?
1、Sigmoid函數
優點:(1)便于求導的平滑函數;
? ? (2)能壓縮數據,保證數據幅度不會有問題;
? ? (3)適合用于前向傳播。
缺點:(1)容易出現梯度消失(gradient ?vanishing)的現象:當激活函數接近飽和區時,變化太緩慢,導數接近0,根據后向傳遞的數學依據是微積分求導的鏈式法則,當前導數需要之前各層導數的乘積,幾個比較小的數相乘,導數結果很接近0,從而無法完成深層網絡的訓練。
? ??(2)Sigmoid的輸出不是0均值(zero-centered)的:這會導致后層的神經元的輸入是非0均值的信號,這會對梯度產生影響。以 f=sigmoid(wx+b)為例, 假設輸入均為正數(或負數),那么對w的導數總是正數(或負數),這樣在反向傳播過程中要么都往正方向更新,要么都往負方向更新,導致有一種捆綁效果,使得收斂緩慢。
? ? (3)冪運算相對耗時
?
2、tanh函數
tanh函數將輸入值壓縮到 -1~1 的范圍,因此它是0均值的,解決了Sigmoid函數的非zero-centered問題,但是它也存在梯度消失和冪運算的問題。
其實 tanh(x)=2sigmoid(2x)-1
?
3、ReLU函數:全區間不可導
優點:(1)SGD算法的收斂速度比 sigmoid 和 tanh 快;(梯度不會飽和,解決了梯度消失問題)
? ? (2)計算復雜度低,不需要進行指數運算;
? ? (3)適合用于后向傳播。
缺點:(1)ReLU的輸出不是zero-centered;
? ? (2)Dead ?ReLU ?Problem(神經元壞死現象):某些神經元可能永遠不會被激活,導致相應參數永遠不會被更新(在負數部分,梯度為0)。產生這種現象的兩個原因:參數初始化問題;learning ?rate太高導致在訓練過程中參數更新太大。 解決方法:采用Xavier初始化方法,以及避免將learning ?rate設置太大或使用adagrad等自動調節learning ?rate的算法。
? ? (3)ReLU不會對數據做幅度壓縮,所以數據的幅度會隨著模型層數的增加不斷擴張。
?
4、Leakly ?ReLU函數
用來解決ReLU帶來的神經元壞死的問題,可以將0.01設置成一個變量a,其中a由后向傳播學出來。但是其表現并不一定比ReLU好。
?
5、ELU函數(指數線性函數)
ELU有ReLU的所有優點,并且不會有 Dead ?ReLU問題,輸出的均值接近0(zero-centered)。但是計算量大,其表現并不一定比ReLU好。。
總結
以上是生活随笔為你收集整理的深度学习中各激活函数的优缺点的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安装onnx
- 下一篇: 梳理百年深度学习发展史-七月在线机器学习