神經網絡-激勵函數

1、前言

激勵函數在神經網絡的做用通俗上講就是講多個線性輸入轉換爲非線性的關係。不使用激勵函數的話,神經網絡的每層都只是作線性變換,多層輸入疊加後也仍是線性變換。由於線性模型的表達能力不夠,激勵函數能夠引入非線性因素。html

1.1 單一的神經網絡

若是沒有激勵函數,在單層神經網絡中,咱們的輸入和輸出關係以下圖:web

這裏寫圖片描述

這是一個線性方程的直觀表示,若是咱們增長感知機,以下圖: 
這裏寫圖片描述網絡

其中結果輸出就是右邊的綠色區域,可是本質上仍是各類線性方程的組合,對於非線性數據則沒法很好的處理。以下數據:
這裏寫圖片描述
上圖數據你就沒有辦法畫出一條直線來將數據區分開.
這時候有兩個辦法,第一個辦法,是作線性變換(linear transformation),好比講x,y變成x^2,y^2,這樣能夠畫出圓形。如圖所示:
這裏寫圖片描述
若是將座標軸從x,y變爲以x^2,y^2爲標準,你會發現數據通過變換後是線性可分的了。大體示意圖以下:
這裏寫圖片描述
app

1.2 含有激勵函數的神經網絡

此處輸入圖片的描述

加入非線性激勵函數後,神經網絡就有可能學習到平滑的曲線來分割平面,而不是用複雜的線性組合逼近平滑曲線來分割平面。 這就是爲何咱們要有非線性的激活函數的緣由。以下圖所示說明加入非線性激活函數後的差別,上圖爲用線性組合逼近平滑曲線來分割平面,下圖爲平滑的曲線來分割平面:
這裏寫圖片描述dom

2、激勵函數

一、激活函數一般有以下一些性質:

  • 非線性: 當激活函數是線性的時候,一個兩層的神經網絡就能夠逼近基本上全部的函數了。可是,若是激活函數是恆等激活函數的時候(即f(x)=x),就不知足這個性質了,並且若是MLP使用的是恆等激活函數,那麼其實整個網絡跟單層神經網絡是等價的。
  • 可微性: 當優化方法是基於梯度的時候,這個性質是必須的。
  • 單調性: 當激活函數是單調的時候,單層網絡可以保證是凸函數。
  • f(x)≈x: 當激活函數知足這個性質的時候,若是參數的初始化是random的很小的值,那麼神經網絡的訓練將會很高效;若是不知足這個性質,那麼就須要很用心的去設置初始值。
  • 輸出值的範圍: 當激活函數輸出值是 有限 的時候,基於梯度的優化方法會更加 穩定,由於特徵的表示受有限權值的影響更顯著;當激活函數的輸出是 無限 的時候,模型的訓練會更加高效,不過在這種狀況小,通常須要更小的learning rate.

二、經常使用的激勵函數


一、單極性 sigmod函數,

圖形爲:ide

sigmod激勵函數符合實際,當輸入很小時,輸出接近於0;當輸入很大時,輸出值接近1函數


但sigmod函數存在較大的缺點:學習

一、當輸入值很小時或很大時,輸出曲線基本就是直線了,回想一下反向傳播的過程,咱們最後用於迭代的梯度,是由中間這些梯度值結果相乘獲得的,所以若是中間的局部梯度值很是小,直接會把最終梯度結果拉近0,意味着存在梯度趨向爲0優化

二、非零中心化,也就是當輸入爲0時,輸出不爲0,,由於每一層的輸出都要做爲下一層的輸入,而未0中心化會直接影響梯度降低,咱們這麼舉個例子吧,若是輸出的結果均值不爲0,舉個極端的例子,所有爲正的話(例如f=wTx+b中全部x>0),那麼反向傳播回傳到w上的梯度將要麼所有爲正要麼所有爲負(取決於f的梯度正負性),這帶來的後果是,反向傳播獲得的梯度用於權重更新的時候,不是平緩地迭代變化,而是相似鋸齒狀的突變。影響梯度降低的動態性url

二、雙極性sigma函數,

圖形爲:

三、雙曲正切函數,

圖形爲:

與sigmoid相比,輸出至的範圍變成了0中心化[-1, 1]。但梯度消失現象依然存在。因此在實際應用中,tanh激勵函數仍是比sigmoid要用的多一些的

4.ReLu 函數

全稱是rectified linear unit,它被普遍應用到了卷積神經網絡中,而且出現了一些變體。

函數基本形式是:f(x) = max(0,x), smooth approxiation形式爲:

函數的樣子所示:

兩種變體是:

noisy Relu

也就是在原來的Relu分類部分添加均值爲0,方差爲sigma的高斯噪聲

leaky Relu

這個leaky ReLu的好處是當神經元處於非激活狀態是,容許一個非0的梯度存在。


優勢:(1)不會出現梯度消失,收斂速度快;

          (2)前向計算量小,只須要計算max(0, x),不像sigmoid中有指數計算;

         (3)反向傳播計算快,導數計算簡單,無需指數、出發計算;

         (4)有些神經元的值爲0,使網絡具備saprse性質,可減少過擬合。

缺點:(1)比較脆弱,在訓練時容易「die」,反向傳播中若是一個參數爲0,後面的參數就會不更新。使用合適的學習固然,這和參數設置有關係,因此咱們要特別當心,

再舉個實際的例子哈,若是學習速率被設的過高,結果你會發現,訓練的過程當中可能有高達40%的ReLU單元都掛掉了。因此咱們要當心設定初始的學習率等參數,在必定程度上控制這個問題。率會減弱這種狀況。



五、徑向基函數,

,g表示的就是徑向基函數,絕對值表達的是徑向距離。

圖形爲:

六、one-side hyperbolic ratio function,

圖形爲:



那咱們咋選用神經元/激勵函數呢?通常說來,用的最多的依舊是ReLU,可是咱們確實得當心設定學習率,同時在訓練過程當中,還得時不時看看神經元此時的狀態(是否還『活着』)。固然,若是你很是擔憂神經元訓練過程當中掛掉,你能夠試試Leaky ReLU和Maxout。額,少用sigmoid老古董吧,有興趣卻是能夠試試tanh,不過話說回來,一般情況下,它的效果不如ReLU/Maxout。

3、損失函數和激活函數的選擇

具體內容能夠參考:深度神經網絡(DNN)損失函數和激活函數的選擇

4、參考文獻

一、通俗理解神經網絡之激勵函數(Activation Function)

二、[深度學習]人工神經網絡中激勵函數做用詳解

三、神經網絡激勵函數綜合

四、深度學習與計算機視覺系列(6)_神經網絡結構與神經元激勵函數

相關文章
相關標籤/搜索