激活函數


目錄

為什么需要激活函數

激活函數

常見的激活函數

Sigmoid

Tanh

ReLU

Leaky ReLU

ELU

Maxout

Softmax

結論

如何選擇合適的激活函數


為什么需要激活函數

 

神經網絡單個神經元的基本結構由線性輸出 Z 和非線性輸出 A 兩部分組成。如下圖所示:

 

 

其中,f(x) 即為線性輸出 Z,g(x) 即為非線性輸出,g() 表示激活函數。通俗來說,激活函數一般是非線性函數,其作用是能夠給神經網絡加入一些非線性因素,使得神經網絡可以更好地解決較為復雜的問題。

 

舉個簡單的例子,二分類問題,如果不使用激活函數,例如使用簡單的邏輯回歸,只能作簡單的線性划分,如下圖所示:

 

 

 

如果使用激活函數,則可以實現非線性划分,如下圖所示:

可見,激活函數能夠幫助我們引入非線性因素,使得神經網絡能夠更好地解決更加復雜的問題。

 

有個問題,為什么激活函數一般都是非線性的,而不能是線性的呢?從反面來說,如果所有的激活函數都是線性的,則激活函數 g(z)=z,即 a=z。那么,以兩層神經網絡為例,最終的輸出為:

 

經過推導我們發現網絡輸出仍是 X 的線性組合。這表明,使用神經網絡與直接使用線性模型的效果並沒有什么兩樣。即便是包含多層隱藏層的神經網絡,如果使用線性函數作為激活函數,最終的輸出仍然是線性模型。這樣的話神經網絡就沒有任何作用了。因此,隱藏層的激活函數必須要是非線性的。

 

值得一提的是,如果所有的隱藏層全部使用線性激活函數,只有輸出層使用非線性激活函數,那么整個神經網絡的結構就類似於一個簡單的邏輯回歸模型,效果與單個神經元無異。另外,如果是擬合問題而不是分類問題,輸出層的激活函數可以使用線性函數。

激活函數

神經網絡從信息處理角度對人腦神經元進行抽象,是一種運算模型,由大量的節點(神經元)之間相互連接構成。下圖是一個神經元的實例圖,對一個神經元來說,對輸入向量x進行加權求和,權重為W,偏置量為b,得到線性輸出為,然后將求和結果z作為一個激活函數f的輸入,激活函數的輸出為該神經元的結果,此結果作為下一層神經元的輸入。前一步的加權求和是線性變換,后一步的激活函數是非線性的。激活函數在神經網絡中加入非線性使得神經網絡能夠更好地解決較為復雜的問題,如果缺少激活函數,一個神經網絡僅僅只是一個線性的回歸模型,而對於復雜的問題,神經網絡將不再具有高效的學習力。

常見的激活函數

激活函數的種類很多,在這里僅僅介紹一下常見的幾種激活函數。

Sigmoid

Sigmoid激活函數的函數形式為,它為S型曲線,取值區間為(0,1),當x越小時,值越趨近於0,x越大的時候,值就越趨近於1,現在sigmoid激活函數很少使用,一般作為輸出層的激活函數和用於二分類問題。

sigmoid激活函數的導數表達式為。下圖是sigmoid原函數和其導數函數的圖形。如圖所示,當x>4和x<-4的時候,導數函數的取值趨近於0,使得當參數W迭代更改時,W幾乎不變,使得網絡很難得到有效的訓練,這就是梯度消失。

sigmoid激活函數需要進行指數運算,計算量大,而且反向傳播求誤差梯度時,很容易出現梯度消失的問題,使得不能完成深層網絡的訓練,除此外,sigmoid激活函數不是關於原點中心對稱的。吳恩達大大在深度學習課程中說tanh激活函數幾乎在任何場合的性能都優於sigmoid激活函數,除了輸出層和二分類,使用sigmoid會更好點。

Sigmoid 函數的取值范圍在 (0,1) 之間,單調連續,求導容易,一般用於二分類神經網絡的輸出層。

 

下面重點談一下 Sigmoid 函數的缺點。

 

首先,Sigmoid 函數飽和區范圍廣,容易造成梯度消失。飽和區如下圖所示:

 

上圖中紅色橢圓標注的飽和區曲線平緩,梯度的值很小,近似為零。而且 Sigmoid 函數的飽和區范圍很廣,例如除了 [-5,5],其余區域都近似飽和區。這種情況很容易造成梯度消失,梯度消失會增大神經網絡訓練難度,影響神經網絡模型的性能。

 

其次,Sigmoid 函數輸出是非零對稱的,即輸出恆大於零。這會產生什么影響呢?我們來看,假如 Sigmoid 函數的輸出為 σ(Wx+b),且滿足 0<σ(Wx+b)<1。在反向求導過程中,令損失函數 J 對 σ(Wx+b) 的求導為 dσ,現在計算 J 對 W 的偏導數:

 

其中,σ(Wx+b)>0,1-σ(Wx+b)>0。

 

若神經元的輸入 x>0,則無論 dσ 正負如何,總能得到 dW 恆為正或者恆為負。也就是說參數矩陣 W 的每個元素都會朝着同一個方向變化,同為正或同為負。這對於神經網絡訓練是不利的,所有的 W 都朝着同一符號方向變化會減小訓練速度,增加模型訓練時間。就好比我們下樓梯的所需的時間總比直接滑梯下來的時間要長得多,如下圖所示:

 

 

圖中,紅色折線是上文討論的情況,藍色斜線是 W 不全朝同一方向變化的情況。

 

值得一提的是,針對 Sigmoid 函數的這一問題,神經元的輸入 x 常會做預處理,即將均值歸一化到零值。這樣也能有效避免 dW 恆為正或者恆為負。

 

