一篇文章理解深度神经网络5个常用激活函数
生活随笔
收集整理的這篇文章主要介紹了
一篇文章理解深度神经网络5个常用激活函数
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一篇文章理解深度神經網絡5個常用激活函數
- 1.Sigmoid
- 2.Tanh
- 3.ReLU
- 4.Leaky ReLU
- 5.Maxout
- 小結
1.Sigmoid
- Sigmoid非線性激活函數的數學表達式是
- Sigmoid非線性激活函數的圖像是
- Sigmoid激活函數是將一個實數輸入轉化到0~1之間的輸出,就是將越大的負數轉化到越靠近0,越大的正數轉化到越靠近1,歷史上Sigmoid函數頻繁的使用,因為其具有良好的解釋性。
- 但是最近幾年,Sigmoid函數已經越來越少的被使用了,主要是因為Sigmoid函數有以下兩大缺點。
- (1)Sigmoid函數會造成梯度消失。一個非常不好的特點就是Sigmoid函數在靠近1和0的兩端時,梯度會幾乎變成0。梯度下降法通過梯度乘上學習率來更新參數,因此如果梯度接近0,那么沒有任何信息來更新參數,這樣就會造成模型不收斂。另外,如果使用Sigmoid函數,那么需要在初始化權重的時候也必須非常小心,如果初始化的時候權重太大,那么經過激活函數也會導致大多數神經元變得飽和,沒有辦法更新參數。
- (2)Sigmoid輸出不是以0為均值,這就會導致經過Sigmoid激活函數之后的輸出,作為后面一層網絡的輸入的時候是非0均值的,這個時候如果輸入進入下一層神經元的時候全是正的,這就會導致梯度全是正的,那么在更新參數的時候永遠都是正梯度。比如進入下一層神經元的輸入是x,參數是w和b,那么輸出就是f = wx + b,這個時候
如果x是0均值的數據,那么梯度就會有正有負。但是這個問題并不是太嚴重,因為一般神經網絡在訓練的時候,都是按批(batch)進行訓練的,在一定程度上,緩解了這個問題。
2.Tanh
- Tanh激活函數是Sigmoid激活函數的變形,其圖像是
- 它將輸入的數據轉換到-1~1之間,可以通過圖像看出它將輸出變成了0均值,在一定程度上解決了Sigmoid函數的第二個問題,但是仍存在梯度消失的問題。因此實際上Tanh激活函數總是比Sigmoid激活函數更好。
3.ReLU
- ReLU激活函數(Rectified Linear Unit)近幾年變得越來越流行,它的數學表達式為
- 這個激活函數只是簡單的將大于0的部分保留,將小于0的部分變為0,函數圖形如下。
- ReLU的優點。
- (1)相比于Sigmoid激活函數和Tanh激活函數,ReLU激活函數能夠極大地加速隨機梯度下降法的收斂速度,這是因為它是線性的,且不存在梯度消失的問題。
- (2)相比于Sigmoid激活函數和Tanh激活函數的復雜計算而言,ReLU的計算方法更簡單,只需要一個閾值過濾就可以得到結果,不需要進行一大堆復雜的運算。
- ReLU的缺點。
- 訓練的時候很脆弱。比如一個很大的梯度經過ReLU激活函數,更新參數后,會使這個神經元不會對任何數據有激活現象。如果發生這種情況之后,經過ReLU的梯度永遠都會是0,也就意味著參數無法再更新了,因為ReLU激活函數本質上是一個不可逆的過程,因為它會直接去掉輸入小于0的部分,在實際操作中可以通過設置比較小的學習率來避免這個小問題。
4.Leaky ReLU
- Leaky ReLU激活函數是ReLU激活函數的變式,主要為了修復ReLU激活函數中訓練比較脆弱的這個缺點,不將小于0的部分變為0,而是給它一個很小的負的斜率,比如0.01,它的數學形式可以表現為
- 其中a是一個很小的常數,這樣就可以使得輸入小于0的時候也有一個小的梯度。關于Leaky ReLU激活函數的效果,一些實驗證明很好,一些實驗證明不好。
5.Maxout
- 另外一種激活函數的類型并不是f(w*x+b)作用在一種輸出結果的形式,而是max(w1*x+b1,w2*x+b2)這種Maxout類型,可以發現ReLU激活函數只是Maxout中w1=0,b1=1的特殊形式。因此Maxout既有ReLU激活函數的優點,同時也避免了ReLU函數訓練脆弱的缺點。不過,Maxout激活函數的缺點是加倍了模型的參數,導致模型的存儲變大。
小結
- 通過上面的部分,簡單介紹了一些激活函數的優缺點,實際使用較多的激活函數還是ReLU激活函數,但是注意學習率不要設定太大了。
- 一定不要使用Sigmoid激活函數,可以嘗試Tanh激活函數,但一般Tanh的實際效果比ReLU和Maxout差。
- 在實際應用中,很少使用混合類型的激活函數,一般在同一網絡中使用同一激活函數。
總結
以上是生活随笔為你收集整理的一篇文章理解深度神经网络5个常用激活函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于Anaconda安装GPU版PyTo
- 下一篇: 深度神经网络中处理数据和训练模型的一些技