激勵函數在神經網絡的做用通俗上講就是講多個線性輸入轉換爲非線性的關係。不使用激勵函數的話,神經網絡的每層都只是作線性變換,多層輸入疊加後也仍是線性變換。由於線性模型的表達能力不夠,激勵函數能夠引入非線性因素。html
若是沒有激勵函數,在單層神經網絡中,咱們的輸入和輸出關係以下圖:web
這是一個線性方程的直觀表示,若是咱們增長感知機,以下圖:
網絡
其中結果輸出就是右邊的綠色區域,可是本質上仍是各類線性方程的組合,對於非線性數據則沒法很好的處理。以下數據:
上圖數據你就沒有辦法畫出一條直線來將數據區分開.
這時候有兩個辦法,第一個辦法,是作線性變換(linear transformation),好比講x,y變成x^2,y^2,這樣能夠畫出圓形。如圖所示:
若是將座標軸從x,y變爲以x^2,y^2爲標準,你會發現數據通過變換後是線性可分的了。大體示意圖以下:
app
加入非線性激勵函數後,神經網絡就有可能學習到平滑的曲線來分割平面,而不是用複雜的線性組合逼近平滑曲線來分割平面。 這就是爲何咱們要有非線性的激活函數的緣由。以下圖所示說明加入非線性激活函數後的差別,上圖爲用線性組合逼近平滑曲線來分割平面,下圖爲平滑的曲線來分割平面:
dom
圖形爲:ide
sigmod激勵函數符合實際,當輸入很小時,輸出接近於0;當輸入很大時,輸出值接近1函數
但sigmod函數存在較大的缺點:學習
一、當輸入值很小時或很大時,輸出曲線基本就是直線了,回想一下反向傳播的過程,咱們最後用於迭代的梯度,是由中間這些梯度值結果相乘獲得的,所以若是中間的局部梯度值很是小,直接會把最終梯度結果拉近0,意味着存在梯度趨向爲0優化
二、非零中心化,也就是當輸入爲0時,輸出不爲0,,由於每一層的輸出都要做爲下一層的輸入,而未0中心化會直接影響梯度降低,咱們這麼舉個例子吧,若是輸出的結果均值不爲0,舉個極端的例子,所有爲正的話(例如f=wTx+b中全部x>0),那麼反向傳播回傳到w上的梯度將要麼所有爲正要麼所有爲負(取決於f的梯度正負性),這帶來的後果是,反向傳播獲得的梯度用於權重更新的時候,不是平緩地迭代變化,而是相似鋸齒狀的突變。影響梯度降低的動態性url
圖形爲:
圖形爲:
與sigmoid相比,輸出至的範圍變成了0中心化[-1, 1]。但梯度消失現象依然存在。因此在實際應用中,tanh激勵函數仍是比sigmoid要用的多一些的
4.ReLu 函數
全稱是rectified linear unit,它被普遍應用到了卷積神經網絡中,而且出現了一些變體。
函數基本形式是:f(x) = max(0,x), smooth approxiation形式爲:
函數的樣子所示:
兩種變體是:
也就是在原來的Relu分類部分添加均值爲0,方差爲sigma的高斯噪聲
這個leaky ReLu的好處是當神經元處於非激活狀態是,容許一個非0的梯度存在。
優勢:(1)不會出現梯度消失,收斂速度快;
(2)前向計算量小,只須要計算max(0, x),不像sigmoid中有指數計算;
(3)反向傳播計算快,導數計算簡單,無需指數、出發計算;
(4)有些神經元的值爲0,使網絡具備saprse性質,可減少過擬合。
缺點:(1)比較脆弱,在訓練時容易「die」,反向傳播中若是一個參數爲0,後面的參數就會不更新。使用合適的學習固然,這和參數設置有關係,因此咱們要特別當心,
再舉個實際的例子哈,若是學習速率被設的過高,結果你會發現,訓練的過程當中可能有高達40%的ReLU單元都掛掉了。因此咱們要當心設定初始的學習率等參數,在必定程度上控制這個問題。率會減弱這種狀況。
,g表示的就是徑向基函數,絕對值表達的是徑向距離。
圖形爲:
圖形爲:
那咱們咋選用神經元/激勵函數呢?通常說來,用的最多的依舊是ReLU,可是咱們確實得當心設定學習率,同時在訓練過程當中,還得時不時看看神經元此時的狀態(是否還『活着』)。固然,若是你很是擔憂神經元訓練過程當中掛掉,你能夠試試Leaky ReLU和Maxout。額,少用sigmoid老古董吧,有興趣卻是能夠試試tanh,不過話說回來,一般情況下,它的效果不如ReLU/Maxout。
具體內容能夠參考:深度神經網絡(DNN)損失函數和激活函數的選擇