最后還有一點,Sigmoid 函數包含 exp 指數運算,運算成本也比較大。

 

tanh

 

激活函數 tanh 的圖形表達式如下所示:

 

tanh 函數的取值范圍在 (-1,1) 之間,單調連續,求導容易。

 

相比於 Sigmoid 函數,tanh 函數的優點主要有兩個:其一,收斂速度更快,如下圖所示,tanh 函數線性區斜率較 Sigmoid 更大一些。在此區域內訓練速度會更快。其二,tanh 函數輸出均值為零,也就不存在 Sigmoid 函數中 dW 恆為正或者恆為負,從而影響訓練速度的問題。

 

但是,tanh 函數與 Sigmoid 函數一樣,也存在飽和區梯度消失問題。其飽和區甚至比 Sigmoid 還要大一些,但不明顯。

 

ReLU

 

激活函數 ReLU 的全稱是 Rectified Linear Unit,其圖形表達式如下所示:

 

 

 

ReLU 函數是最近幾年比較火熱的激活函數之一。相比 Sigmoid 和 tanh 函數,其主要優點包括以下幾個方面:

 

  • 沒有飽和區,不存在梯度消失問題。

  • 沒有復雜的指數運算,計算簡單、效率提高。

  • 實際收斂速度較快,大約是 Sigmoid/tanh 的 6 倍。

  • 比 Sigmoid 更符合生物學神經激活機制。

 

下面這張圖對比了 ReLU 與 tanh 的收斂速度差異性。數據集是 CIFAR 10,模型是四層的卷積神經網絡。圖中,實線代表 ReLU,虛線代表 tanh,ReLU 比 tanh 更快地到達了錯誤率 0.25 處。(引自論文《ImageNet Classification with Deep Convolutional Neural Networks》)

 

 

但是,ReLU 函數的缺點也比較明顯。首先,ReLU 的輸出仍然是非零對稱的,可能出現 dW 恆為正或者恆為負,從而影響訓練速度。

 

其次,也是最為重要的,當 x<0 時,ReLU 輸出總為零。該神經元輸出為零,則反向傳播時,權重、參數的梯度橫為零,造成權重、參數永遠不會更新,即造成神經元失效,形成了“死神經元”。所以,針對這一問題,有時候會將 ReLU 神經元初始化為正偏值,例如 0.01。

 

Leaky ReLU

 

Leaky ReLU 對 ReLU 進行了改進,其圖形表達式如下所示:

 

 

 

 

 

Leaky ReLU 的優點與 ReLU 類似:

 

  • 沒有飽和區,不存在梯度消失問題。

  • 沒有復雜的指數運算,計算簡單、效率提高。

  • 實際收斂速度較快,大約是 Sigmoid/tanh 的 6 倍。

  • 不會造成神經元失效,形成了“死神經元”。

 

當然,0.01 的系數是可調的,一般不會太大。

 

ELU

 

ELU(Exponential Linear Units)也是 ReLU 的一個變種,其圖形表達式如下所示:

 

 

 

ELU 繼承了 Leaky ReLU 的所有優點:

 

  • 沒有飽和區,不存在梯度消失問題。

  • 沒有復雜的指數運算,計算簡單、效率提高。

  • 實際收斂速度較快,大約是 Sigmoid/tanh 的 6 倍。

  • 不會造成神經元失效,形成了“死神經元”。

  • 輸出均值為零

  • 負飽和區的存在使得 ELU 比 Leaky ReLU 更加健壯,抗噪聲能力更強。

 

但是,ELU 包含了指數運算,存在運算量較大的問題。

 

Maxout

 

Maxout 最早出現在 ICML2013 上,由 Goodfellow 提出。其表達式如下所示:

 

Maxout 的擬合能力是非常強的,它可以擬合任意的的凸函數。最直觀的解釋就是任意的凸函數都可以由分段線性函數以任意精度擬合,而 Maxout 又是取 k 個隱藏層節點的最大值,這些”隱藏層"節點也是線性的,所以在不同的取值范圍下,最大值也可以看做是分段線性的(上面的公式中 k = 2)。

 

 

 

上圖引自論文《Maxout Networks.  Ian J. Goodfellow, David Warde-Farley, Mehdi Mirza, Aaron Courville, Yoshua Bengio》,可以說,Maxout 可以擬合任意凸函數,k 值越大,分段越多,擬合效果也就越好。

 

Maxout 保證了始終是線性區域,沒有飽和區,訓練速度快,而且不會出現壞死神經元。

 

如何選擇合適的激活函數

1)首選 ReLU,速度快,但是要注意學習速率的調整,

2)如果 ReLU 效果欠佳,嘗試使用 Leaky ReLU、ELU 或 Maxout 等變種。

3)可以嘗試使用 tanh。

4)Sigmoid 和 tanh 在 RNN(LSTM、注意力機制等)結構中有所應用,作為門控或者概率值。其它情況下,減少 Sigmoid 的使用。

5)在淺層神經網絡中,選擇使用哪種激勵函數影響不大。

 

Softmax

softmax激活函數的數學形式為,用於多分類問題 ,輸出每一個類別的概率大小,所有類別的概率總和為1,概率最大的類別就是輸入所屬的類別。

結論

  1. sigmoid激活函數更適用於輸出層,tanh幾乎在所有場合都優於sigmoid,但是目前最常用的默認激活函數是ReLU
  2. softmax更多地用於多分類問題

在建立神經網絡時有很多選擇,很難確定一個准則確定什么參數才更適合,所以需要在測試集或者驗證集上試試各種選擇,然后選擇最好的。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM