啟用函式(activation functions)二三事-性質、作用與選擇

weixin_33912445發表於2018-03-20

一. 引言

神經網路是由具有適應性的簡單單元組成的廣泛並行互連的網路,
它的組織能夠模擬生物神經系統對真實世界物體所作出的互動反應

如今神經網路已經為很多人所熟知,很多很多複雜的網路結構出現在我們面前。在我們日常編寫神經網路程式碼的過程中,啟用函式似乎已經是一種很自然正常的操作。可是,啟用函式的原理,啟用函式的性質,為什麼需要啟用函式,有哪些常用的啟用函式,如何選用?也需要我們更加深入的瞭解。

二. 神經元

神經網路中最基本的成分是神經元 (neuro且)模型,即上述定義中的"簡單單元"在生物神經網路中,每個神經元與其他神經元相連,當它"興奮"時,就會 向相連的神經元傳送化學物質,從而改變這些神經元 內的電位;如果某神經元的電位超過了 一個"闊值" (threshold) , 那麼它就會被啟用,即 "興奮 "起來,向其他神經元傳送化學物質。之前說深度網路就是模擬這種生物神經網路的,那麼深度學習裡的啟用函式就是模仿這種神經元的啟用方式。

3352522-eec4e80978e689a4.png

這是一個簡單的神經元模型,它接收N個輸入X1, X2, ... ,Xn。併為每個輸入賦予一個權重W1, W2, ... ,Wnb是偏置引數(可以理解為為了更好的達到目標而做調整的引數)

3352522-d6ac903c6db903c0.png
  • X是該神經元接受的N個輸入
  • W是N維的權重向量
  • z 表示一個神經元所獲得的輸入訊號x的加權和,稱為神經元的狀態
  • f啟用函式
  • a為神經元的活性值,也即該神經元的輸出

到這裡我們知道了神經元接受了多個輸入後,必須要通過"啟用函式"處理才會產生最終輸出。

三. 理想的啟用函式(階躍函式)

3352522-aa8761446b250f87.png

理想中的啟用函式是圖所示 的階躍函式,它將輸入值對映為輸出值 "0"或“1”,顯然 "1" 對應於神經元興奮 , "0" 對應於神經元抑制。這種情況是最符合生物特性的,但是階躍函式具有不連續 、不光滑等不太好的性質,所以它無法被用於神經網路的結構。

既然理想的啟用函式無法適用於我們的神經網路結構,那啟用函式應該具有什麼樣的性質呢?

四. 啟用函式的性質

  • 可微性:計算梯度時必須要有此性質。
  • 非線性:保證資料非線性可分。
  • 單調性:保證凸函式。
  • 輸出值與輸入值相差不會很大:保證神經網路訓練和調參高效。

五. 啟用函式的作用(非線性)

能使得神經網路的每層輸出結果變得非線性化

非線性化的作用
能使得神經網路的每層輸出結果變得非線性化。

線性可分

3352522-e9fa5556b5c6f45a.png

3352522-078f74333a56a0e7.png

線性不可分

3352522-ed63e340e26a7b57.png

3352522-31e434c2bc3bfbcc.png

六. 常用的啟用函式

  1. Sigmoid
    3352522-ca4b18ee1066b90c.png
  • 經典的啟用函式
  • 擠壓函式:把一個實數壓縮至0到1之間。當z是非常大的正數時,g(z)會趨近於1,而z是非常大的負數時,則g(z)會趨近於0。
  • 擠壓的好處:分類分類的概率,比如啟用函式的輸出為0.9的話便可以解釋為90%的概率為正樣本。


    3352522-e0ef5d7b93b41ba5.png
  • 微分形式簡單,可以用自身表示。
  • Sigmoid函式飽和使梯度消失。當神經元的啟用在接近0或1處時會飽和,在這些區域梯度幾乎為0,這就會導致梯度消失,幾乎就有沒有訊號通過神經傳回上一層
  • Sigmoid函式的輸出不是零中心的。因為如果輸入神經元的資料總是正數,那麼關於W的梯度在反向傳播的過程中,將會要麼全部是正數,要麼全部是負數,這將會導致梯度下降權重更新時出現z字型的下降。
  1. TANH雙曲正切
    3352522-b3f24721eaa3f643.png

    3352522-9e0a58f320d0ace9.png
  • 是sigmoid函式的一種變體,它的取值範圍為【-1,1】,而不是sigmoid函式的【0,1】
  • 定義域R,同樣是擠壓函式。
  • 解決了輸出不是零中心,但飽和問題仍然存在。
  1. ReLU
    3352522-b00fc18deb739f6d.png

    3352522-64a483f24c8c0a6f.png
  • 相對於前面兩者沒有任何指數級運算,對網路計算加速具有巨大作用。
  • 單側抑制
  • 只需要一個閾值就可以得到啟用值,而不用去算一大堆複雜的運算。
  • 容易死掉

4.Leaky ReLU
個人第一次使用是在訓練GAN的過程中。

3352522-9e8e47de08252e08.png

3352522-cb3c48bf593e25c2.png

  • 給與一個很小的負數梯度值,使負軸資訊不會全部丟失,解決了ReLU神經元“死掉”的問題

參考
https://zhuanlan.zhihu.com/p/32610035

相關文章