1. 程式人生 > 實用技巧 >啟用函式(sigmoid和ReLU)

啟用函式(sigmoid和ReLU)

啟用函式給神經元引入了非線性因素,如果不用啟用函式,神經網路每一層輸出都是上層輸入的線性函式,無論神經網路有多少層,輸出都是輸入的線性組合。
比如對於一個二分類問題:
在這裡插入圖片描述
如果用線性分類,那就只能按照下圖劃分:
在這裡插入圖片描述
如果可以非線性分類,那就可以按照下面的圖進行劃分:
在這裡插入圖片描述
啟用函式使得神經網路可以任意逼近任何非線性函式,這樣神經網路就可以應用到眾多的非線性模型中。

  • sigmoid
    sigmoid函式的定義為:

在這裡插入圖片描述
sigmoid函式的影象如下:
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
優點:sigmoid函式可以將實數對映到 [公式] 區間內。平滑、易於求導。

缺點:1. 啟用函式含有冪運算和除法,計算量大;2. 反向傳播時,很容易就會出現梯度消失的情況,從而無法完成深層網路的訓練;3. sigmoid的輸出不是0均值的,這會導致後一層的神經元將得到上一層輸出的非0均值的訊號作為輸入。

  • ReLU

relu啟用函式的定義為:

在這裡插入圖片描述

relu啟用函式的影象為:

在這裡插入圖片描述

優點:1.計算量小;2.啟用函式導數維持在1,可以有效緩解梯度消失和梯度爆炸問題;3.使用Relu會使部分神經元為0,這樣就造成了網路的稀疏性,並且減少了引數之間的相互依賴關係,緩解了過擬合問題的發生。

缺點:輸入啟用函式值為負數的時候,會使得輸出為0,那麼這個神經元在後面的訓練迭代的梯度就永遠是0了(由反向傳播公式推導可得),引數w得不到更新,也就是這個神經元死掉了。這種情況在你將學習率設得較大時(網路訓練剛開始時)很容易發生(波浪線一不小心就拐到負數區域了,然後就拐不回來了)。

解決辦法:一些對Relu的改進,如ELU、PRelu、Leaky ReLU等,給負數區域一個很小的輸出,不讓其置0,從某種程度上避免了使部分神經元死掉的問題。